Flutter / Firestore-即使在执行空检查之后,FutureBuilder也会导致NoSuchMethodError

时间:2018-07-25 05:40:45

标签: null dart google-cloud-firestore flutter nosuchmethoderror

我正在尝试从Firestore数据库中检索值。我正在使用FutureBuilder构建需要这些值的小部件。以下代码导致我出错:

FutureBuilder(
          future: Firestore.instance.collection('Users').document(_uid).get(),
          builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
            if (snapshot.hasData) {
              if (snapshot.data != null) {
                print(snapshot.data["firstName"]); //error occurs here
              }
            } else {
              return new CircularProgressIndicator();
            }
          },
        )

错误如下: NoSuchMethodError: The method '[]' was called on null. Receiver: null Tried calling: []("firstName") 以某种方式,即使经过null检查,文档快照仍然为null。有什么想法吗?甚至更陌生:当我热重装时,代码实际上可以工作。但是,当我在应用程序中切换到此页面时,此错误再次弹出。我已经尝试实现一个try-catch,该尝试返回一个CircularProgressIndicator,但是,当遇到错误时,该页面仅作为永久性的CircularProgressIndicator保留。我认为如果我可以捕获错误并重新加载FutureBuilder,则可以解决。还是可以解决为什么即使在执行完null检查后文档快照为何仍为null的奥秘。

*编辑:我发现了问题:_uid导致了我的问题。当我硬编码_uid时,它工作良好。因此,问题在于我如何在页面开头获取_uid。这就是我获得_uid的方式,该代码写在我的构建代码上方:

void initState()  {
    super.initState();
    // Listen for our auth event (on reload or start)
    // Assign variables once logged in
    _auth.onAuthStateChanged
        .firstWhere((user) => user != null)
        .then((user) {
      _uid = user.uid;
      print (_uid);
    });
  }

0 个答案:

没有答案