[simplistic_editor] - Fix delete key on desktop and backspace key on Web (#1458)

* Do not propagate to default text intent

* Add support for backward and forward delete (desktop)

* Update for nice auto-format

* Fix using delete key throws if at the end of the text

Co-authored-by: Bruno Leroux <bruno.leroux@gmail.com>
pull/1460/head
Bruno Leroux 3 years ago committed by GitHub
parent a695bfca78
commit 06a159a465
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -299,7 +299,7 @@ class BasicTextInputClientState extends State<BasicTextInputClient>
TextSelection get _selection => _value.selection;
late final Map<Type, Action<Intent>> _actions = <Type, Action<Intent>>{
DeleteCharacterIntent: CallbackAction<DeleteCharacterIntent>(
onInvoke: (intent) => _delete(),
onInvoke: (intent) => _delete(intent.forward),
),
ExtendSelectionByCharacterIntent:
CallbackAction<ExtendSelectionByCharacterIntent>(
@ -315,22 +315,35 @@ class BasicTextInputClientState extends State<BasicTextInputClient>
PasteTextIntent: CallbackAction<PasteTextIntent>(
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;
}

Loading…
Cancel
Save