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