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