debounce<T> method

void debounce<T>(
  1. RxInterface<T> rx,
  2. void callback(
    1. T
    ), {
  3. Duration duration = const Duration(milliseconds: 400),
})
inherited

Calls callback after rx stops changing for duration. Useful for search-as-you-type, form validation, etc.

debounce(searchQuery, (q) => fetchResults(q),
  duration: const Duration(milliseconds: 500));

Implementation

void debounce<T>(
  RxInterface<T> rx,
  void Function(T) callback, {
  Duration duration = const Duration(milliseconds: 400),
}) {
  Timer? timer;
  _workers.add(rx.listen((val) {
    if (timer != null) {
      _timers.remove(timer);
      timer!.cancel();
    }
    timer = Timer(duration, () {
      _timers.remove(timer);
      callback(val);
    });
    _timers.add(timer!);
  }));
}