debounce<T> function

Worker debounce<T>(
  1. RxInterface<T> observable,
  2. WorkerCallback<T> callback, {
  3. Duration time = const Duration(milliseconds: 500),
})

Executes a callback after delay of no changes (debounce). Similar to interval but sends the last value after user stops changing it.

Sample:

final searchQuery = ''.obs;
Worker worker;

void onInit() {
  worker = debounce(searchQuery, (value) {
    print('search for: $value');
  }, time: Duration(milliseconds: 500));
}

Implementation

Worker debounce<T>(
  RxInterface<T> observable,
  WorkerCallback<T> callback, {
  Duration time = const Duration(milliseconds: 500),
}) {
  Timer? timer;

  void listener() {
    timer?.cancel();
    timer = Timer(time, () {
      callback(observable.value);
    });
  }

  observable.addListener(listener);

  return Worker(() {
    timer?.cancel();
    observable.removeListener(listener);
  });
}