| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | import 'package:animations/animations.dart';import 'package:flutter/material.dart';typedef PageBuilder = Widget Function();class PageRoutes {  static const double kDefaultDuration = .35;  static const Curve kDefaultEaseFwd = Curves.easeOut;  static const Curve kDefaultEaseReverse = Curves.easeOut;  static Route<T> fade<T>(PageBuilder pageBuilder,      [double duration = kDefaultDuration]) {    return PageRouteBuilder<T>(      transitionDuration: Duration(milliseconds: (duration * 1000).round()),      pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),      transitionsBuilder: (context, animation, secondaryAnimation, child) {        return FadeTransition(opacity: animation, child: child);      },    );  }  static Route<T> fadeThrough<T>(PageBuilder pageBuilder,      [double duration = kDefaultDuration]) {    return PageRouteBuilder<T>(      transitionDuration: Duration(milliseconds: (duration * 1000).round()),      pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),      transitionsBuilder: (context, animation, secondaryAnimation, child) {        return FadeThroughTransition(            animation: animation,            secondaryAnimation: secondaryAnimation,            child: child);      },    );  }  static Route<T> fadeScale<T>(PageBuilder pageBuilder,      [double duration = kDefaultDuration]) {    return PageRouteBuilder<T>(      transitionDuration: Duration(milliseconds: (duration * 1000).round()),      pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),      transitionsBuilder: (context, animation, secondaryAnimation, child) {        return FadeScaleTransition(animation: animation, child: child);      },    );  }  static Route<T> sharedAxis<T>(PageBuilder pageBuilder,      [SharedAxisTransitionType type = SharedAxisTransitionType.scaled,      double duration = kDefaultDuration]) {    return PageRouteBuilder<T>(      transitionDuration: Duration(milliseconds: (duration * 1000).round()),      pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),      transitionsBuilder: (context, animation, secondaryAnimation, child) {        return SharedAxisTransition(          child: child,          animation: animation,          secondaryAnimation: secondaryAnimation,          transitionType: type,        );      },    );  }  static Route<T> slide<T>(PageBuilder pageBuilder,      {double duration = kDefaultDuration,      Offset startOffset = const Offset(1, 0),      Curve easeFwd = kDefaultEaseFwd,      Curve easeReverse = kDefaultEaseReverse}) {    return PageRouteBuilder<T>(      transitionDuration: Duration(milliseconds: (duration * 1000).round()),      pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),      transitionsBuilder: (context, animation, secondaryAnimation, child) {        bool reverse = animation.status == AnimationStatus.reverse;        return SlideTransition(          position: Tween<Offset>(begin: startOffset, end: const Offset(0, 0))              .animate(CurvedAnimation(                  parent: animation, curve: reverse ? easeReverse : easeFwd)),          child: child,        );      },    );  }}
 |