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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 20:21:43