Skip to content

[Request]: Stream for Battery Level Changes #3733

Open

Description

@bdlukaa

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

Activity

  1. StanleyCocos commented on Aug 7, 2026

    @StanleyCocos
    Contributor

    @bdlukaa I recently built a plugin that might help you

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions