MIF_E31230910_MP-HRIS-MOBILE/lib/widgets/atoms/fade_in_up.dart

60 lines
1.5 KiB
Dart

import 'package:flutter/material.dart';
class FadeInUp extends StatefulWidget {
final Widget child;
final int delayMs;
final int durationMs;
const FadeInUp({
Key? key,
required this.child,
this.delayMs = 0,
this.durationMs = 500,
}) : super(key: key);
@override
State<FadeInUp> createState() => _FadeInUpState();
}
class _FadeInUpState extends State<FadeInUp> with SingleTickerProviderStateMixin {
late AnimationController _controller;
late Animation<double> _fade;
late Animation<Offset> _slide;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this, duration: Duration(milliseconds: widget.durationMs));
_fade = Tween<double>(begin: 0.0, end: 1.0)
.animate(CurvedAnimation(parent: _controller, curve: Curves.easeOutCubic));
_slide = Tween<Offset>(begin: const Offset(0, 0.15), end: Offset.zero)
.animate(CurvedAnimation(parent: _controller, curve: Curves.easeOutCubic));
if (widget.delayMs == 0) {
_controller.forward();
} else {
Future.delayed(Duration(milliseconds: widget.delayMs), () {
if (mounted) _controller.forward();
});
}
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return FadeTransition(
opacity: _fade,
child: SlideTransition(
position: _slide,
child: widget.child,
),
);
}
}