673 字
3 分钟
Flutter 核心框架对比
2024-08-04

Framework#

Widget#

Widget 是 Flutter UI 的核心概念,用于描述应用程序界面应该如何呈现。

  • 作用:定义 UI 的配置和属性
  • 特点:不可变的,每次状态改变都会重新构建
  • 类型:分为 StatelessWidget 和 StatefulWidget

StatelessWidget#

StatelessWidget 是没有内部状态的 widget。

  • 特点:一旦创建,其属性就不能改变
  • 用途:用于不需要动态更新的 UI 部分,如图标、文本等

StatefulWidget#

StatefulWidget 是可以保持状态的 widget。

  • 特点:可以动态更新,有一个与之关联的 State 对象
  • 用途:用于需要动态更新的 UI 部分,如表单、动画等

Element#

Element 是 Widget 树和渲染树之间的桥梁。

  • 作用:管理 Widget 的生命周期,维护 Widget 和渲染对象之间的关系
  • 特点:可变的,在 Widget 重建时可以复用

StatelessElement#

StatelessElement 是与 StatelessWidget 对应的 Element。

  • 特点:不保存状态,只负责创建和更新渲染对象

StatefulElement#

StatefulElement 是与 StatefulWidget 对应的 Element。

  • 特点:维护一个 State 对象,负责管理状态的生命周期

BuildContext#

BuildContext 是一个抽象类,代表 Element 在树中的位置。

  • 作用:提供对祖先 Widget 和 Element 的访问
  • 特点:实际上是 Element 的一个句柄

BuildOwner#

BuildOwner 是构建过程的协调者。

  • 作用:管理 dirty elements 的重建
  • 特点:负责调度和执行重建过程

Render#

RenderObject#

RenderObject 是 Flutter 渲染树中的基本单位。

  • 作用:负责实际的布局和绘制
  • 特点:
    • 处理具体的渲染逻辑
    • 管理尺寸、布局和绘制
    • 通常与 Element 一一对应

RenderBox#

RenderBox 是 RenderObject 的一个重要子类。

  • 特点:
    • 处理矩形区域的渲染
    • 提供了更具体的布局协议(BoxConstraints)
  • 常见用途:大多数可见的 UI 元素都是通过 RenderBox 渲染的

RenderSliver#

RenderSliver 是另一种特殊的 RenderObject。

  • 特点:
    • 专门用于处理滚动布局
    • 允许更灵活的尺寸和位置计算
  • 常见用途:用于实现如 ListView、GridView 等可滚动 widget

PipelineOwner#

PipelineOwner 管理渲染管道的整体流程。

  • 作用:
    • 协调布局、绘制和合成过程
    • 管理 dirty RenderObjects 的重新布局和重绘
  • 特点:是连接 Flutter 框架和渲染引擎的关键组件

Layer#

Layer 表示渲染树的输出,是最终显示到屏幕上的内容。

  • 作用:
    • 将渲染结果组织成可以高效更新和合成的形式
    • 提供了一种优化机制,允许部分 UI 被缓存和重用
  • 类型:包括 ContainerLayer、PictureLayer 等不同类型

Constraints#

Constraints 定义了渲染对象的布局限制。

  • 作用:在布局过程中传递尺寸信息
  • 特点:
    • 从父到子传递
    • 决定子 RenderObject 可以采用的尺寸范围
  • 常见类型:BoxConstraints(用于 RenderBox)、SliverConstraints(用于 RenderSliver)
Flutter 核心框架对比
https://blog.lpkt.cn/posts/flutter-core/
作者
lollipopkit
发布于
2024-08-04
许可协议
CC BY-NC-SA 4.0