@@ -183,6 +183,47 @@ void main() {
183
183
expect ('$exception ' , startsWith ('Navigator operation requested with a context' ));
184
184
});
185
185
186
+ testWidgets ('Zero transition page-based route correctly notifies observers when it is popped' , (WidgetTester tester) async {
187
+ final List <Page <void >> pages = < Page <void >> [
188
+ const ZeroTransitionPage (name: 'Page 1' ),
189
+ const ZeroTransitionPage (name: 'Page 2' ),
190
+ ];
191
+ final List <NavigatorObservation > observations = < NavigatorObservation > [];
192
+
193
+ final TestObserver observer = TestObserver ()
194
+ ..onPopped = (Route <dynamic >? route, Route <dynamic >? previousRoute) {
195
+ observations.add (
196
+ NavigatorObservation (
197
+ current: route? .settings.name,
198
+ previous: previousRoute? .settings.name,
199
+ operation: 'pop' ,
200
+ ),
201
+ );
202
+ };
203
+ final GlobalKey <NavigatorState > navigator = GlobalKey <NavigatorState >();
204
+ await tester.pumpWidget (
205
+ Directionality (
206
+ textDirection: TextDirection .ltr,
207
+ child: Navigator (
208
+ key: navigator,
209
+ pages: pages,
210
+ observers: < NavigatorObserver > [observer],
211
+ onPopPage: (Route <dynamic > route, dynamic result) {
212
+ pages.removeLast ();
213
+ return route.didPop (result);
214
+ },
215
+ ),
216
+ ),
217
+ );
218
+
219
+ navigator.currentState! .pop ();
220
+ await tester.pump ();
221
+
222
+ expect (observations.length, 1 );
223
+ expect (observations[0 ].current, 'Page 2' );
224
+ expect (observations[0 ].previous, 'Page 1' );
225
+ });
226
+
186
227
testWidgets ('Navigator.of rootNavigator finds root Navigator' , (WidgetTester tester) async {
187
228
await tester.pumpWidget (MaterialApp (
188
229
home: Material (
@@ -3941,6 +3982,22 @@ class AlwaysRemoveTransitionDelegate extends TransitionDelegate<void> {
3941
3982
}
3942
3983
}
3943
3984
3985
+ class ZeroTransitionPage extends Page <void > {
3986
+ const ZeroTransitionPage ({
3987
+ LocalKey ? key,
3988
+ Object ? arguments,
3989
+ required String name,
3990
+ }) : super (key: key, name: name, arguments: arguments);
3991
+
3992
+ @override
3993
+ Route <void > createRoute (BuildContext context) {
3994
+ return NoAnimationPageRoute (
3995
+ settings: this ,
3996
+ pageBuilder: (BuildContext context) => Text (name! ),
3997
+ );
3998
+ }
3999
+ }
4000
+
3944
4001
class TestPage extends Page <void > {
3945
4002
const TestPage ({
3946
4003
LocalKey ? key,
@@ -3958,15 +4015,17 @@ class TestPage extends Page<void> {
3958
4015
}
3959
4016
3960
4017
class NoAnimationPageRoute extends PageRouteBuilder <void > {
3961
- NoAnimationPageRoute ({required WidgetBuilder pageBuilder})
3962
- : super (pageBuilder: (BuildContext context, __, ___) {
3963
- return pageBuilder (context);
3964
- });
3965
-
3966
- @override
3967
- AnimationController createAnimationController () {
3968
- return super .createAnimationController ()..value = 1.0 ;
3969
- }
4018
+ NoAnimationPageRoute ({
4019
+ RouteSettings ? settings,
4020
+ required WidgetBuilder pageBuilder
4021
+ }) : super (
4022
+ settings: settings,
4023
+ transitionDuration: Duration .zero,
4024
+ reverseTransitionDuration: Duration .zero,
4025
+ pageBuilder: (BuildContext context, __, ___) {
4026
+ return pageBuilder (context);
4027
+ }
4028
+ );
3970
4029
}
3971
4030
3972
4031
class StatefulTestWidget extends StatefulWidget {
0 commit comments