دریافت اطلاعات باتری تلفن همراه در فلاتر
در بسیاری از اپلیکیشنهای موبایل، دسترسی به اطلاعات باتری دستگاه اهمیت زیادی دارد. برای مثال ممکن است بخواهید:
- درصد شارژ باتری را نمایش دهید
- وضعیت شارژ شدن دستگاه را بررسی کنید
- مصرف انرژی برنامه را مدیریت کنید
- هنگام کم بودن شارژ هشدار بدهید
- ویژگیهای سنگین را هنگام Low Battery غیرفعال کنید
در فریمورک فلاتر میتوان با استفاده از پکیجهای مختلف، اطلاعات باتری را بهسادگی دریافت کرد.

پکیج Battery Plus
یکی از بهترین پکیجها برای دریافت اطلاعات باتری در Flutter، پکیج:
battery_plus
است.
این پکیج امکانات زیر را فراهم میکند:
- دریافت درصد باتری
- تشخیص وضعیت شارژ
- شنیدن تغییرات باتری بهصورت RealTime
- پشتیبانی از Android و iOS
صفحه رسمی پکیج:

نصب پکیج
فایل:
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
این قابلیت میتواند تجربه کاربری اپلیکیشن شما را حرفهایتر و هوشمندتر کند.