таймер не утилизируется, когда я покидаю страницу

#flutter #dart #timer #dispose

#трепетание #dart #таймер #утилизировать

Вопрос:

Я вызываю свой таймер initState каждые 10 секунд, но он не утилизируется, когда я покидаю страницу.

 _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 секунд.

Ответ №1:

Вы создаете два экземпляра 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();
  }
 

Ответ №2:

используйте deactevat:

     @override
       void deactivate() {
       _timer!.cancel();
       _timer = null;
       super.deactivate();