77 lines
2.5 KiB
Dart
77 lines
2.5 KiB
Dart
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<DeviceStatusState> {
|
|
final NetMessageDispatcher _dispatcher;
|
|
final ILoggerService _logger = GetIt.I<ILoggerService>();
|
|
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<void> close() {
|
|
debugPrint('🚫 [DeviceStatusCubit] 关闭,取消订阅');
|
|
_stringMessageSub?.cancel();
|
|
return super.close();
|
|
}
|
|
}
|