Flutter项目Firestore返回uid而非phoneNumber问题求助
问题排查方案
1. 优先检查UserModel的fromMap方法
这是最可能的问题根源:你的UserModel类中,fromMap方法大概率错误地将phoneNumber字段映射到了Firestore的uid键上。
比如错误示例:
factory UserModel.fromMap(Map<String, dynamic> map) { return UserModel( uid: map['uid'] ?? '', name: map['name'] ?? '', phoneNumber: map['uid'] ?? '', // 此处错误绑定了uid字段 profilePic: map['profilePic'], ); }
这种写法会直接导致userData.phoneNumber输出uid值。
修正方式:确保phoneNumber对应Firestore文档中的phoneNumber字段:
factory UserModel.fromMap(Map<String, dynamic> map) { return UserModel( uid: map['uid'] ?? '', name: map['name'] ?? '', phoneNumber: map['phoneNumber'] ?? '', // 正确映射目标字段 profilePic: map['profilePic'], ); }
2. 验证Firestore文档的字段名
确认Firestore中users集合的文档里,字段名确实是phoneNumber(注意Firestore字段名大小写敏感,phonenumber或PhoneNumber都会导致匹配失败)。
3. 打印原始文档数据调试
在selectContact方法中添加原始数据打印,直接确认Firestore返回的数据结构:
for (var document in userCollection.docs) { print('原始文档数据: ${document.data()}'); // 输出Firestore返回的完整数据 var userData = UserModel.fromMap(document.data()); // ... 后续代码 }
通过这个打印可以直接判断:Firestore是否返回了phoneNumber字段、字段值是否正确,以此区分是数据存储问题还是模型解析问题。
4. 检查用户数据写入逻辑
确认用户注册或更新数据时,代码是将真实手机号写入phoneNumber字段,而非误将uid写入该字段。正确的写入逻辑示例:
await firestore.collection('users').doc(uid).set({ 'uid': uid, 'name': name, 'phoneNumber': phoneNumber, // 确保传入真实手机号 'profilePic': profilePic, });
内容的提问来源于stack exchange,提问作者Jabid Hasan
相关产品推荐
相关产品推荐

