CalendarGridData constructor

CalendarGridData({
  1. required int month,
  2. 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);
}