不是所有的 Widget 都会被独立渲染。只有继承 RenderObjectWidget 的才会创建 RenderObject 对象。
Widget
RenderObjectWidget
RenderObject
在 Flutter 中,有三个树非常重要, Widget树 、 Render树 、 Element树。Flutter引擎是针对 Render树 进行渲染。
Flutter
Widget树
Render树
Element树
Flutter引擎
每一个 Widget 都会创建一个 Elememt 对象
Elememt
隐式调用 createElement 方法。
createElement
Element 加入 Element树 中
Element
它会创建三种 Element
RenderElement 主要是创建 RenderObject 对象
RenderElement
继承 RenderObjectWidget 的 Widget 会创建 RenderElement
Flutter 会调用 mount 方法,调用 createRanderObject 方法
mount
createRanderObject
StatefulElement 继承 ComponentElement
StatefulElement
ComponentElement
StatefulWidget 会创建 StatefulElement
StatefulWidget
调用 createState 创建 State
createState
State
将 Widget 赋值给 state
state
调用 state 的 build 方法,并将自己 Element 传出去
build
build 里面的 context 就是 element
context
element
StatelessElement 继承 ComponentElement
StatelessElement
StatelessWidget 会创建 StatelessElement
StatelessWidget
主要就是调用 build 方法,并将自己 Element 传出去
Last updated 4 years ago