美文网首页
flutter Widget和Element

flutter Widget和Element

作者: 烟影很美 | 来源:发表于2022-08-16 18:19 被阅读0次
widget element
  1. 图中忽略了很多函数
  2. 图中并没有包含子类对父类override

简单总结:

  1. RenderObjectWidget与最终的渲染对象一一对应,内部包含了创建和更新RenderObject的函数。
  2. StatelessWidgetStatefulWidget与渲染无关,可以理解为逻辑上的Widget,或者是RenderObjectWidget容器,在build()state.build()函数中最后还是要返回RenderObjectWidget
  3. 可以看到Element中包含非常多的函数,比如update()mount()inflateWidget()等等,Element组成树的结构管理着整个应用的渲染信息。
    以热更新为例,整个过程都是在遍历(BuildOwner.buildScope()内部)_dirtyElements数组,然后调用Element.rebuild()->Element.performRebuild,如果是ComponentElement,在performRebuild()中就会通过build()函数获取下一层的Widget,通过判断其本身以及runtimeTypekey决定复用旧的还是重新创建新的Element,复用分两种,一种是直接使用_child,另外则是通过_retakeInactiveElement(key, newWidget);获得,然后将Widget赋值给决策后的Element
    新创建的Element如果是ComponentElement,在mount过程中会运行_firstBuild(),如果是RenderObjectElement,在mount过程中会运行createRenderObject()
    如果遍历到RenderObjectElement,依然调用Element.rebuild()->Element.performRebuild,在其performRebuild()中调用updateRenderObject

Elementbuild()函数就是Widgetbuild()函数

  1. 可以看到,RenderObject只和RenderObjectWidgetRenderObjectElement一一对应。数量远远少于WidgetElement

/>> 标题写的太大,之后如果有相关内容会修改。

相关文章

网友评论

      本文标题:flutter Widget和Element

      本文链接:https://www.haomeiwen.com/subject/egfdgrtx.html