123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- import 'package:cs_resources/theme/app_colors_theme.dart';
- import 'package:flutter/material.dart';
- import 'package:shared/utils/date_time_utils.dart';
- class DayCell extends StatelessWidget {
- const DayCell({
- super.key,
- required this.display,
- required this.selected,
- required this.current,
- });
- final DateTime display;
- final DateTime selected;
- final DateTime current;
- //显示的日期文本
- String get dayText {
- return DateTimeUtils.formatDate(display, format: 'dd');
- }
- @override
- Widget build(BuildContext context) {
- return AnimatedContainer(
- duration: const Duration(milliseconds: 300),
- width: 40,
- height: 40,
- decoration: BoxDecoration(
- color: _isPastDate(display)
- ? context.appColors.disEnableGray // 小于今天的日期背景颜色,禁用
- : _isSelected(display)
- ? _isToday(display)
- ? context.appColors.btnBgDefault // 今天的日期背景颜色
- : context.appColors.btnBgDefault // 选中的日期背景颜色
- : context.appColors.grayBgE9, // 默认的背景颜色
- shape: BoxShape.rectangle,
- borderRadius: BorderRadius.circular(2.5), // 圆角
- ),
- alignment: Alignment.center,
- child: Text(
- dayText,
- style: TextStyle(
- fontSize: 17,
- fontWeight: FontWeight.w500,
- color: _dayTextColor(context, display),
- ),
- ),
- );
- }
- Color _dayTextColor(BuildContext context, DateTime date) {
- if (_isSelected(date)) {
- return Colors.white;
- }
- if (_isToday(date)) {
- return context.appColors.textBlack;
- }
- if (_isWeekend(date)) {
- return context.appColors.textBlack;
- }
- return context.appColors.textBlack;
- }
- //是否是周末
- bool _isWeekend(DateTime date) {
- return date.weekday == DateTime.saturday || date.weekday == DateTime.sunday;
- }
- //是否是选中的
- bool _isSelected(DateTime date) {
- return DateTimeUtils.formatDate(date, format: 'yyyyMMdd') == DateTimeUtils.formatDate(selected, format: 'yyyyMMdd');
- }
- //是否是今天
- bool _isToday(DateTime date) {
- return DateTimeUtils.formatDate(date, format: 'yyyyMMdd') == DateTimeUtils.formatDate(current, format: 'yyyyMMdd');
- }
- // 检查日期是否小于今天
- bool _isPastDate(DateTime date) {
- return date.isBefore(DateTime.now().subtract(const Duration(days: 1))); // 小于今天
- }
- }
|