pollingStream<T> function

Stream<T> pollingStream<T>(
  1. Future<T> callback(),
  2. Duration interval
)

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;
}