Flutter
RenderObject 布局协议深度剖析:BoxConstraints 传递与 performLayout 实战
Waitwalker2026-08-2414 min
## 1. 约束传递模型:向下传递 Constraints,向上反馈 Size
RenderObject 树在布局时遵循单向数据流:
- 父节点调用 `child.layout(constraints, parentUsesSize: true)`
- 子节点在 `performLayout()` 中计算自己的 `size`
- 父节点根据子节点的 `size` 计算子节点在坐标系中的 `offset`
## 2. 重新布局边界 (Relayout Boundary)
为了避免叶子节点的小变动引发整棵树从根重新计算布局,Flutter 引入了 Relayout Boundary:
当满足以下任一条件时,当前 RenderObject 成为重排边界:
1. `parentUsesSize == false` (父节点完全不依赖子节点尺寸)
2. `constraints.isTight` (父节点给出了严格固定的宽高约束)
3. `sizedByParent == true` (子节点尺寸完全由父约束决定)
#Flutter#RenderObject#Layout#底层原理
回到文章列表 →