繁体   English   中英

如何获取 stream 的 firestore 数据?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM