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

如何查询并展示当前登录用户的Firebase数据(附Flutter代码)

解决只展示当前登录用户Firestore数据的问题

你的当前代码会拉取users集合下的所有用户数据,要实现只展示当前登录用户的专属数据,需要结合Firebase Auth获取用户ID,再对Firestore查询做过滤,具体操作如下:

1. 获取当前登录用户ID

先确保项目已集成Firebase Auth,通过FirebaseAuth.instance.currentUser可获取当前登录用户实例,从中提取唯一标识uid。

2. 修改Firestore查询逻辑

把原本拉取整个集合的查询,改成用uid过滤出当前用户的文档。如果users集合是用用户uid作为文档ID存储的,直接用doc(uid)获取单文档效率更高;如果文档是随机ID但包含uid字段,就用where条件过滤。

3. 调整UI渲染逻辑

因为查询结果是单个用户文档,无需使用ListView.builder,直接读取文档字段即可。

修改后的完整代码

import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_firestore/firebase_firestore.dart';
import 'package:flutter/material.dart';

class AddStore extends StatelessWidget {
  AddStore({Key? key}) : super(key: key);
  final CollectionReference _users = FirebaseFirestore.instance.collection("users");
  final FirebaseAuth _auth = FirebaseAuth.instance;

  @override
  Widget build(BuildContext context) {
    // 获取当前登录用户的uid
    final String? currentUserId = _auth.currentUser?.uid;

    // 用户未登录时展示提示
    if (currentUserId == null) {
      return const Scaffold(
        body: Center(child: Text("请先登录")),
      );
    }

    return Scaffold(
      body: StreamBuilder<DocumentSnapshot>(
        // 方式1:文档ID就是uid(推荐)
        stream: _users.doc(currentUserId).snapshots(),
        // 方式2:文档含uid字段,用where过滤
        // stream: _users.where("uid", isEqualTo: currentUserId).snapshots(),
        builder: (context, AsyncSnapshot<DocumentSnapshot> snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const SizedBox(
              height: 250,
              child: Center(child: CircularProgressIndicator()),
            );
          }

          if (!snapshot.hasData || !snapshot.data!.exists) {
            return const Center(child: Text("未找到用户数据"));
          }

          // 解析用户数据
          final userData = snapshot.data!.data() as Map<String, dynamic>;
          return Center(
            child: Text(userData['fullName'] ?? "无用户名"),
          );
        },
      ),
    );
  }
}

关键补充

  • 数据安全配置:要确保Firestore安全规则限制用户只能访问自己的文档,示例规则如下:
    rules_version = '2';
    service cloud.firestore {
      match /databases/{database}/documents {
        match /users/{userId} {
          allow read, write: if request.auth != null && request.auth.uid == userId;
        }
      }
    }
    
  • 空值处理:代码中增加了未登录、无数据的兜底提示,避免空指针异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:55:20