once<T> function

Worker once<T>(
  1. RxInterface<T> observable,
  2. WorkerCallback<T> callback, {
  3. dynamic condition,
})

Executes a callback the first time the value of observable changes.

Sample:

final count = 0.obs;
Worker worker;

void onInit() {
  worker = once(count, (value) {
    print('counter first changed to: $value');
  });
}

Implementation

Worker once<T>(
  RxInterface<T> observable,
  WorkerCallback<T> callback, {
  dynamic condition,
}) {
  bool hasExecuted = false;

  void listener() {
    if (hasExecuted) return;

    if (_checkCondition(condition)) {
      hasExecuted = true;
      callback(observable.value);
      // Remove listener after first execution
      observable.removeListener(listener);
    }
  }

  observable.addListener(listener);

  return Worker(() {
    observable.removeListener(listener);
  });
}