Flutter 中 SliverList 与 ListView 的区别
Posted
技术标签:
【中文标题】Flutter 中 SliverList 与 ListView 的区别【英文标题】:Differences between SliverList vs ListView in Flutter 【发布时间】:2018-10-26 07:36:12 【问题描述】:Flutter 中 SliverList
和 ListView
有什么区别?
【问题讨论】:
这个问题完全合法。 是的,我已阅读文档。但没有发现任何差异。这就是我问这个问题的原因。 @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,
您使用的所有可滚动视图,例如
ListView
和GridView
, 是actually implemented using Slivers
。你可以想到 Slivers 作为较低级别的接口,提供更细粒度的控制 实现可滚动区域。因为 slivers 可以懒惰地构建每个 项目就像它滚动到视图中一样,条子对于 有效地滚动大量子项。
【讨论】:
这应该被接受为答案,因为它定义了性能点。以上是关于Flutter 中 SliverList 与 ListView 的区别的主要内容,如果未能解决你的问题,请参考以下文章
Flutter-如何将标题添加到 SliverList 的 SliverChildBuilderDelegate?
Flutter如何滚动到SliverList中的特定项目位置?
flutter系列之:使用SliverList和SliverGird
在 Flutter 中通过拖放重新排序 SliverList 中的项目