Конструктор Timer.periodic
Создаёт новый повторяющийся таймер.
callback многократно вызывается с интервалами duration, пока таймер не будет отменён функцией cancel.
Точное время зависит от реализации таймера. За duration * n времени будет выполнено не более 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.19.6/dart-async/Timer/Timer.periodic.html