如何在流中产生内部 firebase 侦听器
How to yield inside firebase listener inside stream
使用 AngularDart 和 Firebase,下面的代码不起作用,因为 yield
位于匿名内部 class 中。我该如何重写这个?我是 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.
}
组件:
var stream = itemListService.itemStream();
await for (var item in stream) {
print(item.id);
}
更新: 我通过不使用服务解决了这个问题。但是我认为使用服务是更好的做法,所以这就是我想这样做的原因。
你可以做两件事。
1) 使用 StreamController
2)(更好)
Stream<Item> itemStream() {
final ref = database().ref("items");
return ref.onChildAdded.map((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);
return new Item(id, property1, property2);
}
使用 AngularDart 和 Firebase,下面的代码不起作用,因为 yield
位于匿名内部 class 中。我该如何重写这个?我是 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.
}
组件:
var stream = itemListService.itemStream();
await for (var item in stream) {
print(item.id);
}
更新: 我通过不使用服务解决了这个问题。但是我认为使用服务是更好的做法,所以这就是我想这样做的原因。
你可以做两件事。
1) 使用 StreamController
2)(更好)
Stream<Item> itemStream() {
final ref = database().ref("items");
return ref.onChildAdded.map((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);
return new Item(id, property1, property2);
}