Line data Source code
1 : import 'date_period.dart'; 2 : import 'utils.dart'; 3 : 4 : /// Base class for day based pickers selection. 5 : abstract class DayPickerSelection { 6 : 7 : /// If this is before [dateTime]. 8 : bool isBefore(DateTime dateTime); 9 : 10 : /// If this is after [dateTime]. 11 : bool isAfter(DateTime dateTime); 12 : 13 : /// Returns earliest [DateTime] in this selection. 14 : DateTime get earliest; 15 : 16 : /// If this selection is empty. 17 : bool get isEmpty; 18 : 19 : /// If this selection is not empty. 20 : bool get isNotEmpty; 21 : 22 : /// Constructor to allow children to have constant constructor. 23 0 : const DayPickerSelection(); 24 : } 25 : 26 : /// Selection with only one selected date. 27 : /// 28 : /// See also: 29 : /// * [DayPickerMultiSelection] - selection with one or many single dates. 30 : /// * [DayPickerRangeSelection] - date period selection. 31 : class DayPickerSingleSelection extends DayPickerSelection { 32 : 33 : /// Selected date. 34 : final DateTime selectedDate; 35 : 36 : /// Creates selection with only one selected date. 37 0 : const DayPickerSingleSelection(this.selectedDate) 38 0 : : assert(selectedDate != null); 39 : 40 0 : @override 41 0 : bool isAfter(DateTime dateTime) => selectedDate.isAfter(dateTime); 42 : 43 0 : @override 44 0 : bool isBefore(DateTime dateTime) => selectedDate.isBefore(dateTime); 45 : 46 0 : @override 47 0 : DateTime get earliest => selectedDate; 48 : 49 0 : @override 50 0 : bool get isEmpty => selectedDate == null; 51 : 52 0 : @override 53 0 : bool get isNotEmpty => selectedDate != null; 54 : } 55 : 56 : 57 : /// Selection with one or many single dates. 58 : /// 59 : /// See also: 60 : /// * [DayPickerSingleSelection] - selection with only one selected date. 61 : /// * [DayPickerRangeSelection] - date period selection. 62 : class DayPickerMultiSelection extends DayPickerSelection { 63 : 64 : /// List of the selected dates. 65 : final List<DateTime> selectedDates; 66 : 67 : /// Selection with one or many single dates. 68 0 : DayPickerMultiSelection(this.selectedDates) 69 0 : : assert(selectedDates != null); 70 : 71 : 72 0 : @override 73 : bool isAfter(DateTime dateTime) 74 0 : => selectedDates.every((d) => d.isAfter(dateTime)); 75 : 76 0 : @override 77 : bool isBefore(DateTime dateTime) 78 0 : => selectedDates.every((d) => d.isBefore(dateTime)); 79 : 80 0 : @override 81 0 : DateTime get earliest => DatePickerUtils.getEarliestFromList(selectedDates); 82 : 83 0 : @override 84 0 : bool get isEmpty => selectedDates.isEmpty; 85 : 86 0 : @override 87 0 : bool get isNotEmpty => selectedDates.isNotEmpty; 88 : } 89 : 90 : 91 : 92 : /// Date period selection. 93 : /// 94 : /// See also: 95 : /// * [DayPickerSingleSelection] - selection with only one selected date. 96 : /// * [DayPickerMultiSelection] - selection with one or many single dates. 97 : class DayPickerRangeSelection extends DayPickerSelection { 98 : 99 : /// Selected period. 100 : final DatePeriod selectedRange; 101 : 102 : /// Date period selection. 103 0 : const DayPickerRangeSelection(this.selectedRange) 104 0 : : assert(selectedRange != null); 105 : 106 0 : @override 107 0 : DateTime get earliest => selectedRange.start; 108 : 109 0 : @override 110 0 : bool isAfter(DateTime dateTime) => selectedRange.start.isAfter(dateTime); 111 : 112 0 : @override 113 0 : bool isBefore(DateTime dateTime) => selectedRange.end.isBefore(dateTime); 114 : 115 0 : @override 116 0 : bool get isEmpty => selectedRange == null; 117 : 118 0 : @override 119 0 : bool get isNotEmpty => selectedRange != null; 120 : }