[英]How to cancel a running Timer() when Widget disappears
在StatefulWidget中,我实现了deactivate()
方法,该方法进行了一些清理。
实际上,StatefulWidget会定期轮询服务,并使用新接收的数据重新加载自身。 因此,它使用Timer()
,它定期调用服务器轮询回调。
调用deactivate()
就好了。 但是,在禁用小部件时,异步Timer()
仍会触发最后一个事件并调用回调-当小部件被部分禁用时。
这是我的deactivate():
@protected
@mustCallSuper
void deactivate() {
// allow callback of Timeer() to not execute
_timerCanceled = true;
// Cancel the periodic Timer()
_timer.cancel();
// Should be called LAST or FIRST?
super.deactivate();
}
问:一般问题:如何取消某些异步Timer()
并确保它不再调用提供的回调。
或:如何编写取消Timer()
代码并在完成取消操作后执行代码,以确保绝对不会调用Timer()
的回调。
在Flutter gallery应用程序示例中 ,他们在State
类中使用重写dispose
:
@override
void dispose() {
_timeDilationTimer?.cancel();
super.dispose();
}
我不确定在StatefulWidget
创建Timer
是否正确。 您可能要参考库示例(以及Flutter存储库中的其他示例 )。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.