buildMonthDays method
构建月份
Implementation
Widget buildMonthDays(BuildContext context) {
List<Row> dayRows = <Row>[];
List<Widget> dayRowChildren = <Widget>[];
int daysInMonth = TWCalendarTool.getDaysInMonth(
widget.year,
widget.month,
);
// 日 一 二 三 四 五 六
final sortOffset = widget.configs?.monthViewConfig?.sortOffset ?? 2;
int firstWeekdayOfMonth =
DateTime(widget.year, widget.month, sortOffset).weekday;
for (int day = 2 - firstWeekdayOfMonth; day <= daysInMonth; day++) {
DateTime moment = DateTime(widget.year, widget.month, day);
final bool isToday = TWCalendarTool.dateIsToday(moment);
final canSelected = canSelectedDate(date: moment, isToday: isToday);
bool isSelected = false;
// 连续选择
if (widget.notSerialSelectedTimes != null &&
widget.notSerialSelectedTimes!.isNotEmpty) {
isSelected = TWCalendarTool.isHadSelected(
selectedTimes: widget.notSerialSelectedTimes!,
dateTime: moment,
);
} else {
if (widget.selectStartDateTime == null &&
widget.selectEndDateTime == null &&
selectedDate == null) {
isSelected = false;
}
if (widget.selectStartDateTime == selectedDate &&
widget.selectEndDateTime == null &&
selectedDate?.day == day &&
day > 0) {
isSelected = true;
}
if (widget.selectStartDateTime != null &&
widget.selectEndDateTime != null) {
isSelected =
(TWCalendarTool.isSameDate(moment, widget.selectStartDateTime!) ||
TWCalendarTool.isSameDate(
moment, widget.selectEndDateTime!)) ||
moment.isAfter(widget.selectStartDateTime!) &&
moment.isBefore(widget.selectEndDateTime!) &&
day > 0
? true
: false;
}
}
Widget? widgetHandler;
if (widget.configs?.dayNumberConfig?.widgetHandler != null) {
if (day > 0) {
widgetHandler = widget.configs?.dayNumberConfig?.widgetHandler!(
widget.year,
widget.month,
day,
widget.itemWidth,
isSelected,
isToday,
canSelected,
widget.isMinSelectedDays,
widget.isMaxSelectedDays,
);
if (widgetHandler != null) {
widgetHandler = TWTapNotificationView(
canSelected: canSelected,
day: day,
child: widgetHandler,
);
}
}
}
widgetHandler ??= TWDayNumber(
size: widget.itemWidth,
isSelected: isSelected,
isToday: isToday,
canSelected: canSelected,
day: day,
dayNumberConfig: widget.configs?.dayNumberConfig,
isMaxSelectedDays: widget.isMaxSelectedDays,
isMinSelectedDays: widget.isMinSelectedDays,
);
dayRowChildren.add(widgetHandler);
if ((day - 1 + firstWeekdayOfMonth) % DateTime.daysPerWeek == 0 ||
day == daysInMonth) {
dayRows.add(
Row(
children: List<Widget>.from(dayRowChildren),
),
);
dayRowChildren.clear();
}
}
return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: dayRows,
);
}