openConnectionIfNeeded method

void openConnectionIfNeeded()
inherited

Implementation

void openConnectionIfNeeded() {
  if (!shouldCreateInputConnection) {
    return;
  }

  if (!hasConnection) {
    _lastKnownRemoteTextEditingValue = textEditingValue;
    _textInputConnection = TextInput.attach(
      this,
      TextInputConfiguration(
        inputType: TextInputType.multiline,
        readOnly: widget.config.readOnly,
        inputAction: widget.config.textInputAction,
        enableSuggestions: !widget.config.readOnly,
        keyboardAppearance: createKeyboardAppearance(),
        textCapitalization: widget.config.textCapitalization,
        allowedMimeTypes: widget.config.contentInsertionConfiguration == null
            ? const <String>[]
            : widget.config.contentInsertionConfiguration!.allowedMimeTypes,
        viewId: View.of(context).viewId,
      ),
    );

    _updateSizeAndTransform();
    //update IME position for Windows
    _updateComposingRectIfNeeded();
    //update IME position for Macos
    _updateCaretRectIfNeeded();

    /// Trap selection extends off end of document
    if (_lastKnownRemoteTextEditingValue != null) {
      if (_lastKnownRemoteTextEditingValue!.selection.end >
          _lastKnownRemoteTextEditingValue!.text.length) {
        _lastKnownRemoteTextEditingValue = _lastKnownRemoteTextEditingValue!
            .copyWith(
                selection: _lastKnownRemoteTextEditingValue!.selection
                    .copyWith(
                        extentOffset:
                            _lastKnownRemoteTextEditingValue!.text.length));
      }
    }
    _textInputConnection!.setEditingState(_lastKnownRemoteTextEditingValue!);
  }
  _textInputConnection!.show();
}