import 'package:flutter/material.dart'; class FadeOpenPageTransitionsBuilder extends PageTransitionsBuilder { /// Constructs a page transition animation that slides the page up. const FadeOpenPageTransitionsBuilder(); @override Widget buildTransitions( PageRoute? route, BuildContext? context, Animation animation, Animation? secondaryAnimation, Widget child, ) { return FadeOpenPageTransition(routeAnimation: animation, child: child); } } class FadeOpenPageTransition extends StatelessWidget { FadeOpenPageTransition({ Key? key, required Animation routeAnimation, // The route's linear 0.0 - 1.0 animation. required this.child, }) : _positionAnimation = routeAnimation.drive(_leftRightTween.chain(_fastOutSlowInTween)), _opacityAnimation = routeAnimation.drive(_easeInTween), super(key: key); // Fractional offset from 1/4 screen below the top to fully on screen. static final Tween _leftRightTween = Tween( begin: const Offset(0.5, 0.0), end: Offset.zero, ); static final Animatable _fastOutSlowInTween = CurveTween(curve: Curves.fastOutSlowIn); static final Animatable _easeInTween = CurveTween(curve: Curves.easeIn); final Animation _positionAnimation; final Animation _opacityAnimation; final Widget child; @override Widget build(BuildContext context) { return SlideTransition( position: _positionAnimation, child: FadeTransition( opacity: _opacityAnimation, child: child, ), ); } }