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

问题描述 投票:1回答:1

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


我们有什么?

我有一个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()是另一种获取方法,它返回Stream<PatinetList>。我不会详细说明吸气剂。因为它工作正常。


怎么了?

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

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


我在问什么?

  1. 这是什么导致此问题?我该如何解决?
  2. 是否有更好的方法来获取子集合而无需使用另一个Stream来获取患者子集合(getPatientCollection?]]

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

flutter dart google-cloud-firestore async-await stream
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.