-
生命周期
- 生命周期是什么
- 说白了就是回调方法(函数)
- 让你知道我封装好的这个Widget它处于什么样的状态了
- 有什么作用
- 监听Widget的事件
- 初始化数据:创建数据、发送网络请求
- 内存管理:销毁数据、销毁监听者(比如销毁Timer等)
- 生命周期是什么
-
Widget的生命周期
- Stateless
- 1、构造方法
- 2、build 方法
- Stateful(包含两个对象Widget、State)
- 1、Widget的构造方法
- 2、Widget的CreateState
- 3、State的构造方法
- 4、State的initState 方法
- 5、didChangeDependencies()// 改变依赖关系
- 依赖的InheritedWidget发生变化之后,方法也会调用。(InheritedWidget数据共享,所在树最顶节点以下的所有子部件都可以进行数据共享,为了解决Widget间及子部件的数据传递)
- 6、State的build
- 当调用setState方法,会重新调用build进行渲染。element.markNeedsBuild()
- element就是context
- 7、当Widget销毁的时候,调用State的dispose
- Stateless
-
Widget 的渲染原理
- 并不是所有的Widget都会被独立渲染,只有继承RenderObjectWidget才会被独立渲染,在Flutter渲染的流程中,有三颗重要的树,Flutter引擎针对Render树进行渲染
- Widget树、Element树、Render树
- 每一个Widget都会创建一个Element对象,隐式调用createElement()方法,将element加入Element树,它会创建三种Element(RenderObjectElement、StatefulElement、StatelessElement)
- RenderObjectElement:主要是创建RenderObject对象(继承RenderObjectWidget的Widget会创建RenderObjectElement)
- 创建RanderObjectElement
- Flutter会调用mount方法,调用createRanderObject()方法
- StatefulElement:继承ComponentElement
- 调用creatElement(),创建Element
- 调用creatState(),创建State
- 将Widget赋值给state.widget
- 调用state的build方法,并将自己(Element)传出去(build里面的context就是Widget的Element)
- StatelessElement:继承ComponentElement
- 调用creatElement(),创建Element
- 调用build方法,并将自己(Element)传出去(build里面的context就是Widget的Element)
- RenderObjectElement:主要是创建RenderObject对象(继承RenderObjectWidget的Widget会创建RenderObjectElement)
- 每一个Widget都会创建一个Element对象,隐式调用createElement()方法,将element加入Element树,它会创建三种Element(RenderObjectElement、StatefulElement、StatelessElement)
网友评论