2 changed files with 104 additions and 29 deletions
-
67lib/core/widgets/animations/slide_down_fade.dart
-
8lib/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