如何在流中生成内部firebase侦听器
使用AngularDart和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
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);
}