/// 设备状态模型 enum DeviceStatus { idle, running, paused, error } /// 设备状态数据 class DeviceState { final DeviceStatus status; final String? currentProgram; final String? currentPosition; final int? currentStepNo; final String? currentStepName; final int? remainingSeconds; final double? progress; final bool lightingOn; DeviceState({ this.status = DeviceStatus.idle, this.currentProgram, this.currentPosition, this.currentStepNo, this.currentStepName, this.remainingSeconds, this.progress, this.lightingOn = false, }); bool get isRunning => status == DeviceStatus.running; bool get isPaused => status == DeviceStatus.paused; bool get isIdle => status == DeviceStatus.idle; bool get hasError => status == DeviceStatus.error; String statusText() { switch (status) { case DeviceStatus.running: return '运行中'; case DeviceStatus.paused: return '已暂停'; case DeviceStatus.error: return '错误'; case DeviceStatus.idle: return '未运行'; } } String formatRemainingTime() { if (remainingSeconds == null) return '--:--:--'; final hours = remainingSeconds! ~/ 3600; final minutes = (remainingSeconds! % 3600) ~/ 60; final seconds = remainingSeconds! % 60; return '${hours.toString().padLeft(2, '0')}:${minutes.toString().padLeft(2, '0')}:${seconds.toString().padLeft(2, '0')}'; } DeviceState copyWith({ DeviceStatus? status, String? currentProgram, String? currentPosition, int? currentStepNo, String? currentStepName, int? remainingSeconds, double? progress, bool? lightingOn, }) { return DeviceState( status: status ?? this.status, currentProgram: currentProgram ?? this.currentProgram, currentPosition: currentPosition ?? this.currentPosition, currentStepNo: currentStepNo ?? this.currentStepNo, currentStepName: currentStepName ?? this.currentStepName, remainingSeconds: remainingSeconds ?? this.remainingSeconds, progress: progress ?? this.progress, lightingOn: lightingOn ?? this.lightingOn, ); } }