updateSelected method

void updateSelected(
  1. DateTime selectedDate
)

when you select the dateTime ,will use this method

selectedDate your select dateTime

Implementation

void updateSelected(DateTime selectedDate) {
//    _selectedDates.sort(_sortSelectDates);
  if (isMultiple) {
    // multiple select
    if (_selectedDates.contains(selectedDate)) {
      // your select dateTime in your selectedDates
      if (_isDispersion) {
        // dispersion select only remove
        _selectedDates.remove(selectedDate);
      } else {
//          //进行移除
//          selectedDates.sort((a, b) =>
//          a.millisecondsSinceEpoch > b.millisecondsSinceEpoch ? 0 : 1);
        if (selectedDate != _selectedDates.first &&
            selectedDate != _selectedDates.last) {
          List<DateTime?> dateTimes = _selectedDates.toList();

          final int index = dateTimes.indexOf(selectedDate);
          Duration duration1 = selectedDate.difference(_selectedDates.first!);
          Duration duration2 = _selectedDates.last!.difference(selectedDate);
          if (duration1.inMilliseconds < duration2.inMilliseconds) {
            dateTimes.removeRange(index + 1, _selectedDates.length);
          } else {
            dateTimes.removeRange(0, index);
          }
          _selectedDates.clear();
          _selectedDates.addAll(dateTimes);
        }
      }
    } else {
      if (_isDispersion || _selectedDates.length < 1) {
        _selectedDates.add(selectedDate);
      } else {
        DateTime? first;
        DateTime? last;

        if (_selectedDates.length == 1) {
          first = _selectedDates.first;
          if (first!.isBefore(selectedDate)) {
            last = selectedDate;
          } else {
            last = first;
            first = last;
          }
        } else {
          first = _selectedDates.first;
          last = _selectedDates.last;
        }

        if (first!.isAfter(selectedDate) &&
            (last!.isAfter(selectedDate) || _selectedDates.length == 1)) {
          Duration duration = first.difference(selectedDate);
          final List<DateTime> addList = List.generate(duration.inDays,
              (int index) => first!.subtract(Duration(days: index)));
          addList.add(selectedDate);
          addList.forEach((dateTime) {
            if (!_selectedDates.contains(dateTime)) {
//                _selectedDates.insert(0, dateTime);
              _selectedDates..add(dateTime);
            }
          });
        } else if (first.isBefore(selectedDate) &&
            (last!.isBefore(selectedDate) || _selectedDates.length == 1)) {
          Duration duration = selectedDate
              .difference(_selectedDates.length == 1 ? first : last);
          final List<DateTime> addList = List.generate(
              duration.inDays,
              (int index) => _selectedDates.length == 1
                  ? first!.add(Duration(days: index))
                  : last!.add(Duration(days: index)));
          addList.add(selectedDate);
          addList.forEach((dateTIme) {
            if (!_selectedDates.contains(dateTIme)) {
              _selectedDates.add(dateTIme);
            }
          });
        }
      }
    }
  } else {
    if (_selectedDates.isEmpty) {
      _selectedDates.add(selectedDate);
    } else {
      _selectedDates.remove(_selectedDates.first);
      _selectedDates.add(selectedDate);
    }
  }
  notifyListeners();
  if (!isMonthMode) {
    int weekPage =
        RCalendarUtils.weekDelta(firstDate, selectedDate, _localizations);
    updateDisplayedDate(weekPage, mode);
  }
}