import '../task.dart'; // TodoList Task class TodoListTask extends Task { final List todoItems; TodoListTask({ required super.id, required super.jobId, required this.todoItems, super.stationOrder, super.completed = false, super.optional = false, super.completedAt, super.completedBy, super.taskOrder, super.title, super.description, super.displayName, }); factory TodoListTask.fromJson(Map json) { final commonProps = Task.parseCommonProperties(json); final taskSpecificData = json['taskSpecificData'] as Map; final rawItems = taskSpecificData['todoItems'] as List? ?? []; final todoItems = rawItems.map((item) => item?.toString() ?? '').toList(); return TodoListTask( id: commonProps['id'], jobId: commonProps['jobId'], stationOrder: commonProps['stationOrder'], completed: commonProps['completed'], optional: commonProps['optional'], completedAt: commonProps['completedAt'], completedBy: commonProps['completedBy'], taskOrder: commonProps['taskOrder'], title: commonProps['title'], description: commonProps['description'], displayName: commonProps['displayName'], todoItems: todoItems, ); } @override Map toJson() { return { 'id': id, 'jobId': jobId, 'stationOrder': stationOrder, 'completed': completed, 'optional': optional, 'completedAt': completedAt?.toIso8601String(), 'completedBy': completedBy, 'taskOrder': taskOrder, 'description': description, 'displayName': displayName, 'taskSpecificData': { 'taskType': 'TODOLIST', 'title': title, 'todoItems': todoItems, }, }; } @override TodoListTask copyWith({ String? id, String? jobId, int? stationOrder, bool? completed, bool? optional, DateTime? completedAt, String? completedBy, int? taskOrder, String? title, String? description, String? displayName, List? todoItems, }) { return TodoListTask( id: id ?? this.id, jobId: jobId ?? this.jobId, stationOrder: stationOrder ?? this.stationOrder, completed: completed ?? this.completed, optional: optional ?? this.optional, completedAt: completedAt ?? this.completedAt, completedBy: completedBy ?? this.completedBy, taskOrder: taskOrder ?? this.taskOrder, title: title ?? this.title, description: description ?? this.description, displayName: displayName ?? this.displayName, todoItems: todoItems ?? this.todoItems, ); } }