Flutter 中 SliverList 与 ListView 的区别

Posted

技术标签:

【中文标题】Flutter 中 SliverList 与 ListView 的区别【英文标题】:Differences between SliverList vs ListView in Flutter 【发布时间】:2018-10-26 07:36:12 【问题描述】:

Flutter 中 SliverListListView 有什么区别?

【问题讨论】:

这个问题完全合法。 是的,我已阅读文档。但没有发现任何差异。这就是我问这个问题的原因。 @RafiqulHasan 我很确定@Adriaan 会告诉你你看的不够彻底......:P @Pascal 这个问题是在 2018 年 5 月 16 日提出的。当时 Flutter 处于 alpha 阶段。找不到太多文档或文章。 【参考方案1】:

几乎没有区别。

ListView SliverList。与GridView 相同,即SliverGrid

他们正在做同样的事情。它们之间的唯一区别是SliverList 是条子,而不是小部件。这意味着它在ScrollView 中使用,通常是CustomScrollView

ListView 只不过是对SliverList 的委托,将其转换为Widget,使其可以与Row/Container 等其他小部件一起使用。


大多数时候,使用ListView

但是,如果您想要高级滚动行为,例如带有滚动的 appbar 动画;您需要使用CustomScrollView。这将迫使您使用SliverList 而不是ListView

【讨论】:

SliverList 一起使用SliverToBoxAdapter 是可能的,是否有任何与ListView 等效的不在sliver 列表中的?【参考方案2】:

根据this article,

您使用的所有可滚动视图,例如 ListViewGridView, 是actually implemented using Slivers。你可以想到 Slivers 作为较低级别的接口,提供更细粒度的控制 实现可滚动区域。因为 slivers 可以懒惰地构建每个 项目就像它滚动到视图中一样,条子对于 有效地滚动大量子项。

【讨论】:

这应该被接受为答案,因为它定义了性能点。

以上是关于Flutter 中 SliverList 与 ListView 的区别的主要内容,如果未能解决你的问题,请参考以下文章

Flutter-如何将标题添加到 SliverList 的 SliverChildBuilderDelegate?

Flutter如何滚动到SliverList中的特定项目位置?

flutter系列之:使用SliverList和SliverGird

在 Flutter 中通过拖放重新排序 SliverList 中的项目

Flutter SliverAppBar 和 SliverList 有不同的滚动条

如何为 Flutter SliverList 中的元素设置动画?