show static method

OverlayShower show({
  1. required Widget child,
  2. String? key,
  3. Curve? curve,
  4. Duration? appearDuration,
  5. Duration? dismissDuration,
  6. Duration? onScreenDuration,
  7. Offset? slideBegin,
  8. double? opacityBegin,
  9. Widget appearAnimatedBuilder(
    1. OverlayShower shower,
    2. AnimationController controller,
    3. Widget widget
    )?,
  10. Widget dismissAnimatedBuilder(
    1. OverlayShower shower,
    2. AnimationController controller,
    3. Widget widget
    )?,
})

Basic show with animation

Implementation

static OverlayShower show({
  required Widget child,
  String? key,
  Curve? curve,
  Duration? appearDuration,
  Duration? dismissDuration,
  Duration? onScreenDuration,
  // animation settings: only support slide & opacity now // default is opacity animation
  Offset? slideBegin,
  double? opacityBegin,
  Widget Function(OverlayShower shower, AnimationController controller, Widget widget)? appearAnimatedBuilder,
  Widget Function(OverlayShower shower, AnimationController controller, Widget widget)? dismissAnimatedBuilder,
}) {
  opacityBegin ??= (slideBegin == null ? 0.0 : opacityBegin);
  appearAnimatedBuilder ??= (shower, controller, widget) {
    Curve _curve = Interval(0.0, 1.0, curve: curve ?? Curves.linearToEaseOut);
    Animation<double> animateCurve = CurvedAnimation(curve: _curve, parent: controller);
    Animation<double>? opacity = opacityBegin == null ? null : Tween(begin: opacityBegin, end: 1.0).animate(animateCurve);
    Animation<Offset>? slide = slideBegin == null ? null : Tween<Offset>(begin: slideBegin, end: Offset.zero).animate(animateCurve);
    // Animation<Offset> slide = Tween<Offset>(begin: slideBegin, end:  Offset.zero).animate(controller);

    // 1. Using AnimatedWidget
    Widget? widgetSlide;
    if (slide != null) {
      widgetSlide = AnimatedBuilder(
        animation: slide,
        builder: (context, child) => Transform.translate(offset: slide.value, child: widget),
        child: widget,
      );
    }

    // 2. Using [__property__]Transition
    // Widget widgetSlide = SlideTransition(position: slide, child: widget);
    Widget? widgetFade;
    if (opacity != null) {
      widgetFade = FadeTransition(opacity: opacity, child: widgetSlide ?? widget);
    }
    return widgetFade ?? widgetSlide ?? widget;
  };

  return showWithAnimation(
    key: key,
    child: child,
    appearDuration: appearDuration,
    dismissDuration: dismissDuration,
    onScreenDuration: onScreenDuration,
    appearAnimatedBuilder: appearAnimatedBuilder,
    dismissAnimatedBuilder: dismissAnimatedBuilder,
  );
}