throttle method

bool throttle(
  1. String tag,
  2. Duration duration,
  3. VoidCallback onExecute, {
  4. VoidCallback? onAfter,
})

Will execute onExecute immediately and ignore additional attempts to call throttle with the same tag happens for the given duration.

tag is any arbitrary String, and is used to identify this particular throttle operation in subsequent calls to throttle() or cancel().

duration is the amount of time subsequent attempts will be ignored.

Returns whether the operation was throttled

Implementation

bool throttle(
  String tag,
  Duration duration,
  VoidCallback onExecute, {
  VoidCallback? onAfter,
}) {
  var throttled = _throttleOperations.containsKey(tag);
  if (throttled) {
    return true;
  }

  _throttleOperations[tag] = _InnerOperation(
    timer: Timer(duration, () {
      _throttleOperations[tag]?.timer.cancel();
      _InnerOperation? removed = _throttleOperations.remove(tag);

      removed?.onAfter?.call();
    }),
    callback: onExecute,
    onAfter: onAfter,
  );

  onExecute();

  return false;
}