showOverlay function

OverlayMixinDelegate<OverlayMixin> showOverlay(
  1. Widget content, {
  2. Duration duration = const Duration(seconds: 3),
  3. Duration animationDuration = const Duration(milliseconds: 300),
  4. Duration delayDuration = Duration.zero,
  5. bool? closeOndismissed,
  6. Color? color,
  7. BorderRadius? radius,
  8. bool removeAll = true,
  9. double? left = 0,
  10. double? right = 0,
  11. double? top = 0,
  12. double? bottom = 0,
  13. EdgeInsets? margin,
  14. NopOverlayPosition position = NopOverlayPosition.none,
  15. Object? showKey,
  16. bool autoShow = true,
  17. void onTap(
    1. OverlayMixin owner
    )?,
  18. Widget builder(
    1. BuildContext context,
    2. Widget child
    )?,
  19. Widget transition(
    1. Widget child,
    2. UserGestureController<OverlayPannelBuilder> controller
    )?,
})

Implementation

OverlayMixinDelegate showOverlay(
  Widget content, {
  Duration duration = const Duration(seconds: 3),
  Duration animationDuration = const Duration(milliseconds: 300),
  Duration delayDuration = Duration.zero,
  bool? closeOndismissed,
  Color? color,
  BorderRadius? radius,
  bool removeAll = true,
  double? left = 0,
  double? right = 0,
  double? top = 0,
  double? bottom = 0,
  EdgeInsets? margin,
  NopOverlayPosition position = NopOverlayPosition.none,
  Object? showKey,
  bool autoShow = true,
  void Function(OverlayMixin owner)? onTap,
  Widget Function(BuildContext context, Widget child)? builder,
  Widget Function(
          Widget child, UserGestureController<OverlayPannelBuilder> controller)?
      transition,
}) {
  final offset = _getOffsetFrom(position);

  final controller = OverlayPannelBuilder(
    showKey: showKey,
    closeOndismissed: closeOndismissed ?? true,
    stay: duration,
    builder: (context, self) {
      final key = GlobalKey();

      Widget Function(Widget child)? localTransition;
      if (transition != null) {
        localTransition = (Widget child) {
          return transition(child, self);
        };
      } else if (offset != null) {
        localTransition = (Widget child) {
          return AnimatedBuilder(
            animation: self.userGesture,
            builder: (context, _) {
              if (self.userGesture.value) {
                final position = self.owner.controller.drive(offset);

                return SlideTransition(position: position, child: child);
              }

              return CurvedAnimationWidget(
                builder: (context, animation) {
                  final position = animation.drive(offset);
                  return SlideTransition(position: position, child: child);
                },
                controller: self.owner.controller,
              );
            },
          );
        };
      }

      VoidCallback? _onTap;
      if (onTap != null) {
        _onTap = () {
          onTap(self.owner);
        };
      }
      return OverlaySideGesture(
        sizeKey: key,
        entry: self,
        top: position == NopOverlayPosition.bottom ? null : top,
        left: position == NopOverlayPosition.right ? null : left,
        right: position == NopOverlayPosition.left ? null : right,
        bottom: position == NopOverlayPosition.top ? null : bottom,
        transition: localTransition,
        onTap: _onTap,
        builder: (context) {
          Widget child = OverlayWidget(
            content: content,
            sizeKey: key,
            color: color,
            radius: radius,
            margin: margin,
            removeAll: removeAll,
            position: position,
          );
          if (builder != null) {
            child = builder(context, child);
          }
          return child;
        },
      );
    },
  );

  final overlay = OverlayMixinDelegate(controller, animationDuration,
      delayDuration: delayDuration);
  if (autoShow) overlay.show();
  return overlay;
}