Flutter Search Delegate - 使用 Firebase 构建建议

问题描述

基本上,我想从 Firestore 检索 buildSuggestions 数据。但是:FutureBuilderbuildSuggestions 内的 StreamBuilder 会导致一遍又一遍地检索相同的数据(我想不是很划算)。

Reload Example

我应该在哪里检索 Firestore 数据以在 Flutter 中显示搜索建议?

我有以下代码,它完全符合上面显示的 GIF 中显示内容

  @override
  Widget buildSuggestions(BuildContext context) {
    Future<List<dynamic>> _fetchData() async {
      List<dynamic> queries;
      queries = await FirebaseFirestore.instance
          .collection('Others')
          .doc('Search')
          .get()
          .then((value) {
        return queries = value.data()['queries'];
      });
      return queries;
    }

    return FutureBuilder(
      future: _fetchData(),builder: (context,snapshot) {
        print('reloaded');
        if (snapshot.connectionState == ConnectionState.waiting) {
          return Center(child: CupertinoActivityIndicator());
        }
        if (!snapshot.hasData) {
          return Center(child: Text('Failed to Load Data'));
        }

        final suggestionList = query.isEmpty
            ? snapshot.data
            : snapshot.data
                .where((element) =>
                    element.toString().startsWith(query[0].toupperCase()))
                .toList();

        return ListView.builder(
          itemCount: suggestionList.length,itemBuilder: (context,index) {
            return ListTile(
              onTap: () {
                query = suggestionList[index];
                showResults(context);
              },leading: Icon(Icons.insert_chart),title: Text(
                suggestionList[index],style: TextStyle(fontWeight: FontWeight.w400),),);
          },);
      },);
  }

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...