Unverified Commit 9407700a authored by Markus Aksli's avatar Markus Aksli Committed by GitHub

Dismiss text selection toolbar with ESC (#98511)

parent 95141061
...@@ -3150,6 +3150,7 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien ...@@ -3150,6 +3150,7 @@ class EditableTextState extends State<EditableText> with AutomaticKeepAliveClien
ReplaceTextIntent: _replaceTextAction, ReplaceTextIntent: _replaceTextAction,
UpdateSelectionIntent: _updateSelectionAction, UpdateSelectionIntent: _updateSelectionAction,
DirectionalFocusIntent: DirectionalFocusAction.forTextField(), DirectionalFocusIntent: DirectionalFocusAction.forTextField(),
DismissIntent: CallbackAction<DismissIntent>(onInvoke: (_) => hideToolbar(false)),
// Delete // Delete
DeleteCharacterIntent: _makeOverridable(_DeleteTextAction<DeleteCharacterIntent>(this, _characterBoundary)), DeleteCharacterIntent: _makeOverridable(_DeleteTextAction<DeleteCharacterIntent>(this, _characterBoundary)),
......
...@@ -1316,6 +1316,41 @@ void main() { ...@@ -1316,6 +1316,41 @@ void main() {
expect(find.text('Paste'), kIsWeb ? findsNothing : findsOneWidget); expect(find.text('Paste'), kIsWeb ? findsNothing : findsOneWidget);
}); });
testWidgets('can hide toolbar with DismissIntent', (WidgetTester tester) async {
await tester.pumpWidget(
MaterialApp(
home: EditableText(
backgroundCursorColor: Colors.grey,
controller: controller,
focusNode: focusNode,
style: textStyle,
cursorColor: cursorColor,
selectionControls: materialTextSelectionControls,
),
),
);
final EditableTextState state =
tester.state<EditableTextState>(find.byType(EditableText));
// Show the toolbar
state.renderEditable.selectWordsInRange(
from: Offset.zero,
cause: SelectionChangedCause.tap,
);
await tester.pump();
// On web, we don't let Flutter show the toolbar.
expect(state.showToolbar(), kIsWeb ? isFalse : isTrue);
await tester.pumpAndSettle();
expect(find.text('Paste'), kIsWeb ? findsNothing : findsOneWidget);
// Hide the menu using the DismissIntent.
await tester.sendKeyEvent(LogicalKeyboardKey.escape);
await tester.pump();
expect(find.text('Paste'), findsNothing);
});
testWidgets('Paste is shown only when there is something to paste', (WidgetTester tester) async { testWidgets('Paste is shown only when there is something to paste', (WidgetTester tester) async {
await tester.pumpWidget( await tester.pumpWidget(
MaterialApp( MaterialApp(
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment