繁体   English   中英

小部件消失时如何取消正在运行的Timer()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM