correctCaretOffset function
TextEditingValue
correctCaretOffset(
- TextEditingValue value,
- InlineSpan textSpan,
- TextInputConnection? textInputConnection, {
- TextSelection? newSelection,
correct caret Offset make sure caret is not in text when caretIn is false
Implementation
TextEditingValue correctCaretOffset(TextEditingValue value, InlineSpan textSpan,
TextInputConnection? textInputConnection,
{TextSelection? newSelection}) {
final TextSelection selection = newSelection ?? value.selection;
if (selection.isValid && selection.isCollapsed) {
int caretOffset = selection.extentOffset;
// correct caret Offset
// make sure caret is not in text when deleteAll is true
//
textSpan.visitChildren((InlineSpan span) {
if (span is SpecialInlineSpanBase &&
(span as SpecialInlineSpanBase).deleteAll) {
final SpecialInlineSpanBase specialTs = span as SpecialInlineSpanBase;
if (caretOffset >= specialTs.start && caretOffset <= specialTs.end) {
if (caretOffset >
(specialTs.end - specialTs.start) / 2.0 + specialTs.start) {
//move caretOffset to end
caretOffset = specialTs.end;
} else {
caretOffset = specialTs.start;
}
return false;
}
}
return true;
});
///tell textInput caretOffset is changed.
if (caretOffset != selection.baseOffset) {
value = value.copyWith(
selection: selection.copyWith(
baseOffset: caretOffset, extentOffset: caretOffset));
textInputConnection?.setEditingState(value);
}
}
return value;
}