[英]How to get firestore data as stream?
我正在进行一个集合组查询,在匹配特定字段时,我将向后移动一个级别,然后读取数据。
我能够在Future
方法中做到这一点。
这是我返回未来的代码:
@override
Future<Either<JobPostFailure, List<JobPost>>> readAppliedJobPosts({
required String seamanId,
}) async {
final querySnapshot = await FirebaseFirestore.instance
.collectionGroup(ConstStrings.applications)
.where(
ConstStrings.seamanId,
isEqualTo: seamanId,
)
.get();
final List<JobPost> mList = [];
for (var docSnap in querySnapshot.docs) {
final jobPostDocSnap = await docSnap.reference.parent.parent?.get();
mList.add(JobPostDto.fromFirestore(jobPostDocSnap!).toDomain());
}
return right(mList);
}
现在我在Stream
方法中努力做到这一点,我的返回类型是这样的: Stream<Either<JobPostFailure, List<JobPost>>>
。 我上面的代码在Stream
中的等价物是什么?
到目前为止我的尝试:
@override
Stream<Either<JobPostFailure, List<JobPost>>> watchAppliedJobPosts({
required String seamanId,
}) async* {
yield* _firestore
.collectionGroup(ConstStrings.applications)
.where(
ConstStrings.seamanId,
isEqualTo: seamanId,
)
.snapshots()
.map((event) {
return event.docs.map((e) {
return e.reference.parent.parent!.snapshots().map((event) {
return right(JobPostDto.fromFirestore(event).toDomain());
}).toList();
});
});
}
而且一团糟!
您可以使用方法snapshots
而不是get
。 Is 将创建一个新的 stream,它将为您的文档或集合所做的每一次更改获取数据
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.