diff --git a/packages/flutter_test/lib/src/widget_tester.dart b/packages/flutter_test/lib/src/widget_tester.dart index ac1801db98..3098ee958c 100644 --- a/packages/flutter_test/lib/src/widget_tester.dart +++ b/packages/flutter_test/lib/src/widget_tester.dart @@ -1031,7 +1031,7 @@ class WidgetTester extends WidgetController implements HitTestDispatcher, Ticker final EditableTextState editable = state( find.descendant( of: finder, - matching: find.byType(EditableText), + matching: find.byType(EditableText, skipOffstage: finder.skipOffstage), matchRoot: true, ), ); diff --git a/packages/flutter_test/test/widget_tester_test.dart b/packages/flutter_test/test/widget_tester_test.dart index 458ced8ac1..de19c9fb79 100644 --- a/packages/flutter_test/test/widget_tester_test.dart +++ b/packages/flutter_test/test/widget_tester_test.dart @@ -611,25 +611,42 @@ void main() { }); }); - testWidgets('showKeyboard can be called twice', (WidgetTester tester) async { - await tester.pumpWidget( - MaterialApp( - home: Material( - child: Center( - child: TextFormField(), + group('showKeyboard', () { + testWidgets('can be called twice', (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: Center( + child: TextFormField(), + ), ), ), - ), - ); - await tester.showKeyboard(find.byType(TextField)); - await tester.testTextInput.receiveAction(TextInputAction.done); - await tester.pump(); - await tester.showKeyboard(find.byType(TextField)); - await tester.testTextInput.receiveAction(TextInputAction.done); - await tester.pump(); - await tester.showKeyboard(find.byType(TextField)); - await tester.showKeyboard(find.byType(TextField)); - await tester.pump(); + ); + await tester.showKeyboard(find.byType(TextField)); + await tester.testTextInput.receiveAction(TextInputAction.done); + await tester.pump(); + await tester.showKeyboard(find.byType(TextField)); + await tester.testTextInput.receiveAction(TextInputAction.done); + await tester.pump(); + await tester.showKeyboard(find.byType(TextField)); + await tester.showKeyboard(find.byType(TextField)); + await tester.pump(); + }); + + testWidgets( + 'can focus on offstage text input field if finder says not to skip offstage nodes', + (WidgetTester tester) async { + await tester.pumpWidget( + MaterialApp( + home: Material( + child: Offstage( + child: TextFormField(), + ), + ), + ), + ); + await tester.showKeyboard(find.byType(TextField, skipOffstage: false)); + }); }); testWidgets('verifyTickersWereDisposed control test', (WidgetTester tester) async {