delete method
Deletes len characters starting from the specified index.
Example:
final text = EasyText.fromStr(text: 'Hello Beautiful World');
text.delete(6, 10); // Result: 'Hello World'
text.delete(0, 5); // Result: 'World'
Implementation
EasyTextChange delete(
int index,
int len, {
bool ignoreMerge = false,
}) {
final EasyTextList oldValues = list!.query(index, len);
final int length = this.length;
assert(index < length, 'offset must be less than the length passed');
if (!_dirty) {
list?.textLength -= len;
}
final int local = math.min<int>(length - index, len);
final EasyText extracted = extractAt(
index,
local,
true,
);
final EasyText? prev = extracted.previous;
final EasyText? next = extracted.next;
extracted.unlink();
final int remain = len - local;
// set to dirty any next operation to
// ignore the update of the textLength
// in EasyTextList, since it's already updated
if (remain > 0 && next != null) {
next
.._dirty = true
..delete(0, remain)
.._dirty = false;
}
if (prev != null && !ignoreMerge) prev.adjust();
return EasyTextChange(
start: index,
length: len,
delta: Delta()
..retain(index)
..delete(length),
inverted: Delta()
..retain(index)
// since .invert method does not use inserted
// text in the delta, we will need to a simple trick
..compose(
Delta.fromOperations(
<Operation>[...oldValues.toDelta().operations],
),
),
);
}