美文网首页
Widget与Element和RenderObject之间的关系

Widget与Element和RenderObject之间的关系

作者: 随心_追梦 | 来源:发表于2022-07-28 14:38 被阅读0次

    Widget 是 Flutter 世界里对视图的一种结构化描述,你可以把它看作是前端中的“控件”或“组件”。Widget 是控件实现的基本逻辑单位,里面存储的是有关视图渲染的配置信息,包括布局、渲染属性、事件响应信息等。
    Element 是 Widget 的一个实例化对象,它承载了视图构建的上下文数据,是连接结构化的配置信息到完成最终渲染的桥梁。

    Flutter 渲染过程,可以分为这么三步:
    • 首先,通过 Widget 树生成对应的 Element 树;
    • 然后,创建相应的 RenderObject 并关联到 Element.renderObject 属性上;
    • 最后,构建成 RenderObject 树,以完成最终的渲染。

    Element 同时持有 Widget 和 RenderObject。而无论是 Widget 还是 Element,其实都不负责最后的渲染,只负责发号施令,真正去干活儿的只有 RenderObject

    因为 Widget 具有不可变性,但 Element 却是可变的。实际上,Element 树这一层将 Widget 树的变化(类似 React 虚拟 DOM diff)做了抽象,可以只将真正需要修改的部分同步到真实的 RenderObject 树中,最大程度降低对真实渲染视图的修改,提高渲染效率,而不是销毁整个渲染视图树重建。这,就是 Element 树存在的意义。

    相关文章

      网友评论

          本文标题:Widget与Element和RenderObject之间的关系

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