CalendarDatePicker constructor

CalendarDatePicker(
  1. {Key? key,
  2. required DateTime? initialDate,
  3. required DateTime firstDate,
  4. required DateTime lastDate,
  5. DateTime? currentDate,
  6. required ValueChanged<DateTime> onDateChanged,
  7. ValueChanged<DateTime>? onDisplayedMonthChanged,
  8. DatePickerMode initialCalendarMode = DatePickerMode.day,
  9. SelectableDayPredicate? selectableDayPredicate}
)

Creates a calendar date picker.

It will display a grid of days for the initialDate's month, or, if that is null, the currentDate's month. The day indicated by initialDate will be selected if it is not null.

The optional onDisplayedMonthChanged callback can be used to track the currently displayed month.

The user interface provides a way to change the year of the month being displayed. By default it will show the day grid, but this can be changed to start in the year selection interface with initialCalendarMode set to DatePickerMode.year.

The lastDate must be after or equal to firstDate.

The initialDate, if provided, must be between firstDate and lastDate or equal to one of them.

The currentDate represents the current day (i.e. today). This date will be highlighted in the day grid. If null, the date of DateTime.now() will be used.

If selectableDayPredicate and initialDate are both non-null, selectableDayPredicate must return true for the initialDate.

Implementation

CalendarDatePicker({
  super.key,
  required DateTime? initialDate,
  required DateTime firstDate,
  required DateTime lastDate,
  DateTime? currentDate,
  required this.onDateChanged,
  this.onDisplayedMonthChanged,
  this.initialCalendarMode = DatePickerMode.day,
  this.selectableDayPredicate,
}) : initialDate = initialDate == null ? null : DateUtils.dateOnly(initialDate),
     firstDate = DateUtils.dateOnly(firstDate),
     lastDate = DateUtils.dateOnly(lastDate),
     currentDate = DateUtils.dateOnly(currentDate ?? DateTime.now()) {
  assert(
    !this.lastDate.isBefore(this.firstDate),
    'lastDate ${this.lastDate} must be on or after firstDate ${this.firstDate}.',
  );
  assert(
    this.initialDate == null || !this.initialDate!.isBefore(this.firstDate),
    'initialDate ${this.initialDate} must be on or after firstDate ${this.firstDate}.',
  );
  assert(
    this.initialDate == null || !this.initialDate!.isAfter(this.lastDate),
    'initialDate ${this.initialDate} must be on or before lastDate ${this.lastDate}.',
  );
  assert(
    selectableDayPredicate == null || this.initialDate == null || selectableDayPredicate!(this.initialDate!),
    'Provided initialDate ${this.initialDate} must satisfy provided selectableDayPredicate.',
  );
}