当文档ID等于Flutter中当前记录的用户ID时获取firestore数据?
Posted
技术标签:
【中文标题】当文档ID等于Flutter中当前记录的用户ID时获取firestore数据?【英文标题】:Get firestore data when document id is equal to current logged user id in Flutter? 【发布时间】:2020-08-18 11:38:58 【问题描述】:我想在用户登录后显示用户个人资料部分并进入个人资料视图部分。在身份验证部分,我将用户数据存储在 Cloud Firestore 数据库中。在那里,我将文档 ID 设置为等于用户 ID。现在我想根据用户ID检索文档字段数据。
这就是我所做的,
class MyProfile extends StatefulWidget
Future<String> getData() async
final FirebaseUser user = await FirebaseAuth.instance.currentUser();
final String uid = user.uid.toString();
return uid;
@override
Widget build(BuildContext context)
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('My Profile'),
backgroundColor: Color(0xFF4A184C),
),
body:
StreamBuilder(
stream:
Firestore.instance.collection('Users').document().snapshots(),
builder: (context, snapshot)
if(!snapshot.hasData) return Text('Loading Data.. Please Wait...');
return
Column(
children: <Widget>[
Card(
child: ListTile(
leading: Icon(
Icons.account_circle,
size: 40,
color: Colors.amber,
),
title: Text(
"Name : " + snapshot.data['username'],
style: TextStyle(
fontSize: 18,
color: Color(0xFF4A184C),
fontWeight: FontWeight.bold),
),
),
),
.....
【问题讨论】:
【参考方案1】:如果您可以控制 Users
中文档的创建,则可以为它们提供与 FirebaseUser
的 uid 相同的 id。
您可以选择使用StreamBuilder
或FutureBuilder
来检索它。
如果您想使用 StreamBuilder
持续更新此数据,您可以使用异步生成器函数。
Stream<DocumentSnapshot> getUserStream() async*
final uid = await getData();
yield* Firestore.instance.document("Users/$uid").snapshots();
或者如果您只想获取一次数据,您可以使用FutureBuilder
。未来可以从以下函数推导出来
Future<DocumentSnapshot> getUser() async
final uid = await getData();
return Firestore.instance.document("Users/$uid").get();
【讨论】:
以上是关于当文档ID等于Flutter中当前记录的用户ID时获取firestore数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中从 Firebase 获取当前用户 ID
当在文本字段中输入字段中的数据时,Flutter Firestore 显示文档 ID
如何在flutter中通过没有文档ID的用户ID字段更新文档字段的值?