monthCalendar method
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,
);
}