CustomDateRangeField constructor

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

Implementation

CustomDateRangeField({
  super.key,
  super.initialValue,
  super.validator,
  super.autovalidateMode,
  DateTime? firstDate,
  DateTime? lastDate,
  CustomDatePickerThemeData theme = CustomDatePickerThemeData.minimal,
  String label = 'Date range',
  ValueChanged<DateTimeRange?>? onChanged,
}) : super(
       builder: (field) {
         final value = field.value;
         final text = value == null
             ? 'DD/MM/YYYY  –  DD/MM/YYYY'
             : '${formatDdMmYyyy(value.start)}  –  ${formatDdMmYyyy(value.end)}';

         return CustomDatePickerTheme(
           data: theme,
           child: DateFieldCard(
             label: label,
             icon: Icons.date_range_outlined,
             errorText: field.errorText,
             onClear: 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 showCustomDateRangePicker(
                 context: fieldContext,
                 initialStart: value?.start,
                 initialEnd: value?.end,
                 firstDate: firstDate,
                 lastDate: lastDate,
                 theme: theme,
               );
               if (picked == null) return;
               field.didChange(picked);
               onChanged?.call(picked);
             },
             child: Text(
               text,
               overflow: TextOverflow.ellipsis,
               style: theme.style(
                 fontSize: theme.valueFontSize,
                 weight: FontWeight.w700,
                 color: value == null ? theme.muted : theme.ink,
                 override: theme.valueTextStyle,
               ),
             ),
           ),
         );
       },
     );