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
相关产品推荐
相关产品推荐

