Browse Source

feat(translation): 根据BLE连接状态控制翻译选项可用性

添加选项可用性检查逻辑,没有ble设备连接的时候,通话翻译和音视频翻译不可用
weicu
lxm 12 months ago
parent
commit
44e4bc4d3b
  1. 23
      lib/modules/translation/middleware/controllers/translation_middleware_controller.dart
  2. 10
      lib/modules/translation/middleware/views/translation_middleware_view.dart

23
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:get/get.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../../routes/app_routes.dart'; import '../../../../routes/app_routes.dart';
import '../../../../data/services/ble_manager.dart';
/// 翻译中间层控制器 /// 翻译中间层控制器
/// 负责管理翻译功能入口的导航和状态 /// 负责管理翻译功能入口的导航和状态
class TranslationMiddlewareController extends GetxController { class TranslationMiddlewareController extends GetxController {
final BleManager bleManager = Get.find<BleManager>(); //获取BLE管理器实例
/// 翻译功能选项列表 /// 翻译功能选项列表
final List<TranslationOption> translationOptions = [ final List<TranslationOption> translationOptions = [
TranslationOption( TranslationOption(
@ -57,6 +61,15 @@ class TranslationMiddlewareController extends GetxController {
/// 导航到指定的翻译功能 /// 导航到指定的翻译功能
void navigateToTranslationFeature(TranslationOption option) { 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, Get.toNamed(option.targetRoute,
arguments: {'translationId': option.translationId}); arguments: {'translationId': option.translationId});
} }
@ -71,6 +84,16 @@ class TranslationMiddlewareController extends GetxController {
// return option.description.tr; // return option.description.tr;
return ''; return '';
} }
/// 判断选项是否可用(音视频/通话依赖BLE连接)
bool isOptionEnabled(TranslationOption option) {
// 当 translationId 为 audioVideo 或 call 时,需要 BLE 已连接
if (option.translationId == 'audioVideo' ||
option.translationId == 'call') {
return bleManager.isConnected;
}
return true;
}
} }
/// 翻译功能选项数据模型 /// 翻译功能选项数据模型

10
lib/modules/translation/middleware/views/translation_middleware_view.dart

@ -86,6 +86,7 @@ class TranslationMiddlewareView
TranslationOption option, TranslationOption option,
bool isDarkMode, bool isDarkMode,
) { ) {
final isEnabled = controller.isOptionEnabled(option); // 根据 BLE 连接态控制可用性
return GestureDetector( return GestureDetector(
onTap: () => controller.navigateToTranslationFeature(option), onTap: () => controller.navigateToTranslationFeature(option),
child: Container( child: Container(
@ -112,13 +113,15 @@ class TranslationMiddlewareView
width: 60.w, width: 60.w,
height: 60.h, height: 60.h,
decoration: BoxDecoration( decoration: BoxDecoration(
color: Color(option.iconColor).withOpacity(0.1), color: Color(option.iconColor)
.withOpacity(isEnabled ? 0.1 : 0.05),
borderRadius: BorderRadius.circular(16.r), borderRadius: BorderRadius.circular(16.r),
), ),
child: Icon( child: Icon(
option.icon, option.icon,
size: 32.sp, size: 32.sp,
color: Color(option.iconColor), color: Color(option.iconColor)
.withOpacity(isEnabled ? 1.0 : 0.5),
), ),
), ),
SizedBox(height: 16.h), SizedBox(height: 16.h),
@ -129,7 +132,8 @@ class TranslationMiddlewareView
style: TextStyle( style: TextStyle(
fontSize: 16.sp, fontSize: 16.sp,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
color: isDarkMode ? Colors.white : Colors.black87, color: (isDarkMode ? Colors.white : Colors.black87)
.withOpacity(isEnabled ? 1.0 : 0.5),
), ),
textAlign: TextAlign.center, textAlign: TextAlign.center,
maxLines: 2, maxLines: 2,

Loading…
Cancel
Save