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

Flutter中如何从Firebase获取当前用户数据并在Drawer展示?

修复Drawer仅显示当前登录用户数据的问题

你的代码核心问题出在Firestore查询部分:where("uid")这种写法没有指定匹配规则和目标值,相当于没有添加任何过滤条件,所以会返回users集合里的所有用户数据。

修复方案

  1. 获取当前登录用户UID:通过FirebaseAuth.instance.currentUser?.uid拿到当前登录用户的唯一标识。
  2. 修正Firestore查询:给where方法添加匹配条件,只查询uid等于当前用户UID的文档。
  3. 简化UI渲染:因为仅查询单个用户数据,不需要用ListView.builder循环渲染,直接处理单个文档即可。

修改后的完整代码

StreamBuilder(
  stream: FirebaseFirestore.instance
      .collection("users")
      // 精准过滤当前登录用户的文档
      .where("uid", isEqualTo: FirebaseAuth.instance.currentUser?.uid)
      .snapshots(),
  builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if (snapshot.hasData && snapshot.data!.docs.isNotEmpty) {
      var userData = snapshot.data!.docs.first;
      return UserAccountsDrawerHeader(
        accountName: Text("${userData['first name']} ${userData['last name']}"),
        accountEmail: Text(userData['email address']),
      );
    } else if (snapshot.hasError) {
      return Padding(
        padding: const EdgeInsets.all(30.0),
        child: Text('加载失败:${snapshot.error}'),
      );
    } else {
      return Padding(
        padding: const EdgeInsets.all(30.0),
        child: Text('Loading Data......'),
      );
    }
  },
),

关键说明

  • where("uid", isEqualTo: FirebaseAuth.instance.currentUser?.uid):确保查询仅返回当前登录用户的文档,避免获取全量用户数据。
  • 用snapshot.data!.docs.first直接获取唯一的用户文档,避免循环生成多个UserAccountsDrawerHeader。
  • 新增错误处理分支,更友好地提示加载失败场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 12:18:27