stream property

  1. @override
Stream<Datum>? stream
override

The stream of Datum objects for this StreamProbe. Must be implemented by sub-classes.

Implementation

@override
Stream<Datum>? get stream {
  Battery battery = Battery();
  late StreamController<Datum> controller;
  late StreamSubscription<BatteryState> subscription;

  void onData(BatteryState state) async {
    try {
      int level = await battery.batteryLevel;
      Datum datum = BatteryDatum.fromBatteryState(level, state);
      controller.add(datum);
    } catch (error) {
      controller.addError(error);
    }
  }

  controller = StreamController<Datum>(
      onListen: () => subscription.resume(),
      onPause: () => subscription.pause(),
      onResume: () => subscription.resume(),
      onCancel: () => subscription.cancel());

  subscription = battery.onBatteryStateChanged.listen(
    onData,
    onError: (Object error) => controller.addError(error),
    onDone: () => controller.close(),
  );

  return controller.stream;
}