flutter - 为什么我在 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
变为空。这会导致问题。
我在问什么?
- 是什么导致了这个问题?我该如何解决?
- 有没有更好的方法来获取子集合而不使用另一个流来获取患者子集合(
getPatientCollection
)?
解决方案
Stream.forEach
相当于Stream
(List.forEach
返回void
)。它是为了对每个元素做一些操作,而不是为了返回一个新的集合。如果你想将 a 转换Stream<T>
为 a List<T>
,你可以这样做await stream.toList()
。
推荐阅读
- java - 在 C++ 和 Java 中使用 Maps
- ios - 如何使用 SwiftUI 遍历字典数组?
- python - 使用 df.to_parquet 将数据帧作为 parquet 文件保存到 S3 时,是否还可以设置 AWS 元数据值?
- java - 如何使用 java 和 maven 下载、解压缩并将压缩文件中的专有 jar 添加到编译中
- python - 在 python 中进行密码学的最佳方法是什么?
- node.js - 如何为公会中的每个用户添加角色?(不和谐的js)
- wordpress - 如何在我的网站 (wordpress) 的标题菜单中为一个特定项目着色?
- python - 如何在 GCP 上部署超过 100 mb 的压缩文件?
- linux - 如何在 Bash 中检查文件是否具有带有正则表达式的扩展名(任何扩展名)?
- c# - 如何在 ASP.NET Core 3 MVC 中向非反应项目添加单个反应?