setMainLoop method

void setMainLoop(
  1. FutureOr<void> loop()
)

Implementation

void setMainLoop(FutureOr<void> Function() loop) {
  late final void Function(JSAny) tick;

  void scheduleNext() => _requestAnimationFrame(tick.toJS);

  tick = (JSAny _) {
    if (_canceled) {
      _canceled = false;
      return;
    }

    final result = loop();

    if (result is Future<void>) {
      result.then((_) {
        if (!_canceled) {
          scheduleNext();
        } else {
          _canceled = false;
        }
      });
    } else {
      scheduleNext();
    }
  };

  scheduleNext();
}