delete method

  1. @override
void delete(
  1. int index,
  2. int? len
)
override

Implementation

@override
void delete(int index, int? len) {
  final local = math.min(length - index, len!);
  final isLFDeleted = index + local == length; // Line feed
  if (isLFDeleted) {
    // Our newline character deleted with all style information.
    clearStyle();
    if (local > 1) {
      // Exclude newline character from delete range for children.
      super.delete(index, local - 1);
    }
  } else {
    super.delete(index, local);
  }

  final remaining = len - local;
  if (remaining > 0) {
    assert(nextLine != null);
    nextLine!.delete(0, remaining);
  }

  if (isLFDeleted && isNotEmpty) {
    // Since we lost our line-break and still have child text nodes those must
    // migrate to the next line.

    // nextLine might have been unmounted since last assert so we need to
    // check again we still have a line after us.
    assert(nextLine != null);

    // Move remaining children in this line to the next line so that all
    // attributes of nextLine are preserved.
    nextLine!.moveChildToNewParent(this);
    moveChildToNewParent(nextLine);
  }

  if (isLFDeleted) {
    // Now we can remove this line.
    final block = parent!; // remember reference before un-linking.
    unlink();
    block.adjust();
  }
}