delete method

EasyTextChange delete(
  1. int index,
  2. int len, {
  3. bool ignoreMerge = false,
})

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,
  );
}