Create struct for history items

pull/1128/head
Adil Hanney 2 years ago
parent db1ad0b13f
commit a122ee7dc3
  1. 1
      lib/flutter_quill.dart
  2. 10
      lib/src/models/documents/document.dart
  3. 10
      lib/src/models/documents/history.dart
  4. 18
      lib/src/models/structs/doc_change.dart
  5. 8
      lib/src/widgets/controller.dart

@ -9,6 +9,7 @@ export 'src/models/documents/nodes/line.dart';
export 'src/models/documents/nodes/node.dart';
export 'src/models/documents/style.dart';
export 'src/models/quill_delta.dart';
export 'src/models/structs/doc_change.dart';
export 'src/models/structs/vertical_spacing.dart';
export 'src/models/themes/quill_custom_button.dart';
export 'src/models/themes/quill_dialog_theme.dart';

@ -2,6 +2,7 @@ import 'dart:async';
import '../quill_delta.dart';
import '../rules/rule.dart';
import '../structs/doc_change.dart';
import 'attribute.dart';
import 'history.dart';
import 'nodes/block.dart';
@ -48,13 +49,12 @@ class Document {
_rules.setCustomRules(customRules);
}
final StreamController<Tuple3<Delta, Delta, ChangeSource>> _observer =
StreamController.broadcast();
final StreamController<DocChange> _observer = StreamController.broadcast();
final History _history = History();
/// Stream of [Change]s applied to this document.
Stream<Tuple3<Delta, Delta, ChangeSource>> get changes => _observer.stream;
/// Stream of [DocChange]s applied to this document.
Stream<DocChange> get changes => _observer.stream;
/// Inserts [data] in this document at specified [index].
///
@ -274,7 +274,7 @@ class Document {
if (_delta != _root.toDelta()) {
throw 'Compose failed';
}
final change = Tuple3(originalDelta, delta, changeSource);
final change = DocChange(originalDelta, delta, changeSource);
_observer.add(change);
_history.handleDocChange(change);
}

@ -1,5 +1,5 @@
import '../quill_delta.dart';
import '../structs/doc_change.dart';
import 'document.dart';
class History {
@ -31,12 +31,12 @@ class History {
///record delay
final int interval;
void handleDocChange(Tuple3<Delta, Delta, ChangeSource> change) {
void handleDocChange(DocChange docChange) {
if (ignoreChange) return;
if (!userOnly || change.item3 == ChangeSource.LOCAL) {
record(change.item2, change.item1);
if (!userOnly || docChange.source == ChangeSource.LOCAL) {
record(docChange.change, docChange.before);
} else {
transform(change.item2);
transform(docChange.change);
}
}

@ -0,0 +1,18 @@
import '../../../flutter_quill.dart';
class DocChange {
DocChange(
this.before,
this.change,
this.source,
);
/// Document state before [change].
final Delta before;
/// Change delta applied to the document.
final Delta change;
/// The source of this change.
final ChangeSource source;
}

@ -9,6 +9,7 @@ import '../models/documents/nodes/embeddable.dart';
import '../models/documents/nodes/leaf.dart';
import '../models/documents/style.dart';
import '../models/quill_delta.dart';
import '../models/structs/doc_change.dart';
import '../utils/delta.dart';
typedef ReplaceTextCallback = bool Function(int index, int len, Object? data);
@ -81,12 +82,7 @@ class QuillController extends ChangeNotifier {
/// removing or listeners to this instance.
bool _isDisposed = false;
// item1: Document state before [change].
//
// item2: Change delta applied to the document.
//
// item3: The source of this change.
Stream<Tuple3<Delta, Delta, ChangeSource>> get changes => document.changes;
Stream<DocChange> get changes => document.changes;
TextEditingValue get plainTextEditingValue => TextEditingValue(
text: document.toPlainText(),

Loading…
Cancel
Save