在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()
的回调绝对不会被调用。
答案 0 :(得分:2)
在Flutter gallery application example中,他们在dispose
类中使用覆盖State
:
@override
void dispose() {
_timeDilationTimer?.cancel();
super.dispose();
}
我不确定在Timer
内创建StatefulWidget
是正确的。您可能要参考图库示例(和other examples in the Flutter repository)。