PageTransition<T> constructor

PageTransition<T>({
  1. required Widget builder(
    1. BuildContext context
    ),
  2. required PageTransitionType type,
  3. Curve curve = Curves.easeInOut,
  4. Alignment alignment = Alignment.center,
  5. Duration duration = const Duration(milliseconds: 600),
  6. RouteSettings? settings,
  7. bool maintainState = true,
})

Implementation

PageTransition({
  required this.builder,
  required this.type,
  this.curve = Curves.easeInOut,
  this.alignment = Alignment.center,
  this.duration = const Duration(milliseconds: 600),
  RouteSettings? settings,
  bool maintainState = true,
}) : super(
        pageBuilder: (context, animation, secondaryAnimation) {
          return builder(context);
        },
        transitionDuration: duration,
        settings: settings,
        maintainState: maintainState,
        transitionsBuilder: (context, animation, secondaryAnimation, child) {
          switch (type) {
            case PageTransitionType.rightToLeft:
              return SlideTransition(
                transformHitTests: false,
                position: Tween<Offset>(
                  begin: const Offset(1, 0),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset.zero,
                    end: const Offset(-1, 0),
                  ).animate(CurvedAnimation(
                      parent: secondaryAnimation, curve: curve)),
                  child: child,
                ),
              );

            case PageTransitionType.leftToRight:
              return SlideTransition(
                transformHitTests: false,
                position: Tween<Offset>(
                  begin: const Offset(-1, 0),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset.zero,
                    end: const Offset(1, 0),
                  ).animate(CurvedAnimation(
                      parent: secondaryAnimation, curve: curve)),
                  child: child,
                ),
              );
            case PageTransitionType.upToDown:
              return SlideTransition(
                transformHitTests: false,
                position: Tween<Offset>(
                  begin: const Offset(0, -1),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset.zero,
                    end: const Offset(0, 1),
                  ).animate(CurvedAnimation(
                      parent: secondaryAnimation, curve: curve)),
                  child: child,
                ),
              );
            case PageTransitionType.downToUp:
              return SlideTransition(
                transformHitTests: false,
                position: Tween<Offset>(
                  begin: const Offset(0, 1),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: SlideTransition(
                  position: Tween<Offset>(
                    begin: Offset.zero,
                    end: const Offset(0, -1),
                  ).animate(CurvedAnimation(
                      parent: secondaryAnimation, curve: curve)),
                  child: child,
                ),
              );
            case PageTransitionType.scale:
              return ScaleTransition(
                alignment: alignment,
                scale: CurvedAnimation(
                  parent: animation,
                  curve: Interval(
                    0,
                    0.50,
                    curve: curve,
                  ),
                ),
                child: child,
              );
            case PageTransitionType.rotate:
              return RotationTransition(
                alignment: alignment,
                turns: CurvedAnimation(parent: animation, curve: curve),
                child: ScaleTransition(
                  scale: CurvedAnimation(parent: animation, curve: curve),
                  child: FadeTransition(
                    opacity: animation,
                    child: child,
                  ),
                ),
              );
            case PageTransitionType.size:
              return Align(
                child: SizeTransition(
                  sizeFactor: CurvedAnimation(
                    parent: animation,
                    curve: curve,
                  ),
                  child: child,
                ),
              );
            case PageTransitionType.rightToLeftWithFade:
              return SlideTransition(
                position: Tween<Offset>(
                  begin: const Offset(1, 0),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: FadeTransition(
                  opacity: CurvedAnimation(parent: animation, curve: curve),
                  child: SlideTransition(
                    position: Tween<Offset>(
                      begin: Offset.zero,
                      end: const Offset(-1, 0),
                    ).animate(CurvedAnimation(
                        parent: secondaryAnimation, curve: curve)),
                    child: child,
                  ),
                ),
              );
            case PageTransitionType.leftToRightWithFade:
              return SlideTransition(
                position: Tween<Offset>(
                  begin: const Offset(-1, 0),
                  end: Offset.zero,
                ).animate(CurvedAnimation(parent: animation, curve: curve)),
                child: FadeTransition(
                  opacity: CurvedAnimation(parent: animation, curve: curve),
                  child: SlideTransition(
                    position: Tween<Offset>(
                      begin: Offset.zero,
                      end: const Offset(1, 0),
                    ).animate(CurvedAnimation(
                        parent: secondaryAnimation, curve: curve)),
                    child: child,
                  ),
                ),
              );
          }
        },
      );