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

Flutter Firebase中如何让不同用户获取各自专属数据?

解决方案

核心问题分析

你当前的代码硬编码了集合名'Harris'和文档名'username',所以无论哪个用户登录,都会读取同一个固定文档,自然始终显示同一个用户名。正确的做法是用当前登录用户的UID作为文档标识,关联到对应的用户数据。

步骤1:调整Firestore数据结构

从你的控制台截图看,当前数据结构不合理,应该:

  • 创建一个统一的集合(比如命名为users)
  • 每个用户的文档ID使用该用户在Firebase认证中的UID(可在Firebase认证控制台查看用户UID)
  • 每个文档内存储对应用户的username等信息

步骤2:修改代码获取当前用户数据

替换原有的集合和文档引用逻辑,通过当前登录用户的UID动态获取对应文档:

// 获取当前登录用户
final currentUser = FirebaseAuth.instance.currentUser;

// 用户未登录时返回登录提示
if (currentUser == null) {
  return Center(child: Text('请先登录'));
}

// 用当前用户UID作为文档ID,读取users集合下的对应文档
CollectionReference users = FirebaseFirestore.instance.collection('users');

return FutureBuilder<DocumentSnapshot>(
  future: users.doc(currentUser.uid).get(),
  builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
    if (snapshot.hasError) {
      return Center(child: Text("Something went wrong"));
    }

    if (snapshot.hasData && !snapshot.data!.exists) {
      return Center(child: Text("用户数据不存在"));
    }

    if (snapshot.connectionState == ConnectionState.done) {
      Map<String, dynamic> data = snapshot.data!.data() as Map<String, dynamic>;
      return Container(
        height: double.infinity,
        width: double.infinity,
        decoration: BoxDecoration(
          color: brightGray,
        ),
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text(
              'Welcome,',
              style: ktextFont3,
            ),
            Text(
              '${data['username']}',
              style: ktextFont4,
            ),
          ],
        ),
      );
    }

    return Center(
      child: CircularProgressIndicator(
        color: mintGreen,
      ),
    );
  },
);

关键修改点说明

  • FirebaseAuth.instance.currentUser:获取当前已登录用户实例,提取uid作为文档唯一标识
  • users.doc(currentUser.uid):动态关联当前用户的专属文档,确保不同用户读取自己的数据
  • 增加用户未登录判断,避免空指针异常

关于之前变量替换后为空的问题

大概率是因为:

  • 未正确获取当前用户UID(比如用户未登录时UID为空)
  • Firestore中未创建对应用户UID的文档,或文档内无username字段
  • 热重启时Auth状态未同步,可尝试冷启动应用,或用StreamBuilder监听FirebaseAuth.instance.authStateChanges()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:45:42