Skip to content

[Request]: Stream for Battery Level Changes #3733

@bdlukaa

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

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