阅读 26
一. Flutter的Widget-Element-RenderObject

一. Flutter的Widget-Element-RenderObject

  1. 每个widget对应一个element
  2. 如果widget继承的是RenderObject类型的父类才会有createRenderObject,从而创建RenderObject对象
  3. RenderObject是真正的渲染对象widget只是一个壳子或叫组合控件也可看做是一个配置文件;widget变化很多很不稳定,所以flutter引擎是和RenderObject来对接的;
  4. Element是中间人,持有widget和RenderObject对象;处理关于生命里的一些方法;比如StatefulElement在构造方法里会调用createState方法,初始化state对象,在build方法会调用state.build();

5.Widget-Element-RenderObject 三个对象其数据结构都是树

从RunApp开始 Screen Shot 2021-05-23 at 7.17.30 PM.png

attachRootWidget调用attachToRenderTree Screen Shot 2021-05-23 at 7.18.28 PM.png

attachToRenderTree方法初始化了根widget的Element,然后调用其mount(),这个方法被mustCallSuper注解修饰, 子类必须调super的方法

无论是StatelessWidget还是StateFulWidget, 他们的element都是继承ComponentElement,在其mount()里调用_firstBuild->rebuild->performRebuild, performRebuild-> 分别调用build()和updateChild

updateChild调用inflateWidget的方法会判断是否首次创建还是更新;如果首次创建会调用createElement和mount方法;

如果是MultiChildRenderObjectWidget的mount,会遍历子节点widget,inflateWidget的方法会判断是否首次创建还是更新; 如此递归就一直执行到树的最后一个节点

文章分类
Android
文章标签