之前使用的都是无状态控件,无状态控件从父控件接收参数,以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基础—根据用户输入改变控件相关推荐

  1. excel数据输入窗体控件_工作表数据输入或Excel用户窗体

    excel数据输入窗体控件 If you're building an Excel workbook, in which users with basic Excel skills will ente ...

  2. WPF基础五:UI④ 条目控件ContextMenu

    派生关系: Object->DispatcherObject->DependencyObject->Visual->UIElement->FrameworkElement ...

  3. SharePoint2010沙盒解决方案基础开发——关于TreeView树形控件读取列表数据(树形导航)的webpart开发及问题...

    转:http://blog.csdn.net/miragesky2049/article/details/7204882 SharePoint2010沙盒解决方案基础开发--关于TreeView树形控 ...

  4. 8、python基础知识-用户输入

    #!/usr/bin/env python # _*_ coding: utf-8 _*_ num = 100 name = input("your name:") age = i ...

  5. Flutter中Row中的子控件左右两端对齐

    Flutter中Row中的子控件左右两端对齐 Container(// padding: EdgeInsets.only(left: 20, right: 20),margin: EdgeInsets ...

  6. MFC 改变控件字体大小

    LOGFONT: 一个结构体,用来逻辑上表达一个字体   ,在Windows内部,字体是以一个名为LOGFONT的结构来表示 typedef struct tagLOGFONT { LONG lfHe ...

  7. Android Studio - Kotlin 改变控件字体

    Android Studio - Kotlin 改变控件字体 如改变 textView 的字体( FontFamily ) val typeface = Typeface.createFromAsse ...

  8. html 任务控件,Html基础知识详解-DbManager-WinFrom控件库|.net开源控件库|HZHControls官网...

    一定要做的符合客户要求,不是自己认为对的. 一.基础标签 1.1 大小颜色位置 Html和CSS的关系 Hello World! 1.2 强调 如在网上商城中,某产品的打折后的价格是需要强调的.如下图 ...

  9. 零基础学Android之常用控件

    常用控件 上次我们讲了布局:线性布局.表格布局.帧布局和相对布局,这个布局,它是在整个移动端设计内容的一个框架的方式,以什么方式来设计界面.最终在界面里面,放置的是控件,所谓控件,就是程序员可以控制的 ...

最新文章

  1. 资源 | 《统计学习方法》的Python 3.6复现,实测可用
  2. Extjs 格式化---Ext.util.Format类
  3. Linux之磁盘概述
  4. android 服务器201,Android端i-jetty服务器开发(八)
  5. 数字图像处理与Python实现笔记之频域滤波
  6. 洛谷 P2695 骑士的工作
  7. POJ1279(求多边形内核的面积)
  8. Tinkpad W540 BIOS bug ,中招了,中了一次还送了一次
  9. 地图图表、柱状图、条形图、折线图、中国地图、世界地图、省市地图、仪表盘、雷达图、饼图、散点图、气泡图、瀑布图、堆叠图、热力图、桑基图、关系图、漏斗图、Axure原型、rp原型、产品原型
  10. 计算机知识选择题库,计算机基础知识篇选择题库
  11. 常见问题4:文本不能选择 效果
  12. python qt教程视频 下载_PyQt5开发与实战教程,视频教程下载
  13. 报表比对常用excel方法
  14. C++求球的面积与体积,公式一样输出结果不一样?
  15. W806串口管脚复用
  16. 大数据薪水大概多少_大数据就业岗位有哪些?薪资多少?
  17. 【技术贴】解决前台js传参中文乱码
  18. 公众号题库系统接口-网课答案解析接口
  19. ARM各版本架构区别,各架构的系列芯片。
  20. oracle索引管理

热门文章

  1. 《南溪的目标检测学习笔记》——特征归一化(meadstd)
  2. vue改变了数据却没有自动刷新
  3. leetcode679:24Game
  4. c/c++教程 - 2.2 引用的使用方法,引用做函数参数,引用做返回值,引用的本质,常量引用
  5. 机器学习之支持向量机(SVM)小结
  6. leetcode938.RangeSumofBST
  7. GCC全过程详解+剖析生成的.o文件[转]
  8. 快速傅里叶变换学习笔记(更新中)
  9. SQL Server数据库安装和使用
  10. mongodb数据库恢复 mongo数据库无法启动恢复 mongodb数据库断电数据恢复