Add controller support

This commit is contained in:
Dominic Grimm 2023-12-16 18:52:38 +01:00
parent 190a5d734b
commit c8214efdb9
2 changed files with 29 additions and 17 deletions

View file

@ -31,27 +31,37 @@ class DateTimeFormField extends FormField<DateTime> {
DatePickerMode initialDatePickerMode = DatePickerMode.day,
DateTimeFieldPickerMode mode = DateTimeFieldPickerMode.dateAndTime,
TimePickerEntryMode initialTimePickerEntryMode = TimePickerEntryMode.dial,
DateTimeFormFieldController? controller,
DateTimeFieldCreator fieldCreator = DateTimeField.new,
}) : super(
key: key,
initialValue: initialValue,
initialValue:
initialValue == null && controller != null ? controller.selectedDate : initialValue,
onSaved: onSaved,
validator: validator,
autovalidateMode: autovalidateMode,
enabled: enabled,
builder: (FormFieldState<DateTime> field) {
if (controller != null) {
controller.addListener(() {
field.didChange(controller.selectedDate);
});
}
// Theme defaults are applied inside the _InputDropdown widget
final InputDecoration _decorationWithThemeDefaults =
decoration ?? const InputDecoration();
final InputDecoration effectiveDecoration =
_decorationWithThemeDefaults.copyWith(
errorText: field.errorText);
_decorationWithThemeDefaults.copyWith(errorText: field.errorText);
void onChangedHandler(DateTime value) {
if (onDateSelected != null) {
onDateSelected(value);
}
if (controller != null) {
controller.selectedDate = value;
}
field.didChange(value);
}
@ -77,3 +87,12 @@ class DateTimeFormField extends FormField<DateTime> {
@override
FormFieldState<DateTime> createState() => FormFieldState<DateTime>();
}
class DateTimeFormFieldController extends ChangeNotifier {
DateTime? _selectedDate;
DateTime? get selectedDate => _selectedDate;
set selectedDate(DateTime? value) {
_selectedDate = value;
notifyListeners();
}
}