Files
sm-emby-share/lib/shared/widgets/app_snack_bar.dart
T
2026-07-14 11:11:36 +08:00

59 lines
1.4 KiB
Dart

import 'package:flutter/material.dart';
import 'package:forui/forui.dart';
import 'app_inline_alert.dart';
enum AppSnackTone { neutral, error, success, warning }
void showAppSnackBar(
BuildContext context,
String message, {
AppSnackTone tone = AppSnackTone.neutral,
}) {
final messenger = ScaffoldMessenger.maybeOf(context);
if (messenger == null) return;
messenger
..hideCurrentSnackBar()
..showSnackBar(
SnackBar(
content: Text(message),
behavior: SnackBarBehavior.floating,
backgroundColor: _backgroundColor(tone),
),
);
}
void showAppToast(
BuildContext context,
String message, {
AppAlertTone tone = AppAlertTone.info,
}) {
showFToast(
context: context,
title: Text(message),
icon: Icon(_toastIcon(tone), size: 16),
variant: tone == AppAlertTone.error
? FToastVariant.destructive
: FToastVariant.primary,
);
}
Color? _backgroundColor(AppSnackTone tone) {
return switch (tone) {
AppSnackTone.neutral => null,
AppSnackTone.error => const Color(0xFFB42318),
AppSnackTone.success => const Color(0xFF107C41),
AppSnackTone.warning => const Color(0xFF9A6700),
};
}
IconData _toastIcon(AppAlertTone tone) {
return switch (tone) {
AppAlertTone.error => Icons.error_outline,
AppAlertTone.warning => Icons.warning_amber_rounded,
AppAlertTone.info => Icons.info_outline,
AppAlertTone.success => Icons.check_circle_outline,
};
}