updateSelection method

void updateSelection(
  1. Set<DateTime> selectedDates
)

Implementation

void updateSelection(Set<DateTime> selectedDates) {
  if (selectedDates.isEmpty) {
    clearSelection();
    return;
  }

  setState(() {
    switch (widget.selectionMode) {
      case SelectionMode.single:
        _selectedDays = {selectedDates.first};
        _rangeStart = null;
        _rangeEnd = null;
        break;
      case SelectionMode.multi:
        _selectedDays = Set.from(selectedDates);
        _rangeStart = null;
        _rangeEnd = null;
        break;
      case SelectionMode.range:
        if (selectedDates.length >= 2) {
          final sortedDates = selectedDates.toList()..sort();
          DateTime start = sortedDates.first;
          DateTime end = sortedDates.last;

          if (widget.maxWorkingDays != null || widget.maxRangeLength != null) {
            _applyRangeLimits(start, end, start, (newStart, newEnd, newSelected) {
              _rangeStart = newStart;
              _rangeEnd = newEnd;
              _selectedDays = newSelected;
            });
          } else {
            _rangeStart = start;
            _rangeEnd = end;
            _selectedDays = _generateDateRange(start, end);
          }
        } else if (selectedDates.length == 1) {
          _rangeStart = selectedDates.first;
          _rangeEnd = null;
          _selectedDays = {selectedDates.first};
        } else {
          _rangeStart = null;
          _rangeEnd = null;
          _selectedDays = {};
        }
        break;
    }
  });
  widget.onSelectionChanged?.call(_selectedDays);
}