import 'package:equatable/equatable.dart'; import 'package:maibu_satabot_v2/features/devices/domain/entities/device_entity.dart'; import 'package:maibu_satabot_v2/features/remote_control/data/models/running_status_model.dart'; import '../../domain/entities/machine_control_status_entity.dart'; enum RemoteControlStatus { initial, controlling, error } class RemoteControlState extends Equatable { final RemoteControlStatus status; final MachineControlStatusEntity controlEntity; // 控制业务实体 final String? errorMessage; final bool hasPermission; // 是否获得 0x12 权限 final bool isEmergency; final bool isLocked; final int ping; final int battery; //电池量 final int voltage; //电压 final String permissionPlatform; final String currentPlatform; final bool showPermissionRequestDialog; final String? requestingDeviceId; // 🔥 请求权限的设备ID final String? requestingPlatform; // 🔥 请求权限的平台 final bool showLeftPip; final bool showRightPip; final bool topRightIsExpanded; // 顶部右侧按钮展开状态 final bool obstacleRecognitionFlag; // 障碍物识别标志位(这是UI显示的) final String obstacleFlag; //障碍物标志位 final RunningStatusModel runningStatusModel; final DeviceEntity? targetDevice; // 🔥 状态更新类型标记 - 用于区分是设备状态更新还是弹窗状态更新 final String? updateType; const RemoteControlState({ this.status = RemoteControlStatus.initial, required this.controlEntity, this.errorMessage, this.hasPermission = false, this.isEmergency = false, this.isLocked = false, this.ping = 0, this.battery = 0, this.voltage = 0, this.permissionPlatform = '', this.currentPlatform = '', this.showPermissionRequestDialog = false, this.requestingDeviceId, this.requestingPlatform, this.showLeftPip = true, this.showRightPip = true, this.obstacleFlag = '', required this.runningStatusModel, this.topRightIsExpanded = false, this.obstacleRecognitionFlag = true, this.targetDevice, this.updateType, }); // 便利 UI 更新部分属性 RemoteControlState copyWith({ RemoteControlStatus? status, MachineControlStatusEntity? controlEntity, String? errorMessage, bool? hasPermission, bool? isEmergency, bool? isLocked, int? ping, int? battery, int? voltage, String? permissionPlatform, String? currentPlatform, bool? showPermissionRequestDialog, String? requestingDeviceId, String? requestingPlatform, bool? showLeftPip, bool? showRightPip, RunningStatusModel? runningStatusModel, String? obstacleFlag, bool? topRightIsExpanded, bool? obstacleRecognitionFlag, DeviceEntity? targetDevice, String? updateType, }) { return RemoteControlState( status: status ?? this.status, controlEntity: controlEntity ?? this.controlEntity, errorMessage: errorMessage ?? this.errorMessage, hasPermission: hasPermission ?? this.hasPermission, isEmergency: isEmergency ?? this.isEmergency, isLocked: isLocked ?? this.isLocked, ping: ping ?? this.ping, battery: battery ?? this.battery, voltage: voltage ?? this.voltage, permissionPlatform: permissionPlatform ?? this.permissionPlatform, currentPlatform: currentPlatform ?? this.currentPlatform, showPermissionRequestDialog: showPermissionRequestDialog ?? this.showPermissionRequestDialog, requestingDeviceId: requestingDeviceId ?? this.requestingDeviceId, requestingPlatform: requestingPlatform ?? this.requestingPlatform, showLeftPip: showLeftPip ?? this.showLeftPip, showRightPip: showRightPip ?? this.showRightPip, runningStatusModel: runningStatusModel ?? this.runningStatusModel, obstacleFlag: obstacleFlag ?? this.obstacleFlag, topRightIsExpanded: topRightIsExpanded ?? this.topRightIsExpanded, obstacleRecognitionFlag: obstacleRecognitionFlag ?? this.obstacleRecognitionFlag, targetDevice: targetDevice ?? this.targetDevice, updateType: updateType, // 不使用 ??,因为我们想要 null 的时候就是 null ); } @override List get props => [ status, controlEntity, errorMessage, hasPermission, isEmergency, isLocked, ping, battery, voltage, permissionPlatform, currentPlatform, showPermissionRequestDialog, requestingDeviceId, requestingPlatform, showLeftPip, showRightPip, runningStatusModel, obstacleFlag, topRightIsExpanded, obstacleRecognitionFlag, targetDevice, updateType, ]; }