CalendarGridData constructor
CalendarGridData(
{ - required int month,
- required int year,
})
Implementation
factory CalendarGridData({required int month, required int year}) {
DateTime firstDayOfMonth = DateTime(year, month, 1);
int firstWeekday = firstDayOfMonth.weekday;
int daysInMonth = DateTime(year, month + 1, 0).day;
int prevMonthDays = firstWeekday - 1;
DateTime prevMonthLastDay =
firstDayOfMonth.subtract(Duration(days: prevMonthDays));
List<CalendarGridItem> items = [];
int itemCount = 0;
for (int i = 0; i < prevMonthDays; i++) {
int currentItemIndex = itemCount++;
items.add(CalendarGridItem(
prevMonthLastDay.add(Duration(days: i)),
currentItemIndex % 7,
true,
currentItemIndex ~/ 7,
));
}
for (int i = 0; i < daysInMonth; i++) {
int currentItemIndex = itemCount++;
DateTime currentDay = DateTime(year, month, i + 1);
items.add(CalendarGridItem(
currentDay,
currentItemIndex % 7,
false,
currentItemIndex ~/ 7,
));
}
int remainingDays = (7 - (items.length % 7)) % 7;
DateTime nextMonthFirstDay = DateTime(year, month + 1, 1);
for (int i = 0; i < remainingDays; i++) {
int currentItemIndex = itemCount++;
items.add(CalendarGridItem(
nextMonthFirstDay.add(Duration(days: i)),
currentItemIndex % 7,
true,
currentItemIndex ~/ 7,
));
}
return CalendarGridData._(month, year, items);
}