如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?
Posted
技术标签:
【中文标题】如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?【英文标题】:How to Retrieve data from firebase firestore using the UserID in flutter? 【发布时间】:2022-01-24 03:08:05 【问题描述】:我想在每次用户登录时从 firebase firestore 中检索 userName
。所以我不想使用来自 firebase 的用户 ID 检索用户数据并显示它。
我在下面附上了我当前的代码。
如何调整以下代码以使用 user_ID
作为主键从 firestore 获取 userName
?
当前代码:
类 GetUserName 扩展 StatelessWidget
final String documentId;
GetUserName(this.documentId);
@override
Widget build(BuildContext context)
CollectionReference users = FirebaseFirestore.instance.collection('users');
return FutureBuilder<DocumentSnapshot>(
future: users.doc(documentId).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot)
if (snapshot.hasError)
return Text("Something went wrong");
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("Hello, $data['userName']");
return Text("loading");
,
);
提前谢谢你:)
【问题讨论】:
您是否使用 Firebase 身份验证? 是的,我正在使用 firebase 身份验证,并且在 firebase 身份验证中可以使用User UID
。我也有那个 firrbase auth UserId 作为我在云 Firestore 中的Document Id
。
【参考方案1】:
你会想在 `` 上使用StreamBuilder
来处理当前用户,如下所示:
return StreamBuilder(
stream: FirebaseAuth.instance.authStateChanges(),
builder: (context, snapshot)
if (snapshot.connectionState != ConnectionState.active)
return Center(child: CircularProgressIndicator()); // ? user is loading
final user = snapshot.data;
final uid = user.uid; // ? get the UID
if (user != null)
print(user);
CollectionReference users = FirebaseFirestore.instance.collection('users');
return FutureBuilder<DocumentSnapshot>(
future: users.doc(uid).get(),
builder:
(BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot)
if (snapshot.hasError)
return Text("Something went wrong");
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("Hello, $data['userName']");
return Text("loading");
,
);
else
return Text("user is not logged in");
,
在做这样的事情时,我总是把 FlutterFire 文档放在手边
【讨论】:
嗨,我是 Flutter 的新手。所以这对我来说有点困惑,如果可能的话,你能告诉我如何通过firebase authUser UID
获取当前用户的用户名吗?我有firebase auth User UID
作为我的firestore document ID
。
那是user.uid
,我也刚刚添加了我的答案。文档:firebase.flutter.dev/docs/auth/usage
成功了!非常感谢:)以上是关于如何使用 Flutter 中的 UserID 从 Firebase Firestore 检索数据?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Flutter 中从 Firebase Auth 获取用户 ID?
如何从 loginName 控件中获取 UserName 或 UserId?
如何使用 Dart / Flutter 中的列表从列表中删除重复元素?
如何使用 Flutter 从 Firestore 中的 ListView 获得无限滚动