debounce function

Rule debounce([
  1. Duration duration = Duration.zero
])

debounce action dispatching in specified duration

Implementation

Rule debounce([Duration duration = Duration.zero]) {
  return (dispatcher, next) {
    for (final prevDispatcher in dispatcher.dispatching) {
      if (prevDispatcher.action.runtimeType == dispatcher.action.runtimeType) {
        prevDispatcher.cancel();
      }
    }
    dispatcher.on(cancel: Timer(duration, next).cancel);
  };
}