From ee3a652102ff8e514f9242ae1c40326846998bb7 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Mon, 7 Jul 2025 16:06:24 +0800 Subject: [PATCH] =?UTF-8?q?feat(ota=5Fupgrade):=20=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E7=94=B5=E9=87=8F=E6=A3=80=E6=9F=A5=E9=80=BB=E8=BE=91=E9=98=B2?= =?UTF-8?q?=E6=AD=A2=E4=BD=8E=E7=94=B5=E9=87=8F=E5=8D=87=E7=BA=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 在固件升级前检查设备电量,当左右耳电量有低于30%时阻止升级并提示用户 移除视图中的电量显示区域,因检查逻辑已移至控制器 --- .../controllers/ota_upgrade_controller.dart | 60 +++++++++++++++++++ .../ota_upgrade/views/ota_upgrade_view.dart | 54 ++++++++--------- 2 files changed, 87 insertions(+), 27 deletions(-) diff --git a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart index e87191f33..f21bccf07 100644 --- a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart +++ b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart @@ -271,6 +271,12 @@ class OtaUpgradeController extends GetxController { Get.back(); Future.delayed(Duration(milliseconds: 300)); + + // 检查设备电量 + if (!_checkBatteryLevel()) { + return; // 电量不足,不执行升级 + } + startDownload(); }, child: Text('更新'), @@ -399,6 +405,60 @@ class OtaUpgradeController extends GetxController { // isUpgrade.value = false; } + // 检查设备电量是否满足升级条件 + bool _checkBatteryLevel() { + try { + final deviceInfo = _bleManager.deviceInfo.value; + + if (deviceInfo == null) { + Get.snackbar( + '电量检查失败', + '无法获取设备信息,请检查设备连接', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.orange, + colorText: Colors.white, + ); + return false; + } + + final leftBattery = deviceInfo.leftEarBattery; + final rightBattery = deviceInfo.rightEarBattery; + + // 检查左右耳电量是否都大于30% + if (leftBattery <= 30 || rightBattery <= 30) { + String message = '设备电量不足,无法进行固件升级\n'; + message += '升级要求:左右耳电量均需大于30%\n'; + message += '当前电量:左耳 ${leftBattery}%,右耳 ${rightBattery}%\n'; + message += '请充电后再试'; + + Get.dialog( + AlertDialog( + title: Text('电量不足'), + content: Text(message), + actions: [ + TextButton( + onPressed: () => Get.back(), + child: Text('确定'), + ), + ], + ), + ); + return false; + } + + return true; + } catch (e) { + Get.snackbar( + '电量检查失败', + '检查设备电量时发生错误:$e', + snackPosition: SnackPosition.BOTTOM, + backgroundColor: Colors.red, + colorText: Colors.white, + ); + return false; + } + } + void _listenToEvents() { Ota.instance.eventStream.listen((event) { if (event.event == 'onProgress' && diff --git a/lib/modules/ota_upgrade/views/ota_upgrade_view.dart b/lib/modules/ota_upgrade/views/ota_upgrade_view.dart index 8beb61aa1..49659084d 100644 --- a/lib/modules/ota_upgrade/views/ota_upgrade_view.dart +++ b/lib/modules/ota_upgrade/views/ota_upgrade_view.dart @@ -221,33 +221,33 @@ class OtaUpgradeView extends GetView { value: deviceInfo?.name ?? '未知设备', isDarkMode: isDarkMode, ), - SizedBox(height: 10.h), - // 电量信息区域 - Row( - children: [ - // 左耳电量 - Expanded( - child: _buildBatteryInfo( - label: '左耳电量', - batteryLevel: deviceInfo?.leftEarBattery ?? 0, - isCharging: deviceInfo?.leftEarCharging ?? false, - isDarkMode: isDarkMode, - icon: Icons.headset, - ), - ), - SizedBox(width: 10.w), - // 右耳电量 - Expanded( - child: _buildBatteryInfo( - label: '右耳电量', - batteryLevel: deviceInfo?.rightEarBattery ?? 0, - isCharging: deviceInfo?.rightEarCharging ?? false, - isDarkMode: isDarkMode, - icon: Icons.headset, - ), - ), - ], - ), + // SizedBox(height: 10.h), + // // 电量信息区域 + // Row( + // children: [ + // // 左耳电量 + // Expanded( + // child: _buildBatteryInfo( + // label: '左耳电量', + // batteryLevel: deviceInfo?.leftEarBattery ?? 0, + // isCharging: deviceInfo?.leftEarCharging ?? false, + // isDarkMode: isDarkMode, + // icon: Icons.headset, + // ), + // ), + // SizedBox(width: 10.w), + // // 右耳电量 + // Expanded( + // child: _buildBatteryInfo( + // label: '右耳电量', + // batteryLevel: deviceInfo?.rightEarBattery ?? 0, + // isCharging: deviceInfo?.rightEarCharging ?? false, + // isDarkMode: isDarkMode, + // icon: Icons.headset, + // ), + // ), + // ], + // ), ], ), );