monthCalendar method

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

Generates a calendar for the current month.

Implementation

MonthCalendar monthCalendar({int firstDayOfWeek = 0}) {
  final first = startOf(TemporalUnit.month);
  final last = endOf(TemporalUnit.month);

  // Adjust first day's weekday based on firstDayOfWeek
  var firstWeekday = first.weekday - firstDayOfWeek;
  if (firstWeekday < 0) firstWeekday += 7;

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

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

  // Fill days
  for (var day = 1; day <= last.day; day++) {
    currentWeek.add(
      Hora.of(
        year: year,
        month: month,
        day: day,
        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,
  );
}