newPoller<T extends Object> method
Creates a Stream that polls a callback
at a specified interval
.
Implementation
Stream<T> newPoller<T extends Object>(
FutureOr<T> Function() callback,
Duration interval,
) {
final controller = StreamController<T>();
Timer? timer;
void poll() {
if (controller.isClosed) return;
try {
consec(callback(), (value) {
if (!controller.isClosed) {
controller.add(value);
}
});
} catch (e, s) {
if (!controller.isClosed) {
controller.addError(e, s);
}
}
}
void startTimer() {
poll();
timer = Timer.periodic(interval, (_) => poll());
}
void stopTimer() {
timer?.cancel();
timer = null;
}
controller
..onListen = startTimer
..onPause = stopTimer
..onResume = startTimer
..onCancel = stopTimer;
return controller.stream;
}