首页 > 解决方案 > 为什么我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值?

问题描述

我试图同时获取用户文档及其子集合。但我发现在查询中这是不可能的。所以我决定从另一个角度来处理这个问题。


我们有什么?

我有一个getRelative()吸气剂,它返回Stream<Relative>

  Stream<Relative> get getRelative async* {
    List<Patient> patientList;

    patientList = await getPatientCollection
        .forEach((element) => element.patients)
        .then((value) => value);

      yield* usersCollection
          .document(_userEmail)
          .snapshots()
          .map((snapshot) => _relativeDataFromSnapshot(snapshot, patientList));
    
  }

getPatientCollection()是另一个 getter 方法,它返回Stream<PatinetList>. 我不会给出吸气剂的细节。因为它工作正常。


问题是什么?

问题是当我得到时Stream<PatientList>,我得到一个Stream. 所以,只是为了将其转换为Future,我使用了forEach方法。它也可以正常工作。我可以看到element.patients不是空的。我可以看到它的内部及其应有的返回类型List<Patient>

但是当我调试它时,forEach()完成它的工作后,我意识到它返回 null。并patientList变为空。这会导致问题。


我在问什么?

  1. 是什么导致了这个问题?我该如何解决?
  2. 有没有更好的方法来获取子集合而不使用另一个流来获取患者子集合(getPatientCollection)?

标签: flutterdartgoogle-cloud-firestoreasync-awaitstream

解决方案


Stream.forEach相当于StreamList.forEach返回void)。它是为了对每个元素做一些操作,而不是为了返回一个新的集合。如果你想将 a 转换Stream<T>为 a List<T>,你可以这样做await stream.toList()


推荐阅读