throttleFuture<T> function

dynamic throttleFuture<T>(
  1. Future<T> fn(), {
  2. VoidCallback? onLocked,
  3. VoidCallback? onUnlocked,
  4. VoidCallback? onIgnored,
})

Implementation

throttleFuture<T>(
  Future<T> Function() fn, {
  VoidCallback? onLocked,
  VoidCallback? onUnlocked,
  VoidCallback? onIgnored,
}) async {
  if (_future != null) {
    onIgnored?.call();
    return;
  } else {
    onLocked?.call();
    _future = fn();

    _future!.whenComplete(() {
      _future = null;
      onUnlocked?.call();
    });
  }
}