1、生命周期
1.1、生命周期的基本概念
- 说白了就是 回调方法(函数)
- 让用户知道封装好的这个Widget它处于什么样的状态了
1.2、作用
- 监听Widget的事件
- 初始化数据
- 创建数据
- 发送网络请求
- 内存管理
- 销毁数据、销毁监听者
- 销毁Timer等等
1.3、Widget的生命周期
- Stateless
- 1、构造方法
- 2、build方法
- Stateful(包含两个对象Widget和State)
- 1、Widget构造方法
- 2、Widget的
CreateState - 3、State的构造方法
- 4、State的
initState方法 - 5、
didChangeDependencies方法(改变依赖关系)- 依赖的
InheritedWidget发生变化之后,方法也会调用!
- 依赖的
- 6、State的build
- 当调用setState方法。会重新调用build进行渲染!
- 7、当Widget销毁的时候,调用State的dispose
2、Widget的渲染原理
- 并不是所有的Widget都会被独立渲染!只有继承
RenderObjectWidget的才会创建RenderObject对象! - 在Flutter渲染的流程中,
Flutter引擎是针对Render树进行渲染! Widget树、Element树、Render树
2.1、渲染流程
- Widget创建Widget树
- 每个Widget创建一个Element对象(一一对应),Element加入Element树
- 隐式调用createElement方法。(它能创建三种类型Element)
RenderElement:继承于RenderObjectWidget的Widget会创建该类型ElementStatelessElement:继承于ComponentElement,StatelessWidget创建该类型Elementmount调用Widget的build方法,并将自己(Element)传出(Widget build(BuildContext context){})
StatefulElement:继承于ComponentElement,StatefulWidget创建该类型Element- 调用
createState方法,创建State - 将Widget赋值给state
- 调用state的build方法 并且将自己(Element)传出去 (
build里面的context 就是Widget的Element !)
- 调用
createElement后调用mount方法,通过一层层build和rebuild,根据Element类型创建Object,如果是RenderObjectElement类型则调用CreateRenderObject方法,创建RenderObject
3、子组件共享数据(重要*)
-
数据类继承于
InheritedWidget -
构造方法
:super(child:) -
子组件中widget获取共享数据:return context
.dependOnInheritedWidgetOfExactType<数据类名>()- data改变是否通知依赖data的子组件widget:
updateShouldNotify(数据类名 oldWidget){return true/false};
- data改变是否通知依赖data的子组件widget: