فلاتر

دریافت اطلاعات باتری تلفن همراه در فلاتر

دریافت اطلاعات باتری تلفن همراه در فلاتر

در بسیاری از اپلیکیشن‌های موبایل، دسترسی به اطلاعات باتری دستگاه اهمیت زیادی دارد. برای مثال ممکن است بخواهید:

  • درصد شارژ باتری را نمایش دهید
  • وضعیت شارژ شدن دستگاه را بررسی کنید
  • مصرف انرژی برنامه را مدیریت کنید
  • هنگام کم بودن شارژ هشدار بدهید
  • ویژگی‌های سنگین را هنگام Low Battery غیرفعال کنید

در فریمورک فلاتر می‌توان با استفاده از پکیج‌های مختلف، اطلاعات باتری را به‌سادگی دریافت کرد.

اطلاعات باطری دستگاه

پکیج Battery Plus

یکی از بهترین پکیج‌ها برای دریافت اطلاعات باتری در Flutter، پکیج:

battery_plus

است.

این پکیج امکانات زیر را فراهم می‌کند:

  • دریافت درصد باتری
  • تشخیص وضعیت شارژ
  • شنیدن تغییرات باتری به‌صورت RealTime
  • پشتیبانی از Android و iOS

صفحه رسمی پکیج:

battery_plus Package

پلتفرم های قابل پشتیبانی

نصب پکیج

فایل:

pubspec.yaml

را باز کرده و dependency زیر را اضافه کنید:

dependencies:
  battery_plus: ^6.0.2

سپس دستور زیر را اجرا کنید:

flutter pub get

Import کردن پکیج

import 'package:battery_plus/battery_plus.dart';

ساخت نمونه Battery

final battery = Battery();

دریافت درصد باتری

نمونه ساده

final batteryLevel = await battery.batteryLevel;

print(batteryLevel);

خروجی:

85

یعنی باتری دستگاه 85 درصد شارژ دارد.

دریافت وضعیت باتری

پکیج battery_plus امکان بررسی وضعیت باتری را نیز فراهم می‌کند.

مثال

final batteryState = await battery.batteryState;

print(batteryState);

حالت‌های مختلف BatteryState

BatteryState.charging
BatteryState.discharging
BatteryState.full
BatteryState.unknown

بررسی وضعیت شارژ

if (batteryState == BatteryState.charging) {

  print("Device is charging");
}

ساخت صفحه کامل نمایش باتری

import 'package:flutter/material.dart';
import 'package:battery_plus/battery_plus.dart';

class BatteryScreen extends StatefulWidget {

  const BatteryScreen({super.key});

  @override
  State<BatteryScreen> createState() =>
      _BatteryScreenState();
}

class _BatteryScreenState
    extends State<BatteryScreen> {

  final battery = Battery();

  int batteryLevel = 0;

  String batteryStatus = "";

  @override
  void initState() {
    super.initState();

    loadBatteryInfo();
  }

  Future<void> loadBatteryInfo() async {

    final level =
        await battery.batteryLevel;

    final state =
        await battery.batteryState;

    setState(() {

      batteryLevel = level;

      batteryStatus = state.name;
    });
  }

  @override
  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(
        title: const Text("Battery Info"),
      ),

      body: Center(

        child: Column(
          mainAxisAlignment:
              MainAxisAlignment.center,

          children: [

            Text(
              "Battery: $batteryLevel%",
              style: const TextStyle(
                fontSize: 28,
              ),
            ),

            const SizedBox(height: 20),

            Text(
              "Status: $batteryStatus",
              style: const TextStyle(
                fontSize: 22,
              ),
            ),
          ],
        ),
      ),
    );
  }
}

دریافت تغییرات باتری به‌صورت لحظه‌ای

یکی از قابلیت‌های مهم battery_plus، شنیدن تغییرات باتری به‌صورت RealTime است.

مثال

battery.onBatteryStateChanged.listen((state) {

  print(state);
});

نمایش وضعیت لحظه‌ای در UI

StreamBuilder<BatteryState>(

  stream: battery.onBatteryStateChanged,

  builder: (context, snapshot) {

    final state = snapshot.data;

    return Text(
      state.toString(),
    );
  },
)

دریافت درصد باتری به‌صورت دوره‌ای

گاهی لازم است درصد باتری دائماً بروزرسانی شود.

مثال

Timer.periodic(
  const Duration(seconds: 10),
  (timer) async {

    final level =
        await battery.batteryLevel;

    print(level);
  },
);

نمایش آیکون بر اساس شارژ باتری

IconData getBatteryIcon(int level) {

  if (level >= 80) {
    return Icons.battery_full;
  }

  if (level >= 30) {
    return Icons.battery_5_bar;
  }

  return Icons.battery_alert;
}

ساخت ویجت حرفه‌ای باتری

Widget batteryWidget() {

  return Column(

    children: [

      Icon(
        getBatteryIcon(batteryLevel),
        size: 80,
      ),

      Text(
        "$batteryLevel%",
      ),
    ],
  );
}

تشخیص Low Battery

if (batteryLevel < 15) {

  print("Low Battery");
}

کاربردهای واقعی اطلاعات باتری

استفاده از اطلاعات باتری در اپلیکیشن‌ها می‌تواند بسیار کاربردی باشد.

مثال‌ها

  • کاهش کیفیت ویدیو هنگام کم بودن باتری
  • توقف دانلودهای سنگین
  • غیرفعال کردن Animation
  • جلوگیری از اجرای Task های سنگین
  • هشدار به کاربر
  • فعال کردن Battery Saver Mode

تفاوت Android و iOS

پکیج battery_plus روی هر دو سیستم‌عامل Android و iOS کار می‌کند، اما ممکن است برخی اطلاعات در هر پلتفرم متفاوت باشد.

مثلاً:

  • برخی برندهای اندروید محدودیت دارند
  • در iOS بعضی API ها محدود هستند
  • وضعیت Full Charge ممکن است متفاوت گزارش شود

مدیریت مصرف باتری در Flutter

اگر برنامه شما دائماً اطلاعات باتری را بررسی می‌کند، بهتر است:

  • از Timer کوتاه استفاده نکنید
  • Stream ها را Dispose کنید
  • درخواست‌های غیرضروری ارسال نکنید
  • از Background Service زیاد استفاده نکنید

نمونه Dispose کردن Stream

StreamSubscription? subscription;

@override
void dispose() {

  subscription?.cancel();

  super.dispose();
}

استفاده در معماری MVVM

در پروژه‌های حرفه‌ای بهتر است منطق باتری را داخل:

  • Service
  • Repository
  • ViewModel

قرار دهید.

ساخت Battery Service

class BatteryService {

  final Battery battery = Battery();

  Future<int> getBatteryLevel() async {

    return await battery.batteryLevel;
  }
}

مزایای battery_plus

  • نصب ساده
  • سبک و سریع
  • پشتیبانی چند پلتفرمی
  • API ساده
  • مناسب پروژه‌های حرفه‌ای

محدودیت‌ها

  • دسترسی محدود در بعضی دستگاه‌ها
  • تفاوت رفتار در برندهای مختلف
  • محدودیت‌های سیستم‌عامل iOS
  • برخی قابلیت‌ها نیازمند Native Code هستند

جمع‌بندی

در این مقاله یاد گرفتیم چگونه در Flutter اطلاعات باتری تلفن همراه را دریافت کنیم.

همچنین با موارد زیر آشنا شدیم:

  • دریافت درصد باتری
  • تشخیص وضعیت شارژ
  • دریافت تغییرات لحظه‌ای
  • ساخت UI برای نمایش باتری
  • مدیریت مصرف انرژی
  • استفاده از battery_plus

این قابلیت می‌تواند تجربه کاربری اپلیکیشن شما را حرفه‌ای‌تر و هوشمندتر کند.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *