import 'package:flutter/material.dart'; class SnackBarUtils { static final scaffoldKey = GlobalKey(); static void showError(String error) { _showBasicSnackBar(error, textColor: Colors.black, snackbarColor: Colors.amber, snackbarIcon: Icons.error_outline); } static void showSuccess(String message) { _showBasicSnackBar(message, snackbarColor: Colors.green); } static void showLoading(String message) { _showBasicSnackBar(message, textColor: Colors.black, iconColor: Colors.black, snackbarColor: Colors.white); } static void showLoadingWithProgress(String message, {required ValueNotifier notifier}) { _showProgressBar(message, notifier: notifier); } static void hideSnackBar() { scaffoldKey.currentState?.hideCurrentSnackBar(); } static void _showBasicSnackBar(String message, {Color textColor = Colors.black, Color snackbarColor = Colors.teal, IconData snackbarIcon = Icons.info_outline, Color iconColor = Colors.black}) { scaffoldKey.currentState?.showSnackBar( SnackBar( behavior: SnackBarBehavior.floating, duration: Duration(seconds: 10), width: 500, content: Container( margin: const EdgeInsets.only(bottom: 25), padding: const EdgeInsets.all(8.0), decoration: BoxDecoration( color: snackbarColor, borderRadius: BorderRadius.circular(30.0), border: Border.all(color: Colors.black, width: 3), ), child: Row( children: [ Icon(snackbarIcon, color: iconColor), const SizedBox(width: 8), Expanded( child: Text( message, style: TextStyle(color: textColor, fontWeight: FontWeight.w500), maxLines: 3, ), ), ], ), ), backgroundColor: Colors.transparent, elevation: 0.0, ), ); } static void _showProgressBar( String message, { required ValueNotifier notifier, Color textColor = Colors.black, Color snackbarColor = Colors.amber, IconData snackbarIcon = Icons.info_outline, Color iconColor = Colors.black, }) { double height = 15.0; scaffoldKey.currentState?.showSnackBar( SnackBar( behavior: SnackBarBehavior.floating, width: 500, duration: const Duration(days: 1), content: Container( margin: const EdgeInsets.only(bottom: 25), padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 15), decoration: BoxDecoration( color: snackbarColor, borderRadius: BorderRadius.circular(30.0), border: Border.all(color: Colors.black, width: 3), ), child: ValueListenableBuilder( valueListenable: notifier, builder: (_, double value, Widget? child) { return Row( children: [ Icon(snackbarIcon, color: iconColor), const SizedBox(width: 8), Text(message, style: TextStyle(color: textColor), maxLines: 3), const SizedBox(width: 8), Expanded( child: LinearProgressIndicator( backgroundColor: Colors.amber, color: Colors.white38, minHeight: height, value: value, borderRadius: BorderRadius.circular(30.0), ), ), ], ); }, ), ), backgroundColor: Colors.transparent, elevation: 0.0, ), ); } }