safeEvery static method

Disposable safeEvery(
  1. dynamic interval,
  2. dynamic action()
)

Implementation

static Disposable safeEvery(dynamic interval, Function() action) {
  Duration duration;

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

  ExecutableFunction? schedule;
  Timer? timer;
  var disposed = false;
  schedule = () async {
    await action();
    if (!disposed) {
      Timer(duration, schedule!);
    }
  };

  timer = Timer(duration, schedule);

  return FunctionDisposable(() {
    if (timer != null) {
      timer.cancel();
    }
    disposed = true;
  });
}