import 'package:flowy_editor/document/path.dart'; import 'package:flowy_editor/document/node.dart'; abstract class Operation { Operation invert(); } class InsertOperation extends Operation { final Path path; final Node value; InsertOperation({ required this.path, required this.value, }); @override Operation invert() { return DeleteOperation( path: path, removedValue: value, ); } } class UpdateOperation extends Operation { final Path path; final Attributes attributes; final Attributes oldAttributes; UpdateOperation({ required this.path, required this.attributes, required this.oldAttributes, }); @override Operation invert() { return UpdateOperation( path: path, attributes: oldAttributes, oldAttributes: attributes, ); } } class DeleteOperation extends Operation { final Path path; final Node removedValue; DeleteOperation({ required this.path, required this.removedValue, }); @override Operation invert() { return InsertOperation( path: path, value: removedValue, ); } }