Во Flutter, в каких случаях вы используете timer.cancel() вместо timer = null?

#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 , срок действия которого еще не истек и который еще не вызвал переданный обратный вызов.