如何在流中生成内部firebase侦听器

如何在流中生成内部firebase侦听器,firebase,firebase-realtime-database,angular-dart,Firebase,Firebase Realtime Database,Angular Dart,使用AngularDart和Firebase,下面的代码不起作用,因为yield位于匿名内部类中。我该怎么重写这个?我对Angular和Dart都是新手,找不到任何这样的例子 本质上,我试图在我的服务中侦听流中的项目,但我从firebase获取实际项目,需要将这些firebase项目传递回流 在职期间: Stream<Item> itemStream() async* { final ref = database().ref("items"); await ref.onChi

使用AngularDart和Firebase,下面的代码不起作用,因为
yield
位于匿名内部类中。我该怎么重写这个?我对Angular和Dart都是新手,找不到任何这样的例子

本质上,我试图在我的服务中侦听流中的项目,但我从firebase获取实际项目,需要将这些firebase项目传递回流

在职期间:

Stream<Item> itemStream() async* {
  final ref = database().ref("items");
  await ref.onChildAdded.listen((e) {
    DataSnapshot snapshot = e.snapshot;
    Map parsedMap = snapshot.val();
    String id = snapshot.key;
    String property1 = parsedMap['property1'];
    String property2 = parsedMap['property2'];
    print(property1);
    print(property2);
    yield new Item(id, property1, property2); // invalid; yield does not work here.
  });
  // yield works here but it's no use here.
}

更新:我通过不使用服务解决了这个问题。然而,我认为使用服务是更好的做法,所以我想这样做。

你可以做两件事

1) 使用
StreamController

2) (更好)

streamitemstream(){
最终参考=数据库().ref(“项目”);
返回参考OnChildaded.map((e){
DataSnapshot snapshot=e.snapshot;
Map parsedMap=snapshot.val();
字符串id=snapshot.key;
字符串property1=parsedMap['property1'];
字符串property2=parsedMap['property2'];
印刷品(不动产1);
印刷品(物业2);
返回新项目(id、属性1、属性2);
}

好吧,那就不要在上面使用async了?真不敢相信我没有试过。下次肯定会的。希望周末有时间用这个来构建一个小应用程序。
var stream = itemListService.itemStream();
await for (var item in stream) {
  print(item.id);
}