我正在尝试从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);
});
}