buildMonthDays method

Widget buildMonthDays(
  1. BuildContext context
)

构建月份

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,
        );
        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,
    );
    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,
  );
}