CustomScrollView 的布局协议:`SliverGeometry` 的属性与边界计算

在Flutter中,CustomScrollView是一个极其强大且灵活的滚动容器。它允许你将多个不同类型的可滚动组件(称为Sliver)组合在一起,以创建高度定制化的滚动效果,例如视差滚动、固定头部、可折叠AppBar等。理解CustomScrollView的核心在于理解其布局协议,而这个协议的核心就是SliverGeometry。 1. CustomScrollView与Sliver:超越ListView的边界 我们首先来理解为什么我们需要CustomScrollView和Sliver。 传统的滚动组件,如ListView或SingleChildScrollView,通常是基于RenderBox模型的。RenderBox在布局时会计算其完整的尺寸(宽度和高度),无论它是否完全显示在屏幕上。对于一个包含10000个列表项的ListView,即使只有10个可见,它仍然会尝试计算所有10000个项的布局信息(尽管Flutter的ListView.builder会优化为只构建可见的Widget)。 这种“全尺寸计算”对于简单的列表是可接受的,但当我们需要更复杂的滚动行为时,它就显得力不从心 …