animation.dart 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. import 'package:animations/animations.dart';
  2. import 'package:flutter/material.dart';
  3. typedef PageBuilder = Widget Function();
  4. class PageRoutes {
  5. static const double kDefaultDuration = .35;
  6. static const Curve kDefaultEaseFwd = Curves.easeOut;
  7. static const Curve kDefaultEaseReverse = Curves.easeOut;
  8. static Route<T> fade<T>(PageBuilder pageBuilder,
  9. [double duration = kDefaultDuration]) {
  10. return PageRouteBuilder<T>(
  11. transitionDuration: Duration(milliseconds: (duration * 1000).round()),
  12. pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),
  13. transitionsBuilder: (context, animation, secondaryAnimation, child) {
  14. return FadeTransition(opacity: animation, child: child);
  15. },
  16. );
  17. }
  18. static Route<T> fadeThrough<T>(PageBuilder pageBuilder,
  19. [double duration = kDefaultDuration]) {
  20. return PageRouteBuilder<T>(
  21. transitionDuration: Duration(milliseconds: (duration * 1000).round()),
  22. pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),
  23. transitionsBuilder: (context, animation, secondaryAnimation, child) {
  24. return FadeThroughTransition(
  25. animation: animation,
  26. secondaryAnimation: secondaryAnimation,
  27. child: child);
  28. },
  29. );
  30. }
  31. static Route<T> fadeScale<T>(PageBuilder pageBuilder,
  32. [double duration = kDefaultDuration]) {
  33. return PageRouteBuilder<T>(
  34. transitionDuration: Duration(milliseconds: (duration * 1000).round()),
  35. pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),
  36. transitionsBuilder: (context, animation, secondaryAnimation, child) {
  37. return FadeScaleTransition(animation: animation, child: child);
  38. },
  39. );
  40. }
  41. static Route<T> sharedAxis<T>(PageBuilder pageBuilder,
  42. [SharedAxisTransitionType type = SharedAxisTransitionType.scaled,
  43. double duration = kDefaultDuration]) {
  44. return PageRouteBuilder<T>(
  45. transitionDuration: Duration(milliseconds: (duration * 1000).round()),
  46. pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),
  47. transitionsBuilder: (context, animation, secondaryAnimation, child) {
  48. return SharedAxisTransition(
  49. child: child,
  50. animation: animation,
  51. secondaryAnimation: secondaryAnimation,
  52. transitionType: type,
  53. );
  54. },
  55. );
  56. }
  57. static Route<T> slide<T>(PageBuilder pageBuilder,
  58. {double duration = kDefaultDuration,
  59. Offset startOffset = const Offset(1, 0),
  60. Curve easeFwd = kDefaultEaseFwd,
  61. Curve easeReverse = kDefaultEaseReverse}) {
  62. return PageRouteBuilder<T>(
  63. transitionDuration: Duration(milliseconds: (duration * 1000).round()),
  64. pageBuilder: (context, animation, secondaryAnimation) => pageBuilder(),
  65. transitionsBuilder: (context, animation, secondaryAnimation, child) {
  66. bool reverse = animation.status == AnimationStatus.reverse;
  67. return SlideTransition(
  68. position: Tween<Offset>(begin: startOffset, end: const Offset(0, 0))
  69. .animate(CurvedAnimation(
  70. parent: animation, curve: reverse ? easeReverse : easeFwd)),
  71. child: child,
  72. );
  73. },
  74. );
  75. }
  76. }