import 'package:flutter/material.dart'; enum AppAlertTone { error, warning, info, success } class AppInlineAlert extends StatelessWidget { final String message; final AppAlertTone tone; final IconData? icon; const AppInlineAlert({ super.key, required this.message, this.tone = AppAlertTone.error, this.icon, }); @override Widget build(BuildContext context) { final theme = Theme.of(context); final colors = _colors(theme.colorScheme); return Container( width: double.infinity, padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 10), decoration: BoxDecoration( color: colors.background, borderRadius: BorderRadius.circular(6), border: Border.all(color: colors.foreground.withValues(alpha: 0.16)), ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Icon(icon ?? _defaultIcon, size: 16, color: colors.foreground), const SizedBox(width: 8), Expanded( child: Text( message, style: theme.textTheme.bodySmall?.copyWith( color: colors.foreground, height: 1.35, ), ), ), ], ), ); } IconData get _defaultIcon => switch (tone) { AppAlertTone.error => Icons.error_outline, AppAlertTone.warning => Icons.warning_amber_rounded, AppAlertTone.info => Icons.info_outline, AppAlertTone.success => Icons.check_circle_outline, }; ({Color background, Color foreground}) _colors(ColorScheme scheme) { final isDark = scheme.brightness == Brightness.dark; return switch (tone) { AppAlertTone.error => ( background: scheme.errorContainer, foreground: scheme.onErrorContainer, ), AppAlertTone.warning => isDark ? ( background: const Color(0xFF3A2E12), foreground: const Color(0xFFFFD68A), ) : ( background: const Color(0xFFFFF3D6), foreground: const Color(0xFF7A4D00), ), AppAlertTone.info => ( background: scheme.secondaryContainer, foreground: scheme.onSecondaryContainer, ), AppAlertTone.success => isDark ? ( background: const Color(0xFF12331F), foreground: const Color(0xFF7FE3A8), ) : ( background: const Color(0xFFDDF7E8), foreground: const Color(0xFF0B6B3A), ), }; } }