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 '../rules/rule.dart';
import '../structs/doc_change.dart';
import '../structs/history_changed.dart';
import '../structs/offset_value.dart';
import '../structs/segment_leaf_node.dart';
import 'attribute.dart';
@ -277,11 +278,11 @@ class Document {
_history.handleDocChange(change);
}
Tuple2 undo() {
HistoryChanged undo() {
return _history.undo(this);
}
Tuple2 redo() {
HistoryChanged redo() {
return _history.redo(this);
}

@ -1,5 +1,6 @@
import '../quill_delta.dart';
import '../structs/doc_change.dart';
import '../structs/history_changed.dart';
import 'document.dart';
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) {
return const Tuple2(false, 0);
return const HistoryChanged(false, 0);
}
final delta = source.removeLast();
// look for insert or delete
@ -106,14 +107,14 @@ class History {
ignoreChange = true;
doc.compose(delta, ChangeSource.LOCAL);
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);
}
Tuple2 redo(Document doc) {
HistoryChanged redo(Document doc) {
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() {
final tup = document.undo();
if (tup.item1) {
_handleHistoryChange(tup.item2);
final result = document.undo();
if (result.changed) {
_handleHistoryChange(result.len);
}
}
@ -164,9 +164,9 @@ class QuillController extends ChangeNotifier {
}
void redo() {
final tup = document.redo();
if (tup.item1) {
_handleHistoryChange(tup.item2);
final result = document.redo();
if (result.changed) {
_handleHistoryChange(result.len);
}
}

Loading…
Cancel
Save