initCalendarForMonthView static method
Implementation
static List<DateModel> initCalendarForMonthView(
int year, int month, DateTime currentDate, int weekStart,
{required DateModel minSelectDate,
required DateModel maxSelectDate,
required Map<DateModel, Object> extraDataMap,
int offset = 0}) {
print('initCalendarForMonthView start');
weekStart = DateTime.monday;
//获取月视图真实偏移量
int mPreDiff =
getIndexOfFirstDayInMonth(new DateTime(year, month), offset: offset);
//获取该月的天数
int monthDayCount = getMonthDaysCount(year, month);
LogUtil.log(
TAG: "DateUtil",
message:
"initCalendarForMonthView:$year年$month月,有$monthDayCount天,第一天的index为$mPreDiff");
List<DateModel> result = [];
int size = 42;
DateTime firstDayOfMonth = new DateTime(year, month, 1);
DateTime lastDayOfMonth = new DateTime(year, month, monthDayCount);
for (int i = 0; i < size; i++) {
DateTime temp;
DateModel dateModel;
if (i < mPreDiff - 1) {
if (i < ((mPreDiff / 7).ceil() - 1) * 7) {
size++;
continue;
}
//这个上一月的几天
temp = firstDayOfMonth.subtract(Duration(days: mPreDiff - i - 1));
dateModel = DateModel.fromDateTime(temp);
dateModel.isCurrentMonth = false;
} else if (i >= monthDayCount + (mPreDiff - 1)) {
//这是下一月的几天
temp = lastDayOfMonth
.add(Duration(days: i - mPreDiff - monthDayCount + 2));
dateModel = DateModel.fromDateTime(temp);
dateModel.isCurrentMonth = false;
} else {
//这个月的
temp = new DateTime(year, month, i - mPreDiff + 2);
dateModel = DateModel.fromDateTime(temp);
dateModel.isCurrentMonth = true;
}
//判断是否在范围内
if (dateModel.getDateTime().isAfter(minSelectDate.getDateTime()) &&
dateModel.getDateTime().isBefore(maxSelectDate.getDateTime())) {
dateModel.isInRange = true;
} else {
dateModel.isInRange = false;
}
//将自定义额外的数据,存储到相应的model中
if (extraDataMap.isNotEmpty == true) {
if (extraDataMap.containsKey(dateModel)) {
dateModel.extraData = extraDataMap[dateModel]!;
} else {
dateModel.extraData = null;
}
} else {
dateModel.extraData = null;
}
result.add(dateModel);
}
print('initCalendarForMonthView end');
return result;
}