updateEditingValue method
Requests that this client update its editing state to the given value.
The new value is treated as user input and thus may subject to input
formatting.
Implementation
@override
void updateEditingValue(TextEditingValue value) {
_editing = value;
final composing = value.composing;
if (composing.isValid && !composing.isCollapsed) {
_composing = true;
onPreeditChanged(composing.textInside(value.text));
return;
}
_composing = false;
onPreeditChanged(null);
final baseline = kImeDeleteDetectionBaseline.text;
if (value.text.length < baseline.length) {
if (value.text.isNotEmpty && baseline.startsWith(value.text)) {
onBackspace();
} else if (value.text.isNotEmpty) {
// Some IMEs commit without the sentinel prefix (e.g. lone CJK).
onCommit(value.text);
}
_resetEditing(notify: false);
return;
}
if (value.text.length > baseline.length) {
final delta = value.text.substring(baseline.length);
if (delta.isNotEmpty) onCommit(delta);
_resetEditing(notify: false);
return;
}
if (value.text.isNotEmpty && value.text != baseline) {
onCommit(value.text);
_resetEditing(notify: false);
}
}