feat: add cache to text_delta

This commit is contained in:
Vincent Chan 2022-08-10 16:48:19 +08:00
parent 737e374a54
commit eb519f4e11

View File

@ -259,6 +259,7 @@ TextOperation? _textOperationFromJson(Map<String, dynamic> json) {
// basically copy from: https://github.com/quilljs/delta
class Delta extends Iterable<TextOperation> {
final List<TextOperation> _operations;
String? _rawString;
factory Delta.fromJson(List<dynamic> list) {
final operations = <TextOperation>[];
@ -284,6 +285,7 @@ class Delta extends Iterable<TextOperation> {
if (textOp.isEmpty) {
return this;
}
_rawString = null;
if (_operations.isNotEmpty) {
final lastOp = _operations.last;
@ -431,6 +433,7 @@ class Delta extends Iterable<TextOperation> {
if (_operations.isEmpty) {
return this;
}
_rawString = null;
final lastOp = _operations.last;
if (lastOp is TextRetain && (lastOp.attributes?.length ?? 0) == 0) {
_operations.removeLast();
@ -481,9 +484,11 @@ class Delta extends Iterable<TextOperation> {
return _operations.map((e) => e.toJson()).toList();
}
// TODO: It's unneccesry to compute everytime.
String toRawString() =>
_operations.whereType<TextInsert>().map((op) => op.content).join();
String toRawString() {
_rawString ??=
_operations.whereType<TextInsert>().map((op) => op.content).join();
return _rawString!;
}
@override
Iterator<TextOperation> get iterator => _operations.iterator;