You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
2.8 KiB
99 lines
2.8 KiB
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<BleManager>();
|
|
|
|
/// 检查设备电量是否满足升级条件
|
|
/// 返回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,
|
|
),
|
|
);
|
|
}
|
|
}
|