deleteAtSelections method

bool deleteAtSelections({
  1. required bool forward,
})

Deletes one grapheme beside every cursor, or each selected range.

Implementation

bool deleteAtSelections({required bool forward}) {
  final active = selections;
  if (active.ranges.isEmpty) return false;
  var changed = false;
  final deletionRanges = <TextSelectionRange>[];
  for (final range in active.ranges) {
    if (!range.isCollapsed) {
      deletionRanges.add(range);
      changed = true;
      continue;
    }
    final start = forward
        ? range.startOffset
        : (range.startOffset - 1).clamp(0, length);
    final end = forward
        ? (range.endOffset + 1).clamp(0, length)
        : range.endOffset;
    deletionRanges.add(
      TextSelectionRange(startOffset: start, endOffset: end),
    );
    if (start != end) changed = true;
  }
  if (!changed) return false;
  setSelections(
    TextSelectionSet(
      deletionRanges,
      primaryOffset: active.primary!.activeOffset,
    ),
  );
  return deleteSelections();
}