toast function

ScaffoldFeatureController<Widget, dynamic> toast({
  1. required BuildContext context,
  2. String? title,
  3. required String message,
  4. Icon? icon,
  5. Duration duration = const Duration(seconds: 8),
  6. dynamic onTap(
    1. Function
    )?,
  7. bool? error,
  8. bool hideCloseButton = false,
  9. Color? backgroundColor,
  10. Color? foregroundColor,
  11. double runSpacing = 12,
})

Display a snackbar

When the body of the snackbar is tapped, onTap will be called with a callback that will hide the snackbar.

Call the function parameter passed on the callback to close the snackbar.

toast( title: 'title',  message: 'message', onTap: (close) => close());
toast(  title: 'error title', message: 'error message',  error: true );

Implementation

ScaffoldFeatureController toast({
  required BuildContext context,
  String? title,
  required String message,
  Icon? icon,
  Duration duration = const Duration(seconds: 8),
  Function(Function)? onTap,
  bool? error,
  bool hideCloseButton = false,
  Color? backgroundColor,
  Color? foregroundColor,
  double runSpacing = 12,
}) {
  if (error == true) {
    backgroundColor ??= Theme.of(context).colorScheme.error;
    foregroundColor ??= Theme.of(context).colorScheme.onError;
  }
  {
    backgroundColor ??= Theme.of(context).colorScheme.primary;
    foregroundColor ??= Theme.of(context).colorScheme.onPrimary;
  }

  BuildContext mayBeGlobalContext =
      FireFlutterService.instance.globalContext ?? context;

  return ScaffoldMessenger.of(mayBeGlobalContext).showSnackBar(
    SnackBar(
      duration: duration,
      backgroundColor: backgroundColor,
      content: Row(
        children: [
          Expanded(
            child: GestureDetector(
              behavior: HitTestBehavior.opaque,
              onTap: () {
                if (onTap == null) return;

                onTap(() {
                  ScaffoldMessenger.of(mayBeGlobalContext)
                      .hideCurrentSnackBar();
                });
              },
              child: Row(children: [
                if (icon != null) ...[
                  Theme(
                    data: Theme.of(context).copyWith(
                      iconTheme: IconThemeData(color: foregroundColor),
                    ),
                    child: icon,
                  ),
                  SizedBox(width: runSpacing),
                ],
                Expanded(
                  child: Column(
                    crossAxisAlignment: CrossAxisAlignment.start,
                    mainAxisSize: MainAxisSize.min,
                    children: [
                      if (title != null)
                        Text(
                          title,
                          style: TextStyle(
                              color: foregroundColor,
                              fontWeight: FontWeight.bold),
                        ),
                      Text(message),
                    ],
                  ),
                ),
              ]),
            ),
          ),
          if (hideCloseButton == false)
            TextButton(
              onPressed: () {
                ScaffoldMessenger.of(mayBeGlobalContext).hideCurrentSnackBar();
              },
              child: Text(
                T.dismiss.tr,
                style: TextStyle(color: foregroundColor),
              ),
            )
        ],
      ),
    ),
  );
}