Timer.periodic 构造函数
创建一个新的重复计时器。
callback
会以 duration
间隔重复调用,直到使用 cancel 函数取消。
确切的计时取决于底层计时器的实现。在任何 duration * n
时间内,不会超过 n
次回调,但是两次连续回调之间的时间可能比 duration
短或长。
特别是,一个实现可能会安排下一次回调,例如,在之前回调结束、开始或计划的时间后 duration
时间内 - 即使实际的回调被延迟。
负的 duration
被处理成与 Duration.zero 相同。
示例
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);
}