profile wallet linked with view model.
							parent
							
								
									c83754fc4a
								
							
						
					
					
						commit
						c00e69ef0c
					
				| @ -0,0 +1,59 @@ | ||||
| import 'package:flutter/material.dart'; | ||||
| import 'package:flutter/physics.dart'; | ||||
| 
 | ||||
| /// Reusable spring route | ||||
| class CustomPageRoute extends PageRouteBuilder { | ||||
|   final Widget page; | ||||
|   final AxisDirection direction; | ||||
| 
 | ||||
|   CustomPageRoute({required this.page, this.direction = AxisDirection.right}) | ||||
|       : super( | ||||
|           transitionDuration: const Duration(milliseconds: 1000), | ||||
|           pageBuilder: (_, __, ___) => page, | ||||
|           transitionsBuilder: (context, animation, secondaryAnimation, child) { | ||||
|             final spring = SpringDescription(mass: 1, stiffness: 100, damping: 15); | ||||
| 
 | ||||
|             // Drive animation with spring | ||||
|             final curvedAnimation = animation.drive( | ||||
|               Tween<double>(begin: 0.0, end: 1.0).chain(CurveTween(curve: _SpringCurve(spring))), | ||||
|             ); | ||||
| 
 | ||||
|             // Choose offset based on direction | ||||
|             Offset beginOffset; | ||||
|             switch (direction) { | ||||
|               case AxisDirection.left: | ||||
|                 beginOffset = const Offset(-1.0, 0.0); | ||||
|                 break; | ||||
|               case AxisDirection.right: | ||||
|                 beginOffset = const Offset(1.0, 0.0); | ||||
|                 break; | ||||
|               case AxisDirection.up: | ||||
|                 beginOffset = const Offset(0.0, -1.0); | ||||
|                 break; | ||||
|               case AxisDirection.down: | ||||
|                 beginOffset = const Offset(0.0, 1.0); | ||||
|                 break; | ||||
|             } | ||||
| 
 | ||||
|             final offsetAnimation = Tween<Offset>(begin: beginOffset, end: Offset.zero).animate(curvedAnimation); | ||||
| 
 | ||||
|             return SlideTransition( | ||||
|               position: offsetAnimation, | ||||
|               child: child, | ||||
|             ); | ||||
|           }, | ||||
|         ); | ||||
| } | ||||
| 
 | ||||
| /// Custom spring curve | ||||
| class _SpringCurve extends Curve { | ||||
|   final SpringDescription spring; | ||||
| 
 | ||||
|   _SpringCurve(this.spring); | ||||
| 
 | ||||
|   @override | ||||
|   double transform(double t) { | ||||
|     final sim = SpringSimulation(spring, 0, 1, 0); | ||||
|     return sim.x(t * 1.5); // scaled time | ||||
|   } | ||||
| } | ||||
| @ -0,0 +1,38 @@ | ||||
| import 'package:flutter/physics.dart'; | ||||
| import 'package:flutter/widgets.dart'; | ||||
| 
 | ||||
| PageRouteBuilder springPageRoute(Widget page) { | ||||
|   return PageRouteBuilder( | ||||
|     pageBuilder: (_, __, ___) => page, | ||||
|     transitionDuration: const Duration(milliseconds: 1000), | ||||
|     transitionsBuilder: (context, animation, secondaryAnimation, child) { | ||||
|       final spring = SpringDescription(mass: 1, stiffness: 100, damping: 15); | ||||
| 
 | ||||
|       final curvedAnimation = animation.drive( | ||||
|         Tween<double>(begin: 0.0, end: 1.0).chain(CurveTween(curve: _SpringCurve(spring))), | ||||
|       ); | ||||
| 
 | ||||
|       final offsetAnimation = Tween<Offset>( | ||||
|         begin: const Offset(-1.0, 0.0), // slide from left | ||||
|         end: Offset.zero, | ||||
|       ).animate(curvedAnimation); | ||||
| 
 | ||||
|       return SlideTransition( | ||||
|         position: offsetAnimation, | ||||
|         child: child, | ||||
|       ); | ||||
|     }, | ||||
|   ); | ||||
| } | ||||
| 
 | ||||
| class _SpringCurve extends Curve { | ||||
|   final SpringDescription spring; | ||||
| 
 | ||||
|   _SpringCurve(this.spring); | ||||
| 
 | ||||
|   @override | ||||
|   double transform(double t) { | ||||
|     final sim = SpringSimulation(spring, 0, 1, 0); | ||||
|     return sim.x(t * 1.5); // scale time so it completes properly | ||||
|   } | ||||
| } | ||||
					Loading…
					
					
				
		Reference in New Issue