我正在设置一个流,并希望将第一个值作为Future返回。
我想这样做是因为需要第一个值来渲染某些组件,但此后它将继续更新组件。
如何用飞镖实现这一目标?
答案 0 :(得分:2)
myStream.first
返回具有第一个值的Future
更新
根据下面的评论
var isFirst = true;
var completer = new Completer<Object>();
myStream.listen((event) {
if(isFirst) {
isFirst = false;
completer.complete(event);
}
setState(() => foo = event);
});
return completer.future;
答案 1 :(得分:0)
正确的方法是使用广播流,该广播流可以具有多个侦听器,并且可以多次关闭/打开。
StreamController controller = StreamController.broadcast();
controller.add(foo);
controller.listen((var e) {
print('new event $e');
});
controller.first.then((var e) {
print('first event $e');
})