Plugin
battery_plus
Use case
Currently, battery_plus only provides a Future for batteryLevel and a Stream for batteryState. To track level changes, developers are forced to use Timer.periodic to poll the getter, which is inefficient and not reactive.
Proposal
I would like to request a new stream: Stream onBatteryLevelChanged.
Platforms support this natively, so we should not need to rely on polling.
- iOS: We can observe
UIDevice.batteryLevelDidChangeNotification. Note: Apple documentation states this notification is sent no more frequently than once per minute, which is acceptable for most use cases.
- Android: We can register a
BroadcastReceiver for Intent.ACTION_BATTERY_CHANGED. This intent contains the EXTRA_LEVEL and EXTRA_SCALE to calculate the percentage immediately upon change.
- Web: The
BatteryManager has a built-in event listener: onlevelchange.
- macOS: The system provides a system loop notification:
kIOPSPowerSourceHaveToUpdateNotification
Something like:
// Current
Stream<BatteryState> get onBatteryStateChanged;
// Proposed
Stream<int> get onBatteryLevelChanged;
Additional Context
Plugin
battery_plus
Use case
Currently,
battery_plusonly provides a Future forbatteryLeveland a Stream forbatteryState. To track level changes, developers are forced to useTimer.periodicto poll the getter, which is inefficient and not reactive.Proposal
I would like to request a new stream: Stream onBatteryLevelChanged.
Platforms support this natively, so we should not need to rely on polling.
UIDevice.batteryLevelDidChangeNotification. Note: Apple documentation states this notification is sent no more frequently than once per minute, which is acceptable for most use cases.BroadcastReceiverforIntent.ACTION_BATTERY_CHANGED. This intent contains the EXTRA_LEVEL and EXTRA_SCALE to calculate the percentage immediately upon change.BatteryManagerhas a built-in event listener:onlevelchange.kIOPSPowerSourceHaveToUpdateNotificationSomething like:
Additional Context