Flutter中Box布局模型和Sliver布局模型(BoxConstraints和SliverConstraints)有什么区别?

What's the difference between Box layout model and Sliver layout model (BoxConstraints and SliverConstraints) in Flutter?

看过一些 Flutter 文档后,我仍然对 Box- 和 Sliver- 协议(即 BoxConstraints 和 SliverConstraints)之间的差异感到困惑。

两者有什么区别?

  • BoxConstraints 与小部件二维相关。它们定义了 min/max width/height,受约束的小部件可以选择任何匹配的大小。

它们链接到 RenderBoxes,大部分是一次性渲染,直到它们依赖的东西发生变化。无论是它们 child 的大小,还是一些参数。

  • Slivers 与可滚动元素是 1d 相关的。表示Scrollable
  • 内某个item在主轴上的维度和位置

Slivers 直接依赖于滚动变量。这意味着当滚动偏移发生变化时,将重新计算条子。