我正在像这样过滤我的GridView.builder列表:
onSearchTextChanged(String text) async {
if (text.isEmpty) {
_searchList = _productList.toList();
setState(() {
});
return;
}
_searchList = _productList.where((product) => product.name.toLowerCase().contains(text.toLowerCase()) ||
product.type.toLowerCase().contains(text.toLowerCase())).toList();
setState(() {});
}
但是当我在文本字段上键入内容时,性能会下降,甚至在我删除文本或快速键入内容时有时会降至2.5 fps。
这是我的Gridview构建器
GridView.builder(
primary: false,
shrinkWrap: true,
gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(
crossAxisCount: 2,
childAspectRatio: itemWidth / itemHeight,
),
itemCount: _searchList.length,
itemBuilder: (BuildContext context, int index) {
return _searchList[index];
}));
答案 0 :(得分:0)
始终在setState()调用中设置状态变量。
使您的onSearchTextChanged()函数保存搜索文本,并启动Future.delayed()来执行搜索,并在短暂延迟后进行更新。参见:https://stackoverflow.com/a/54686588/1736338。
您可以使用Suffix Tree数据结构来加快搜索操作。不幸的是,我找不到用Dartlang写的书。您可以编写一个。 trie软件包不合适,因为它仅支持Set功能,而不支持Map功能。