Creates a copy of the current state for undo functionality (optional)
Returns null by default - implement if undo/redo is needed
Map<String, dynamic>? toSnapshot() => null;