monthCalendar method

MonthCalendar monthCalendar({
  1. int firstDayOfWeek = DateTime.monday,
})

Generates a calendar for the current month.

firstDayOfWeek uses ISO weekday values (1 = Monday, 7 = Sunday).

Implementation

MonthCalendar monthCalendar({int firstDayOfWeek = DateTime.monday}) {
  _requireIsoWeekday('firstDayOfWeek', firstDayOfWeek);

  final first = startOf(TemporalUnit.month);
  final last = endOf(TemporalUnit.month);

  // Calculate leading empty days
  final leadingDays = (first.weekday - firstDayOfWeek + 7) % 7;

  final weeks = <List<Hora?>>[];
  var currentWeek = <Hora?>[];

  // Fill leading nulls
  for (var i = 0; i < leadingDays; i++) {
    currentWeek.add(null);
  }

  // Fill days
  for (var day = 1; day <= last.day; day++) {
    currentWeek.add(
      Hora.of(
        year: year,
        month: month,
        day: day,
        utc: isUtc,
        locale: locale,
      ),
    );

    if (currentWeek.length == 7) {
      weeks.add(currentWeek);
      currentWeek = [];
    }
  }

  // Fill trailing nulls
  if (currentWeek.isNotEmpty) {
    while (currentWeek.length < 7) {
      currentWeek.add(null);
    }
    weeks.add(currentWeek);
  }

  return MonthCalendar._(
    year: year,
    month: month,
    weeks: weeks,
    firstDayOfWeek: firstDayOfWeek,
  );
}