Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dart 我可以知道StreamSubscription何时取消吗?_Dart_Dart Async - Fatal编程技术网

Dart 我可以知道StreamSubscription何时取消吗?

Dart 我可以知道StreamSubscription何时取消吗?,dart,dart-async,Dart,Dart Async,对于StreamSubscription,是否有类似于onCancel的内容 例如: var subscription=someStream.listen((项)=>null); 订阅。取消();//这会触发任何事件吗? 我最终创建了一个_streamsubscriptionelegate,它可以委托所有方法,这样我可以在取消订阅时添加一些逻辑,但是,可能有一个更简单的解决方案。如果流来自流控制器,则控制器会收到取消的通知。监听器需要跟踪他们自己的订阅,因此,如果客户端代码的一部分需要知道另一

对于
StreamSubscription
,是否有类似于
onCancel
的内容

例如:

var subscription=someStream.listen((项)=>null);
订阅。取消();//这会触发任何事件吗?

我最终创建了一个_streamsubscriptionelegate,它可以委托所有方法,这样我可以在取消订阅时添加一些逻辑,但是,可能有一个更简单的解决方案。

如果流来自
流控制器
,则控制器会收到
取消
的通知。监听器需要跟踪他们自己的订阅,因此,如果客户端代码的一部分需要知道另一部分已取消流,那么将订阅包装在记录您已取消订阅的内容中是一种非常好的方法

另一种方法是在监听流之前对其进行包装:

Stream onCancel(流源,void onCancel())异步*{
bool isCancelled=true;
试一试{
等待(源中的var事件){
yield事件;//如果取消,则退出。
}
isCancelled=假;
}最后{
如果(已取消)onCancel();
}
}

Stream onCancel(流源,void onCancel()){
var sink=StreamController();
sink.onListen=(){
var subscription=source.listen(sink.add,onError:sink.onError,onDone:sink.close);
下沉
…onPause=subscription.pause
..onResume=subscription.resume
…onCancel=(){
订阅。取消();
onCancel();
};
};   
返回sink.stream;
}