#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();