Конструктор Timer.periodic
Создаёт новый повторяющийся таймер.
Функция callback вызывается повторно с duration интервалами до отмены с помощью функции cancel.
Точное время зависит от реализации базового таймера. Не более n обращений к функциям произойдёт за duration * n время, но время между двумя последовательными вызовами может быть как короче, так и длиннее duration.
В частности, реализация может запланировать следующий вызов, например, duration после окончания, начала или планирования предыдущего вызова – даже если фактический вызов был задержан.
duration должно быть ненулевым положительным значением Duration.
Пример:
var counter = 3;
Timer.periodic(const Duration(seconds: 2), (timer) {
print(timer.tick);
counter--;
if (counter == 0) {
print('Cancel timer');
timer.cancel();
}
});
// Outputs:
// 1
// 2
// 3
// "Cancel timer" Реализация
factory Timer.periodic(Duration duration, void callback(Timer timer)) {
if (Zone.current == Zone.root) {
// No need to bind the callback. We know that the root's timer will
// be invoked in the root zone.
return Zone.current.createPeriodicTimer(duration, callback);
}
var boundCallback = Zone.current.bindUnaryCallbackGuarded<Timer>(callback);
return Zone.current.createPeriodicTimer(duration, boundCallback);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.18.5/dart-async/Timer/Timer.periodic.html