import 'dart:async'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; import 'package:maibu_satabot_v2/features/devices/domain/entities/running_status_entity.dart'; import 'package:maibu_satabot_v2/features/devices/domain/entities/gps_entity.dart'; import '../../../../core/logging/i_logger_service.dart'; import '../../../../core/network/net_message_dispatcher.dart'; import 'device_status_state.dart'; /// 🔥 简化版:直接照搬 RemoteControlCubit 模式,不用 BLoC 事件机制 class DeviceStatusCubit extends Cubit { final NetMessageDispatcher _dispatcher; final ILoggerService _logger = GetIt.I(); StreamSubscription? _stringMessageSub; DeviceStatusCubit(this._dispatcher) : super(DeviceStatusInitial()) { _initStringMessageListener(); } void _initStringMessageListener() { debugPrint('🔗 [DeviceStatusCubit] 初始化 0x02 监听器'); _logger.log('🔗 [DeviceStatusCubit] 初始化 0x02 监听器'); _stringMessageSub?.cancel(); _stringMessageSub = _dispatcher.onStringMessageOfdeviceStatus().listen((message) { if (message.isEmpty) { return; } try { final fields = message.trim().split(','); if (fields.length < 18) { debugPrint('⚠️ [DeviceStatusCubit] 字段不足:${fields.length}'); if (!isClosed) { emit(DeviceStatusError('字段不足,期望≥18,实际:${fields.length}')); } return; } final status = RunningStatusEntity.fromFields(fields); final gps = GPSEntity(status.latitude, status.longitude); //debugPrint('✅ [DeviceStatusCubit] 解析成功:Lat=${gps.latitude}, Lng=${gps.longitude}'); if (!isClosed) { emit(DeviceStatusUpdated(status, gps)); } } catch (e) { debugPrint('❌ [DeviceStatusCubit] 解析异常:$e'); _logger.log('❌ [DeviceStatusCubit] 解析异常:$e'); if (!isClosed) { emit(DeviceStatusError('解析失败:$e')); } } }); debugPrint('✅ [DeviceStatusCubit] 监听器已建立'); _logger.log('✅ [DeviceStatusCubit] 监听器已建立'); } void reset() { debugPrint('🔄 [DeviceStatusCubit] 重置状态'); emit(DeviceStatusInitial()); } @override Future close() { debugPrint('🚫 [DeviceStatusCubit] 关闭,取消订阅'); _stringMessageSub?.cancel(); return super.close(); } }