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

Flutter中如何仅显示当前用户的Firestore行程数据?

修复Flutter Firestore仅显示当前用户行程的问题

从你的代码和数据库截图来看,核心问题出在字段名大小写不匹配,同时还有一些可以优化的点,以下是具体修复步骤:


1. 修正Firestore查询的字段名

你的数据库里存储用户ID的字段是userId(首字母大写的I),但查询代码里写的是userid(全小写)。Firestore对字段名大小写敏感,这就导致你的过滤条件完全失效,返回了所有行程数据。

把查询中的"userid"改成"userId"即可:

.where("userId", isEqualTo: currentUser.uid)

2. 确保当前用户已正确获取

要保证user?.uid是有效的用户ID,建议直接通过FirebaseAuth.instance.currentUser获取当前登录用户,避免因user变量未初始化导致的空值问题:

final currentUser = FirebaseAuth.instance.currentUser;
if (currentUser == null) {
  // 用户未登录,直接返回,避免无效查询
  return;
}

3. 优化查询的异步逻辑

原代码用then处理异步,且每次添加数据都调用setState,既不高效也容易引发状态异常。建议改用async/await,并一次性更新列表:

修改后的完整getTrip函数:

Future getTrip() async {
  // 先清空旧数据,避免重复加载
  setState(() {
    trips.clear();
  });

  try {
    final currentUser = FirebaseAuth.instance.currentUser;
    if (currentUser == null) return;

    final querySnapshot = await FirebaseFirestore.instance
        .collection('trip')
        .where("userId", isEqualTo: currentUser.uid)
        .orderBy('date', descending: false)
        .orderBy('time', descending: false)
        .get();

    // 批量处理数据
    final newTrips = querySnapshot.docs.map((doc) => {
          'dest': doc['destination'],
          'desc': doc['description'],
          'image': doc['image'],
          'time': doc['time'],
          'date': doc['date'],
          'doc': doc.id,
        }).toList();

    setState(() {
      trips = newTrips;
    });
  } catch (e) {
    print('加载行程出错:$e');
    // 这里可以添加错误提示,比如用Fluttertoast显示
  }
}

4. 配置Firestore安全规则(可选但推荐)

为了从根源上防止用户访问不属于自己的数据,建议配置Firestore安全规则,确保只有用户本人能读写自己的行程:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /trip/{tripId} {
      allow read, write: if request.auth != null && request.auth.uid == resource.data.userId;
    }
  }
}

做完以上修改后,你的应用就只会加载当前登录用户的行程数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 12:55:19