import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../config/custom_text.dart'; class AppSnackbar { // --- public helpers ──────────────────────────────────────────────────── static void showError(String title, String message) => _show(title, message, _SnackbarType.error); static void showInfo(String title, String message) => _show(title, message, _SnackbarType.info); static void showSuccess(String title, String message) => _show(title, message, _SnackbarType.success); static void showWarning(String title, String message) => _show(title, message, _SnackbarType.warning); // --- internal implementation ─────────────────────────────────────────── static void _show(String title, String message, _SnackbarType type) { Get.closeAllSnackbars(); final config = _getSnackbarConfig(type); Get.showSnackbar( GetSnackBar( snackPosition: SnackPosition.TOP, snackStyle: SnackStyle.FLOATING, margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), borderRadius: 16, backgroundColor: Colors.transparent, barBlur: 0, animationDuration: const Duration(milliseconds: 400), forwardAnimationCurve: Curves.elasticOut, reverseAnimationCurve: Curves.easeInBack, duration: const Duration(seconds: 4), padding: EdgeInsets.zero, // --- Enhanced beautiful container with gradient and glassmorphism ----- messageText: Container( padding: const EdgeInsets.all(20), decoration: BoxDecoration( borderRadius: BorderRadius.circular(16), gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: config.gradientColors, ), boxShadow: [ BoxShadow( color: config.shadowColor, blurRadius: 20, offset: const Offset(0, 8), spreadRadius: 0, ), BoxShadow( color: Colors.black.withOpacity(0.1), blurRadius: 6, offset: const Offset(0, 2), ), ], border: Border.all( color: Colors.white.withOpacity(0.2), width: 1, ), ), child: Row( children: [ // --- Animated icon container --- Container( width: 48, height: 48, decoration: BoxDecoration( color: Colors.white.withOpacity(0.2), borderRadius: BorderRadius.circular(12), border: Border.all( color: Colors.white.withOpacity(0.3), width: 1, ), ), child: Icon( config.icon, color: Colors.white, size: 24, ), ), const SizedBox(width: 16), // --- Content --- Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ Txt( text: title, style: const TextStyle( color: Colors.white, fontSize: 16, fontWeight: FontWeight.w700, letterSpacing: 0.2, height: 1.2, ), ), const SizedBox(height: 4), // Message with subtle styling Txt( text: message, style: TextStyle( color: Colors.white.withOpacity(0.9), fontSize: 14, fontWeight: FontWeight.w400, height: 1.3, letterSpacing: 0.1, ), ), ], ), ), // --- Accent indicator --- Container( width: 4, height: 48, decoration: BoxDecoration( color: Colors.white.withOpacity(0.8), borderRadius: BorderRadius.circular(2), ), ), ], ), ), titleText: const SizedBox.shrink(), // We handle title in messageText ), ); } } // --- Enhanced configuration system --- enum _SnackbarType { success, error, warning, info } class _SnackbarConfig { final List gradientColors; final Color shadowColor; final IconData icon; const _SnackbarConfig({ required this.gradientColors, required this.shadowColor, required this.icon, }); } _SnackbarConfig _getSnackbarConfig(_SnackbarType type) { switch (type) { case _SnackbarType.success: return _SnackbarConfig( gradientColors: [ const Color(0xff58BE3F), // Using your app's green const Color(0xff45A032), ], shadowColor: const Color(0xff58BE3F).withOpacity(0.3), icon: Icons.check_circle_rounded, ); case _SnackbarType.error: return _SnackbarConfig( gradientColors: [ const Color(0xFFFF4757), const Color(0xFFFF3742), ], shadowColor: const Color(0xFFFF4757).withOpacity(0.3), icon: Icons.error_rounded, ); case _SnackbarType.warning: return _SnackbarConfig( gradientColors: [ const Color(0xfff64901), // Using your app's secondary color const Color(0xFFF74B01), // Using your app's third color ], shadowColor: const Color(0xfff64901).withOpacity(0.3), icon: Icons.warning_rounded, ); case _SnackbarType.info: return _SnackbarConfig( gradientColors: [ const Color(0xFF7A3BFF), // Using your app's primary color const Color(0xFF6B2FE8), ], shadowColor: const Color(0xFF7A3BFF).withOpacity(0.3), icon: Icons.info_rounded, ); } }