0

我在我的应用程序中使用 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]

过滤如下:

  1. 通过迭代每个当前元素并运行删除动画从原始列表中删除所有实体
  2. 一次添加一个成员,使用交错动画,使用 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 中的批量操作。

4

1 回答 1

0

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

于 2020-12-15T01:51:32.223 回答