等待未来的头等大事吗?

时间:2018-07-20 16:17:11

标签: dart

我正在设置一个流,并希望将第一个值作为Future返回。

我想这样做是因为需要第一个值来渲染某些组件,但此后它将继续更新组件。

如何用飞镖实现这一目标?

2 个答案:

答案 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');
})