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,
}) {
// we need to store a temporary version of the list
// into a variable to avoid trying to use .query
// when this element was already removed
final EasyTextList listToUse = owner!;
final EasyTextList oldValues = listToUse.query(index, len);
final int length = this.length;
assert(index < length, 'offset must be less than the length passed');
final int local = math.min<int>(length - index, len);
final EasyText extracted = extractAt(index, local);
final EasyText? prev = extracted.previous;
final EasyText? next = extracted.next;
extracted.unlink();
final int remain = len - local;
if (remain > 0 && next != null) {
next.delete(0, remain);
}
if (prev != null && !ignoreMerge) prev.tryMerge();
// it will return an empty list
// since the exact points of the change were removed
final EasyTextList newValues = listToUse.query(index, 0);
return EasyTextChange(
start: index,
length: len,
oldValues: oldValues,
newValues: newValues,
);
}