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