在Flutter wih Firestore中使用foreach方法后,为什么会得到null?

时间:2020-06-10 00:30:14

标签: flutter dart google-cloud-firestore async-await stream

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


我们有什么?

我有一个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. 在没有使用另一个Stream来获取患者子集合(getPatientCollection)的情况下,有没有更好的方法来获取子集合?

1 个答案:

答案 0 :(得分:1)

Stream.forEachStream的{​​{1}}等效项(返回List.forEach)。它用于对每个元素进行一些操作,而不是用于返回新的集合。如果要将void转换为Stream<T>,可以执行await stream.toList()