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,
}) {
  final EasyTextList oldValues = owner!.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();
  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],
        ),
      ),
  );
}