Browse Source

上传客户端代码

weicu
liwei1dao 5 months ago
parent
commit
7b1700b44e
  1. 52
      lib/modules/home/controllers/home_controller.dart

52
lib/modules/home/controllers/home_controller.dart

@ -1,7 +1,9 @@
import 'dart:async';
import 'package:device_jieli/device_jieli.dart';
import 'package:get/get.dart';
import 'package:get_storage/get_storage.dart';
import 'package:agent_service/agent_service.dart';
// 移除了dart:async导入,因为不再使用Timer
import '../../../data/services/novice_guide_service.dart';
import '../../../routes/app_routes.dart';
import '../../../core/utils/logger.dart';
@ -68,6 +70,13 @@ class HomeController extends GetxController {
Worker? _classicBluetoothWorker;
Worker? _bleConnectionWorker;
/// 全局 5s 刷新定时器。声明为 static 是为了让它跨 HomeController 实例存活:
/// `Get.offAllNamed(Routes.home)` 把旧 controller 干掉、新 controller 起来时,
/// 这个定时器始终是同一个,永远在跑,直接调当前注册的 HomeController 的
/// `refreshDeviceConnection`(=点刷新按钮的逻辑)。
static Timer? _staticPollTimer;
static const Duration _pollInterval = Duration(seconds: 5);
final _bluetoothManager = Get.find<BluetoothManager>();
final _bleManager = Get.find<BleManager>();
@ -101,13 +110,30 @@ class HomeController extends GetxController {
_deviceInfoWorker?.dispose();
_classicBluetoothWorker?.dispose();
_bleConnectionWorker?.dispose();
// 移除了定时器停止逻辑
super.onClose();
}
void _initWithCachedInfo() {
_setupStateListeners();
_checkConnectionStatus();
_ensureStaticPollTimer();
}
/// 启动静态 5s 刷新定时器。已经在跑就什么都不做。
/// 定时器一旦起来就永远不取消(HomeController 只是 lazyPut,控制器实例可能反复
/// 销毁/重建,但定时器跨实例存活),每次 fire 都去当前注册的 HomeController
/// 调 refreshDeviceConnection——和用户点刷新按钮完全等价。
static void _ensureStaticPollTimer() {
if (_staticPollTimer != null && _staticPollTimer!.isActive) return;
_staticPollTimer = Timer.periodic(_pollInterval, (_) {
try {
if (Get.isRegistered<HomeController>()) {
Get.find<HomeController>().refreshDeviceConnection();
}
} catch (_) {
// 忽略:home 还没注册或者刚销毁中间窗口期
}
});
}
void _setupStateListeners() {
@ -236,18 +262,18 @@ class HomeController extends GetxController {
Future<void> _checkConnectionStatus() async {
try {
final currentBleState = await _bleManager.getConnectionState();
print('fdp--_checkConnectionStatus--currentBleState: $currentBleState');
bool hasClassicBluetooth = currentDevice != null;
bool hasBleConnection = currentBleState == 2;
bool wasConnected = _isFullyConnected.value;
bool isNowConnected = hasClassicBluetooth && hasBleConnection;
//bool isGuideCompleted = _storage.read('home_guide') ?? false;
if (isNowConnected && currentDevice == null) {
isNowConnected = false;
// 直接问杰理 SDK 当前已连接设备
JieliDevice? sdkDevice;
try {
sdkDevice = await Jielihome.instance.connectedDevice();
} catch (e) {
Logger.w(_tag, '查询杰理已连接设备失败: $e');
sdkDevice = null;
}
final hasBleConnection =
sdkDevice != null && sdkDevice.address.isNotEmpty;
bool wasConnected = _isFullyConnected.value;
bool isNowConnected = hasBleConnection;
if (_isFullyConnected.value != isNowConnected) {
_isFullyConnected.value = isNowConnected;

Loading…
Cancel
Save