deleteAtSelections method
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();
}