From e34fb52d664910b5e070261a206eab4e1bb95ca3 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Thu, 18 Sep 2025 18:52:57 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(ota):=20=E4=BF=AE=E5=A4=8D=E8=AE=BE?= =?UTF-8?q?=E5=A4=87=E5=90=8D=E7=A7=B0=E8=8E=B7=E5=8F=96=E5=92=8C=E4=BA=A7?= =?UTF-8?q?=E5=93=81=E4=BF=A1=E6=81=AF=E6=9F=A5=E8=AF=A2=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加蓝牙管理器引用以获取设备名称 - 实现动态获取设备名称的方法 - 修改产品信息查询逻辑以使用实际设备名称 - 添加默认设备图片显示逻辑 - 修复存储中设备图片键名错误 - 移除会议控制器中音频类型限制注释 --- .../controllers/meeting_home_controller.dart | 2 +- .../controllers/ota_core_contropller.dart | 52 +++++++++++++++++-- .../controllers/ota_upgrade_controller.dart | 2 +- .../ota_upgrade/views/ota_upgrade_view.dart | 10 ++++ 4 files changed, 60 insertions(+), 6 deletions(-) diff --git a/lib/modules/meeting/controllers/meeting_home_controller.dart b/lib/modules/meeting/controllers/meeting_home_controller.dart index 96388f369..522661d6f 100644 --- a/lib/modules/meeting/controllers/meeting_home_controller.dart +++ b/lib/modules/meeting/controllers/meeting_home_controller.dart @@ -341,7 +341,7 @@ class MeetingHomeController extends GetxController { } else { FilePickerResult? result = await FilePicker.platform.pickFiles( withData: false, - type: FileType.audio, + //type: FileType.audio, allowMultiple: false, ); if (result != null) { diff --git a/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart b/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart index be75315b0..bef30cae9 100644 --- a/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart +++ b/lib/modules/ota_upgrade/controllers/ota_core_contropller.dart @@ -2,6 +2,7 @@ import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:logger/web.dart'; import '../../../data/services/ble_manager.dart'; +import '../../../data/services/bluetooth_manager.dart'; // 添加蓝牙管理器导入 import '../../../data/models/appconfig.dart'; import '../../../data/models/appconfig_model.dart'; @@ -9,6 +10,8 @@ import '../../../data/models/appconfig_model.dart'; /// 整合设备检查、版本管理和状态管理功能 class OtaCoreService { final BleManager _bleManager = Get.find(); + final BluetoothManager _bluetoothManager = + Get.find(); // 添加蓝牙管理器引用 final int maxRetryAttempts = 3; int currentRetryCount = 0; @@ -261,6 +264,35 @@ class OtaCoreService { // ==================== 版本管理功能 ==================== + /// 动态获取当前连接的设备名称 + /// 参考home_controller中的getDeviceName方法实现 + String getDeviceName() { + try { + // 优先从经典蓝牙获取设备名称 + final currentDevice = _bluetoothManager.currentDevice; + if (currentDevice?.name != null && currentDevice!.name.isNotEmpty) { + return currentDevice.name; + } + + // 其次从BLE设备信息获取 + final deviceInfo = _bleManager.deviceInfo.value; + if (deviceInfo?.name != null && deviceInfo!.name.isNotEmpty) { + return deviceInfo.name; + } + + // 最后从BLE管理器的最后连接设备名称获取 + // if (_bleManager.currentDeviceName.isNotEmpty) { + // return _bleManager.currentDeviceName; + // } + + // 如果都获取不到,返回默认值 + return "unknownEquipment"; + } catch (e) { + Logger().e("获取设备名称失败: $e"); + return "unknownEquipment"; + } + } + /// 获取当前设备版本信息 /// 返回包含当前版本、产品ID和设备信息的Map /// 抛出异常如果获取失败 @@ -288,10 +320,16 @@ class OtaCoreService { throw "获取设备信息失败,请检查连接"; } + String deviceName = getDeviceName(); + // 获取产品信息以确定设备类型 - DBProduct? product = AppConfig.getproduct("DeapSound"); + DBProduct? product = AppConfig.getproduct(deviceName); if (product == null) { - throw "无法获取产品信息"; + // 如果根据设备名称找不到产品,尝试使用默认产品名称 + product = AppConfig.getproduct("DeapSound"); + if (product == null) { + throw "无法获取产品信息,设备名称: $deviceName"; + } } // 根据设备类型进行不同的版本校验 @@ -342,10 +380,16 @@ class OtaCoreService { /// 返回包含最新版本、更新描述和更新包地址的Map /// 抛出异常如果获取失败 Future> getLatestVersionInfo() async { - DBProduct? product = AppConfig.getproduct("DeapSound"); + // 动态获取当前连接的设备名称 + String deviceName = getDeviceName(); + DBProduct? product = AppConfig.getproduct(deviceName); if (product == null) { - throw "无法获取产品信息"; + // 如果根据设备名称找不到产品,尝试使用默认产品名称 + product = AppConfig.getproduct("DeapSound"); + if (product == null) { + throw "无法获取产品信息,设备名称: $deviceName"; + } } return { diff --git a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart index 4a4e9e896..dae6049dd 100644 --- a/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart +++ b/lib/modules/ota_upgrade/controllers/ota_upgrade_controller.dart @@ -60,7 +60,7 @@ class OtaUpgradeController extends GetxController { /// 从本地存储加载上一次连接设备的图片链接 void _loadLastConnectedDeviceImage() { - _lastConnectedDeviceImage = _storage.read('last_connected_device_name'); + _lastConnectedDeviceImage = _storage.read('last_connected_device_image'); Logger.d( 'OtaUpgradeController', '加载上一次连接设备的图片: $_lastConnectedDeviceImage'); } diff --git a/lib/modules/ota_upgrade/views/ota_upgrade_view.dart b/lib/modules/ota_upgrade/views/ota_upgrade_view.dart index 10f7180b8..0597a37b5 100644 --- a/lib/modules/ota_upgrade/views/ota_upgrade_view.dart +++ b/lib/modules/ota_upgrade/views/ota_upgrade_view.dart @@ -189,6 +189,16 @@ class OtaUpgradeView extends GetView { builder: (controller) { final imagePath = controller.lastConnectedDeviceImage; + if (imagePath == null || imagePath.isEmpty) { + return Image.asset( + isDarkMode + ? 'assets/images/headphone_new3.png' + : 'assets/images/headphone_new4.png', + height: 100.h, + fit: BoxFit.contain, + ); + } + // 网络图片 return Image.network( imagePath, From a21a20e6d0fd8dc3aca45645d08d5b2196b3a493 Mon Sep 17 00:00:00 2001 From: lxm <1274844347@qq.com> Date: Fri, 19 Sep 2025 10:54:24 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix(pairing):=20=E4=BF=AE=E5=A4=8D=E4=BB=8E?= =?UTF-8?q?home=E9=A1=B5=E8=BF=94=E5=9B=9E=E6=97=B6=E7=9A=84=E8=B7=AF?= =?UTF-8?q?=E7=94=B1=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit refactor(home): 优化电池信息显示逻辑,移除不必要的.value访问 修复电池信息更新逻辑,移除条件判断直接更新值 启用调试日志帮助排查电池信息问题 --- .../home/controllers/home_controller.dart | 53 +++++++++---------- lib/modules/home/views/home_view.dart | 45 +++++++++------- .../controllers/pairing_controller.dart | 10 +++- 3 files changed, 58 insertions(+), 50 deletions(-) diff --git a/lib/modules/home/controllers/home_controller.dart b/lib/modules/home/controllers/home_controller.dart index c5cb174cb..a7b702576 100644 --- a/lib/modules/home/controllers/home_controller.dart +++ b/lib/modules/home/controllers/home_controller.dart @@ -42,51 +42,48 @@ class HomeController extends GetxController { BluetoothDevice? get currentDevice => _bluetoothManager.currentDevice; Rx get deviceInfo => _bleManager.deviceInfo; - static final leftEarBattery = 0.obs; - static final rightEarBattery = 0.obs; + static final RxInt leftEarBattery = 0.obs; + static final RxInt rightEarBattery = 0.obs; final caseBattery = 0.obs; final leftEarCharging = false.obs; final rightEarCharging = false.obs; final caseCharging = false.obs; final firmwareVersion = ''.obs; + void updateDeviceInfo(DeviceInfo? newDeviceInfo) { Logger.d(_tag, 'lxm--updateDeviceInfo被调用'); Logger.d(_tag, 'lxm--接收到的DeviceInfo: $newDeviceInfo'); if (newDeviceInfo != null) { - // Logger.d(_tag, 'lxm--原始数据 - 左耳电量: ${newDeviceInfo.leftEarBattery}'); - // Logger.d(_tag, 'lxm--原始数据 - 右耳电量: ${newDeviceInfo.rightEarBattery}'); - // Logger.d(_tag, 'lxm--原始数据 - 充电仓电量: ${newDeviceInfo.caseBattery}'); - // Logger.d(_tag, 'lxm--原始数据 - 左耳充电: ${newDeviceInfo.leftEarCharging}'); - // Logger.d(_tag, 'lxm--原始数据 - 右耳充电: ${newDeviceInfo.rightEarCharging}'); - // Logger.d(_tag, 'lxm--原始数据 - 充电仓充电: ${newDeviceInfo.caseCharging}'); - // Logger.d(_tag, 'lxm--原始数据 - 固件版本: ${newDeviceInfo.firmwareVersion}'); + Logger.d(_tag, 'lxm--原始数据 - 左耳电量: ${newDeviceInfo.leftEarBattery}'); + Logger.d(_tag, 'lxm--原始数据 - 右耳电量: ${newDeviceInfo.rightEarBattery}'); + Logger.d(_tag, 'lxm--原始数据 - 充电仓电量: ${newDeviceInfo.caseBattery}'); + Logger.d(_tag, 'lxm--原始数据 - 左耳充电: ${newDeviceInfo.leftEarCharging}'); + Logger.d(_tag, 'lxm--原始数据 - 右耳充电: ${newDeviceInfo.rightEarCharging}'); + Logger.d(_tag, 'lxm--原始数据 - 充电仓充电: ${newDeviceInfo.caseCharging}'); + Logger.d(_tag, 'lxm--原始数据 - 固件版本: ${newDeviceInfo.firmwareVersion}'); } else { Logger.d(_tag, 'lxm--接收到的DeviceInfo为null'); } // 只有当新数据不为0时才更新电池值,否则保持原值 - if ((newDeviceInfo?.leftEarBattery ?? 0) != 0) { - Logger.d(_tag, 'lxm--更新左耳电量: ${newDeviceInfo!.leftEarBattery}'); - leftEarBattery.value = newDeviceInfo.leftEarBattery; - } - if ((newDeviceInfo?.rightEarBattery ?? 0) != 0) { - Logger.d(_tag, 'lxm--更新右耳电量: ${newDeviceInfo!.rightEarBattery}'); - rightEarBattery.value = newDeviceInfo.rightEarBattery; - } + leftEarBattery.value = newDeviceInfo?.leftEarBattery ?? 0; + rightEarBattery.value = newDeviceInfo?.rightEarBattery ?? 0; caseBattery.value = newDeviceInfo?.caseBattery ?? 0; leftEarCharging.value = newDeviceInfo?.leftEarCharging ?? false; rightEarCharging.value = newDeviceInfo?.rightEarCharging ?? false; caseCharging.value = newDeviceInfo?.caseCharging ?? false; firmwareVersion.value = newDeviceInfo?.firmwareVersion ?? ''; - // Logger.d(_tag, 'lxm--更新后的值 - 左耳电量: ${leftEarBattery.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 右耳电量: ${rightEarBattery.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 充电仓电量: ${caseBattery.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 左耳充电: ${leftEarCharging.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 右耳充电: ${rightEarCharging.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 充电仓充电: ${caseCharging.value}'); - // Logger.d(_tag, 'lxm--更新后的值 - 固件版本: ${firmwareVersion.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 左耳电量: ${leftEarBattery.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 右耳电量: ${rightEarBattery.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 充电仓电量: ${caseBattery.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 左耳充电: ${leftEarCharging.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 右耳充电: ${rightEarCharging.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 充电仓充电: ${caseCharging.value}'); + Logger.d(_tag, 'lxm--更新后的值 - 固件版本: ${firmwareVersion.value}'); + // rightEarCharging.refresh(); + //update(); } Worker? _deviceInfoWorker; @@ -131,7 +128,7 @@ class HomeController extends GetxController { } else { Logger.d(_tag, 'lxm--DeviceInfo为null,跳过更新'); } - update(); + //update(); }); _classicBluetoothWorker = @@ -213,7 +210,7 @@ class HomeController extends GetxController { if (_isFullyConnected.value != isNowConnected) { _isFullyConnected.value = isNowConnected; _isFullyConnected.refresh(); - update(); + //update(); if (!wasConnected && isNowConnected) { // 连接成功后等待1秒再获取设备信息 @@ -233,7 +230,7 @@ class HomeController extends GetxController { // 移除了根据连接状态控制定时器的逻辑 } - update(); + //update(); } catch (e) { Logger.e(_tag, '${'checkConnectionStatusFailed'.tr}: $e'); if (_isFullyConnected.value) { @@ -241,7 +238,7 @@ class HomeController extends GetxController { _isFullyConnected.refresh(); // 移除了发生错误时停止定时器的逻辑 // 注意:不再重置OTA检查状态,因为现在由全局服务管理 - update(); + //update(); } } } diff --git a/lib/modules/home/views/home_view.dart b/lib/modules/home/views/home_view.dart index 51cdbb387..e656f0b0c 100644 --- a/lib/modules/home/views/home_view.dart +++ b/lib/modules/home/views/home_view.dart @@ -500,17 +500,22 @@ class HomeView extends GetView { Widget _buildBatteryInfoGrid(bool isDarkMode) { return Obx(() { // 获取各部分电池电量 - final leftBattery = HomeController.leftEarBattery; - final rightBattery = HomeController.rightEarBattery; - final caseBattery = controller.caseBattery; + final leftBattery = HomeController.leftEarBattery.value; + final rightBattery = HomeController.rightEarBattery.value; + final caseBattery = controller.caseBattery.value; + // 获取充电状态 - final leftEarCharging = controller.leftEarCharging; - final rightEarCharging = controller.rightEarCharging; - final caseCharging = controller.caseCharging; + final leftEarCharging = controller.leftEarCharging.value; + final rightEarCharging = controller.rightEarCharging.value; + final caseCharging = controller.caseCharging.value; + final isConnected = controller.isFullyConnectedRx.value; + + print( + 'lxm--电池信息UI - 左耳电量: $leftBattery, 右耳电量: $rightBattery, 充电仓电量: $caseBattery, ' + '充电(L/R/C): $leftEarCharging/$rightEarCharging/$caseCharging, 已连接: $isConnected'); // 判断是否显示充电盒:充电盒电量大于0且设备已连接 - final shouldShowCase = - caseBattery.value > 0 && controller.isFullyConnectedRx.value; + final shouldShowCase = caseBattery > 0 && isConnected; // 判断是否为单端耳机 final isSingleHeadset = controller.isSingleHeadset(); @@ -529,12 +534,12 @@ class HomeView extends GetView { if (isSingleHeadset) ...[ _buildCompactBatteryItem( label: 'deviceTypeBleBluetoothHeadset'.tr, - batteryLevel: (leftBattery.value > 0 || rightBattery.value == 0) - ? leftBattery.value - : rightBattery.value, - isCharging: (leftBattery.value > 0 || rightBattery.value == 0) - ? leftEarCharging.value - : rightEarCharging.value, + batteryLevel: (leftBattery > 0 || rightBattery == 0) + ? leftBattery + : rightBattery, + isCharging: (leftBattery > 0 || rightBattery == 0) + ? leftEarCharging + : rightEarCharging, isDarkMode: isDarkMode, ), ] else ...[ @@ -542,8 +547,8 @@ class HomeView extends GetView { // 左耳机 _buildCompactBatteryItem( label: 'left'.tr, // 左 - batteryLevel: leftBattery.value, - isCharging: leftEarCharging.value, + batteryLevel: leftBattery, + isCharging: leftEarCharging, isDarkMode: isDarkMode, ), @@ -557,8 +562,8 @@ class HomeView extends GetView { // 右耳机 _buildCompactBatteryItem( label: 'right'.tr, // 右 - batteryLevel: rightBattery.value, - isCharging: rightEarCharging.value, + batteryLevel: rightBattery, + isCharging: rightEarCharging, isDarkMode: isDarkMode, ), ], @@ -575,8 +580,8 @@ class HomeView extends GetView { // 充电盒 _buildCompactBatteryItem( label: 'chargingCase'.tr, - batteryLevel: caseBattery.value, - isCharging: caseCharging.value, + batteryLevel: caseBattery, + isCharging: caseCharging, isDarkMode: isDarkMode, ), ] diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index 2015dac07..b3ff77b52 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -1043,8 +1043,14 @@ class PairingController extends GetxController with WidgetsBindingObserver { } catch (e) { Logger.e(_tag, '启动AgentService失败: $e'); } - - Get.offAllNamed(Routes.home); + //print('lxm-上一个路由: ${Get.previousRoute.toString()}'); + if (Get.previousRoute == Routes.home) { + // 如果是从home页过来的,则直接返回 + Get.back(); + } else { + // 否则,跳转到home页并清空之前的路由栈 + Get.offAllNamed(Routes.home); + } }); }