| // Copyright 2015 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| import 'basic.dart'; |
| import 'framework.dart'; |
| import 'navigator.dart'; |
| import 'routes.dart'; |
| |
| /// A modal route that replaces the entire screen. |
| abstract class PageRoute<T> extends ModalRoute<T> { |
| /// Creates a modal route that replaces the entire screen. |
| PageRoute({ |
| RouteSettings settings, |
| this.fullscreenDialog: false, |
| }) : super(settings: settings); |
| |
| /// Whether this page route is a full-screen dialog. |
| /// |
| /// In Material and Cupertino, being fullscreen has the effects of making |
| /// the app bars have a close button instead of a back button. On |
| /// iOS, dialogs transitions animate differently and are also not closeable |
| /// with the back swipe gesture. |
| final bool fullscreenDialog; |
| |
| @override |
| bool get opaque => true; |
| |
| @override |
| bool get barrierDismissible => false; |
| |
| @override |
| bool canTransitionTo(TransitionRoute<dynamic> nextRoute) => nextRoute is PageRoute; |
| |
| @override |
| bool canTransitionFrom(TransitionRoute<dynamic> previousRoute) => previousRoute is PageRoute; |
| |
| @override |
| AnimationController createAnimationController() { |
| final AnimationController controller = super.createAnimationController(); |
| if (settings.isInitialRoute) |
| controller.value = 1.0; |
| return controller; |
| } |
| } |
| |
| /// Signature for the [PageRouteBuilder] function that builds the route's |
| /// primary contents. |
| /// |
| /// See [ModalRoute.buildPage] for complete definition of the parameters. |
| typedef Widget RoutePageBuilder(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation); |
| |
| /// Signature for the [PageRouteBuilder] function that builds the route's |
| /// transitions. |
| /// |
| /// See [ModalRoute.buildTransitions] for complete definition of the parameters. |
| typedef Widget RouteTransitionsBuilder(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child); |
| |
| Widget _defaultTransitionsBuilder(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { |
| return child; |
| } |
| |
| /// A utility class for defining one-off page routes in terms of callbacks. |
| /// |
| /// Callers must define the [pageBuilder] function which creates the route's |
| /// primary contents. To add transitions define the [transitionsBuilder] function. |
| class PageRouteBuilder<T> extends PageRoute<T> { |
| /// Creates a route that delegates to builder callbacks. |
| /// |
| /// The [pageBuilder], [transitionsBuilder], [opaque], [barrierDismissible], |
| /// and [maintainState] arguments must not be null. |
| PageRouteBuilder({ |
| RouteSettings settings, |
| @required this.pageBuilder, |
| this.transitionsBuilder: _defaultTransitionsBuilder, |
| this.transitionDuration: const Duration(milliseconds: 300), |
| this.opaque: true, |
| this.barrierDismissible: false, |
| this.barrierColor, |
| this.barrierLabel, |
| this.maintainState: true, |
| }) : assert(pageBuilder != null), |
| assert(transitionsBuilder != null), |
| assert(barrierDismissible != null), |
| assert(maintainState != null), |
| assert(opaque != null), |
| super(settings: settings); |
| |
| /// Used build the route's primary contents. |
| /// |
| /// See [ModalRoute.buildPage] for complete definition of the parameters. |
| final RoutePageBuilder pageBuilder; |
| |
| /// Used to build the route's transitions. |
| /// |
| /// See [ModalRoute.buildTransitions] for complete definition of the parameters. |
| final RouteTransitionsBuilder transitionsBuilder; |
| |
| @override |
| final Duration transitionDuration; |
| |
| @override |
| final bool opaque; |
| |
| @override |
| final bool barrierDismissible; |
| |
| @override |
| final Color barrierColor; |
| |
| @override |
| final String barrierLabel; |
| |
| @override |
| final bool maintainState; |
| |
| @override |
| Widget buildPage(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation) { |
| return pageBuilder(context, animation, secondaryAnimation); |
| } |
| |
| @override |
| Widget buildTransitions(BuildContext context, Animation<double> animation, Animation<double> secondaryAnimation, Widget child) { |
| return transitionsBuilder(context, animation, secondaryAnimation, child); |
| } |
| |
| } |