pollingStream<T> function
Creates a Stream that polls a callback
at a specified interval
.
Implementation
Stream<T> pollingStream<T>(
Future<T> Function() callback,
Duration interval,
) {
final controller = StreamController<T>();
Future<void> $startPolling() async {
try {
while (!controller.isClosed) {
try {
final result = await callback();
controller.add(result);
} catch (e) {
controller.addError(e);
}
await Future.delayed(interval);
}
} catch (e) {
if (!controller.isClosed) {
controller.addError(e);
controller.close();
}
}
}
$startPolling();
return controller.stream;
}