如何在Flutter中从Firestore获取当前用户文档ID/名称?
解决Flutter中获取Firestore当前用户文档的问题
核心问题梳理
你的代码存在三个关键问题:
- 获取
firebaseUser的位置错误,await不能直接在函数外使用,必须放在async函数内部 - User类的
fromJson方法里,你取的是json['id'],但Firestore文档中存储的字段是uid,字段名不匹配 - 未处理
FirebaseAuth.instance.currentUser为null的情况(用户未登录时会返回null)
修正后的完整代码
1. 修正User类的fromJson方法
将字段取值改为和Firestore存储的uid对应:
class User { String uid; final String name; final int age; final String email; User({ this.uid = '', required this.name, required this.age, required this.email, }); Map<String, dynamic> toJson() => { 'uid': uid, 'name': name, 'age': age, 'email': email, }; static User fromJson(Map<String, dynamic> json) => User( uid: json['uid'], // 改为匹配Firestore的字段名 name: json['name'], age: json['age'], email: json['email'], ); }
2. 修正readUser函数
把获取当前用户的逻辑移到async函数内部,同时处理未登录场景:
Future<User?> readUser() async { // 获取当前登录用户 final firebaseUser = FirebaseAuth.instance.currentUser; // 用户未登录时直接返回null if (firebaseUser == null) { print('用户未登录'); return null; } // 根据当前用户uid获取Firestore文档 final docUser = FirebaseFirestore.instance.collection('users').doc(firebaseUser.uid); final snapshot = await docUser.get(); if (snapshot.exists) { return User.fromJson(snapshot.data()!); } else { print('用户文档不存在'); return null; } }
额外说明
从你提供的Firestore数据截图来看,users集合下的文档ID和文档内的uid字段完全一致,所以用firebaseUser.uid作为文档ID的逻辑是正确的,直接匹配即可。
内容的提问来源于stack exchange,提问作者arief ariefshamsuddin
相关产品推荐
相关产品推荐

