生命周期的基本概念:
- 生命周期的本质就是回调方法;
- 可以通过封装好的回调方法获取widget状态;
有什么作用:
- 监听widget的事件;
- 初始化数据:
- 创建数据;
- 发送网络请求;
- 内存管理:
- 销毁数据,销毁监听者;
- 销毁Timer等等;
Widget的生命周期:
1. Stateless:
- 构造方法,
- build方法;
2. Stateful(包含两个对象:Widget,State):
- Widget构造方法,
- Widget的CreateState,
- State的构造方法,
- State的initState方法,
- didChangeDependencies方法(改变依赖关系):
依赖的inheritedWidget发生改变后,方法也会调用!
- State的build:
- 当调用setState方法,会重新调用build进行渲染!
- 当Widget销毁的时候,调用State的dispose;
Widget的渲染原理
- 并不是所有的Widget都会被独立渲染!只有继承RenderObjectWidget的才会创建RenderObject对象!
- 在Flutter渲染的流程中,有三颗重要的树!Flutter引擎是针对Render树进行渲染!
Widget树, Element树, Render树
- 每一个Widget都会创建一个Element对象:
- 隐式调用createElement方法.Element加入Element树(会创建三种Element)
- RenderElement主要创建RenderObject对象(继承RenderObjectWidget的Widget会创建RenderElement)
- 创建RenderElement
- 创建RenderElement后,Flutter会调用mount方法,mount方法调用createRenderObject方法且mount会调用build方法
- StatefulElement继承ComponentElement(StatefulWidget会创建StateFulElement):
- 调用createState方法,创建State;
- 将Widget赋值给state;
- 调用state的build方法,并且将自己(Element)传出去(build里面的context就是Widget的Element!)
- StatelessElement继承ComponentElement(StatelessWidget会创建StatelessElement):
- 主要就是调用build方法并且将自己(Element)传出去!