-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Open
Labels
Description
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
BroadcastReceiverforIntent.ACTION_BATTERY_CHANGED. This intent contains the EXTRA_LEVEL and EXTRA_SCALE to calculate the percentage immediately upon change. - Web: The
BatteryManagerhas 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
- This issue streamlines the battery level, but a stream to listen to all battery aspects would the preferrable solution. See [Request]: Support tracking all battery aspects #3446