day_cell.dart 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import 'package:cs_resources/theme/app_colors_theme.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:shared/utils/date_time_utils.dart';
  4. import 'calendar_utils.dart';
  5. class DayCell extends StatelessWidget {
  6. const DayCell({
  7. super.key,
  8. required this.display,
  9. required this.selected,
  10. required this.maxDate,
  11. required this.current,
  12. });
  13. final DateTime display;
  14. final DateTime selected;
  15. final DateTime maxDate;
  16. final DateTime current;
  17. //显示的日期文本
  18. String get dayText {
  19. return DateTimeUtils.formatDate(display, format: 'dd');
  20. }
  21. @override
  22. Widget build(BuildContext context) {
  23. return AnimatedContainer(
  24. duration: const Duration(milliseconds: 300),
  25. width: 40,
  26. height: 40,
  27. decoration: BoxDecoration(
  28. color: isPastDate(current, display) || isAfterMaxDate(maxDate, display)
  29. ? context.appColors.disEnableGray.withOpacity(0.6) // 小于今天的日期背景颜色和大于Max日期变灰并禁用
  30. : _isSelected(display)
  31. ? _isToday(display)
  32. ? context.appColors.btnBgDefault // 今天的日期背景颜色
  33. : context.appColors.btnBgDefault // 选中的日期背景颜色
  34. : context.appColors.grayBgE9, // 默认的背景颜色
  35. shape: BoxShape.rectangle,
  36. borderRadius: BorderRadius.circular(2.5), // 圆角
  37. ),
  38. alignment: Alignment.center,
  39. child: Text(
  40. dayText,
  41. style: TextStyle(
  42. fontSize: 17,
  43. fontWeight: FontWeight.w500,
  44. color: _dayTextColor(context, display),
  45. ),
  46. ),
  47. );
  48. }
  49. Color _dayTextColor(BuildContext context, DateTime date) {
  50. if (_isSelected(date)) {
  51. return Colors.white;
  52. }
  53. if (_isToday(date)) {
  54. return context.appColors.textBlack;
  55. }
  56. if (_isWeekend(date)) {
  57. return context.appColors.textBlack;
  58. }
  59. return context.appColors.textBlack;
  60. }
  61. //是否是周末
  62. bool _isWeekend(DateTime date) {
  63. return date.weekday == DateTime.saturday || date.weekday == DateTime.sunday;
  64. }
  65. //是否是选中的
  66. bool _isSelected(DateTime date) {
  67. return DateTimeUtils.formatDate(date, format: 'yyyyMMdd') == DateTimeUtils.formatDate(selected, format: 'yyyyMMdd');
  68. }
  69. //是否是今天
  70. bool _isToday(DateTime date) {
  71. return DateTimeUtils.formatDate(date, format: 'yyyyMMdd') == DateTimeUtils.formatDate(current, format: 'yyyyMMdd');
  72. }
  73. }