build static method

Widget build(
  1. NeuronPageTransition transition,
  2. Animation<double> animation,
  3. Animation<double> secondaryAnimation,
  4. Widget child,
  5. NeuronTransitionSpec spec,
)

Implementation

static Widget build(
  NeuronPageTransition transition,
  Animation<double> animation,
  Animation<double> secondaryAnimation,
  Widget child,
  NeuronTransitionSpec spec,
) {
  switch (transition) {
    case NeuronPageTransition.fade:
      return FadeTransition(opacity: animation, child: child);

    case NeuronPageTransition.fadeScale:
      return FadeTransition(
        opacity: animation,
        child: ScaleTransition(
          scale: Tween<double>(begin: 0.92, end: 1.0).animate(animation),
          alignment: spec.alignment,
          child: child,
        ),
      );

    case NeuronPageTransition.fadeThrough:
      final fadeOut =
          Tween<double>(begin: 1, end: 0).animate(secondaryAnimation);
      final fadeIn = Tween<double>(begin: 0, end: 1).animate(animation);
      final scaleIn = Tween<double>(begin: 0.92, end: 1).animate(animation);
      return FadeTransition(
        opacity: fadeIn,
        child: ScaleTransition(
          scale: scaleIn,
          child: FadeTransition(
            opacity: fadeOut,
            child: child,
          ),
        ),
      );

    case NeuronPageTransition.slide:
    case NeuronPageTransition.slideRight:
      return _slide(child, animation, const Offset(1, 0), spec);

    case NeuronPageTransition.slideLeft:
      return _slide(child, animation, const Offset(-1, 0), spec);

    case NeuronPageTransition.slideUp:
      return _slide(child, animation, const Offset(0, 1), spec);

    case NeuronPageTransition.slideDown:
      return _slide(child, animation, const Offset(0, -1), spec);

    case NeuronPageTransition.slideAndFade:
      return FadeTransition(
        opacity: animation,
        child: _slide(child, animation, const Offset(0.12, 0), spec),
      );

    case NeuronPageTransition.scale:
      return ScaleTransition(
        scale: Tween<double>(begin: 0.9, end: 1.0).animate(animation),
        alignment: spec.alignment,
        child: child,
      );

    case NeuronPageTransition.rotation:
      return RotationTransition(
        turns: Tween<double>(begin: -0.02, end: 0.0).animate(animation),
        child: FadeTransition(opacity: animation, child: child),
      );

    case NeuronPageTransition.size:
      return Align(
        alignment: spec.alignment,
        child: SizeTransition(
          sizeFactor: animation,
          axisAlignment: -1,
          child: child,
        ),
      );

    case NeuronPageTransition.depth:
      return AnimatedBuilder(
        animation: animation,
        builder: (context, _) {
          final scale =
              Tween<double>(begin: 0.95, end: 1.0).transform(animation.value);
          final opacity =
              Tween<double>(begin: 0.0, end: 1.0).transform(animation.value);
          return Transform.scale(
            scale: scale,
            alignment: spec.alignment,
            child: Opacity(opacity: opacity, child: child),
          );
        },
      );

    case NeuronPageTransition.parallax:
      return AnimatedBuilder(
        animation: animation,
        builder: (context, _) {
          final dx = Tween<double>(begin: spec.parallax, end: 0)
              .transform(animation.value);
          return FractionalTranslation(
            translation: Offset(dx, 0),
            child: child,
          );
        },
      );

    case NeuronPageTransition.zoomOut:
      return ScaleTransition(
        scale: Tween<double>(begin: 1.08, end: 1.0).animate(animation),
        alignment: spec.alignment,
        child: FadeTransition(opacity: animation, child: child),
      );

    case NeuronPageTransition.blur:
      return AnimatedBuilder(
        animation: animation,
        builder: (context, _) {
          final sigma = Tween<double>(begin: spec.blurSigma, end: 0)
              .transform(animation.value);
          return BackdropFilter(
            filter: ImageFilter.blur(sigmaX: sigma, sigmaY: sigma),
            child: FadeTransition(opacity: animation, child: child),
          );
        },
      );

    case NeuronPageTransition.flipX:
      return _flip(child, animation, Axis.horizontal);

    case NeuronPageTransition.flipY:
      return _flip(child, animation, Axis.vertical);

    case NeuronPageTransition.cube:
      return _cube(child, animation);

    case NeuronPageTransition.sharedAxisX:
      return _sharedAxis(child, animation, Axis.horizontal);

    case NeuronPageTransition.sharedAxisY:
      return _sharedAxis(child, animation, Axis.vertical);

    case NeuronPageTransition.sharedAxisZ:
      return _sharedAxis(child, animation, Axis.horizontal, scale: true);

    case NeuronPageTransition.material:
      return FadeTransition(
        opacity: animation,
        child: SlideTransition(
          position: Tween<Offset>(
            begin: const Offset(0, 0.08),
            end: Offset.zero,
          ).animate(animation),
          child: child,
        ),
      );

    case NeuronPageTransition.cupertino:
      // Handled in _buildPageRoute via CupertinoPageRoute, included for exhaustiveness.
      return child;

    case NeuronPageTransition.custom:
      return child;

    case NeuronPageTransition.none:
      return child;
  }
}