在颤动中向上/向下滚动列表时如何在列表中插入和删除项目?

Posted

技术标签:

【中文标题】在颤动中向上/向下滚动列表时如何在列表中插入和删除项目?【英文标题】:How to insert and remove items into the list when scroll up/down on list in flutter? 【发布时间】:2017-10-29 12:14:24 【问题描述】:

我希望用户在列表中向上滚动,然后在列表顶部插入项并在列表底部删除项。 我如何在 flutter 中做到这一点?

itemBuilder 在列表中不好,因为它总是插入但从不删除(或插入删除方法?)。 或者我使用 sliverlist(如何?)或者足够多地使用带有 ListView 的滚动控制器? 哪种方式最好?

所以:

使用哪个列表:ListView/AnimatedList/SliverList? 如何处理列表的向上/向下滚动?

重点是:我不想同时添加更多 1000 个项目,但只显示显示。当用户在列表上滚动时,将新项目添加到子项并从隐藏的子项中删除旧项。所以列表子项只包含出现的少数项目。

【问题讨论】:

请提供您目前得到的代码。 无代码。我只是想创建某种 ListView 或 AnimatedList/SilverList,然后在列表上滚动时插入和删除项目。 您能解释一下为什么要删除这些项目吗?您是否担心它们会消耗过多的资源,或者您是否正在尝试实现某种不寻常的效果?当用户试图向后滚动查看您删除的项目时,您希望发生什么? 向后滚动时再次添加已删除的项目。我认为这是一个简单的问题:创建动态列表,在用户滚动时添加/删除项目。使用例如按钮可以很容易地添加和删除项目。但我不使用按钮,我想使用滚动,这是必不可少的部分。那么我该如何处理滚动呢? ListViewer.builder 完全符合您的要求。它会自动为您清理屏幕外元素。 【参考方案1】:

响应您的评论,您对延迟加载 ListView 感兴趣,它只构建它的子项,当它们实际可见时。

我认为最好看看ListView.builder。在 ListView 的描述中明确指出:

ListView.builder 采用 IndexedWidgetBuilder,它根据需要构建子级。此构造函数适用于具有大量(或无限)子级的列表视图,因为仅对那些实际可见的子级调用构建器。

这听起来像你想要的行为,不是吗?

【讨论】:

【参考方案2】:

ListView 的渲染过程只会渲染可见项。

您应该观看此视频https://www.youtube.com/watch?v=F26pbGaSzfM

【讨论】:

我以前看过这个视频,但这对我不好,因为视频使用 itemBuilder,它只添加新项目到列表子项,但从不删除。所以我不想包含列表子项中的所有项目,只有少数项目出现,因此如果我不渲染隐藏的项目是不够的。 好的,您应该从查看小部件的生命周期以及 Flutter 的工作原理开始 (docs.google.com/presentation/d/…)。基本上,如果你只想要一个包含 10 个项目的列表,你只需要用这些项目构建一个列表,那么你可以更新你的列表并调用 setState 来刷新视图 是的,我知道,重要的是我不知道如何处理滚动 不知道有没有干净的方法可以做到这一点,但是你可以在itemBuilder里面做,看索引,如果index == list.length - 1就说明你在列表的最后

以上是关于在颤动中向上/向下滚动列表时如何在列表中插入和删除项目?的主要内容,如果未能解决你的问题,请参考以下文章

在列表框中向上或向下移动项目

如何检测 SwiftUI List 中的向上、向下、顶部和底部滚动

如何在颤动中滚动时固定列表的组标题

如何防止滚动使用jquery跳过列表中的项目?

向上或向下滚动列表视图的问题

vimium快捷键列表