datesInMonthGrid method
Returns a grid-like list of DateTime
s in a given month, with 35 items.
startOnMonday
will start the grid on Monday instead of Sunday.
Implementation
static List<DateTime> datesInMonthGrid(
DateTime month, {
bool startOnMonday = false,
}) {
int _getWeekdayNumber(DayOfWeek weekday) {
return DayOfWeek.values.indexOf(weekday) + 1;
}
int _getDaysBefore(DateTime firstDay, DayOfWeek startingWeekDay) {
return (firstDay.weekday + 7 - _getWeekdayNumber(startingWeekDay)) % 7;
}
int _getDaysAfter(DateTime lastDay, DayOfWeek startingWeekDay) {
final invertedStartingWeekday = 8 - _getWeekdayNumber(startingWeekDay);
var daysAfter = 7 - ((lastDay.weekday + invertedStartingWeekday) % 7) + 1;
if (daysAfter == 8) {
daysAfter = 1;
}
return daysAfter;
}
final first = firstDayOfMonth(month);
final daysBefore = _getDaysBefore(
first, startOnMonday ? DayOfWeek.monday : DayOfWeek.sunday);
final firstToDisplay = first.subtract(Duration(days: daysBefore));
final last = lastDayOfMonth(month);
final daysAfter = _getDaysAfter(
last, startOnMonday ? DayOfWeek.monday : DayOfWeek.sunday);
final lastToDisplay = last.add(Duration(days: daysAfter));
return daysInRange(firstToDisplay, lastToDisplay).toList();
}