我有这个显示用户信息的配置文件屏幕。用户认证后,我在云firestore中存储数据,文档ID等于用户ID。现在,我想从云firestore中检索数据,当前用户ID等于文档ID。
现在我有这个:
class UserManagement {
getData() async{
String userId = (await FirebaseAuth.instance.currentUser()).uid;
print(userId);
return Firestore.instance.collection('users').document(userId);
}
但当我注销时,这不能正常工作,用不同的用户重新登录后,它显示相同的数据。
UserManagement().getData().then((results) {
setState(() {
userFlag = true;
users = results;
});
});
现在,如何得到其他字段,如姓名,电子邮件,课程,电话号码等,所有的值都存储到用户。对吗?
3条答案
按热度按时间1bqhqjot1#
如果firestore中的文档id等于Firebase身份验证控制台中的
userid
,则需要首先检索uid
,并将其作为参数传递给方法document()
:pinkon5k2#
您的查询将获取“userData”集合中的所有文档,然后从整个集合中挑选出第一个文档。对于对该集合具有读访问权限的所有用户来说,这将是同一个文档集。我不明白您为什么会对不同的用户期望不同的结果。也许您的意思是为给定用户ID的用户访问单个文档,而不是所有文档。如果是这种情况,您应该通过文档的ID请求该文档,其中
Firestore.instance.collection('userData').document(uid)' where
uid '是当前登录用户的ID。此外,您的代码正在查询一个名为“userData”的集合,但您的屏幕截图显示的是一个名为“users”的集合,因此这很令人困惑。
7kqas0il3#
有两种方式:
1.流生成器
当您希望不断听取更改,并希望数据在不进行热重新加载/重新启动的情况下得到更新时
2.未来构建者
当您只想获取文档一次,并且不需要不断地监听文档的更改时。
流生成器
未来建筑师
另请参阅:How to use
StreamBuilder
andFutureBuilder
for single and multiple documents