buildTransitions<T> method

  1. @override
Widget buildTransitions<T>(
  1. PageRoute<T> route,
  2. BuildContext context,
  3. Animation<double> animation,
  4. Animation<double> secondaryAnimation,
  5. Widget child,
)
override

Delegates to the builder for the current ThemeData.platform. If a builder for the current platform is not found, then the ZoomPageTransitionsBuilder is used.

MaterialPageRoute.buildTransitions delegates to this method.

Implementation

@override
Widget buildTransitions<T>(
  PageRoute<T> route,
  BuildContext context,
  Animation<double> animation,
  Animation<double> secondaryAnimation,
  Widget child,
) {
  final platform = Theme.of(context).platform;

  var matchingBuilder = builders[platform] ??
      const SharedAxisPageTransitionsBuilder(
        transitionType: SharedAxisTransitionType.scaled,
      );

  final isApple =
      platform == TargetPlatform.iOS || platform == TargetPlatform.macOS;
  final shouldUseCupertino =
      route.popGestureInProgress || (isApple && route.canPop);

  if (shouldUseCupertino) {
    matchingBuilder = const CupertinoPageTransitionsBuilder();
  }

  return matchingBuilder.buildTransitions<T>(
    route,
    context,
    animation,
    secondaryAnimation,
    child,
  );
}