From 04d83f40bd4838b1f38aa7f6e782926aae874158 Mon Sep 17 00:00:00 2001 From: ismailfarisi Date: Wed, 2 Feb 2022 02:15:21 +0530 Subject: [PATCH] added_barrier_dissmissable_pagebuilder_to_customtransitionpage --- go_router/example/lib/books/main.dart | 2 +- go_router/example/lib/transitions.dart | 12 ++++++--- go_router/lib/src/custom_transition_page.dart | 27 ++++++++----------- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/go_router/example/lib/books/main.dart b/go_router/example/lib/books/main.dart index d1736cd8..2f94639c 100644 --- a/go_router/example/lib/books/main.dart +++ b/go_router/example/lib/books/main.dart @@ -152,7 +152,7 @@ class FadeTransitionPage extends CustomTransitionPage { opacity: animation.drive(_curveTween), child: child, ), - child: child); + pageBuilder: (context, anim1, anim2) => child); static final _curveTween = CurveTween(curve: Curves.easeIn); } diff --git a/go_router/example/lib/transitions.dart b/go_router/example/lib/transitions.dart index dfbce80d..9e1a6160 100644 --- a/go_router/example/lib/transitions.dart +++ b/go_router/example/lib/transitions.dart @@ -25,7 +25,8 @@ class App extends StatelessWidget { path: '/fade', pageBuilder: (context, state) => CustomTransitionPage( key: state.pageKey, - child: const ExampleTransitionsScreen( + pageBuilder: (context, anim1, anim2) => + const ExampleTransitionsScreen( kind: 'fade', color: Colors.red, ), @@ -37,7 +38,8 @@ class App extends StatelessWidget { path: '/scale', pageBuilder: (context, state) => CustomTransitionPage( key: state.pageKey, - child: const ExampleTransitionsScreen( + pageBuilder: (context, anim1, anim2) => + const ExampleTransitionsScreen( kind: 'scale', color: Colors.green, ), @@ -49,7 +51,8 @@ class App extends StatelessWidget { path: '/slide', pageBuilder: (context, state) => CustomTransitionPage( key: state.pageKey, - child: const ExampleTransitionsScreen( + pageBuilder: (context, anim1, anim2) => + const ExampleTransitionsScreen( kind: 'slide', color: Colors.yellow, ), @@ -68,7 +71,8 @@ class App extends StatelessWidget { path: '/rotation', pageBuilder: (context, state) => CustomTransitionPage( key: state.pageKey, - child: const ExampleTransitionsScreen( + pageBuilder: (context, anim1, anim2) => + const ExampleTransitionsScreen( kind: 'rotation', color: Colors.purple, ), diff --git a/go_router/lib/src/custom_transition_page.dart b/go_router/lib/src/custom_transition_page.dart index 43123ba3..57520e5b 100644 --- a/go_router/lib/src/custom_transition_page.dart +++ b/go_router/lib/src/custom_transition_page.dart @@ -10,7 +10,7 @@ class CustomTransitionPage extends Page { /// To be used instead of MaterialPage or CupertinoPage, which provide /// their own transitions. const CustomTransitionPage({ - required this.child, + required this.pageBuilder, required this.transitionsBuilder, this.transitionDuration = const Duration(milliseconds: 300), this.maintainState = true, @@ -31,7 +31,7 @@ class CustomTransitionPage extends Page { ); /// The content to be shown in the Route created by this page. - final Widget child; + final RoutePageBuilder pageBuilder; /// A duration argument to customize the duration of the custom page /// transition. @@ -134,7 +134,7 @@ class _CustomTransitionPageRoute extends PageRoute { Semantics( scopesRoute: true, explicitChildNodes: true, - child: _page.child, + child: _page.pageBuilder(context, animation, secondaryAnimation), ); @override @@ -155,26 +155,21 @@ class _CustomTransitionPageRoute extends PageRoute { /// Custom transition page with no transition. class NoTransitionPage extends CustomTransitionPage { /// Constructor for a page with no transition functionality. - const NoTransitionPage({ - required Widget child, + NoTransitionPage({ + required this.child, + LocalKey? key, String? name, Object? arguments, String? restorationId, - LocalKey? key, }) : super( - transitionsBuilder: _transitionsBuilder, - transitionDuration: const Duration(microseconds: 1), // hack for #205 + pageBuilder: (context, animation, secondaryAnimation) => child, + transitionsBuilder: + (context, animation, secondaryAnimation, lchild) => lchild, + transitionDuration: const Duration(microseconds: 1), key: key, name: name, arguments: arguments, restorationId: restorationId, - child: child, ); - - static Widget _transitionsBuilder( - BuildContext context, - Animation animation, - Animation secondaryAnimation, - Widget child) => - child; + final Widget child; }