flutter 如何正确过滤带有 dart /抖动的列表

qltillow  于 2023-01-31  发布在  Flutter
关注(0)|答案(1)|浏览(143)

我一直在努力寻找一种方法,既能用dart/flutter正确地过滤列表,又不会丢失其内容。
上下文:

  • 我有一张100件物品的清单。
  • 我在ListView中使用此列表
  • 我有一个使用Where(). ToList()过滤列表的按钮
  • 一旦过滤,原始列表得到减少到过滤值,我不能恢复初始(100个值)

我的理解(或缺乏)是,即使我创建了一个复制列表的新对象,仍然引用原始对象,因此原始对象会被删除。所以我不确定如何使用过滤器而不丢失数据?
筛选器调用:

onTap: (int index) {
        switch (index) {
          case 0:
            widget.collection!.items =
                widget.collection!.filterCollection(FilterType.all);
            _selectedIndex = index;
            break;
          case 1:
            widget.collection!.items =
                widget.collection!.filterCollection(FilterType.onlyFew);
            _selectedIndex = index;
            break;
        }

在filterCollection(这是类中保存项的方法)上,我添加了一个辅助列表(filteredList,我试图在其中保留原始列表,以便可以恢复到它,但也不起作用)

filterCollection(FilterType filter) {
    filteredList.clear();
    filteredList.addAll(items); //items is a List<Items> part of this class
    switch (filter) {
      case FilterType.onlyFew:
        return filteredList
            .where((element) => element.something == true)
            .toList();
      case FilterType.all:
      default:
        return filteredList;
    }

我最新的猜测(我现在就试试)是尝试在widget. collection中使用列表的"副本",这样我就不会更改原始列表了?我不知道,完全迷失了:D
有什么建议吗?

46qrfjad

46qrfjad1#

您应该有一个包含所有项目的列表和另一个包含筛选项目的列表。
默认情况下,filteredList应该有一个包含所有项的初始列表。您的ListView只能使用filteredList。
在onTap中设置您的filteredList:

switch (index) {
          case 0:
            filteredList =
                widget.collection!.filterCollection(FilterType.all);
            _selectedIndex = index;
            break;
          case 1:
            filteredList =
                widget.collection!.filterCollection(FilterType.onlyFew);
            _selectedIndex = index;
            break;
        }

相关问题