import 'package:get/get.dart'; import 'dart:async'; import '../../../routes/app_routes.dart'; import '../../../data/services/classic_bluetooth_service.dart'; import '../../../core/utils/logger.dart'; import 'package:flutter/material.dart'; import '../../explore/controllers/explore_controller.dart'; // 连接状态枚举 enum ConnectionStatus { disconnected, // 未连接 connecting, // 连接中 connected, // 已连接 failed // 连接失败 } class HomeController extends GetxController { static HomeController get to => Get.find(); final ExploreController exploreController = Get.find(); // 经典蓝牙服务 final ClassicBluetoothService _bluetoothService = Get.find(); // 连接状态 final _connectionStatus = ConnectionStatus.disconnected.obs; ConnectionStatus get connectionStatus => _connectionStatus.value; // 电池状态(模拟数据) final _deviceBattery = Rx(null); int? get deviceBattery => _deviceBattery.value; // 固件版本(模拟数据) final String firmwareVersion = 'v2.4.1'; // 连接错误信息 final _connectionErrorMsg = ''.obs; String get connectionErrorMsg => _connectionErrorMsg.value; // 从蓝牙服务中直接获取的属性 Rx get currentDevice => _bluetoothService.currentDevice; List get connectedDevices => _bluetoothService.connectedDevices; RxString get bluetoothState => _bluetoothService.bluetoothState; // 蓝牙是否已连接 bool get isConnected => currentDevice.value != null; @override void onInit() { super.onInit(); // 初始化 _initBluetooth(); // 电池模拟更新 _simulateBatteryUpdate(); } // 初始化蓝牙 Future _initBluetooth() async { try { // 确保蓝牙服务已初始化 if (!(await _bluetoothService.initialize())) { _connectionStatus.value = ConnectionStatus.failed; _connectionErrorMsg.value = '初始化蓝牙服务失败'; return; } // 设置监听器 _setupBluetoothListeners(); // 更新初始状态 _updateConnectionStatus(); } catch (e) { Logger.error('初始化蓝牙失败: $e'); _connectionStatus.value = ConnectionStatus.failed; _connectionErrorMsg.value = e.toString(); } } // 设置蓝牙状态监听 void _setupBluetoothListeners() { // 监听当前设备变化 ever(currentDevice, (_) { _updateConnectionStatus(); }); // 监听蓝牙状态变化 ever(bluetoothState, (_) { _updateConnectionStatus(); }); } // 更新连接状态 void _updateConnectionStatus() { if (bluetoothState.value == 'off') { _connectionStatus.value = ConnectionStatus.disconnected; _deviceBattery.value = null; update(); return; } if (currentDevice.value != null) { _connectionStatus.value = ConnectionStatus.connected; } else { _connectionStatus.value = ConnectionStatus.disconnected; _deviceBattery.value = null; } update(); } // 刷新设备连接 Future refreshDeviceConnection() async { try { _connectionStatus.value = ConnectionStatus.connecting; update(); final success = await _bluetoothService.refreshConnectedDevices(); if (!success) { _connectionErrorMsg.value = '未找到已连接的设备'; } else { _connectionErrorMsg.value = ''; } } catch (e) { Logger.error('刷新设备连接失败: $e'); _connectionErrorMsg.value = '无法刷新设备连接'; } finally { _updateConnectionStatus(); } } // 电池电量模拟更新 void _simulateBatteryUpdate() { Future.delayed(const Duration(seconds: 2), () { if (isConnected) { final timestamp = DateTime.now().millisecondsSinceEpoch; _deviceBattery.value = 50 + (timestamp % 50); // 50-99的随机值 } else { _deviceBattery.value = null; } // 递归调用实现定时更新 _simulateBatteryUpdate(); }); } // 重新扫描设备 void rescanDevices() { Get.toNamed(Routes.pairing); } // 打开翻译功能 void openTranslation() { Get.toNamed(Routes.translation); } // 打开AI伴侣功能 void openAIGirlfriend() { exploreController.onAIFeatureTap(2); //进入AI女友页面 } // 展示AI功能 void exploreAIFeatures() { Get.toNamed(Routes.chat); } // 获取连接状态对应的颜色 Color getConnectionStatusColor() { switch (_connectionStatus.value) { case ConnectionStatus.connected: return Colors.green; case ConnectionStatus.connecting: return Colors.amber; case ConnectionStatus.failed: return Colors.red; case ConnectionStatus.disconnected: default: return Colors.grey; } } // 获取连接状态对应的文本 String getConnectionStatusText() { // 如果蓝牙关闭,优先显示蓝牙状态 if (bluetoothState.value == 'off') { return 'bluetoothOff'.tr; // 蓝牙已关闭 } switch (_connectionStatus.value) { case ConnectionStatus.connected: return 'connected'.tr; // 已连接 case ConnectionStatus.connecting: return 'connecting'.tr; // 连接中... case ConnectionStatus.failed: return 'connectionFailure'.tr; // 连接失败 case ConnectionStatus.disconnected: default: return 'unconnected'.tr; // 未连接 } } // 获取设备名称 String getDeviceName() { return currentDevice.value?.name ?? 'unknownEquipment'.tr; // 未知设备 } // 获取信号强度(模拟数据) String getSignalStrength() { if (!isConnected) { return 'zeroSignal'.tr; // 无信号 } // 简单模拟信号强度 final random = DateTime.now().millisecondsSinceEpoch % 3; switch (random) { case 0: return 'good'.tr; // 良好 case 1: return 'fine'.tr; // 很好 default: return 'excellent'.tr; // 极佳 } } // 获取设备ID String getDeviceId() { return currentDevice.value?.address ?? 'unknown'.tr; // 未知 } }