You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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:
// CurrentStream<BatteryState> get onBatteryStateChanged;
// ProposedStream<int> get onBatteryLevelChanged;
Activity
StanleyCocos commentedon Aug 7, 2026
@bdlukaa I recently built a plugin that might help you