Flutter中的AnimatedList和SliverAnimatedList:如何解决批量操作时重复项的问题

Posted

技术标签:

【中文标题】Flutter中的AnimatedList和SliverAnimatedList:如何解决批量操作时重复项的问题【英文标题】:AnimatedList and SliverAnimatedList in Flutter: How to solve problem of repeated items during bulk operations 【发布时间】:2021-03-25 15:06:50 【问题描述】:

我在我的应用中使用 SliverAnimatedList 来显示项目列表。

我还实现了几个过滤器。如果我单击按钮 A,列表中的某些项目应该会显示,而其他项目会被删除。按钮 B、C 和 D 也是如此。我使用 for 循环在 SliverAnimatedListState 中添加和删除项目。

例如:

Original list: [ 1, 2, 3 .... 20,000]
Button A filters list down to [1, 2, 3, 4]
Button B filters list down to [9, 10, 1, 5]

过滤如下:

    通过迭代每个当前元素并运行删除动画从原始列表中删除所有实体 使用 Future 延迟一次添加一个成员,使用交错动画。

再次单击该按钮将删除所有项目并重新添加原始列表。

因为我使用的是for循环,所以有可能用户可以在所有添加/删除操作完成之前单击按钮A,然后单击按钮B或取消单击按钮A并返回,这会导致重复项出现.例如:

Button A is pressed.
List is cleared. 1, 2 are added to the list.
Button B is pressed. 
1 and 2 are cleared from the list.
9 and 10 are added to the list from List B.
3 and 4 are added to the list from List A because the initial for loop did not finish running.

我将如何解决这个问题?自然,如果我使用 SliverList 或没有动画的常规列表,我会避免使用 for 循环,然后一切都按预期工作,但我想保留动画,我想知道是否有人有如何处理的示例AnimatedList 或 SliverAnimatedList 中的批量操作。

【问题讨论】:

【参考方案1】:

让你的真实来源项目成为一张地图,重点关注你需要独特的东西。您还需要一种将构建的索引映射到其中一个 Map 键的方法。也许是二级地图。

【讨论】:

以上是关于Flutter中的AnimatedList和SliverAnimatedList:如何解决批量操作时重复项的问题的主要内容,如果未能解决你的问题,请参考以下文章

在 Flutter 中使用 Provider 更新和动画化 AnimatedList

Flutter AnimatedList 使用解析

Flutter中如何保存每个列表对象的状态

如果添加到动画列表,Flutter 查找已停用小部件的祖先是不安全的

Flutter 尺寸缩放形状颜色阴影变换动画

Flutter: Animation - 如何制作动画列表?