diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index ae601f82b..7190d5555 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -299,7 +299,7 @@ class BasicTextInputClientState extends State TextSelection get _selection => _value.selection; late final Map> _actions = >{ DeleteCharacterIntent: CallbackAction( - onInvoke: (intent) => _delete(), + onInvoke: (intent) => _delete(intent.forward), ), ExtendSelectionByCharacterIntent: CallbackAction( @@ -315,22 +315,35 @@ class BasicTextInputClientState extends State PasteTextIntent: CallbackAction( onInvoke: (intent) => pasteText(intent.cause), ), + DoNothingAndStopPropagationTextIntent: DoNothingAction( + consumesKey: false, + ), }; - void _delete() { + void _delete(bool forward) { if (_value.text.isEmpty) return; late final TextRange deletedRange; late final TextRange newComposing; - final int deletedLength = - _value.text.substring(0, _selection.baseOffset).characters.last.length; + late final String deletedText; + final int offset = _selection.baseOffset; if (_selection.isCollapsed) { - if (_selection.baseOffset == 0) return; - deletedRange = TextRange( - start: _selection.baseOffset - deletedLength, - end: _selection.baseOffset, - ); + if (forward) { + if (_selection.baseOffset == _value.text.length) return; + deletedText = _value.text.substring(offset).characters.first; + deletedRange = TextRange( + start: offset, + end: offset + deletedText.length, + ); + } else { + if (_selection.baseOffset == 0) return; + deletedText = _value.text.substring(0, offset).characters.last; + deletedRange = TextRange( + start: offset - deletedText.length, + end: offset, + ); + } } else { deletedRange = _selection; }