setMiddleIndex method

  1. @override
void setMiddleIndex(
  1. int index
)
override

Implementation

@override
void setMiddleIndex(int index) {
  super.setMiddleIndex(index);
  //adjust right
  int minMonth = _minMonthOfCurrentYear();

  var d = LunarMonth.fromYm(currentLunarTime.getYear(), minMonth);
  // 往后推x个月
  LunarMonth? nextMonth = d?.next(index);

  int dayCount = LunarMonth.fromYm(
              currentLunarTime.getYear(), nextMonth?.getMonth() ?? 0)
          ?.getDayCount() ??
      0;

  Lunar newLunarTime = Lunar.fromYmd(
      currentLunarTime.getYear(),
      nextMonth?.getMonth() ?? 0,
      currentLunarTime.getDay() <= dayCount
          ? currentLunarTime.getDay()
          : dayCount);

  DateTime newTime;
  // 阴历转阳历
  var solarTime = newLunarTime.getSolar();
  newTime =
      DateTime(solarTime.getYear(), solarTime.getMonth(), solarTime.getDay());
  //min/max check
  if (newTime.isAfter(maxTime)) {
    currentTime = maxTime;
    currentLunarTime = maxLunarTime;
  } else if (newTime.isBefore(minTime)) {
    currentTime = minTime;
    currentLunarTime = minLunarTime;
  } else {
    currentTime = newTime;
    currentLunarTime = newLunarTime;
  }

  _fillRightLists();
  int minDay = _minDayOfCurrentMonth();
  _currentRightIndex = currentLunarTime.getDay() - minDay;
}