@@ -279,6 +279,67 @@ void main() {
279
279
expect (observations[0 ].previous, 'Page 1' );
280
280
});
281
281
282
+ testWidgets ('Can push, pop, and replace in sequence' , (WidgetTester tester) async {
283
+ const MaterialPage <void > initial = MaterialPage <void >(key: ValueKey <String >('initial' ), child: Text ('initial' ));
284
+ const MaterialPage <void > push = MaterialPage <void >(key: ValueKey <String >('push' ), child: Text ('push' ));
285
+ const MaterialPage <void > replace = MaterialPage <void >(key: ValueKey <String >('replace' ), child: Text ('replace' ));
286
+ List <Page <void >> pages = < Page <void >> [
287
+ initial
288
+ ];
289
+ bool popPageCallback (Route <dynamic > route, dynamic result) {
290
+ pages.removeLast ();
291
+ return route.didPop (result);
292
+ }
293
+ final GlobalKey <NavigatorState > navigator = GlobalKey <NavigatorState >();
294
+ await tester.pumpWidget (
295
+ TestDependencies (
296
+ child: Navigator (
297
+ key: navigator,
298
+ pages: pages,
299
+ onPopPage: popPageCallback,
300
+ ),
301
+ ),
302
+ );
303
+ expect (find.text ('initial' ), findsOneWidget);
304
+
305
+ // Push a new page
306
+ pages = < Page <void >> [
307
+ initial,
308
+ push
309
+ ];
310
+ await tester.pumpWidget (
311
+ TestDependencies (
312
+ child: Navigator (
313
+ key: navigator,
314
+ pages: pages,
315
+ onPopPage: popPageCallback,
316
+ ),
317
+ ),
318
+ );
319
+ await tester.pump (const Duration (milliseconds: 100 ));
320
+ expect (find.text ('push' ), findsOneWidget);
321
+
322
+ // Pop before push finishes.
323
+ navigator.currentState! .pop ();
324
+
325
+ // Replace the entire pages
326
+ // Push a new page
327
+ pages = < Page <void >> [
328
+ replace
329
+ ];
330
+ await tester.pumpWidget (
331
+ TestDependencies (
332
+ child: Navigator (
333
+ key: navigator,
334
+ pages: pages,
335
+ onPopPage: popPageCallback,
336
+ ),
337
+ ),
338
+ );
339
+ await tester.pumpAndSettle ();
340
+ expect (find.text ('replace' ), findsOneWidget);
341
+ });
342
+
282
343
testWidgets ('Navigator.of rootNavigator finds root Navigator' , (WidgetTester tester) async {
283
344
await tester.pumpWidget (MaterialApp (
284
345
home: Material (
0 commit comments