anyCharacterToInsertInTextContent function
ExecutionInstruction
anyCharacterToInsertInTextContent({
- required EditContext editContext,
- required KeyEvent keyEvent,
Implementation
ExecutionInstruction anyCharacterToInsertInTextContent({
required EditContext editContext,
required KeyEvent keyEvent,
}) {
if (keyEvent is! KeyDownEvent && keyEvent is! KeyRepeatEvent) {
return ExecutionInstruction.continueExecution;
}
// Do nothing if CMD or CTRL are pressed because this signifies an attempted
// shortcut.
if (HardwareKeyboard.instance.isControlPressed || HardwareKeyboard.instance.isMetaPressed) {
return ExecutionInstruction.continueExecution;
}
if (editContext.composer.selection == null) {
return ExecutionInstruction.continueExecution;
}
if (!editContext.composer.selection!.isCollapsed) {
return ExecutionInstruction.continueExecution;
}
if (!_isTextEntryNode(
document: editContext.editor.document,
selection: editContext.composer.selection!,
)) {
return ExecutionInstruction.continueExecution;
}
if (keyEvent.character == null || keyEvent.character == '') {
return ExecutionInstruction.continueExecution;
}
if (LogicalKeyboardKey.isControlCharacter(keyEvent.character!) || keyEvent.isArrowKeyPressed) {
return ExecutionInstruction.continueExecution;
}
String character = keyEvent.character!;
// On web, keys like shift and alt are sending their full name
// as a character, e.g., "Shift" and "Alt". This check prevents
// those keys from inserting their name into content.
if (isKeyEventCharacterBlacklisted(character) && character != 'Tab') {
return ExecutionInstruction.continueExecution;
}
// The web reports a tab as "Tab". Intercept it and translate it to a space.
if (character == 'Tab') {
character = ' ';
}
final didInsertCharacter = editContext.commonOps.insertCharacter(character);
return didInsertCharacter ? ExecutionInstruction.haltExecution : ExecutionInstruction.continueExecution;
}