ever<T> function
Worker
ever<T>(
- RxInterface<
T> observable, - WorkerCallback<
T> callback, { - dynamic condition,
- Duration? debounce,
Executes a callback every time the value of observable changes.
Sample:
final count = 0.obs;
Worker worker;
void onInit() {
worker = ever(count, (value) {
print('counter changed to: $value');
}, condition: () => count > 5);
}
Implementation
Worker ever<T>(
RxInterface<T> observable,
WorkerCallback<T> callback, {
dynamic condition,
Duration? debounce,
}) {
bool isProcessing = false;
void listener() {
if (!_checkCondition(condition)) return;
if (debounce != null) {
// Debounce logic
if (!isProcessing) {
isProcessing = true;
Timer(debounce, () {
callback(observable.value);
isProcessing = false;
});
}
} else {
if (!isProcessing) {
isProcessing = true;
try {
callback(observable.value);
} finally {
isProcessing = false;
}
}
}
}
observable.addListener(listener);
return Worker(() {
observable.removeListener(listener);
});
}