materialDatePickerBuilder function

Widget materialDatePickerBuilder(
  1. FormFieldState<DateTime> field
)

The default FastDatePicker Material FormFieldBuilder.

Returns an InkWell that shows a Material Design date picker when tapped. Also contains a Text widget that presents the current FastDatePickerState.value and an IconButton that shows the date picker as well when pressed.

Implementation

Widget materialDatePickerBuilder(FormFieldState<DateTime> field) {
  field as FastDatePickerState;
  final FastDatePickerState(
    :context,
    :decoration,
    :didChange,
    :enabled,
    :wasTouched,
    :widget
  ) = field;

  Future<DateTime?> show(DatePickerEntryMode entryMode) {
    return showDatePicker(
      anchorPoint: widget.anchorPoint,
      barrierColor: widget.barrierColor,
      barrierDismissible: widget.barrierDismissible,
      barrierLabel: widget.barrierLabel,
      builder: widget.dialogBuilder,
      cancelText: widget.cancelText,
      confirmText: widget.confirmText,
      context: context,
      currentDate: widget.currentDate,
      errorFormatText: widget.errorFormatText,
      errorInvalidText: widget.errorInvalidText,
      fieldHintText: widget.fieldHintText,
      fieldLabelText: widget.fieldLabelText,
      firstDate: widget.firstDate,
      helpText: widget.helpText,
      initialDatePickerMode: widget.initialDatePickerMode,
      initialEntryMode: entryMode,
      initialDate: widget.initialValue ?? DateTime.now(),
      keyboardType: widget.keyboardType,
      lastDate: widget.lastDate,
      locale: widget.locale,
      onDatePickerModeChange: widget.onDatePickerModeChange,
      routeSettings: widget.routeSettings,
      selectableDayPredicate: widget.selectableDayPredicate,
      switchToCalendarEntryModeIcon: widget.switchToCalendarEntryModeIcon,
      switchToInputEntryModeIcon: widget.switchToInputEntryModeIcon,
      textDirection: widget.textDirection,
      useRootNavigator: widget.useRootNavigator,
    ).then((value) {
      wasTouched();
      if (value != null) didChange(value);
      return value;
    });
  }

  return InkWell(
    onTap: enabled ? () => show(DatePickerEntryMode.input) : null,
    child: InputDecorator(
      decoration: decoration,
      child: Row(
        mainAxisAlignment: MainAxisAlignment.end,
        children: <Widget>[
          Expanded(
            child: widget.textBuilder(field),
          ),
          widget.iconButtonBuilder(field, show),
        ],
      ),
    ),
  );
}