2 changed files with 104 additions and 29 deletions
-
67lib/core/widgets/animations/slide_down_fade.dart
-
66lib/features/home/presentation/ui/home_page.dart
@ -0,0 +1,67 @@ |
|||
import 'package:flutter/material.dart'; |
|||
|
|||
class SlideDownFade extends StatefulWidget { |
|||
const SlideDownFade({ |
|||
super.key, |
|||
required this.child, |
|||
this.delay = Duration.zero, |
|||
}); |
|||
|
|||
final Widget child; |
|||
final Duration delay; |
|||
|
|||
@override |
|||
State<SlideDownFade> createState() => _SlideDownFadeState(); |
|||
} |
|||
|
|||
class _SlideDownFadeState extends State<SlideDownFade> |
|||
with SingleTickerProviderStateMixin { |
|||
late AnimationController _controller; |
|||
late Animation<double> _fadeAnim; |
|||
late Animation<Offset> _slideAnim; |
|||
|
|||
@override |
|||
void initState() { |
|||
super.initState(); |
|||
_controller = AnimationController( |
|||
vsync: this, |
|||
duration: Duration(milliseconds: 500), |
|||
reverseDuration: Duration(milliseconds: 500), |
|||
); |
|||
|
|||
_fadeAnim = Tween<double>( |
|||
begin: 0, |
|||
end: 1, |
|||
).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); |
|||
|
|||
_slideAnim = Tween<Offset>( |
|||
begin: Offset(0, -0.1), |
|||
end: Offset.zero, |
|||
).animate(CurvedAnimation(parent: _controller, curve: Curves.easeIn)); |
|||
startAnim(); |
|||
} |
|||
|
|||
Future<void> startAnim() async { |
|||
await Future.delayed(widget.delay, () { |
|||
_controller.forward(); |
|||
}); |
|||
} |
|||
|
|||
@override |
|||
void dispose() { |
|||
_controller.dispose(); |
|||
super.dispose(); |
|||
} |
|||
|
|||
@override |
|||
Widget build(BuildContext context) { |
|||
return AnimatedBuilder( |
|||
animation: _controller, |
|||
child: widget.child, |
|||
builder: (context, child) => FadeTransition( |
|||
opacity: _fadeAnim, |
|||
child: SlideTransition(position: _slideAnim, child: child), |
|||
), |
|||
); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue