文本字段控制器方法使性能降低

时间:2019-03-11 21:47:00

标签: performance gridview dart flutter onchange

我正在像这样过滤我的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];
        }));

1 个答案:

答案 0 :(得分:0)

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

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

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