CustomDateRangeField constructor
CustomDateRangeField({
- Key? key,
- DateTimeRange<
DateTime> ? initialValue, - FormFieldValidator<
DateTimeRange< ? validator,DateTime> > - AutovalidateMode? autovalidateMode,
- DateTime? firstDate,
- DateTime? lastDate,
- CustomDatePickerThemeData theme = CustomDatePickerThemeData.minimal,
- String label = 'Date range',
- ValueChanged<
DateTimeRange< ? onChanged,DateTime> ?>
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,
),
),
),
);
},
);