@@ -1175,6 +1175,63 @@ void main() {
11751175 await tester.pump ();
11761176 expect (textField.controller! .text.length, 15 );
11771177 }, skip: kIsWeb); // [intended] We do not use Flutter-rendered context menu on the Web.
1178+
1179+ testWidgets ('showSearch with maintainState on the route' , (WidgetTester tester) async {
1180+ final _MyNavigatorObserver navigationObserver = _MyNavigatorObserver ();
1181+
1182+ final _TestEmptySearchDelegate delegate = _TestEmptySearchDelegate ();
1183+ addTearDown (delegate.dispose);
1184+
1185+ await tester.pumpWidget (MaterialApp (
1186+ navigatorObservers: < NavigatorObserver > [navigationObserver],
1187+ home: Builder (builder: (BuildContext context) => Column (
1188+ mainAxisAlignment: MainAxisAlignment .center,
1189+ children: < Widget > [
1190+ TextButton (
1191+ onPressed: () async {
1192+ await showSearch (
1193+ context: context,
1194+ delegate: delegate,
1195+ );
1196+ },
1197+ child: const Text ('showSearch' ),
1198+ ),
1199+ TextButton (
1200+ onPressed: () async {
1201+ await showSearch (
1202+ context: context,
1203+ delegate: delegate,
1204+ maintainState: true ,
1205+ );
1206+ },
1207+ child: const Text ('showSearchWithMaintainState' ),
1208+ ),
1209+ ],
1210+ )),
1211+ ));
1212+
1213+ expect (navigationObserver.pushCount, 0 );
1214+ expect (navigationObserver.maintainState, false );
1215+
1216+ // showSearch normal and back.
1217+ await tester.tap (find.text ('showSearch' ));
1218+ await tester.pumpAndSettle ();
1219+ final Finder backButtonFinder = find.byType (BackButton );
1220+ expect (backButtonFinder, findsWidgets);
1221+ await tester.tap (find.byTooltip ('Close' ));
1222+ await tester.pumpAndSettle ();
1223+ expect (navigationObserver.pushCount, 1 );
1224+ expect (navigationObserver.maintainState, false );
1225+
1226+ // showSearch with maintainState.
1227+ await tester.tap (find.text ('showSearchWithMaintainState' ));
1228+ await tester.pumpAndSettle ();
1229+ expect (backButtonFinder, findsWidgets);
1230+ await tester.tap (find.byTooltip ('Close' ));
1231+ await tester.pumpAndSettle ();
1232+ expect (navigationObserver.pushCount, 2 );
1233+ expect (navigationObserver.maintainState, true );
1234+ });
11781235}
11791236
11801237class TestHomePage extends StatelessWidget {
@@ -1358,6 +1415,7 @@ class _TestEmptySearchDelegate extends SearchDelegate<String> {
13581415}
13591416
13601417class _MyNavigatorObserver extends NavigatorObserver {
1418+ bool maintainState = false ;
13611419 int pushCount = 0 ;
13621420
13631421 @override
@@ -1366,6 +1424,9 @@ class _MyNavigatorObserver extends NavigatorObserver {
13661424 if (< String > ['nested' , '/' ].contains (route.settings.name)) {
13671425 return ;
13681426 }
1427+ if (route is PageRoute ) {
1428+ maintainState = route.maintainState;
1429+ }
13691430 pushCount++ ;
13701431 }
13711432}
0 commit comments