如何在Flutter中获取Firestore自动生成的用户ID 解决loggedInAppUser返回null问题
获取Firestore用户自动生成ID解决方案
loggedInAppUser返回null的核心原因是未在登录后同步Firebase Auth凭证和Firestore用户文档数据,可按以下步骤正确获取目标ID:
- 登录成功后先获取Firebase Auth侧的用户唯一UID
// 邮箱密码登录逻辑 final UserCredential userCredential = await FirebaseAuth.instance.signInWithEmailAndPassword( email: inputEmail, password: inputPassword ); final String? authUid = userCredential.user?.uid; if (authUid == null) return; // 拦截登录异常场景
- 根据你的用户集合设计匹配查询对应的Firestore文档,取出文档ID
两种常见的用户表设计对应不同查询逻辑:
- 推荐方案:创建用户时直接使用Auth UID作为Firestore用户文档ID
final DocumentSnapshot userDoc = await FirebaseFirestore.instance .collection("users") .doc(authUid) .get(); if (userDoc.exists) { String firestoreGeneratedId = userDoc.id; // 此处即为目标ID loggedInAppUser = AppUser.fromFirestore(userDoc); // 给全局变量赋值 }
- 用户文档使用Firestore默认自动生成ID,文档内存储
authUid字段关联Auth数据
final QuerySnapshot userQuery = await FirebaseFirestore.instance .collection("users") .where("authUid", isEqualTo: authUid) .limit(1) .get(); if (userQuery.docs.isNotEmpty) { String firestoreGeneratedId = userQuery.docs.first.id; // 此处即为目标ID loggedInAppUser = AppUser.fromFirestore(userQuery.docs.first); // 给全局变量赋值 }
注意:必须等待Firestore查询的异步操作完成后再调用
loggedInAppUser变量,否则异步未执行完成时变量未赋值,仍会返回null。
内容的提问来源于stack exchange,提问作者Ricky Kim
相关产品推荐
相关产品推荐

