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

Flutter中如何从Firebase的users与mecanicos两个集合获取数据?

如何同时从Firestore的users和mecanicos集合获取数据

要同时调用两个Firestore集合获取数据,最高效的方式是用Future.wait并行发起请求,避免串行请求带来的额外耗时。以下是修改后的代码示例:

Future<void> getDataFromFirestore() async {
  final currentUid = _firebaseAuth.currentUser!.uid;

  // 并行发起两个集合的文档请求
  final [mecanicoSnapshot, userSnapshot] = await Future.wait([
    _firebaseFirestore.collection("mecanicos").doc(currentUid).get(),
    _firebaseFirestore.collection("users").doc(currentUid).get(),
  ]);

  // 处理mecanicos集合的数据(保留你原有的逻辑)
  if (mecanicoSnapshot.exists) {
    _userModel = UserModel(
      name: mecanicoSnapshot['name'],
      cedula: mecanicoSnapshot['cedula'],
      local: mecanicoSnapshot['local'],
      email: mecanicoSnapshot['email'],
      bio: mecanicoSnapshot['bio'],
      profilePic: mecanicoSnapshot['profilePic'],
      createdAt: mecanicoSnapshot['createdAt'],
      phoneNumber: mecanicoSnapshot['phoneNumber'],
      uid: mecanicoSnapshot['uid'],
    );
    _uid = _userModel.uid;
  }

  // 处理users集合的数据
  if (userSnapshot.exists) {
    // 根据你的需求解析users集合的字段,比如存入单独的模型或合并到现有模型
    // 示例:
    // _regularUser = RegularUser(
    //   name: userSnapshot['name'],
    //   phone: userSnapshot['phoneNumber'],
    //   // 其他对应字段...
    // );
  }
}

关键说明

  • Future.wait会同时触发多个异步请求,等所有请求完成后统一返回结果,比串行请求(先查一个再查另一个)节省时间。
  • 务必加上snapshot.exists判断,防止用户在某个集合中没有对应文档时出现空值错误。
  • 如果你的业务逻辑是用户只会属于其中一个集合(要么是技工,要么是普通用户),可以调整逻辑:先检查其中一个集合的文档是否存在,再决定是否获取另一个集合的数据,避免不必要的请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 03:57:17