You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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
    两种常见的用户表设计对应不同查询逻辑:
  1. 推荐方案:创建用户时直接使用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); // 给全局变量赋值
}
  1. 用户文档使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:06:02