class TerminalScreenPatch { const TerminalScreenPatch({ required this.sessionId, required this.baseScreenVersion, required this.screenVersion, required this.sourceSequence, required this.rows, required this.columns, required this.cursorRow, required this.cursorColumn, required this.cursorVisible, required this.activeBuffer, required this.operations, }); final String sessionId; final int baseScreenVersion; final int screenVersion; final int sourceSequence; final int rows; final int columns; final int cursorRow; final int cursorColumn; final bool cursorVisible; final String activeBuffer; final List operations; factory TerminalScreenPatch.fromJson(Map json) { final rawOperations = (json['operations'] as List?) ?? const []; return TerminalScreenPatch( sessionId: json['sessionId'] as String, baseScreenVersion: (json['baseScreenVersion'] as num?)?.toInt() ?? 0, screenVersion: (json['screenVersion'] as num?)?.toInt() ?? 0, sourceSequence: (json['sourceSequence'] as num?)?.toInt() ?? 0, rows: (json['rows'] as num?)?.toInt() ?? 0, columns: (json['columns'] as num?)?.toInt() ?? 0, cursorRow: (json['cursorRow'] as num?)?.toInt() ?? 0, cursorColumn: (json['cursorColumn'] as num?)?.toInt() ?? 0, cursorVisible: json['cursorVisible'] as bool? ?? true, activeBuffer: (json['activeBuffer'] as String?) ?? 'primary', operations: rawOperations .map( (item) => TerminalScreenPatchOperation.fromJson( Map.from(item as Map), ), ) .toList(growable: false), ); } } class TerminalScreenPatchOperation { const TerminalScreenPatchOperation({ required this.type, required this.startRow, required this.lines, }); final String type; final int startRow; final List lines; factory TerminalScreenPatchOperation.fromJson(Map json) { final rawLines = (json['lines'] as List?) ?? const []; return TerminalScreenPatchOperation( type: (json['type'] as String?) ?? '', startRow: (json['startRow'] as num?)?.toInt() ?? 0, lines: rawLines.map((item) => item as String? ?? '').toList(growable: false), ); } }