diff --git a/lib/src/controllers.dart b/lib/src/controllers.dart index ad095e3..455a7d5 100644 --- a/lib/src/controllers.dart +++ b/lib/src/controllers.dart @@ -15,7 +15,9 @@ class RangePickerController { this.minimumDateRangeLength, this.maximumDateRangeLength, this.disabledDates = const [], - this.allowSingleTapDaySelection = false}) { + this.allowSingleTapDaySelection = false, + this.allowBackwardsDaySelection = true}) + : origMinDate = minDate { if (dateRange != null) { startDate = dateRange.start; endDate = dateRange.end; @@ -29,11 +31,16 @@ class RangePickerController { final bool allowSingleTapDaySelection; + /// Whether the user can select a date range backwards (i.e. start date is after end date). + final bool allowBackwardsDaySelection; + final ValueChanged onDateRangeChanged; /// The minimum date that can be selected. (inclusive) DateTime? minDate; + final DateTime? origMinDate; + /// The maximum date that can be selected. (inclusive) DateTime? maxDate; @@ -84,6 +91,9 @@ class RangePickerController { onDateRangeChanged(DateRange(startDate!, startDate!)); } } + if (!allowBackwardsDaySelection) { + minDate = startDate != null && endDate == null ? startDate : origMinDate; + } } /// Returns whether the [date] is in the selected range or not. diff --git a/lib/src/widgets/date_range_picker.dart b/lib/src/widgets/date_range_picker.dart index ccba617..101e6d6 100644 --- a/lib/src/widgets/date_range_picker.dart +++ b/lib/src/widgets/date_range_picker.dart @@ -151,6 +151,7 @@ class DateRangePickerWidget extends StatefulWidget { this.displayMonthsSeparator = true, this.separatorThickness = 1, this.allowSingleTapDaySelection = false, + this.allowBackwardsDaySelection = true, this.firstDayOfWeek = 0, this.lengthOfDateName = 3, }) : assert( @@ -197,6 +198,10 @@ class DateRangePickerWidget extends StatefulWidget { /// day twice). final bool allowSingleTapDaySelection; + /// Set [allowBackwardsDaySelection] to false to prevent the user from selecting + /// a date range backwards (i.e. start date is after end date). + final bool allowBackwardsDaySelection; + /// The theme used to customize the appearance of the picker. final CalendarTheme theme; @@ -226,6 +231,7 @@ class DateRangePickerWidgetState extends State { minimumDateRangeLength: widget.minimumDateRangeLength, maximumDateRangeLength: widget.maximumDateRangeLength, allowSingleTapDaySelection: widget.allowSingleTapDaySelection, + allowBackwardsDaySelection: widget.allowBackwardsDaySelection, ); late final calendarController = CalendarWidgetController(