status_banner.dart 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. import 'package:flutter/material.dart';
  2. import '../../core/theme/app_colors.dart';
  3. /// Pencil Component/StatusBanner — 状态横幅
  4. ///
  5. /// 垂直居中排列:大图标(40x40)、状态文字(16号/600字重)、副文字(13号)。
  6. /// 圆角8,高度120,padding (20,16),gap 8。
  7. class StatusBanner extends StatelessWidget {
  8. final IconData icon;
  9. final String statusText;
  10. final String subText;
  11. final Color color;
  12. const StatusBanner({
  13. super.key,
  14. required this.icon,
  15. required this.statusText,
  16. required this.subText,
  17. this.color = AppColors.success,
  18. });
  19. @override
  20. Widget build(BuildContext context) {
  21. final backgroundColor = _lighten(color, 0.88);
  22. return Container(
  23. height: 120,
  24. padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 20),
  25. decoration: BoxDecoration(
  26. color: backgroundColor,
  27. borderRadius: BorderRadius.circular(8),
  28. ),
  29. child: Column(
  30. mainAxisAlignment: MainAxisAlignment.center,
  31. children: [
  32. Icon(icon, size: 40, color: color),
  33. const SizedBox(height: 8),
  34. Text(
  35. statusText,
  36. style: TextStyle(
  37. fontSize: AppFontSizes.subtitle,
  38. fontWeight: FontWeight.w600,
  39. color: color,
  40. ),
  41. ),
  42. const SizedBox(height: 4),
  43. Text(
  44. subText,
  45. style: TextStyle(
  46. fontSize: 13,
  47. color: color,
  48. ),
  49. ),
  50. ],
  51. ),
  52. );
  53. }
  54. /// 将颜色变浅,用于计算背景色
  55. static Color _lighten(Color color, double amount) {
  56. return Color.lerp(color, Colors.white, amount)!;
  57. }
  58. }