diff --git a/packages/flutter/lib/src/rendering/editable.dart b/packages/flutter/lib/src/rendering/editable.dart index 171bdc776e7..3ddf506ca55 100644 --- a/packages/flutter/lib/src/rendering/editable.dart +++ b/packages/flutter/lib/src/rendering/editable.dart @@ -431,12 +431,17 @@ class RenderEditable extends RenderBox with RelayoutWhenSystemFontsChangeMixin { LogicalKeyboardKey.arrowDown, }; + static final Set _deleteKeys = { + LogicalKeyboardKey.delete, + LogicalKeyboardKey.backspace, + }; + static final Set _shortcutKeys = { LogicalKeyboardKey.keyA, LogicalKeyboardKey.keyC, LogicalKeyboardKey.keyV, LogicalKeyboardKey.keyX, - LogicalKeyboardKey.delete, + ..._deleteKeys, }; static final Set _nonModifierKeys = { @@ -491,7 +496,7 @@ class RenderEditable extends RenderBox with RelayoutWhenSystemFontsChangeMixin { // _handleShortcuts depends on being started in the same stack invocation // as the _handleKeyEvent method _handleShortcuts(key); - } else if (key == LogicalKeyboardKey.delete) { + } else if (_deleteKeys.contains(key)) { _handleDelete(); } } diff --git a/packages/flutter/test/widgets/editable_text_test.dart b/packages/flutter/test/widgets/editable_text_test.dart index 40f7b05181c..439beb7a45a 100644 --- a/packages/flutter/test/widgets/editable_text_test.dart +++ b/packages/flutter/test/widgets/editable_text_test.dart @@ -3738,6 +3738,51 @@ void main() { reason: 'on $platform', ); expect(controller.text, isEmpty, reason: 'on $platform'); + + /// Paste and Select All + await sendKeys( + tester, + [ + LogicalKeyboardKey.keyV, + LogicalKeyboardKey.keyA, + ], + shortcutModifier: true, + platform: platform, + ); + + expect( + selection, + equals( + const TextSelection( + baseOffset: 0, + extentOffset: testText.length, + affinity: TextAffinity.downstream, + ), + ), + reason: 'on $platform', + ); + expect(controller.text, equals(testText), reason: 'on $platform'); + + // Backspace + await sendKeys( + tester, + [ + LogicalKeyboardKey.delete, + ], + platform: platform, + ); + expect( + selection, + equals( + const TextSelection( + baseOffset: 0, + extentOffset: 72, + affinity: TextAffinity.downstream, + ), + ), + reason: 'on $platform', + ); + expect(controller.text, isEmpty, reason: 'on $platform'); } testWidgets('keyboard text selection works as expected on linux', (WidgetTester tester) async {