Timer.periodic 构造函数

Timer.periodic(
  1. Duration duration,
  2. void callback(
    1. Timer timer
    )
)

创建一个新的重复计时器。

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);
}