如何在离开页面抖动时停止在 initState 内启动的 Timer.periodic

Ahm*_*gdi 4 android ios dart flutter

我在我的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();
Run Code Online (Sandbox Code Playgroud)

因为此函数在显示计时器的文本小部件上每 1 秒_getTime()运行一次。setState()

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

Unhandled Exception: setState() called after dispose()
Run Code Online (Sandbox Code Playgroud)

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

Ahm*_*gdi 6

根据@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();
  }
Run Code Online (Sandbox Code Playgroud)