生命周期的基本概念:
1、什么是生命周期?
- 说白了就是回调方法(函数)
- 让你知道我封装好的这个widget它处于什么状态了!
2、生命周期有什么作用?
- 监听widget的事件
- 初始化数据(* 创建数据; *发送网络请求)
- 内存管理
* 销毁数据、销毁监听者
* 销毁Timer等
Widget的生命周期:
1、StatelessWidget:
生命周期:
- 构造函数
- build
2、StatefulWidget
包含两个对象Widget、State
生命周期:
- Widget构造方法
- Widget的CreatState
- State的构造方法
- State的initState方法
- didChangeDependencies方法(改变依赖关系)
依赖的InheritedWidget发生变化之后,也会调用
class MyData extends InheritedWidget {
MyData({this.data, Widget child}) : super(child:child);
final int data; //需要在子Widget中共享的数据
//提供一个方法让子Widget访问我们的共享数据
static MyData of(BuildContext context) {
return context.dependOnInheritedWidgetOfExactType<MyData>();
}
@override
bool updateShouldNotify(MyData oldWidget) {
return oldWidget.data != data;
}
}
- State的build
当调用setState方法,会重新调用build进行渲染
- 当Widget销毁的时候,调用State的dispose
Widget渲染原理:
并不是所有的Widget都会被独立渲染,只有继承RenderObjectWidget的才会创建RenderObject对象。(RenderObject创建后,被加入到Render Tree中)。
在Flutter的渲染流程中,有三颗重要的树!Flutter引擎是针对Render树进行渲染。
- Widget树、Element树、Render树
-- 每一个Widget都会创建一个Element对象-
隐式调用createElement方法,Element加入Element树中, 它会创建三种Element
-
RenderElement 主要创建RenderObject对象(继承RenderObjectWidge的Widget会创建RenderElement)
- 创建RanderElement
- Flutter会调用mount方法,调用createRanderObject方法
-
StatefulElement继承ComponentElement(StatefulWidget会创建StatefulElement)
- 调用createState方法,创建State
- 将Widget赋值给state
- 调用state的build方法,并且将自己(Element)传出去「build里面的context就是Widget的Element」
-
StatelessElement继承ComponentElement(StatelesslWidget会创建StatelessElement)
- 主要就是调用build方法,并且将自己(Element)传出去
-
-
网友评论