createRoute static method
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,
})
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,
);
}
});
}