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;
}
}