Textfield控制器方法使性能变慢

问题描述 投票:1回答:1

我正在过滤我的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];
        }));
performance gridview dart flutter onchange
1个回答
0
投票

始终在setState()调用中设置状态变量。

使你的onSearchTextChanged()函数保存搜索文本并启动Future.delayed(),在短暂的延迟后执行搜索和更新。见:https://stackoverflow.com/a/54686588/1736338

您可以使用Suffix Tree数据结构来加速搜索操作。不幸的是,我找不到一个用Dartlang写的。你可以编码一个。 trie包不适合,因为它仅支持Set功能,而不支持Map功能。

© www.soinside.com 2019 - 2024. All rights reserved.