gpt4 book ai didi

firebase - 为什么文档不存在。但始终 !snapshot.hasData 都是 false

转载 作者:行者123 更新时间:2023-12-03 08:16:12 25 4
gpt4 key购买 nike

我制作注册系统并管理用户信息。

注册时,用户需要输入用户名,该用户名存储在firestore中。

用户数据是这样存储的;

Img

并尝试使用代码获取userName

CollectionReference users = FirebaseFirestore.instance.collection('users');

return FutureBuilder<DocumentSnapshot>(
future: users.doc(FirebaseAuth.instance.currentUser!.uid).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (snapshot.hasError) {
return Text("Something went wrong");
}

print("${!snapshot.hasData} ${!snapshot.data!.exists}"); // always "false true"
if (!snapshot.hasData && !snapshot.data!.exists) {
return Text("Document does not exist");
}

if (snapshot.connectionState == ConnectionState.done) {
Map<String, dynamic> data =
snapshot.data!.data() as Map<String, dynamic>;
return Text("User Name: ${data['userName']}");
}

return const CircularProgressIndicator();
},
);

但是总是调用return Text("Document does not exit");,并且不显示userName

为什么userName没有返回?我搜索了拼写错误,但找不到。这个问题今天花了很多时间。谢谢。

最佳答案

snapshot.data您指的是 AsyncSnapshot用于监视异步操作的状态。它的hasData当异步操作完成时变为 true:因此当完成读取 DocumentSnapshot 时从数据库中。

检测是否DocumentSnapshot实际上存在,你需要检查它的 exists属性。

常见状态的快速摘要:

<表类=“s-表”><标题>对象.属性值解释 <正文> AsyncSnapshot.hasData false 异步操作尚未完成,或者未产生 DocumentSnapshot (例如:如果出现网络错误)。调用 snapshot.data将导致错误消息。 AsyncSnapshot.hasData true 异步操作已完成,您可以放心调用 snapshot.data就可以得到 DocumentSnapshot . DocumentSnapshot.exists false 您请求的文档不存在,正在调用 document.data快照上将导致错误。 DocumentSnapshot.exists true 您请求的文档存在,您可以访问其数据。

所以你的!snapshot.hasData一旦 AsyncSnapshot 将为 false已完成加载 DocumentSnapshot 。要确定文档是否确实存在,请使用 snapshot.hasData && snapshot.data!.exists .

我还建议您查看我对 Flutter 代码中各种类型快照的解释:What is the difference between existing types of snapshots in Firebase?

关于firebase - 为什么文档不存在。但始终 !snapshot.hasData 都是 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69300578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com