为啥我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值?
Posted
技术标签:
【中文标题】为啥我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值?【英文标题】:Why do i get null after using the foreach method in Flutter wih Firestore?为什么我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值? 【发布时间】:2020-09-29 07:17:29 【问题描述】:我试图同时获取用户文档及其子集合。但我发现在查询中这是不可能的。所以我决定从另一个角度来解决这个问题。
我们有什么?
我有一个getRelative()
getter,它返回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
变为空。这会导致问题。
我在问什么?
-
是什么导致了这个问题?我该如何解决?
有没有更好的方法来获取子集合,而无需使用另一个 Stream 来获取患者子集合 (
getPatientCollection
)?
【问题讨论】:
【参考方案1】:Stream.forEach
是 Stream
等效于 List.forEach
(返回 void
)。它是为了对每个元素做一些操作,而不是为了返回一个新的集合。如果您想将Stream<T>
转换为List<T>
,您可以使用await stream.toList()
。
【讨论】:
你刚刚救了我詹姆斯。我不知道我是怎么错过的。非常感谢!以上是关于为啥我在 Flutter 中使用 Firestore 中的 foreach 方法后得到空值?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我在flutter中更新http包后不能在http.post方法中放一个字符串
为啥我在 Flutter 测试期间使用 rootBundle.load 得到“对空值使用空检查运算符”?
为啥我在运行后在 Flutter 上收到“无法执行 aapt”错误?
为啥我在flutter_web中更新HtmlView时得到_state!= _PlatformViewState.disposed不是真正的异常?