generateMonth function

List<DateTime> generateMonth(
  1. DateTime datetime,
  2. int baseWeekday
)

Implementation

List<DateTime> generateMonth(DateTime datetime, int baseWeekday) {
  int firstWeekdayDiff = getDiffFromWeekday(baseWeekday);
  // [datetime] 으로 부터 이번달의 1일의 요일을 가져온다.
  DateTime firstOfMonth = DateTime(datetime.year, datetime.month, 1).toLocal();
  // 이번달의 마지막 날과 요일을 가져온다.
  DateTime lastOfMonth =
      DateTime(datetime.year, datetime.month + 1, 1).toLocal();

  // weekday 7은 일요일이므로 보정해야한다.
  // 달력은 일월화수목금토이기 때문
  DateTime loopStartDay = firstOfMonth.toLocal().subtract(
        Duration(
            days:
                firstOfMonth.weekday - 1 + firstWeekdayDiff), // 필요하면 유틸리티로 빼야함
      );

  DateTime loopEndDay = lastOfMonth
      .toLocal()
      .add(Duration(days: 7 - lastOfMonth.weekday - firstWeekdayDiff));

  // !!!: 임의로 추가함
  if (loopEndDay.toLocal().isBefore(lastOfMonth.toLocal())) {
    loopEndDay = loopEndDay.toLocal().add(Duration(days: 7));
  }

  int difference =
      loopEndDay.toLocal().difference(loopStartDay.toLocal()).inDays;

  List<DateTime> days = [];
  for (var i = 0; i <= difference; i++) {
    days.add(loopStartDay.add(Duration(days: i)).toLocal());
  }

  return days;
}