showOverlay static method
void
showOverlay({
- required Widget child,
- Duration duration = const Duration(seconds: 3),
- Duration animationDuration = const Duration(milliseconds: 250),
- Alignment alignment = Alignment.topCenter,
- EdgeInsets padding = const EdgeInsets.all(20),
- bool dismissOnTap = false,
- VoidCallback? onDismiss,
Implementation
static void showOverlay({
required Widget child,
Duration duration = const Duration(seconds: 3),
Duration animationDuration = const Duration(milliseconds: 250),
Alignment alignment = Alignment.topCenter,
EdgeInsets padding = const EdgeInsets.all(20),
bool dismissOnTap = false,
VoidCallback? onDismiss,
}) {
dismissOverlay();
final OverlayEntry overlay = OverlayEntry(
builder: (BuildContext context) => SafeArea(
child: Padding(
padding: padding,
child: Align(
alignment: alignment,
// Fade the overlay in for a smoother appearance
child: TweenAnimationBuilder<double>(
tween: Tween<double>(begin: 0, end: 1),
duration: animationDuration,
builder: (BuildContext context, double opacity, Widget? animatedChild) => Opacity(opacity: opacity, child: animatedChild),
child: Material(
color: Colors.transparent,
child: dismissOnTap
? GestureDetector(
onTap: () {
dismissOverlay();
onDismiss?.call();
},
child: child,
)
: child,
),
),
),
),
),
);
_currentOverlay = overlay;
Overlay.of(navigatorKey.currentContext!).insert(overlay);
if (duration != Duration.zero) {
Future<void>.delayed(duration, () {
dismissOverlay();
onDismiss?.call();
});
}
}