Flutter StreamSubscription cancel()在无状态小组件中未取消

时间:2019-02-07 15:43:09

标签: dart flutter

我在无状态小部件中有此Streamsubscription

StreamSubscription < LocationResult > subscription = 
Geolocation.locationUpdates(
accuracy: LocationAccuracy.best,
displacementFilter: 30.0, // in meters
inBackground: true,)
.listen((result) {
if (result.isSuccessful) {         
saveResult(result);
} else {
}
});

我称它为计时器

startTimeout(mins) async {
await subscription.resume();
print("susbscription started");
return new Timer(Duration(minutes: mins), handleTimeout);
}
void handleTimeout() async{  // callback function
await subscription.cancel();
print("susbscription canceled");
}

在单击按钮时调用计时器:

startTimeout(1);

在一分钟后取消取消打印,但Geolocator继续被呼叫。

1 个答案:

答案 0 :(得分:0)

Future cancel ()

取消此订阅。

此呼叫后,订阅不再接收事件。

  

该流可能需要关闭事件源并清理   取消订阅后。

     

返回流完成后的将来   清理。

     

由于历史原因,如果未进行清理,则也可能返回null   必要。不建议返回null。

     

通常,在需要释放流时返回期货   资源。例如,流可能需要关闭打开的文件(例如   异步操作)。如果侦听器要删除文件   取消订阅后,它必须等待清理   将来完成。

     

返回的future以空值完成。如果清理失败了   它本来不应该的,返回的未来完成了   错误。