【问题标题】:Flutter QuerySnapshot: The getter 'docs' was called on nullFlutter QuerySnapshot:在 null 上调用了 getter 'docs'
【发布时间】:2021-05-09 08:30:38
【问题描述】:

我收到错误“NoSuchMethodeError:在 null 上调用了 getter 'docs'。”使用以下代码:

QuerySnapshot querySnapshot;

  initiateSearch() {
    databaseMethods
        .getUserByUsername(searchTextEditingController.text)
        .then((val) {
      querySnapshot = val;
    });
  }

  Widget searchList() {
    return ListView.builder(
        itemCount: querySnapshot.docs.length,
        itemBuilder: (context, index) {
          return SearchTile(
            userName: querySnapshot.docs[index].data()["name"],
            userEmail: querySnapshot.docs[index].data()["email"],
          );
        }
    );
  }

如果有人回答为什么 querySnapshot.docs[index].data()["name"] 不起作用,我收到此错误以及如何解决它,请帮忙!

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    要重建与状态变化同步的 UI,我们应该使用状态管理,最简单的是 StatefulWidgetsetState() 函数:

    QuerySnapshot _querySnapshot;
    
    initiateSearch() {
      databaseMethods
          .getUserByUsername(searchTextEditingController.text)
          .then((val) {
              setState(() {
                 _querySnapshot = val;
              });
      });
    }
    

    并处理_querySnapshot仍为null的情况:

     Widget searchList() {
        if (_querySnapshot == null) return CircularProgressIndicator();
        return ListView.builder(
            itemCount: _querySnapshot.data.docs.length,
            itemBuilder: (context, index) {
              return SearchTile(
                userName: _querySnapshot.data.docs[index]["name"],
                userEmail: _querySnapshot.data.docs[index]["email"],
              );
            }
        );
    }
    

    【讨论】:

    • querySnapshot.docs[index].data()["name"] 仍然是错误“未为类型'Object'定义运算符'[]'。尝试定义运算符'[]'。”
    • 感谢您的评论!这是另一个问题,我已经编辑了答案来解决这个问题,我希望这会有所帮助! :)
    猜你喜欢
    • 1970-01-01
    • 2021-08-11
    • 2020-01-08
    • 2021-12-10
    • 2020-03-24
    • 2021-05-25
    • 2023-03-08
    • 2021-02-22
    相关资源
    最近更新 更多