showVdSnackbar function

VdSnackbarEntry showVdSnackbar(
  1. BuildContext context, {
  2. required String message,
  3. String? action,
  4. VoidCallback? onAction,
  5. Widget? leadingIcon,
  6. bool closable = false,
  7. Duration duration = const Duration(seconds: 4),
})

Shows a bottom-anchored snackbar via the root Overlay.

Returns a VdSnackbarEntry that can be used to dismiss early.

Implementation

VdSnackbarEntry showVdSnackbar(
  BuildContext context, {
  required String message,
  String? action,
  VoidCallback? onAction,
  Widget? leadingIcon,
  bool closable = false,
  Duration duration = const Duration(seconds: 4),
}) {
  final overlay = Overlay.of(context, rootOverlay: true);
  final entry = VdSnackbarEntry._();

  late final OverlayEntry overlayEntry;

  void dismiss() {
    entry._dismiss();
  }

  overlayEntry = OverlayEntry(
    builder: (ctx) => _VdSnackbarOverlay(
      message: message,
      action: action,
      onAction: () {
        onAction?.call();
        dismiss();
      },
      leadingIcon: leadingIcon,
      closable: closable,
      onClose: dismiss,
      onDismissed: () {
        overlayEntry.remove();
        entry._onRemoved();
      },
      isVisible: entry._isVisible,
    ),
  );

  entry._overlayEntry = overlayEntry;
  entry._dismissCallback = dismiss;
  overlay.insert(overlayEntry);

  // Auto-dismiss
  if (duration > Duration.zero) {
    entry._timer = Timer(duration, dismiss);
  }

  return entry;
}