android - 离开页面时如何停止在 initState 中启动的 Timer.periodic

标签 android ios flutter dart

我在我的 initState 中运行 2 个计时器函数,代码如下:

  @override
  void initState() {
    readingSavedData();
    _timeString = _formatDateTime(DateTime.now());
    Timer.periodic(Duration(seconds: 1), (Timer t) => _getTime());
    Timer.periodic(Duration(seconds: 3), (Timer t) => gettingLocation());
    super.initState();

像这样 _getTime()函数正在运行setState()在显示计时器的文本小部件上每 1 秒。

当我使用 Navigator 离开页面时它永远不会停止的问题..它继续运行并在控制台中弹出此错误:
Unhandled Exception: setState() called after dispose()

因为它不能调用setSatate(){}在不再可见的小部件上。如何避免这种情况。

最佳答案

基于@pskink 的回答,我使用这种方法解决了它:

  Timer _clockTimer;
  Timer _locationTimer;
  @override
  void initState() {
    readingSavedData();
    _timeString = _formatDateTime(DateTime.now());
    _clockTimer = Timer.periodic(Duration(seconds: 1), (Timer t) => _getTime());
    _locationTimer = Timer.periodic(Duration(seconds: 3), (Timer t) => gettingLocation());
    super.initState();
  }

  @override
  void dispose() {
    _clockTimer.cancel();
    _locationTimer.cancel();
    super.dispose();
  }

关于android - 离开页面时如何停止在 initState 中启动的 Timer.periodic,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60170177/

相关文章:

ios - 由于错误 "Failed to use existing instance 0 for app with bundle identifier: com.apple.Carousel",Apple Watch 应用无法构建

ios - 我如何与 JSON 中的 NSObject 交互?

android - 如何防止抖动中的 Image.file() 滞后?

flutter - 在 ABI 的 NDK 工具链文件夹中找不到工具链,前缀为 : arm-linux-androideabi

android - TextView 中的 Espresso withText 与所选 View 不匹配

android - 实时过滤ListView

iphone - 如何从另一个 View 将特定于条件或过滤的数据源传递给 UITableview?

android - 如何获取OkHttp响应码304的数据?

android - 使用Titanium AudioPlayer使用RTSP媒体服务器播放音频(mp3文件)流

flutter - 将 GDPR 同意对话框添加到 Flutter 应用程序