showOverlay function
OverlayMixinDelegate<OverlayMixin>
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 onTap(
- OverlayMixin owner
- Widget builder(
- BuildContext context,
- Widget child
- Widget transition(
- Widget child,
- 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;
}