showWithAnimation static method
OverlayShower
showWithAnimation({
- required Widget child,
- String? key,
- Duration? appearDuration,
- Duration? dismissDuration,
- Duration? onScreenDuration,
- Widget appearAnimatedBuilder(
- OverlayShower shower,
- AnimationController controller,
- Widget widget
- Widget dismissAnimatedBuilder(
- OverlayShower shower,
- AnimationController controller,
- Widget widget
Implementation
static OverlayShower showWithAnimation({
required Widget child,
String? key,
Duration? appearDuration,
Duration? dismissDuration,
Duration? onScreenDuration,
Widget Function(OverlayShower shower, AnimationController controller, Widget widget)? appearAnimatedBuilder,
Widget Function(OverlayShower shower, AnimationController controller, Widget widget)? dismissAnimatedBuilder,
}) {
const Duration defaultDuration = Duration(milliseconds: 500);
return showWithTickerVsyncBuilder(
key: key,
tickerBuilder: (shower, vsync) {
AnimationController appearController = AnimationController(
vsync: vsync,
duration: appearDuration ?? defaultDuration,
reverseDuration: dismissDuration ?? defaultDuration,
);
void dismiss() {
if (dismissAnimatedBuilder != null) {
AnimationController dismissController = AnimationController(vsync: vsync, duration: dismissDuration ?? defaultDuration);
shower.setNewChild(dismissAnimatedBuilder(shower, dismissController, child));
dismissController.forward().then((value) {
shower.dismiss();
});
} else {
if (shower.isShowing) {
appearController.reverse().then((value) {
shower.dismiss();
});
}
}
}
if (onScreenDuration == Duration.zero) {
// put the controller to caller, if onScreenDuration == Duration.zero
shower.obj = [appearController, dismiss];
} else {
// default dismiss in 3 seconds
Duration duration = onScreenDuration ?? const Duration(milliseconds: 3000);
Timer dismissTimer = Timer(duration, () {
dismiss();
});
// put the timer to caller, if onScreenDuration != Duration.zero
shower.obj = [dismissTimer, dismiss];
}
shower.addDismissCallBack((shower) {
appearController.dispose();
});
if (appearAnimatedBuilder == null) {
// 1. Using Opacity & Shower's builder default
appearController.addListener(() {
shower.setState(() {});
});
Animation<double> opacity = Tween(begin: 0.0, end: 1.0).animate(appearController);
shower.builder = (shower) {
return Opacity(opacity: opacity.value, child: child);
};
} else {
// 2. Using animation widget
shower.setNewChild(appearAnimatedBuilder(shower, appearController, child));
}
// start the show animation
appearController.forward();
});
}