createRoute static method

Route createRoute({
  1. required BuildContext buildContext,
  2. Widget? currentPage,
  3. required Widget destination,
  4. Curve curve = Curves.ease,
  5. AnimType animType = AnimType.slideStart,
  6. int duration = DEFAULT_TRANSITION_DURATION,
  7. Color cubicBackgroundColor = Colors.white,
})

Implementation

static Route createRoute(
    {required BuildContext buildContext,
    Widget? currentPage,
    required Widget destination,
    Curve curve = Curves.ease,
    AnimType animType = AnimType.slideStart,
    int duration = DEFAULT_TRANSITION_DURATION,
    Color cubicBackgroundColor = Colors.white}) {
  return PageRouteBuilder(
      pageBuilder: (buildContext, animation, anotherAnimation) {
        return animType == AnimType.cubic && currentPage != null
            ? currentPage
            : destination;
      },
      transitionDuration: Duration(milliseconds: duration),
      transitionsBuilder: (buildContext, animation, anotherAnimation, child) {
        animation = CurvedAnimation(curve: curve, parent: animation);

        switch (animType) {
          case AnimType.fade:
            return Align(
              child: FadeTransition(
                opacity: animation,
                child: child,
              ),
            );
          case AnimType.slideBottom:
            return SlideTransition(
              position: Tween(begin: Offset(0.0, 1.0), end: Offset(0.0, 0.0))
                  .animate(animation),
              child: child,
            );
            break;
          case AnimType.slideStart:
            return SlideTransition(
              position: Tween(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
                  .animate(animation),
              child: child,
            );
            break;
          case AnimType.size:
            return Align(
              child: SizeTransition(
                sizeFactor: animation,
                child: child,
                axisAlignment: 0.0,
              ),
            );
          case AnimType.scale:
            return Align(
              child: ScaleTransition(
                scale: animation,
                child: child,
              ),
            );
            break;
          case AnimType.rotate:
            return RotationTransition(
              turns: animation,
              child: child,
            );
          case AnimType.cubic:
            if (currentPage == null) {
              print(
                  'RouteAnimationHelper, currentPage param is mandatory for cubic transition...');
              return SlideTransition(
                position:
                    Tween(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
                        .animate(animation),
                child: child,
              );
            }

            return Stack(
              children: <Widget>[
                SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset.zero,
                    end: Offset(-1.0, 0.0),
                  ).animate(animation),
                  child: Container(
                    color: cubicBackgroundColor,
                    child: Transform(
                      transform: Matrix4.identity()
                        ..setEntry(3, 2, 0.003)
                        ..rotateY(pi / 2 * animation.value),
                      alignment: FractionalOffset.centerRight,
                      child: currentPage,
                    ),
                  ),
                ),
                SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset(1.0, 0.0),
                    end: Offset.zero,
                  ).animate(animation),
                  child: Container(
                    color: cubicBackgroundColor,
                    child: Transform(
                      transform: Matrix4.identity()
                        ..setEntry(3, 2, 0.003)
                        ..rotateY(pi / 2 * (animation.value - 1)),
                      alignment: FractionalOffset.centerLeft,
                      child: destination,
                    ),
                  ),
                )
              ],
            );
          default:
            return SlideTransition(
              position: Tween(begin: Offset(1.0, 0.0), end: Offset(0.0, 0.0))
                  .animate(animation),
              child: child,
            );
        }
      });
}