show static method

void show(
  1. BuildContext context, {
  2. required String title,
  3. String? subtitle,
  4. IconData? icon,
  5. Color? iconColor,
  6. Color? backgroundColor,
  7. Gradient? gradient,
  8. Duration duration = const Duration(seconds: 3),
  9. SnackbarAnimation? animation,
  10. SnackbarAnimationDirection? startAnimation,
  11. SnackbarAnimationDirection? endAnimation,
  12. SnackbarType type = SnackbarType.info,
  13. bool dismissible = true,
  14. bool dismissOnTap = false,
  15. bool showProgressIndicator = false,
  16. BorderRadius? borderRadius,
  17. double? maxWidth,
  18. Color? borderColor,
  19. double borderWidth = 0,
  20. bool hideLikeCircle = false,
  21. VoidCallback? onTap,
  22. VoidCallback? onDismissed,
  23. double? blur,
  24. ImageFilter? backdropFilter,
  25. ContentDesignStyle designStyle = ContentDesignStyle.solid,
  26. Color? titleColor,
  27. Color? subtitleColor,
  28. 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();
  });
}