import 'dart:async'; import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:get_it/get_it.dart'; import '../../../../core/logging/i_logger_service.dart'; import '../../../../core/network/net_message_dispatcher.dart'; import '../../../remote_control/domain/repositories/remote_control_repository.dart'; import 'permission_request_event.dart'; import 'permission_request_state.dart'; class PermissionRequestBloc extends Bloc { final NetMessageDispatcher _dispatcher; final RemoteControlRepository _repository; final ILoggerService _logger = GetIt.I(); // 🔥 保存订阅引用,用于管理生命周期 StreamSubscription? _permissionSubscription; PermissionRequestBloc(this._dispatcher, this._repository) : super(const PermissionRequestInitial()) { // 🔥 核心:直接在构造函数中建立 0x12 监听(通过 NetMessageDispatcher) // 🔥 注意:RemoteControlCubit 已经在处理 0x12 权限请求,这里不再重复监听 // _initPermissionListener(); // 事件处理 on(_handleRequestReceived); on(_handleDialogDismissed); } // 🔥 通过 NetMessageDispatcher 监听 TCP 0x12 指令,解析权限请求 // 🔥 已禁用:RemoteControlCubit 统一处理权限请求,避免重复弹窗 void _initPermissionListener() { debugPrint( '🔗 [PermissionRequestBloc] 初始化 0x12 权限监听器(通过 NetMessageDispatcher)', ); _logger.logWithLevel( '🔗 [PermissionRequestBloc] 初始化 0x12 权限监听器', shouldLog: true, ); // 🔥 已禁用:权限请求统一由 RemoteControlCubit 处理,避免重复弹窗 // _permissionSubscription = _dispatcher.onCommand(0x12).listen((packet) { // ... // }); debugPrint( '🔍 [PermissionRequestBloc] ⚠️ 权限监听已禁用,统一由 RemoteControlCubit 处理', ); _logger.logWithLevel( '>>> [PermissionRequestBloc] ⚠️ 权限监听已禁用,统一由 RemoteControlCubit 处理', shouldLog: true, ); } Future _handleRequestReceived( PermissionRequestReceived event, Emitter emit, ) async { debugPrint( '📤 [PermissionRequestBloc] emit DialogVisible - platform=${event.platform}', ); _logger.logWithLevel( '📤 [PermissionRequestBloc] emit DialogVisible - platform=${event.platform}', shouldLog: true, ); emit( PermissionRequestDialogVisible( platform: event.platform, requestType: event.requestType, ), ); _logger.logWithLevel( '📤 [PermissionRequestBloc] ✅ 已 emit DialogVisible 状态', shouldLog: true, ); } Future _handleDialogDismissed( PermissionDialogDismissed event, Emitter emit, ) async { debugPrint('📤 [PermissionRequestBloc] emit DialogHidden'); _logger.logWithLevel('📤 [PermissionRequestBloc] emit DialogHidden'); // 🔥 发送响应到机器人(和远程遥控页面一样) if (event.deviceId.isNotEmpty) { debugPrint( '📤 [PermissionRequestBloc] 发送权限响应: agree=${event.agree}, deviceId=${event.deviceId}', ); _repository.respondPermission(event.agree, event.deviceId); } emit(const PermissionRequestDialogHidden()); } @override Future close() { debugPrint('🚫 [PermissionRequestBloc] 关闭,取消订阅'); _logger.logWithLevel('🚫 [PermissionRequestBloc] 关闭', shouldLog: true); _permissionSubscription?.cancel(); return super.close(); } /// 🔥 公开方法:重新初始化监听器(TCP 重连后调用) void reinitListener() { debugPrint('🔄 [PermissionRequestBloc] 重新初始化监听器'); _logger.logWithLevel( '🔄 [PermissionRequestBloc] 重新初始化监听器', shouldLog: true, ); _permissionSubscription?.cancel(); _initPermissionListener(); } }