injectSpecialKey method

void injectSpecialKey(
  1. String key
)

Implementation

void injectSpecialKey(String key) {
  if (_activeController == null) return;
  final ctrl = _activeController!;
  final text = ctrl.text;
  final sel = ctrl.selection;
  final pos = sel.start < 0 ? text.length : sel.start;

  switch (key) {
    case 'backspace':
      if (pos > 0) {
        final newText = text.replaceRange(
          sel.start == sel.end ? pos - 1 : sel.start,
          sel.end < 0 ? text.length : sel.end,
          '',
        );
        ctrl.value = TextEditingValue(
          text: newText,
          selection: TextSelection.collapsed(
            offset: sel.start == sel.end ? pos - 1 : sel.start,
          ),
        );
      }
      break;

    case 'enter':
    // Submit the focused field
      _focusedNode?.unfocus();
      break;

    case 'escape':
      _focusedNode?.unfocus();
      break;

    case 'space':
      injectText(' ');
      break;

    case 'tab':
    // Move to next focusable widget
      _focusedNode?.nextFocus();
      break;

    case 'arrow_left':
      if (pos > 0) {
        ctrl.selection = TextSelection.collapsed(offset: pos - 1);
      }
      break;

    case 'arrow_right':
      if (pos < text.length) {
        ctrl.selection = TextSelection.collapsed(offset: pos + 1);
      }
      break;
  }
}