gpt4 book ai didi

Flutter:过滤ListView时去除重复项

转载 作者:IT王子 更新时间:2023-10-29 07:16:45 41 4
gpt4 key购买 nike

我正在处理这样的 ListView 过滤。

enter image description here

假设您键入 tsi。那么结果是:

enter image description here

这是正确的。如果清除搜索输入框,则应显示默认/原始列表。相反,会有重复的项目。诡异的。 enter image description here

过滤代码如下:

  onSearchTextChanged(String input) async {
List<ParkingItem> dummySearchList = List<ParkingItem>();
dummySearchList.addAll(_parkingList);

if (input.isNotEmpty){
List<ParkingItem> dummy = List<ParkingItem>();
dummySearchList.forEach((item){
if (item.location.toLowerCase().contains(input.toLowerCase())){
dummy.add(item);
}
});

setState((){
_parkingList.clear();
_parkingList.addAll(dummy);
});
return;
}
else {
setState(() {
_parkingList.clear();
_parkingList.addAll(backup);
});
}
}

这是 the full code .这里有什么问题吗?

最佳答案

使用那个 dummySearchList 和另一个 dummy 列表,我觉得有点困惑。我建议在您的小部件状态下有两个列表。一个包含所有项目,基本上是 ParkingItem 的来源,另一个用于您要显示的项目。

我已经在 dartpad 中输入了一些内容,希望这对您有所帮助。

List<ParkingItem> _allItems; 
List<ParkingItem> _displayedItems;

@override
initState() {
super.initState();
_allItems = []; // TODO: fetch all items first
_displayedItems = _allItems; // initially, display all items
}

onSearchTextChanged(String input) async {
if(input.isNotEmpty) {
setState(() {
// set displayed items as a filtered set of allItems, by using `where`
_displayedItems = _allItems
.where((ParkingItem item) => item.location.toLowerCase().contains(input.toLowerCase()))
.toList(); // turn the Iterable back into a List
});
} else {
setState(() {
// no search field input, display all items
_displayedItems = _allItems;
});
}
}

关于Flutter:过滤ListView时去除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57141240/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com