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

Flutter使用Firebase获取当前用户名遇两类报错,寻求解决方法

解决Firebase获取用户名称的问题

先修正第二段代码的错误

你第二段代码里的doc.get()是冗余操作——doc本身就是调用.get()后返回的DocumentSnapshot对象,不需要再次调用get(),这正是报错的原因。

完整修正后的代码

Future<void> getUserData() async {
  User? user = FirebaseAuth.instance.currentUser; // currentUser是同步属性,无需await
  if (user == null) {
    print("用户未登录");
    return;
  }

  try {
    final DocumentSnapshot doc = await FirebaseFirestore.instance
        .collection("UserData")
        .doc(user.uid)
        .get();

    if (!doc.exists) {
      print("UserData集合中无当前用户的文档");
      return;
    }

    final data = doc.data() as Map<String, dynamic>?;
    if (data == null || !data.containsKey('name')) {
      print("用户文档中不存在'name'字段");
      return;
    }

    name = data['name'];
    print("name $name");
  } catch (e) {
    print("获取用户数据失败: ${e.toString()}");
  }
}

关键修复说明

  • 移除冗余的doc.get()操作,直接使用已获取的DocumentSnapshot
  • 增加用户登录状态检查,避免空安全风险(无需强制解包user!.uid)
  • 增加文档存在性判断,提前处理无用户文档的情况
  • 增加字段存在性校验,避免因缺少name字段触发错误
  • 修正currentUser调用:FirebaseAuth.instance.currentUser是同步属性,不需要await

第一个错误的根源及解决

你第一次遇到的Bad state: cannot get a field on a DocumentSnapshotPlatform which does not exist,本质是两种情况之一:

  1. UserData集合中没有当前用户UID对应的文档
  2. 用户文档存在,但缺少name字段

上面的代码会分别对这两种情况进行判断并打印提示,方便你快速排查问题。

内容的提问来源于stack exchange,提问作者Zephys

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 12:35:19