Files
flutterApp/lib/features/remote_control/presentation/bloc/remote_control_state.dart
2026-01-27 18:44:49 +08:00

103 lines
3.4 KiB
Dart

import 'package:equatable/equatable.dart';
import '../../domain/entities/machine_control_entity.dart';
import '../../domain/entities/running_status_entity.dart';
enum RemoteControlStatus { initial, controlling, error }
class RemoteControlState extends Equatable {
// --- 核心业务状态 ---
final RemoteControlStatus status;
final MachineControlEntity controlEntity; // 发送给机器的控制业务实体
final RunningStatusEntity runningStatusEntity; // 机器回传的状态业务实体
// --- 权限与平台逻辑 ---
final bool hasPermission; // 0x12 权限状态
final String permissionPlatform; // 权限来源平台 (如 "Web", "App")
final String currentPlatform; // 当前操作平台
final bool showPermissionRequestDialog; // 是否显示权限请求弹窗
// --- 安全与锁定 ---
final bool isEmergency; // 紧急停止状态
final bool isLocked; // 控制锁定状态
final String obstacleFlag; // 障碍物标志位文字 (对应 Entity 里的 0/1)
// --- 网络与连接 ---
final int ping; // 延迟/心跳
final String? errorMessage; // 错误提示
// --- UI 视图配置 ---
final bool showLeftPip; // 左侧画中画显示
final bool showRightPip; // 右侧画中画显示
const RemoteControlState({
this.status = RemoteControlStatus.initial,
required this.controlEntity,
required this.runningStatusEntity,
this.hasPermission = false,
this.permissionPlatform = '',
this.currentPlatform = '',
this.showPermissionRequestDialog = false,
this.isEmergency = false,
this.isLocked = false,
this.obstacleFlag = '无',
this.ping = 0,
this.errorMessage,
this.showLeftPip = true,
this.showRightPip = true,
});
// 辅助属性:判断当前是否具备物理驾驶条件
bool get canDrive => hasPermission && !isEmergency && !isLocked;
RemoteControlState copyWith({
RemoteControlStatus? status,
MachineControlEntity? controlEntity,
RunningStatusEntity? runningStatusEntity,
bool? hasPermission,
String? permissionPlatform,
String? currentPlatform,
bool? showPermissionRequestDialog,
bool? isEmergency,
bool? isLocked,
String? obstacleFlag,
int? ping,
String? errorMessage,
bool? showLeftPip,
bool? showRightPip,
}) {
return RemoteControlState(
status: status ?? this.status,
controlEntity: controlEntity ?? this.controlEntity,
runningStatusEntity: runningStatusEntity ?? this.runningStatusEntity,
hasPermission: hasPermission ?? this.hasPermission,
permissionPlatform: permissionPlatform ?? this.permissionPlatform,
currentPlatform: currentPlatform ?? this.currentPlatform,
showPermissionRequestDialog: showPermissionRequestDialog ?? this.showPermissionRequestDialog,
isEmergency: isEmergency ?? this.isEmergency,
isLocked: isLocked ?? this.isLocked,
obstacleFlag: obstacleFlag ?? this.obstacleFlag,
ping: ping ?? this.ping,
errorMessage: errorMessage ?? this.errorMessage,
showLeftPip: showLeftPip ?? this.showLeftPip,
showRightPip: showRightPip ?? this.showRightPip,
);
}
@override
List<Object?> get props => [
status,
controlEntity,
runningStatusEntity,
hasPermission,
permissionPlatform,
currentPlatform,
showPermissionRequestDialog,
isEmergency,
isLocked,
obstacleFlag,
ping,
errorMessage,
showLeftPip,
showRightPip,
];
}