@@ -1175,6 +1175,63 @@ void main() {
1175
1175
await tester.pump ();
1176
1176
expect (textField.controller! .text.length, 15 );
1177
1177
}, 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
+ });
1178
1235
}
1179
1236
1180
1237
class TestHomePage extends StatelessWidget {
@@ -1358,6 +1415,7 @@ class _TestEmptySearchDelegate extends SearchDelegate<String> {
1358
1415
}
1359
1416
1360
1417
class _MyNavigatorObserver extends NavigatorObserver {
1418
+ bool maintainState = false ;
1361
1419
int pushCount = 0 ;
1362
1420
1363
1421
@override
@@ -1366,6 +1424,9 @@ class _MyNavigatorObserver extends NavigatorObserver {
1366
1424
if (< String > ['nested' , '/' ].contains (route.settings.name)) {
1367
1425
return ;
1368
1426
}
1427
+ if (route is PageRoute ) {
1428
+ maintainState = route.maintainState;
1429
+ }
1369
1430
pushCount++ ;
1370
1431
}
1371
1432
}
0 commit comments