我一直在努力寻找一种方法,既能用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
有什么建议吗?
1条答案
按热度按时间46qrfjad1#
您应该有一个包含所有项目的列表和另一个包含筛选项目的列表。
默认情况下,filteredList应该有一个包含所有项的初始列表。您的ListView只能使用filteredList。
在onTap中设置您的filteredList: