diff --git a/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart b/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart index e77e12172..c15e187e8 100644 --- a/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart +++ b/lib/modules/translation/middleware/controllers/translation_middleware_controller.dart @@ -1,10 +1,14 @@ +// import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:get/get.dart'; import 'package:flutter/material.dart'; import '../../../../routes/app_routes.dart'; +import '../../../../data/services/ble_manager.dart'; /// 翻译中间层控制器 /// 负责管理翻译功能入口的导航和状态 class TranslationMiddlewareController extends GetxController { + final BleManager bleManager = Get.find(); //获取BLE管理器实例 + /// 翻译功能选项列表 final List translationOptions = [ TranslationOption( @@ -57,6 +61,15 @@ class TranslationMiddlewareController extends GetxController { /// 导航到指定的翻译功能 void navigateToTranslationFeature(TranslationOption option) { + // 不可用则提示用户连接设备 + if (!isOptionEnabled(option)) { + // 翻译键代表的中文文本内容 + Get.snackbar('connectDevice'.tr, + 'pleaseConnectDeepSoundDevice'.tr, // 连接设备 / 请连接 Voitrans 设备 + snackPosition: SnackPosition.TOP); + //EasyLoading.showInfo('connectDevice'.tr); + return; + } Get.toNamed(option.targetRoute, arguments: {'translationId': option.translationId}); } @@ -71,6 +84,16 @@ class TranslationMiddlewareController extends GetxController { // return option.description.tr; return ''; } + + /// 判断选项是否可用(音视频/通话依赖BLE连接) + bool isOptionEnabled(TranslationOption option) { + // 当 translationId 为 audioVideo 或 call 时,需要 BLE 已连接 + if (option.translationId == 'audioVideo' || + option.translationId == 'call') { + return bleManager.isConnected; + } + return true; + } } /// 翻译功能选项数据模型 diff --git a/lib/modules/translation/middleware/views/translation_middleware_view.dart b/lib/modules/translation/middleware/views/translation_middleware_view.dart index 5e727dcc0..45804d334 100644 --- a/lib/modules/translation/middleware/views/translation_middleware_view.dart +++ b/lib/modules/translation/middleware/views/translation_middleware_view.dart @@ -86,6 +86,7 @@ class TranslationMiddlewareView TranslationOption option, bool isDarkMode, ) { + final isEnabled = controller.isOptionEnabled(option); // 根据 BLE 连接态控制可用性 return GestureDetector( onTap: () => controller.navigateToTranslationFeature(option), child: Container( @@ -112,13 +113,15 @@ class TranslationMiddlewareView width: 60.w, height: 60.h, decoration: BoxDecoration( - color: Color(option.iconColor).withOpacity(0.1), + color: Color(option.iconColor) + .withOpacity(isEnabled ? 0.1 : 0.05), borderRadius: BorderRadius.circular(16.r), ), child: Icon( option.icon, size: 32.sp, - color: Color(option.iconColor), + color: Color(option.iconColor) + .withOpacity(isEnabled ? 1.0 : 0.5), ), ), SizedBox(height: 16.h), @@ -129,7 +132,8 @@ class TranslationMiddlewareView style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, - color: isDarkMode ? Colors.white : Colors.black87, + color: (isDarkMode ? Colors.white : Colors.black87) + .withOpacity(isEnabled ? 1.0 : 0.5), ), textAlign: TextAlign.center, maxLines: 2,