673 字
3 分钟
Flutter 核心框架对比
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)