#timer #flutter
#таймер #flutter
Вопрос:
Я смотрю на код таймера флаттера и cancel()
метод. Когда я хочу удалить таймер, я могу использовать эти две строки:
timer.cancel();
timer = null;
или я могу просто сделать:
timer = null;
Но почему используются как cancel(), так и null? Почему бы не сделать то или другое?
В частности, я спрашиваю о переопределении состояния dispose()
, если я знаю, что виджет в любом случае должен быть удален, должен ли я делать оба или только один?
Другой случай: я вижу, что могу использовать if (timer == null) ...
, но если бы я просто отменил таймер и не устанавливал его в null, я мог бы также использовать if (timer.isActive)
.
Другой случай: я мог видеть, что если бы существовал timer.restart()
метод, имело бы смысл использовать cancel()
и повторно использовать таймер. Но поскольку в настоящее время этого нет, мне все равно всегда приходится создавать новый таймер.
Ответ №1:
С помощью cancel()
вы останавливаете таймер и предотвращаете вызов зарегистрированного обратного вызова (или больше не вызывается для periodic
таймеров).
Установка переменной, которая содержит ссылку на таймер, на null
может быть флагом, который будет использоваться в вашей собственной логике (например, если таймер не установлен ( == null
), установите новый
или это может быть просто удаление любых ссылок на Timer
экземпляр, чтобы его можно было собирать мусором (как с любым другим объектом).
Достаточно dispose()
всего cancel()
.
Другой случай: я вижу, что могу использовать if (timer == null) …, но если бы я просто отменил таймер и не устанавливал его в null, я мог бы в равной степени использовать if (timer.isActive).
Существует небольшая разница между Timer
еще не созданным или Timer
, срок действия которого еще не истек и который еще не вызвал переданный обратный вызов.