CustomDateField constructor

CustomDateField({
  1. Key? key,
  2. DateTime? initialValue,
  3. FormFieldValidator<DateTime>? validator,
  4. AutovalidateMode? autovalidateMode,
  5. DatePickerType type = DatePickerType.spin,
  6. DateTime? firstDate,
  7. DateTime? lastDate,
  8. CustomDatePickerThemeData theme = CustomDatePickerThemeData.minimal,
  9. String label = 'Date',
  10. ValueChanged<DateTime?>? onChanged,
})

Implementation

CustomDateField({
  super.key,
  super.initialValue,
  super.validator,
  super.autovalidateMode,
  DatePickerType type = DatePickerType.spin,
  DateTime? firstDate,
  DateTime? lastDate,
  CustomDatePickerThemeData theme = CustomDatePickerThemeData.minimal,
  String label = 'Date',
  ValueChanged<DateTime?>? onChanged,
}) : super(
       builder: (field) {
         assert(
           type != DatePickerType.range,
           'Use CustomDateRangeField for a start and end date.',
         );
         final engine = SelectionEngine(
           firstDate: firstDate,
           lastDate: lastDate,
         );
         return CustomDatePickerTheme(
           data: theme,
           child: type == DatePickerType.input
               ? DateInputField(
                   engine: engine,
                   label: label,
                   value: field.value,
                   formError: field.errorText,
                   onChanged: (date) {
                     field.didChange(date);
                     onChanged?.call(date);
                   },
                 )
               : _SelectableDateField(
                   label: label,
                   value: field.value,
                   errorText: field.errorText,
                   onClear: field.value == null
                       ? null
                       : () {
                           field.didChange(null);
                           onChanged?.call(null);
                         },
                   onTap: () async {
                     final fieldContext = field.context;
                     if (kIsWeb) {
                       await Future<void>.delayed(
                         const Duration(milliseconds: 150),
                       );
                     }
                     if (!fieldContext.mounted) return;
                     final picked = await showCustomDatePicker(
                       context: fieldContext,
                       type: type,
                       initialDate: field.value,
                       firstDate: firstDate,
                       lastDate: lastDate,
                       theme: theme,
                     );
                     if (picked == null) return;
                     field.didChange(picked);
                     onChanged?.call(picked);
                   },
                 ),
         );
       },
     );