once<T> function
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);
});
}