Skip to main content
The Battery service provides access to device battery information, including battery level, charging state, and battery save mode status.

Usage

Add the Battery service to your page overlay and use its methods to retrieve battery information:
import flet as ft

async def main(page: ft.Page):
    battery = ft.Battery()
    page.overlay.append(battery)
    
    # Get battery level
    level = await battery.get_battery_level()
    print(f"Battery level: {level}%")
    
    # Get battery state
    state = await battery.get_battery_state()
    print(f"Battery state: {state.value}")
    
    await page.update_async()

ft.app(main)

Methods

get_battery_level()

Gets the current battery level as a percentage.
await battery.get_battery_level() -> Optional[int]
Returns: The battery level in the range 0 to 100, or None when it is unavailable on the current environment. Example:
level = await battery.get_battery_level()
if level is not None:
    if level < 20:
        print(f"Low battery: {level}%")
    else:
        print(f"Battery level: {level}%")
else:
    print("Battery level unavailable")

get_battery_state()

Returns the current battery state.
await battery.get_battery_state() -> BatteryState
Returns: A BatteryState enum value indicating the current state. Example:
state = await battery.get_battery_state()

if state == ft.BatteryState.CHARGING:
    print("Battery is charging")
elif state == ft.BatteryState.FULL:
    print("Battery is full")
elif state == ft.BatteryState.DISCHARGING:
    print("Battery is discharging")

is_in_battery_save_mode()

Checks if the device is currently in battery save mode.
await battery.is_in_battery_save_mode() -> bool
Returns: True if the device is currently in battery save mode, otherwise False. Example:
if await battery.is_in_battery_save_mode():
    print("Device is in battery save mode")
    # Reduce app functionality to save power
else:
    print("Normal power mode")

Events

on_state_change

Called when the battery state changes (charging, discharging, full, etc.).
battery.on_state_change = handle_state_change
The event handler receives a BatteryStateChangeEvent with:
  • state (BatteryState): Current battery state
Example:
def handle_state_change(e: ft.BatteryStateChangeEvent):
    if e.state == ft.BatteryState.CHARGING:
        print("Device started charging")
    elif e.state == ft.BatteryState.DISCHARGING:
        print("Device unplugged")
    elif e.state == ft.BatteryState.FULL:
        print("Battery fully charged")

battery.on_state_change = handle_state_change

Enums

BatteryState

Enum representing the battery state:
  • CHARGING: The battery is currently charging
  • CONNECTED_NOT_CHARGING: The battery is connected to a power source but not charging
  • DISCHARGING: The battery is discharging
  • FULL: The battery is fully charged
  • UNKNOWN: The battery state is unknown

Complete Example

import flet as ft

async def main(page: ft.Page):
    page.title = "Battery Monitor"
    
    battery_level = ft.Text(size=30)
    battery_state = ft.Text(size=20)
    battery_save_mode = ft.Text()
    
    battery = ft.Battery()
    page.overlay.append(battery)
    
    async def update_battery_info():
        # Get battery level
        level = await battery.get_battery_level()
        if level is not None:
            battery_level.value = f"Battery: {level}%"
            
            # Change color based on level
            if level < 20:
                battery_level.color = ft.colors.RED
            elif level < 50:
                battery_level.color = ft.colors.ORANGE
            else:
                battery_level.color = ft.colors.GREEN
        else:
            battery_level.value = "Battery level unavailable"
        
        # Get battery state
        state = await battery.get_battery_state()
        battery_state.value = f"State: {state.value}"
        
        # Check battery save mode
        save_mode = await battery.is_in_battery_save_mode()
        battery_save_mode.value = f"Battery save mode: {'ON' if save_mode else 'OFF'}"
        
        await page.update_async()
    
    def on_state_change(e: ft.BatteryStateChangeEvent):
        battery_state.value = f"State: {e.state.value}"
        page.update()
    
    battery.on_state_change = on_state_change
    
    async def refresh_clicked(e):
        await update_battery_info()
    
    page.add(
        battery_level,
        battery_state,
        battery_save_mode,
        ft.ElevatedButton("Refresh", on_click=refresh_clicked),
    )
    
    # Initial update
    await update_battery_info()

ft.app(main)

Platform Availability

The Battery service is available on all mobile and desktop platforms:
PlatformSupport
Android
iOS
macOS
Windows
Linux
Web
Note: Battery information availability may vary depending on the device and platform capabilities.

Build docs developers (and LLMs) love