import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import '../../../data/services/ble_manager.dart'; /// 设备检查服务 /// 负责检查设备状态,如电量检查等 class DeviceChecker { final BleManager _bleManager = Get.find(); /// 检查设备电量是否满足升级条件 /// 返回true表示电量充足,可以进行升级 /// 返回false表示电量不足,不能进行升级 bool checkBatteryLevel() { try { final deviceInfo = _bleManager.deviceInfo.value; if (deviceInfo == null) { _showBatteryCheckFailedSnackbar('无法获取设备信息,请检查设备连接'); return false; } final leftBattery = deviceInfo.leftEarBattery; final rightBattery = deviceInfo.rightEarBattery; // 检查左右耳电量是否都大于30% if (leftBattery <= 30 || rightBattery <= 30) { _showLowBatteryDialog(leftBattery, rightBattery); return false; } return true; } catch (e) { _showBatteryCheckFailedSnackbar('检查设备电量时发生错误:$e'); return false; } } /// 显示电量不足对话框 /// [leftBattery] 左耳电量 /// [rightBattery] 右耳电量 void _showLowBatteryDialog(int leftBattery, int rightBattery) { String message = '设备电量不足,无法进行固件升级\n'; message += '升级要求:左右耳电量均需大于30%\n'; message += '当前电量:左耳 ${leftBattery}%,右耳 ${rightBattery}%\n'; message += '请充电后再试'; Get.dialog( AlertDialog( title: Text( '电量不足', style: TextStyle( color: Colors.orange[700], fontWeight: FontWeight.w600, ), ), content: Text( message, style: TextStyle( color: Colors.orange[600], ), ), actions: [ TextButton( onPressed: () => Get.back(), style: TextButton.styleFrom( foregroundColor: Colors.orange[700], ), child: const Text('确定'), ), ], shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(12), side: BorderSide( color: Colors.orange.withValues(alpha: 0.3), width: 1, ), ), backgroundColor: Colors.orange[50], ), ); } /// 显示电量检查失败提示 /// [message] 错误信息 void _showBatteryCheckFailedSnackbar(String message) { Get.snackbar( '电量检查失败', message, snackPosition: SnackPosition.BOTTOM, backgroundColor: Colors.orange[600], colorText: Colors.white, icon: const Icon( Icons.warning_amber, color: Colors.white, ), ); } }