[英]Flutter - Get the current user's document in firebase firestore
[英]Getting current user's data from firebase firestore in flutter
我想从 Firestore 获取数据,但我似乎无法正确执行,它总是返回 null。 这是我尝试过的:
Map<String, dynamic>? userMap2;
void getCurrentUser() async {
FirebaseFirestore _firestore = FirebaseFirestore.instance;
final User? user = _auth.currentUser;
final uuid = user!.uid;
setState(() {
isLoading = true;
});
await _firestore
.collection('users')
.where("uid", isEqualTo: uuid)
.get()
.then((value) {
setState(() {
userMap2 = value.docs[0].data();
isLoading = false;
});
print(userMap2);
});
}
当我尝试使用该数据时,我尝试像这样使用它: userMap2!['firstName']
尝试将用户数据放入文档中然后使用,
_firestore
.collection('users')
.doc(uuid)
.get().then((value) {
setState(() {
userMap2 = value.docs[0].data();
isLoading = false;
});
print(userMap2);
});
在 React 中,调用setState
是一个异步操作。 此外,从 Firestore 加载数据是一个异步操作。 这意味着在您当前的代码中, print(userMap2)
在调用then
回调之前运行,甚至在userMap2 = value.docs[0].data()
完成之前运行。
我建议不要将then
与await
结合使用,并执行以下操作:
const value = await _firestore // 👈
.collection('users')
.where("uid", isEqualTo: uuid)
.get();
setState(() {
userMap2 = value.docs[0].data();
isLoading = false;
});
print(value.docs[0].data()); // 👈
在我标记的第一行,我们现在从await
ed get()
返回值,因此我们不再需要then
块。 这处理了对 Firestore 的调用的异步性质。
然后在第二个标记的行上,我们直接从数据库的结果中打印值,而不是从setState
调用。 这解决了调用setState
的异步性质。
有关这些的更多信息,请参阅:
setState
在设置 state 时运行)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.