A better state and alerts
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:awesome_snackbar_content/awesome_snackbar_content.dart';
|
||||
|
||||
/// Helper wrappers around `awesome_snackbar_content` so that callers
|
||||
/// can show snackbars with a consistent look and only specify a message and
|
||||
/// semantic type.
|
||||
|
||||
/// Enumeration used by callers; the mapping to the package’s
|
||||
/// [ContentType] is internal.
|
||||
enum SnackType { success, info, warning, error }
|
||||
|
||||
ContentType _mapSnackType(SnackType t) {
|
||||
switch (t) {
|
||||
case SnackType.success:
|
||||
return ContentType.success;
|
||||
case SnackType.info:
|
||||
return ContentType.help;
|
||||
case SnackType.warning:
|
||||
return ContentType.warning;
|
||||
case SnackType.error:
|
||||
return ContentType.failure;
|
||||
}
|
||||
}
|
||||
|
||||
/// Core function used by all of the convenience helpers below.
|
||||
void showAwesomeSnackBar(
|
||||
BuildContext context, {
|
||||
required String title,
|
||||
required String message,
|
||||
required SnackType snackType,
|
||||
}) {
|
||||
// Add margin and padding so even very short messages feel substantial.
|
||||
final snackBar = SnackBar(
|
||||
elevation: 0,
|
||||
behavior: SnackBarBehavior.floating,
|
||||
// give floating snackbar some breathing room
|
||||
margin: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
|
||||
padding: EdgeInsets.zero,
|
||||
backgroundColor: Colors.transparent,
|
||||
content: Container(
|
||||
padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 8),
|
||||
child: AwesomeSnackbarContent(
|
||||
title: title,
|
||||
message: message,
|
||||
contentType: _mapSnackType(snackType),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
ScaffoldMessenger.of(context)
|
||||
..hideCurrentSnackBar()
|
||||
..showSnackBar(snackBar);
|
||||
}
|
||||
|
||||
void showSuccessSnackBar(BuildContext context, String message) =>
|
||||
showAwesomeSnackBar(
|
||||
context,
|
||||
title: 'Success',
|
||||
message: message,
|
||||
snackType: SnackType.success,
|
||||
);
|
||||
|
||||
void showErrorSnackBar(BuildContext context, String message) =>
|
||||
showAwesomeSnackBar(
|
||||
context,
|
||||
title: 'Error',
|
||||
message: message,
|
||||
snackType: SnackType.error,
|
||||
);
|
||||
|
||||
void showInfoSnackBar(BuildContext context, String message) =>
|
||||
showAwesomeSnackBar(
|
||||
context,
|
||||
title: 'Info',
|
||||
message: message,
|
||||
snackType: SnackType.info,
|
||||
);
|
||||
|
||||
void showWarningSnackBar(BuildContext context, String message) =>
|
||||
showAwesomeSnackBar(
|
||||
context,
|
||||
title: 'Warning',
|
||||
message: message,
|
||||
snackType: SnackType.warning,
|
||||
);
|
||||
Reference in New Issue
Block a user