Android 如何在离开页面抖动时停止在initState内启动的Timer.periodic
我在我的Android 如何在离开页面抖动时停止在initState内启动的Timer.periodic,android,ios,flutter,dart,Android,Ios,Flutter,Dart,我在我的initState函数中运行了两个计时器,下面是代码: @覆盖 void initState(){ 读取saveddata(); _timeString=_formatDateTime(DateTime.now()); Timer.periodic(持续时间(秒:1),(Timer t)=>\u getTime()); Timer.periodic(持续时间(秒:3),(Timer t)=>gettingLocation()); super.initState(); 由于此\u get
initState
函数中运行了两个计时器,下面是代码:
@覆盖
void initState(){
读取saveddata();
_timeString=_formatDateTime(DateTime.now());
Timer.periodic(持续时间(秒:1),(Timer t)=>\u getTime());
Timer.periodic(持续时间(秒:3),(Timer t)=>gettingLocation());
super.initState();
由于此\u getTime()
函数在显示计时器的文本小部件上每1秒运行一次setState()
当我使用Navigator
离开页面时,它从未停止。它一直在运行,并在控制台中弹出此错误:
Unhandled Exception: setState() called after dispose()
由于它无法在不再可见的小部件上调用
setstate(){}
。如何避免这种情况。基于@pskink answer,我使用以下方法解决了此问题:
Timer\u clockTimer;
定时器位置定时器;
@凌驾
void initState(){
读取saveddata();
_timeString=_formatDateTime(DateTime.now());
_clockTimer=Timer.periodic(持续时间(秒:1),(Timer t)=>\u getTime());
_locationTimer=Timer.periodic(持续时间(秒:3),(计时器t)=>gettingLocation());
super.initState();
}
@凌驾
无效处置(){
_clockTimer.cancel();
_locationTimer.cancel();
super.dispose();
}
通过调用cancel()
内的dispose()
?@pskink cancel在计时器上或在页面本身上,如果您能给我更多信息,我是一个新的flift用户。我的意思是cancel()
在您的计时器上