generateMonth function
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;
}