import 'package:flutter/material.dart'; import '../theme/app_theme.dart'; /// Custom snackbar enforcing sojorn's visual system class sojornSnackbar { /// Show a default snackbar static void show({ required BuildContext context, required String message, Duration duration = const Duration(seconds: 3), SnackBarAction? action, }) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text( message, style: AppTheme.bodyMedium.copyWith(color: AppTheme.white), ), duration: duration, behavior: SnackBarBehavior.floating, backgroundColor: AppTheme.navyBlue, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.all(AppTheme.spacingMd), action: action, ), ); } /// Show a success snackbar static void showSuccess({ required BuildContext context, required String message, Duration duration = const Duration(seconds: 3), }) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( children: [ const Icon(Icons.check_circle, color: AppTheme.white, size: 20), const SizedBox(width: AppTheme.spacingSm), Expanded( child: Text( message, style: AppTheme.bodyMedium.copyWith(color: AppTheme.white), ), ), ], ), duration: duration, behavior: SnackBarBehavior.floating, backgroundColor: AppTheme.success, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.all(AppTheme.spacingMd), ), ); } /// Show an error snackbar static void showError({ required BuildContext context, required String message, Duration duration = const Duration(seconds: 4), }) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( children: [ const Icon(Icons.cancel, color: AppTheme.white, size: 20), const SizedBox(width: AppTheme.spacingSm), Expanded( child: Text( message, style: AppTheme.bodyMedium.copyWith(color: AppTheme.white), ), ), ], ), duration: duration, behavior: SnackBarBehavior.floating, backgroundColor: AppTheme.error, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.all(AppTheme.spacingMd), ), ); } /// Show a warning snackbar static void showWarning({ required BuildContext context, required String message, Duration duration = const Duration(seconds: 3), }) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( children: [ const Icon(Icons.warning, color: AppTheme.white, size: 20), const SizedBox(width: AppTheme.spacingSm), Expanded( child: Text( message, style: AppTheme.bodyMedium.copyWith(color: AppTheme.white), ), ), ], ), duration: duration, behavior: SnackBarBehavior.floating, backgroundColor: AppTheme.warning, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.all(AppTheme.spacingMd), ), ); } /// Show an info snackbar static void showInfo({ required BuildContext context, required String message, Duration duration = const Duration(seconds: 3), }) { ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Row( children: [ const Icon(Icons.info, color: AppTheme.white, size: 20), const SizedBox(width: AppTheme.spacingSm), Expanded( child: Text( message, style: AppTheme.bodyMedium.copyWith(color: AppTheme.white), ), ), ], ), duration: duration, behavior: SnackBarBehavior.floating, backgroundColor: AppTheme.info, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(8.0), ), margin: const EdgeInsets.all(AppTheme.spacingMd), ), ); } }