import 'package:flutter/material.dart'; /// Centralized helper for showing SnackBars across the app. /// /// This guarantees that every SnackBar has a fixed width of 400 and a /// consistent floating behaviour, so the project-wide limit only has to /// be set in one place. class AppSnackBar { AppSnackBar._(); /// The default width applied to every floating SnackBar in the app. static const double width = 400; /// Shows a SnackBar with the project-wide width of 400. /// /// By default a [Text] widget with [message] is used as the content. /// Pass [customContent] to override the default content widget (e.g. for /// custom layouts that include icons, multiple lines, etc.). static void show( BuildContext context, String message, { Widget? customContent, Color? backgroundColor, Color? textColor, SnackBarBehavior behavior = SnackBarBehavior.floating, SnackBarAction? action, Duration duration = const Duration(seconds: 4), ShapeBorder? shape, EdgeInsetsGeometry? margin, EdgeInsetsGeometry? padding, }) { final messenger = ScaffoldMessenger.maybeOf(context); if (messenger == null) return; final Widget content = customContent ?? (textColor != null ? Text(message, style: TextStyle(color: textColor)) : Text(message)); messenger.showSnackBar( SnackBar( content: content, backgroundColor: backgroundColor, behavior: behavior, action: action, duration: duration, shape: shape, margin: margin, padding: padding, width: width, ), ); } /// Convenience helper for error messages. static void showError(BuildContext context, String message) { show( context, message, backgroundColor: Colors.deepOrange, ); } /// Convenience helper for success messages. static void showSuccess(BuildContext context, String message) { show( context, message, backgroundColor: Colors.green.shade700, ); } /// Convenience helper for informational messages. static void showInfo(BuildContext context, String message) { show(context, message); } }