Widget中的一些基本概念
StatelessWidget和StatefulWidget是flutter的基础组件,日常开发中自定义Widget都是选择继承这两者之一。
两者的区别在于状态的改变,StatelessWidget面向那些始终不变的UI控件,比如标题栏中的标题;而StatefulWidget则是面向可能会改变UI状态的控件,比如有点击反馈的按钮。
StatefulWidget的创建需要指定一个State,在需要更新UI的时候调用setState(VoidCallback fn),并在VoidCallback中改变一些变量数值等,组件会重新build以达到刷新状态也就是刷新UI的效果。
State生命周期
class _CounterWidgetState extends State<CounterWidget> { int _counter;@overridevoid initState() {super.initState();//初始化状态 _counter=widget.initValue;print("initState");}@overrideWidget build(BuildContext context) {print("build");return Scaffold(body: Center(child: FlatButton(child: Text('$_counter'),//点击后计数器自增onPressed:()=>setState(()=> ++_counter,),),),);}@overridevoid didUpdateWidget(CounterWidget oldWidget) {super.didUpdateWidget(oldWidget);print("didUpdateWidget");}@overridevoid deactivate() {super.deactivate();print("deactive");}@overridevoid dispose() {super.dispose();print("dispose");}@overridevoid reassemble() {super.reassemble();print("reassemble");}@overridevoid didChangeDependencies() {super.didChangeDependencies();print("didChangeDependencies");}
}
函数解析
initState:当Widget第一次插入到Widget树时会被调用,对于每一个State对象,Flutter framework只会调用一次该回调,所以,通常在该回调中做一些一次性的操作,如状态初始化、订阅子树的事件通知等。不能在该回调中调用BuildContext.inheritFromWidgetOfExactType(该方法用于在Widget树上获取离当前widget最近的一个父级InheritFromWidget,关于InheritedWidget我们将在后面章节介绍),原因是在初始化完成后,Widget树中的InheritFromWidget也可能会发生变化,所以正确的做法应该在在build()方法或didChangeDependencies()中调用它。
didChangeDependencies():当State对象的依赖发生变化时会被调用;例如:在之前build() 中包含了一个InheritedWidget,然后在之后的build() 中InheritedWidget发生了变化,那么此时InheritedWidget的子widget的didChangeDependencies()回调都会被调用。典型的场景是当系统语言Locale或应用主题改变时,Flutter framework会通知widget调用此回调
build():此回调读者现在应该已经相当熟悉了,它主要是用于构建Widget子树的,会在如下场景被调用:
1.在调用initState()之后。
2.在调用didUpdateWidget()之后。
3.在调用setState()之后。
4.在调用didChangeDependencies()之后。
5.在State对象从树中一个位置移除后(会调用deactivate)又重新插入到树的其它位置之后。reassemble():此回调是专门为了开发调试而提供的,在热重载(hot reload)时会被调用,此回调在Release模式下永远不会被调用。
didUpdateWidget():在widget重新构建时,Flutter framework会调用Widget.canUpdate来检测Widget树中同一位置的新旧节点,然后决定是否需要更新,如果Widget.canUpdate返回true则会调用此回调。正如之前所述,Widget.canUpdate会在新旧widget的key和runtimeType同时相等时会返回true,也就是说在在新旧widget的key和runtimeType同时相等时didUpdateWidget()就会被调用。
deactivate():当State对象从树中被移除时,会调用此回调。在一些场景下,Flutter framework会将State对象重新插到树中,如包含此State对象的子树在树的一个位置移动到另一个位置时(可以通过GlobalKey来实现)。如果移除后没有重新插入到树中则紧接着会调用dispose()方法。
dispose():当State对象从树中被永久移除时调用;通常在此回调中释放资源。
Widget中的一些基本概念相关推荐
- 【C#小知识】C#中一些易混淆概念总结(三)---------结构,GC,静态成员,静态类...
目录: [C#小知识]C#中一些易混淆概念总结 [C#小知识]C#中一些易混淆概念总结(二) ---------------------------------------分割线----------- ...
- 9 单元测试中不得不知的概念
单元测试中不得不知的概念 前言 软件单元及单元测试 驱动函数和桩函数 总结 前言 做单元测试,如果不弄清楚什么是单元,那十八般武器也无的放矢了.可能在单元测试中听到最多的就是驱动函数.桩函数和逻辑覆盖 ...
- 【C#小知识】C#中一些易混淆概念总结(七)---------解析抽象类,抽象方法
目录: [C#小知识]C#中一些易混淆概念总结--------数据类型存储位置,方法调用,out和ref参数的使用 [C#小知识]C#中一些易混淆概念总结(二)--------构造函数,this关键字 ...
- C++中继承的基本概念
文章目录 1 C++中继承的基本概念 1.1 继承的基本概念 1.2 继承的意义 1.3 继承实例分析 1 C++中继承的基本概念 1.1 继承的基本概念 继承关系就是父子关系,UML图如下: 注意是 ...
- Android Widget 中ListView加载网络图片
为什么80%的码农都做不了架构师?>>> 关于Widget的介绍和用法可以看这两篇博文,写的非常详细了 Android 之窗口小部件详解--App Widget http:// ...
- java中容易混淆的方法_java中容易混淆的概念
java中容易混淆的概念 1. 谈谈 final, finally, finalize 的区别final-修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不 能作为父类被 ...
- java中接口文件创建_功能接口简介–在Java 8中重新创建的概念
java中接口文件创建 世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.C ...
- 功能接口简介–在Java 8中重新创建的概念
世界各地的所有Java开发人员都将至少使用以下接口之一:java.lang.Runnable,java.awt.event.ActionListener,java.util.Comparator,ja ...
- python画海绵宝宝_《1,2,3到动物园》数数书,适合幼儿园小班宝宝亲子共读,从游戏中了解数字的概念...
大家好,我是神桐妈妈,最近开始陆续给几个幼儿园做了有关绘本方面的师资培训,然后又有新的幼儿园要有了嵌入式幼儿园绘本馆,有了绘本,有了书香氛围,又有孩子们开始接触绘本,每天拿着一本绘本带回家,和爸爸或者 ...
最新文章
- linux如何编译tex,Linux下优秀的文本编辑器(Markdown、LaTeX、MathJax)
- 添加/移除事件处理程序
- 10个节约开发时间的CSS技巧
- JDK collections - 使用
- java中重载构造方法的例程_Java构造函数使用多种方法重载
- windows10连接共享打印机报错:错误 0x00000709 解决方法
- 神策分析 1.13 版本用户分群全新升级,为企业打磨精细化运营基石
- html网站计数器代码,如何在网站添加计数器代码
- 微信小程序-中英文文本换行的小问题
- 第二章.物理层:2.6宽带接入技术
- Loadrunner事务与子事务函数简介
- 浙江众源自控系统有限公司亮相2022生物发酵展(济南)7月14日与您相约
- 企业微信小程序获取手机号?
- APS系统在纺织行业的应用
- 【网络原理】知识点汇总2
- 通过无线网络实现两台计算机共享打印机共享,教你两招实现无线网络共享打印机...
- GhostXP_SP2电脑公司特别版_5.5
- JAVA基本框架搭建(Maven,jetty,Jod…
- 黑塔互联网分享——零基础入门UI
- VS2022安装教程
热门文章
- 绝对中位差( Median Absolute Deviation,MAD)算法
- 100道Java高频面试题(阿里面试官整理)
- ROK 万国觉醒2D资源分析
- 【转】Zcash 网络升级 Sapling 简介
- 时空弯曲是必须的吗?
- Peak prominences(峰日珥)
- 为什么这些照片连最强大的视觉AI也无法准确识别?
- Fractal解题笔记
- 二十种题型带你复习《概率论与数理统计》得高分(高数叔)
- 【论文分享】一个用于现代cpu的多正则表达式匹配器:Hyperscan: A Fast Multi-pattern Regex Matcher for Modern CPUs