Create struct for history undo/redo result

pull/1128/head
Adil Hanney 2 years ago
parent e850f52d45
commit b4d85a6e6e
  1. 5
      lib/src/models/documents/document.dart
  2. 11
      lib/src/models/documents/history.dart
  3. 9
      lib/src/models/structs/history_changed.dart
  4. 12
      lib/src/widgets/controller.dart

@ -3,6 +3,7 @@ import 'dart:async';
import '../quill_delta.dart'; import '../quill_delta.dart';
import '../rules/rule.dart'; import '../rules/rule.dart';
import '../structs/doc_change.dart'; import '../structs/doc_change.dart';
import '../structs/history_changed.dart';
import '../structs/offset_value.dart'; import '../structs/offset_value.dart';
import '../structs/segment_leaf_node.dart'; import '../structs/segment_leaf_node.dart';
import 'attribute.dart'; import 'attribute.dart';
@ -277,11 +278,11 @@ class Document {
_history.handleDocChange(change); _history.handleDocChange(change);
} }
Tuple2 undo() { HistoryChanged undo() {
return _history.undo(this); return _history.undo(this);
} }
Tuple2 redo() { HistoryChanged redo() {
return _history.redo(this); return _history.redo(this);
} }

@ -1,5 +1,6 @@
import '../quill_delta.dart'; import '../quill_delta.dart';
import '../structs/doc_change.dart'; import '../structs/doc_change.dart';
import '../structs/history_changed.dart';
import 'document.dart'; import 'document.dart';
class History { class History {
@ -84,9 +85,9 @@ class History {
} }
} }
Tuple2 _change(Document doc, List<Delta> source, List<Delta> dest) { HistoryChanged _change(Document doc, List<Delta> source, List<Delta> dest) {
if (source.isEmpty) { if (source.isEmpty) {
return const Tuple2(false, 0); return const HistoryChanged(false, 0);
} }
final delta = source.removeLast(); final delta = source.removeLast();
// look for insert or delete // look for insert or delete
@ -106,14 +107,14 @@ class History {
ignoreChange = true; ignoreChange = true;
doc.compose(delta, ChangeSource.LOCAL); doc.compose(delta, ChangeSource.LOCAL);
ignoreChange = false; ignoreChange = false;
return Tuple2(true, len); return HistoryChanged(true, len);
} }
Tuple2 undo(Document doc) { HistoryChanged undo(Document doc) {
return _change(doc, stack.undo, stack.redo); return _change(doc, stack.undo, stack.redo);
} }
Tuple2 redo(Document doc) { HistoryChanged redo(Document doc) {
return _change(doc, stack.redo, stack.undo); return _change(doc, stack.redo, stack.undo);
} }
} }

@ -0,0 +1,9 @@
class HistoryChanged {
const HistoryChanged(
this.changed,
this.len,
);
final bool changed;
final int? len;
}

@ -142,9 +142,9 @@ class QuillController extends ChangeNotifier {
} }
void undo() { void undo() {
final tup = document.undo(); final result = document.undo();
if (tup.item1) { if (result.changed) {
_handleHistoryChange(tup.item2); _handleHistoryChange(result.len);
} }
} }
@ -164,9 +164,9 @@ class QuillController extends ChangeNotifier {
} }
void redo() { void redo() {
final tup = document.redo(); final result = document.redo();
if (tup.item1) { if (result.changed) {
_handleHistoryChange(tup.item2); _handleHistoryChange(result.len);
} }
} }

Loading…
Cancel
Save