updateSelection method
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);
}