userUpdateTextEditingValue method
- TextEditingValue value,
- SelectionChangedCause? cause
override
Indicates that the user has requested the delegate to replace its current
text editing state with value
.
The new value
is treated as user input and thus may subject to input
formatting.
See also:
- EditableTextState.userUpdateTextEditingValue: an implementation that
applies additional pre-processing to the specified
value
, before updating the text editing state.
Implementation
@override
void userUpdateTextEditingValue(TextEditingValue value, SelectionChangedCause? cause) {
// Compare the current TextEditingValue with the pre-format new
// TextEditingValue value, in case the formatter would reject the change.
final bool shouldShowCaret = widget.readOnly
? _value.selection != value.selection
: _value != value;
if (shouldShowCaret) {
_scheduleShowCaretOnScreen(withAnimation: true);
}
// Even if the value doesn't change, it may be necessary to focus and build
// the selection overlay. For example, this happens when right clicking an
// unfocused field that previously had a selection in the same spot.
if (value == textEditingValue) {
if (!widget.focusNode.hasFocus) {
_flagInternalFocus();
widget.focusNode.requestFocus();
_selectionOverlay ??= _createSelectionOverlay();
}
return;
}
_formatAndSetValue(value, cause, userInteraction: true);
}