updateEditingValue method

  1. @override
void updateEditingValue(
  1. TextEditingValue value
)
override

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);
  }
}