问题描述
我每 10 秒在 initState 上调用我的计时器,但是当我离开页面时它不会处理。
_timer = Timer.periodic(Duration(seconds: 10),(Timer t) => _onRefresh());
_timer = Timer.periodic(
Duration(seconds: 10),(Timer t) => _onRefreshIniciados());
我试过这两个:
@override
void dispose() {
_timer?.cancel();
_timer.cancel();
super.dispose();
}
方法 dispose 被调用,但它仍然每 10 秒被调用一次。
解决方法
您正在实例化 Timer
的两个实例,但只对其中一个调用 cancel
。
_timer = Timer.periodic(Duration(seconds: 10),(Timer t) => _onRefresh());
// _timer references ^ this object
_timer = Timer.periodic(
Duration(seconds: 10),(Timer t) => _onRefreshIniciados());
// _timer now references ^ object
换句话说,在您第二次实例化之后,您的 _timer
变量只会“记住”第二个 Timer
实例。因此,当您调用 cancel()
时,您只是取消了第二个 Timer
,而第一个保持活动状态。
要解决此问题,请声明两个变量(_timer1
、_timer2
),然后取消每个变量:
_timer1 = Timer.periodic(Duration(seconds: 10),(Timer t) => _onRefresh());
_timer2 = Timer.periodic(
Duration(seconds: 10),(Timer t) => _onRefreshIniciados());
// ......
@override
void dispose() {
_timer1.cancel();
_timer2.cancel();
super.dispose();
}