show static method
void
show(
- BuildContext context, {
- required String title,
- String? subtitle,
- IconData? icon,
- Color? iconColor,
- Color? backgroundColor,
- Gradient? gradient,
- Duration duration = const Duration(seconds: 3),
- SnackbarAnimation? animation,
- SnackbarAnimationDirection? startAnimation,
- SnackbarAnimationDirection? endAnimation,
- SnackbarType type = SnackbarType.info,
- bool dismissible = true,
- bool dismissOnTap = false,
- bool showProgressIndicator = false,
- BorderRadius? borderRadius,
- double? maxWidth,
- Color? borderColor,
- double borderWidth = 0,
- bool hideLikeCircle = false,
- VoidCallback? onTap,
- VoidCallback? onDismissed,
- double? blur,
- ImageFilter? backdropFilter,
- ContentDesignStyle designStyle = ContentDesignStyle.solid,
- Color? titleColor,
- Color? subtitleColor,
- bool showCloseButton = false,
Implementation
static void show(
BuildContext context, {
required String title,
String? subtitle,
IconData? icon,
Color? iconColor,
Color? backgroundColor,
Gradient? gradient,
Duration duration = const Duration(seconds: 3),
SnackbarAnimation? animation,
SnackbarAnimationDirection? startAnimation,
SnackbarAnimationDirection? endAnimation,
SnackbarType type = SnackbarType.info,
bool dismissible = true,
bool dismissOnTap = false,
bool showProgressIndicator = false,
BorderRadius? borderRadius,
double? maxWidth,
Color? borderColor,
double borderWidth = 0,
bool hideLikeCircle = false,
VoidCallback? onTap,
VoidCallback? onDismissed,
double? blur,
ImageFilter? backdropFilter,
ContentDesignStyle designStyle = ContentDesignStyle.solid,
Color? titleColor,
Color? subtitleColor,
bool showCloseButton = false,
}) {
// Hide any existing overlay
hide();
final overlayState = Overlay.of(context);
final mediaQuery = MediaQuery.of(context);
final topPadding = mediaQuery.padding.top;
const appBarHeight = 56.0; // Standard AppBar height
final topMargin = topPadding + appBarHeight + 12.0;
_overlayEntry = OverlayEntry(
builder: (context) => _TopSnackbarOverlayWidget(
title: title,
subtitle: subtitle,
icon: icon,
iconColor: iconColor,
backgroundColor: backgroundColor,
gradient: gradient,
animation: animation,
startAnimation: startAnimation,
endAnimation: endAnimation,
type: type,
dismissible: dismissible,
dismissOnTap: dismissOnTap,
showProgressIndicator: showProgressIndicator,
duration: duration,
borderRadius:
borderRadius ??
BorderRadius.circular(SnackbarConstants.borderRadius),
maxWidth: maxWidth ?? SnackbarConstants.maxWidth,
topMargin: topMargin,
borderColor: borderColor,
borderWidth: borderWidth,
hideLikeCircle: hideLikeCircle,
onTap: onTap,
onDismissed: () {
hide();
onDismissed?.call();
},
blur: blur,
backdropFilter: backdropFilter,
designStyle: designStyle,
titleColor: titleColor,
subtitleColor: subtitleColor,
showCloseButton: showCloseButton,
),
);
// Defer insert to avoid mouse_tracker assertion (_debugDuringDeviceUpdate).
// Inserting/removing overlay during build or hit-test can trigger the assertion.
final entryToInsert = _overlayEntry!;
WidgetsBinding.instance.addPostFrameCallback((_) {
if (_overlayEntry == entryToInsert) {
overlayState.insert(entryToInsert);
}
});
// Auto dismiss after duration
_timer = Timer(duration, () {
hide();
onDismissed?.call();
});
}