debounce<T> function

Worker debounce<T>(
  1. RxInterface<T> listener,
  2. WorkerCallback<T> callback, {
  3. Duration? time,
  4. Function? onError,
  5. void onDone()?,
  6. bool? cancelOnError,
})

debounce is similar to interval, but sends the last value. Useful for Anti DDos, every time the user stops typing for 1 second, for instance. When listener emits the last "value", when time hits, it calls callback with the last "value" emitted.

Sample:

worker = debounce(
     count,
     (value) {
       print(value);
       if( value > 20 ) worker.dispose();
     },
     time: 1.seconds,
   );
 }

Implementation

Worker debounce<T>(
  RxInterface<T> listener,
  WorkerCallback<T> callback, {
  Duration? time,
  Function? onError,
  void Function()? onDone,
  bool? cancelOnError,
}) {
  final debouncerCallback =
      Debouncer(delay: time ?? const Duration(milliseconds: 800));
  StreamSubscription sub = listener.listen(
    (event) {
      debouncerCallback(() {
        callback(event);
      });
    },
    onError: onError,
    onDone: onDone,
    cancelOnError: cancelOnError,
  );
  return Worker(sub.cancel, '[debounce]');
}