1

firestore用来订阅这样的流:

db.collection(collection).snapshots().listen((QuerySnapshot snapshot) {
  // something
});

listen返回一个StreamSubscription<QuerySnapshot>

现在我想写一个方法,订阅这个流,这样当我得到新结果时我可以做一些事情。但是同样的方法应该自己返回一个数据流。我试过这个:

static Stream<QuerySnapshot> listenOnCollection(String collection) async* {
    db.collection(collection).snapshots().listen((QuerySnapshot snapshot) {
      // do something and now forward incoming snapshot
      yield snapshot;
    });
  }

这将不起作用,因为yield在内部上下文中甚至都不知道。我怎样才能做到这一点?非常感谢!

4

2 回答 2

3

测试,工作

static Stream<QuerySnapshot> listenOnCollection(String collection) async* {
    var stream = db.collection(collection).snapshots();
    await for(final snapshot in stream){
        yield snapshot;
    }
}
于 2021-01-20T20:58:17.227 回答
0

您可以映射和转换流然后返回它:

static Stream<QuerySnapshot> listenOnCollection(String collection){
  return db.collection(collection).snapshots().map((QuerySnapshot snapshot) {
     // do something and now forward incoming snapshot
     return snapshot;
  });
}
于 2021-01-20T20:56:13.883 回答