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.

117 lines
3.9 KiB

// 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<BleManager>(); //获取BLE管理器实例
/// 翻译功能选项列表
final List<TranslationOption> translationOptions = [
TranslationOption(
translationId: 'simultaneous',
title: 'simultaneousTranslation'.tr, // 实时翻译
// description: 'realtimeTranslationDescription', // 实时语音翻译,支持多种语言
icon: Icons.record_voice_over,
iconColor: 0xFF2196F3, // 蓝色
targetRoute: Routes.translation,
),
TranslationOption(
translationId: 'call',
title: 'callTranslation'.tr, // 通话翻译
// description: 'simultaneousTranslationInfo', // 双向对话翻译,面对面交流
icon: Icons.call,
iconColor: 0xFF4CAF50, // 绿色
targetRoute: Routes.translation,
),
TranslationOption(
translationId: 'faceToFace',
title: 'faceToFaceTranslation'.tr, // 面对面翻译
// description: 'faceToFaceTranslationDescription', // 面对面交流,支持多种语言
icon: Icons.people,
iconColor: 0xFFFF9800, // 橙色
targetRoute: Routes.translation,
),
TranslationOption(
translationId: 'audioVideo',
title: 'audioVideoTranslation'.tr, // 多媒体翻译
//description: 'audioVideoTranslationDescription', // 支持音频和视频翻译
icon: Icons.videocam,
iconColor: 0xFF9C27B0, // 紫色
targetRoute: Routes.translation,
),
TranslationOption(
translationId: 'picture_translator',
title: 'pictureTranslation'.tr, // 图片翻译
icon: Icons.image,
iconColor: 0xFF009688, // 青色
targetRoute: Routes.pictureTranslation,
),
TranslationOption(
translationId: 'text_translator',
title: 'textTranslation'.tr, // 文本翻译
icon: Icons.text_fields,
iconColor: 0xFF3F51B5, // 棕色
targetRoute: Routes.textTranslation,
),
];
/// 导航到指定的翻译功能
void navigateToTranslationFeature(TranslationOption option) {
// 不可用则提示用户连接设备
if (!isOptionEnabled(option)) {
// 翻译键代表的中文文本内容
Get.snackbar('connectDevice'.tr,
'pleaseConnectDeepSoundDevice'.tr, // 连接设备 / 请连接 Voitrans 设备
snackPosition: SnackPosition.TOP,
duration: const Duration(seconds: 1));
//EasyLoading.showInfo('connectDevice'.tr);
return;
}
Get.toNamed(option.targetRoute,
arguments: {'translationId': option.translationId});
}
/// 获取翻译选项的本地化标题
String getLocalizedTitle(TranslationOption option) {
return option.title.tr;
}
/// 获取翻译选项的本地化描述
String getLocalizedDescription(TranslationOption option) {
// 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;
}
}
/// 翻译功能选项数据模型
class TranslationOption {
final String translationId;
final String title;
// final String description;
final IconData icon;
final int iconColor;
final String targetRoute;
TranslationOption({
required this.translationId,
required this.title,
// required this.description,
required this.icon,
required this.iconColor,
required this.targetRoute,
});
}