Flutter 如果流未在持续时间内完成,Dart流是否可以发出值?

Flutter 如果流未在持续时间内完成,Dart流是否可以发出值?,flutter,dart,stream,rxdart,Flutter,Dart,Stream,Rxdart,我正在开发一个颤振应用程序,使用blocs来控制视图的状态。我想调用和外部API,如果它响应很快,通过yielding结果状态立即显示结果。但是,如果调用花费的时间超过(比如)5秒,我希望生成一个状态,指示响应在等待API返回时花费了一段时间。我如何使用Dart流(本机或RxDart)实现这一点?所有未来都会有一个延迟超时,例如,您可以使用它 try{ var timer = Timer(Duration(seconds: 3), () { yield SlowAPI(); })

我正在开发一个颤振应用程序,使用blocs来控制视图的状态。我想调用和外部API,如果它响应很快,通过
yield
ing结果状态立即显示结果。但是,如果调用花费的时间超过(比如)5秒,我希望生成一个状态,指示响应在等待API返回时花费了一段时间。我如何使用Dart流(本机或RxDart)实现这一点?

所有未来都会有一个延迟超时,例如,您可以使用它

try{
  var timer = Timer(Duration(seconds: 3), () {
    yield SlowAPI();
  });
  YourFeature.whenComplete((){
    timer.cancel();
  });

  yield Success();
}catch(e){
   yield Error();
}

这可以使用
Stream.timeout
实现。谢谢@pskink

Stream delayedCall()异步*{
产生“等待”;
最终apiCall=Future.delayed(持续时间(秒:5))。然后(())=>“Complete”);
收益率*Stream.fromFuture(apiCall).timeout(
持续时间(秒:3),
onTimeout:(eventSink)=>eventSink.add('仍在等待'),
);
}
void main(){
最终流=delayedCall();
流。听(打印);
}

检查
Stream.timeout
但我仍然希望在超时后继续尝试成功。因为这需要很长时间,我不想从头开始。我编辑了这个问题来澄清这一点。好的,我也要编辑答案,但这是一个奇怪的情况,所以你可以在计时器完成时创建一个计时器,它将产生缓慢的api状态,但是如果将来先到达,它将取消计时器,但第三行将产生回调函数,而不是外部函数。