Flutter:SliverList 和 SliverFixedExtentList 的区别
Flutter: Differences between SliverList and SliverFixedExtentList
Flutter中的SliverList
和SliverFixedExtentList
有什么区别?
根据每个小部件的文档:
SliverList
:“将多个框 children 沿主轴线性排列的条子。”
SliverFixedExtentList
: "将多个盒子 children 以相同的主轴范围 放置在线性阵列中的条子。"
如果所有 children 具有相同的主轴范围,我们似乎应该使用 SliverFixedExtentList
而不是 SliverList
。然而,“相同的主轴范围”到底是什么意思?
表示所有children的身高都一样。如果您熟悉 ListView
,它有 itemExtent
属性 做同样的事情。
本质上,如果您不能保证所有列表项都“在主轴上具有相同的大小”(例如,在垂直滚动列表上等高,或在水平滚动列表上等宽),那么我们无法知道“列表中每个项目的确切大小”,直到我们加载它。但是,如果你能保证它们都具有相同的尺寸,例如高度为 100 个单位,那么我们就不需要加载每个项目来测量其尺寸。
当您想跳远距离时,在加载之前了解项目大小非常有用。例如,如果你想向下滚动 10,000 px,如果我们知道每个项目固定在 200 px 高,那么我们可以轻松地跳转 50 个项目,只需加载第 51 个项目并显示它。如果我们不知道(如果您不能保证)那么我们将不得不逐字排列所有项目 in-between 以查看 10,000 像素将落在我们的位置。
Flutter中的SliverList
和SliverFixedExtentList
有什么区别?
根据每个小部件的文档:
SliverList
:“将多个框 children 沿主轴线性排列的条子。”SliverFixedExtentList
: "将多个盒子 children 以相同的主轴范围 放置在线性阵列中的条子。"
如果所有 children 具有相同的主轴范围,我们似乎应该使用 SliverFixedExtentList
而不是 SliverList
。然而,“相同的主轴范围”到底是什么意思?
表示所有children的身高都一样。如果您熟悉 ListView
,它有 itemExtent
属性 做同样的事情。
本质上,如果您不能保证所有列表项都“在主轴上具有相同的大小”(例如,在垂直滚动列表上等高,或在水平滚动列表上等宽),那么我们无法知道“列表中每个项目的确切大小”,直到我们加载它。但是,如果你能保证它们都具有相同的尺寸,例如高度为 100 个单位,那么我们就不需要加载每个项目来测量其尺寸。
当您想跳远距离时,在加载之前了解项目大小非常有用。例如,如果你想向下滚动 10,000 px,如果我们知道每个项目固定在 200 px 高,那么我们可以轻松地跳转 50 个项目,只需加载第 51 个项目并显示它。如果我们不知道(如果您不能保证)那么我们将不得不逐字排列所有项目 in-between 以查看 10,000 像素将落在我们的位置。