Flutter基础—根据用户输入改变控件
之前使用的都是无状态控件,无状态控件从父控件接收参数,以final成员变量存储。当一个控件被build时,它使用这些存储的值作为创建控件的参数。
为了构建更友好的体验,比如以更有趣的方式对用户的输入做出响应,应用程序通常会有一些状态。Flutter使用StatefulWidgets实现这个想法。StatefulWidgets能够生成有状态对象的控件,然后用来保持状态。
import 'package:flutter/material.dart';
void main() {runApp(new MaterialApp(title: 'Flutter实例',home: new Counter(),),);
}
class Counter extends StatefulWidget {@override_CounterState createState() => new _CounterState();
}
class _CounterState extends State<Counter> {int _count = 0;void _increment() {setState(() {_count += 1;});}@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text('Flutter实例'),),body: new Center(child: new Text('按钮点击 $_count 次${ _count == 0 ? '' : '' }'),),floatingActionButton: new FloatingActionButton(onPressed: _increment,tooltip: '增加',child: new Icon(Icons.add),),);}
}
为什么StatefulWidget和State是单独的对象呢?在Flutter中,这两种类型的对象有不同的生命周期。控件是临时对象,用于在当前状态下构建应用程序的呈现。State对象在被build()调用时是持久的,允许它们记住信息。
上面的实例接受用户的输入并在构建方法中直接使用结果。在复杂的应用程序中,控件层次结构的不同控件可能负责不同功能;例如一个控件可能呈现一个复杂的用户界面,目的是收集具体信息,比如日期和位置,而另一个控件可以使用该信息来改变整体呈现。
import 'package:flutter/material.dart';
void main() {runApp(new MaterialApp(title: 'Flutter实例',home: new Counter(),),);
}
class CounterDisplay extends StatelessWidget {CounterDisplay({this.count});final int count;@overrideWidget build(BuildContext context) {return new Center(child: new Text('按钮点击 $count 次'),);}
}
class CounterIncrementor extends StatelessWidget {CounterIncrementor({this.onPressed});final VoidCallback onPressed;@overrideWidget build(BuildContext context) {return new FloatingActionButton(onPressed: onPressed,tooltip: '增加',child: new Icon(Icons.add),);}
}
class Counter extends StatefulWidget {@override_CounterState createState() => new _CounterState();
}
class _CounterState extends State<Counter> {int _count = 0;void _increment() {setState(() {_count += 1;});}@overrideWidget build(BuildContext context) {return new Scaffold(appBar: new AppBar(title: new Text('Flutter实例'),),body: new CounterDisplay(count: _count),floatingActionButton: new CounterIncrementor(onPressed: _increment),);}
}
在上面的实例中,将计数显示(CounterDisplay)和计数改变(CounterIncrementor)干净的分离。虽然效果和上一个实例相同,但功能分离可以让一个控件中封装更复杂,同时也让父级更简单。
Flutter基础—根据用户输入改变控件相关推荐
- excel数据输入窗体控件_工作表数据输入或Excel用户窗体
excel数据输入窗体控件 If you're building an Excel workbook, in which users with basic Excel skills will ente ...
- WPF基础五:UI④ 条目控件ContextMenu
派生关系: Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement ...
- SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...
转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...
- 8、python基础知识-用户输入
#!/usr/bin/env python # _*_ coding: utf-8 _*_ num = 100 name = input("your name:") age = i ...
- Flutter中Row中的子控件左右两端对齐
Flutter中Row中的子控件左右两端对齐 Container(// padding: EdgeInsets.only(left: 20, right: 20),margin: EdgeInsets ...
- MFC 改变控件字体大小
LOGFONT: 一个结构体,用来逻辑上表达一个字体 ,在Windows内部,字体是以一个名为LOGFONT的结构来表示 typedef struct tagLOGFONT { LONG lfHe ...
- Android Studio - Kotlin 改变控件字体
Android Studio - Kotlin 改变控件字体 如改变 textView 的字体( FontFamily ) val typeface = Typeface.createFromAsse ...
- html 任务控件,Html基础知识详解-DbManager-WinFrom控件库|.net开源控件库|HZHControls官网...
一定要做的符合客户要求,不是自己认为对的. 一.基础标签 1.1 大小颜色位置 Html和CSS的关系 Hello World! 1.2 强调 如在网上商城中,某产品的打折后的价格是需要强调的.如下图 ...
- 零基础学Android之常用控件
常用控件 上次我们讲了布局:线性布局.表格布局.帧布局和相对布局,这个布局,它是在整个移动端设计内容的一个框架的方式,以什么方式来设计界面.最终在界面里面,放置的是控件,所谓控件,就是程序员可以控制的 ...
最新文章
- 资源 | 《统计学习方法》的Python 3.6复现,实测可用
- Extjs 格式化---Ext.util.Format类
- Linux之磁盘概述
- android 服务器201,Android端i-jetty服务器开发(八)
- 数字图像处理与Python实现笔记之频域滤波
- 洛谷 P2695 骑士的工作
- POJ1279(求多边形内核的面积)
- Tinkpad W540 BIOS bug ,中招了,中了一次还送了一次
- 地图图表、柱状图、条形图、折线图、中国地图、世界地图、省市地图、仪表盘、雷达图、饼图、散点图、气泡图、瀑布图、堆叠图、热力图、桑基图、关系图、漏斗图、Axure原型、rp原型、产品原型
- 计算机知识选择题库,计算机基础知识篇选择题库
- 常见问题4:文本不能选择 效果
- python qt教程视频 下载_PyQt5开发与实战教程,视频教程下载
- 报表比对常用excel方法
- C++求球的面积与体积,公式一样输出结果不一样?
- W806串口管脚复用
- 大数据薪水大概多少_大数据就业岗位有哪些?薪资多少?
- 【技术贴】解决前台js传参中文乱码
- 公众号题库系统接口-网课答案解析接口
- ARM各版本架构区别,各架构的系列芯片。
- oracle索引管理
热门文章
- 《南溪的目标检测学习笔记》——特征归一化(meadstd)
- vue改变了数据却没有自动刷新
- leetcode679:24Game
- c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
- 机器学习之支持向量机(SVM)小结
- leetcode938.RangeSumofBST
- GCC全过程详解+剖析生成的.o文件[转]
- 快速傅里叶变换学习笔记(更新中)
- SQL Server数据库安装和使用
- mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复