Flutter中如何从Firebase获取当前用户数据并在Drawer展示?
修复Drawer仅显示当前登录用户数据的问题
你的代码核心问题出在Firestore查询部分:where("uid")这种写法没有指定匹配规则和目标值,相当于没有添加任何过滤条件,所以会返回users集合里的所有用户数据。
修复方案
- 获取当前登录用户UID:通过
FirebaseAuth.instance.currentUser?.uid拿到当前登录用户的唯一标识。 - 修正Firestore查询:给
where方法添加匹配条件,只查询uid等于当前用户UID的文档。 - 简化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
相关产品推荐
相关产品推荐

