我在无状态小部件中有此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继续被呼叫。
答案 0 :(得分:0)
Future cancel ()
取消此订阅。
此呼叫后,订阅不再接收事件。
该流可能需要关闭事件源并清理 取消订阅后。
返回流完成后的将来 清理。
由于历史原因,如果未进行清理,则也可能返回null 必要。不建议返回null。
通常,在需要释放流时返回期货 资源。例如,流可能需要关闭打开的文件(例如 异步操作)。如果侦听器要删除文件 取消订阅后,它必须等待清理 将来完成。
返回的future以空值完成。如果清理失败了 它本来不应该的,返回的未来完成了 错误。