moveCursorToOffset function
TextCursorCommandResult
moveCursorToOffset(
{ - required int textLength,
- required int cursorOffset,
- int? selectionBaseOffset,
- int? selectionExtentOffset,
- required int targetOffset,
- bool extendSelection = false,
- bool clearSelection = true,
- bool preserveCollapsedSelection = false,
})
Implementation
TextCursorCommandResult moveCursorToOffset({
required int textLength,
required int cursorOffset,
int? selectionBaseOffset,
int? selectionExtentOffset,
required int targetOffset,
bool extendSelection = false,
bool clearSelection = true,
bool preserveCollapsedSelection = false,
}) {
final clampedCursor = cursorOffset.clamp(0, textLength);
final clampedBase = selectionBaseOffset?.clamp(0, textLength);
final clampedExtent = selectionExtentOffset?.clamp(0, textLength);
final clampedTarget = targetOffset.clamp(0, textLength);
if (!extendSelection) {
final nextBase = clearSelection ? null : clampedBase;
final nextExtent = clearSelection ? null : clampedExtent;
if (clampedTarget == clampedCursor &&
nextBase == clampedBase &&
nextExtent == clampedExtent) {
return _unchangedCursorResult(
cursorOffset: clampedCursor,
selectionBaseOffset: clampedBase,
selectionExtentOffset: clampedExtent,
);
}
return TextCursorCommandResult(
cursorOffset: clampedTarget,
selectionBaseOffset: nextBase,
selectionExtentOffset: nextExtent,
);
}
final anchor = clampedBase ?? clampedCursor;
if (anchor == clampedTarget && !preserveCollapsedSelection) {
final selectionChanged = clampedBase != null || clampedExtent != null;
if (clampedTarget == clampedCursor && !selectionChanged) {
return _unchangedCursorResult(cursorOffset: clampedCursor);
}
return TextCursorCommandResult(cursorOffset: clampedTarget);
}
if (clampedTarget == clampedCursor &&
clampedBase == anchor &&
clampedExtent == clampedTarget) {
return _unchangedCursorResult(
cursorOffset: clampedCursor,
selectionBaseOffset: clampedBase,
selectionExtentOffset: clampedExtent,
);
}
return TextCursorCommandResult(
cursorOffset: clampedTarget,
selectionBaseOffset: anchor,
selectionExtentOffset: clampedTarget,
);
}