Timer every(interval, dynamic action())

Source

static Timer every(interval, action()) {
  Duration duration;

  if (interval is Duration) {
    duration = interval;
  } else if (interval is int) {
    duration = new Duration(milliseconds: interval);
  } else if (interval is Interval) {
    duration = interval.duration;
  } else {
    throw new Exception("Invalid Interval: ${interval}");
  }

  return new Timer.periodic(duration, (timer) async {
    await runZoned(action, zoneValues: {"dslink.scheduler.timer": timer});
  });
}