initCalendarForMonthView static method

List<DateModel> initCalendarForMonthView(
  1. int year,
  2. int month,
  3. DateTime currentDate,
  4. int weekStart, {
  5. required DateModel minSelectDate,
  6. required DateModel maxSelectDate,
  7. required Map<DateModel, Object> extraDataMap,
  8. int offset = 0,
})

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;
}