首页 > 解决方案 > Flutter QuerySnapshot:在 null 上调用了 getter 'docs'

问题描述

我收到错误“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"]不工作,我收到这个错误以及如何解决它,请帮忙!

标签: firebaseflutterdartgoogle-cloud-firestore

解决方案


为了与状态变化同步重建 UI,我们应该使用状态管理,最简单的是setState()a 的功能StatefulWidget

QuerySnapshot _querySnapshot;

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

并处理_querySnapshot仍然为空的情况:

 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"],
          );
        }
    );
}

推荐阅读