desire method

TextFormField desire(
  1. List desirable, {
  2. ValueChanged<String>? onChanged,
  3. GestureTapCallback? onTap,
  4. VoidCallback? onEditingComplete,
  5. ValueChanged<String>? onFieldSubmitted,
  6. FormFieldSetter<String>? onSaved,
  7. TextStyle? style,
  8. InputDecoration? decoration,
  9. ScrollController? scrollController,
  10. Iterable<String>? autofillHints,
})

Implementation

TextFormField desire(
  List desirable, {
  ValueChanged<String>? onChanged,
  GestureTapCallback? onTap,
  VoidCallback? onEditingComplete,
  ValueChanged<String>? onFieldSubmitted,
  FormFieldSetter<String>? onSaved,
  TextStyle? style,
  InputDecoration? decoration,
  ScrollController? scrollController,
  Iterable<String>? autofillHints,
}) {
  final desires = [
    decoration,
    TextField(
      style: style ?? const TextStyle(),
      decoration: decoration ?? const InputDecoration(),
    ),
    ...desirable
  ]
      .map((e) {
        if (e is TextField) return e;
        if (e is TextStyle) return TextField(style: e);
        if (e is InputDecoration) return TextField(decoration: e);

        return null;
      })
      .whereType<TextField>()
      .toList();

  return TextFormField(
    key: key,
    controller: controller,
    initialValue: initialValue,
    scrollController: scrollController,
    autofillHints: autofillHints,
    focusNode: mapDesire<FocusNode, TextField>(desires, (e) => e.focusNode),
    decoration: desires
        .map((e) => e.decoration)
        .whereType<InputDecoration>()
        .reduce((acc, e) => _mergeInputDecoration(acc, e)),
    keyboardType:
        mapDesire<TextInputType, TextField>(desires, (e) => e.keyboardType),
    textInputAction: mapDesire<TextInputAction, TextField>(
        desires, (e) => e.textInputAction),
    textCapitalization: mapDesire<TextCapitalization, TextField>(
        desires, (e) => e.textCapitalization, TextCapitalization.none)!,
    style: desires
        .map((e) => e.style)
        .whereType<TextStyle>()
        .reduce((acc, e) => acc.merge(e)),
    textAlign: mapDesire<TextAlign, TextField>(
        desires, (e) => e.textAlign, TextAlign.start)!,
    textAlignVertical: mapDesire<TextAlignVertical, TextField>(
        desires, (e) => e.textAlignVertical),
    textDirection:
        mapDesire<TextDirection, TextField>(desires, (e) => e.textDirection),
    readOnly: mapDesire<bool, TextField>(desires, (e) => e.readOnly, false)!,
    toolbarOptions: mapDesire<ToolbarOptions, TextField>(
        desires, (e) => e.toolbarOptions),
    showCursor: mapDesire<bool, TextField>(desires, (e) => e.showCursor),
    autofocus:
        mapDesire<bool, TextField>(desires, (e) => e.autofocus, false)!,
    obscuringCharacter: mapDesire<String, TextField>(
        desires, (e) => e.obscuringCharacter, '•')!,
    obscureText:
        mapDesire<bool, TextField>(desires, (e) => e.obscureText, false)!,
    autocorrect:
        mapDesire<bool, TextField>(desires, (e) => e.autocorrect, true)!,
    smartDashesType: mapDesire<SmartDashesType, TextField>(
        desires, (e) => e.smartDashesType),
    smartQuotesType: mapDesire<SmartQuotesType, TextField>(
        desires, (e) => e.smartQuotesType),
    enableSuggestions: mapDesire<bool, TextField>(
        desires, (e) => e.enableSuggestions, true)!,
    maxLines: mapDesire<int, TextField>(desires, (e) => e.maxLines, 1)!,
    minLines: mapDesire<int, TextField>(desires, (e) => e.minLines),
    expands: mapDesire<bool, TextField>(desires, (e) => e.expands, false)!,
    maxLength: mapDesire<int, TextField>(desires, (e) => e.maxLength),
    maxLengthEnforcement: mapDesire<MaxLengthEnforcement, TextField>(
        desires, (e) => e.maxLengthEnforcement),
    onSaved: onSaved,
    inputFormatters: desires
        .map((e) => e.inputFormatters)
        .whereType<List<TextInputFormatter>>()
        .expand((e) => e)
        .toList(),
    enabled: mapDesire<bool, TextField>(desires, (e) => e.enabled),
    cursorWidth:
        mapDesire<double, TextField>(desires, (e) => e.cursorWidth, 2.0)!,
    cursorHeight:
        mapDesire<double, TextField>(desires, (e) => e.cursorHeight),
    cursorRadius:
        mapDesire<Radius, TextField>(desires, (e) => e.cursorRadius),
    cursorColor: mapDesire<Color, TextField>(desires, (e) => e.cursorColor),
    keyboardAppearance: mapDesire<Brightness, TextField>(
        desires, (e) => e.keyboardAppearance),
    scrollPadding: mapDesire<EdgeInsets, TextField>(
        desires, (e) => e.scrollPadding, const EdgeInsets.all(20))!,
    enableInteractiveSelection: mapDesire<bool, TextField>(
        desires, (e) => e.enableInteractiveSelection, true)!,
    selectionControls: mapDesire<TextSelectionControls, TextField>(
        desires, (e) => e.selectionControls),
    buildCounter: mapDesire<
        Widget? Function(
      BuildContext, {
      required int currentLength,
      required bool isFocused,
      required int? maxLength,
    }),
        TextField>(desires, (e) => e.buildCounter),
    scrollPhysics:
        mapDesire<ScrollPhysics, TextField>(desires, (e) => e.scrollPhysics),
    restorationId: restorationId,
    enableIMEPersonalizedLearning: mapDesire<bool, TextField>(
        desires, (e) => e.enableIMEPersonalizedLearning, true)!,
    validator: validator,
    autovalidateMode: autovalidateMode,
    onChanged: onChanged,
    onEditingComplete: onEditingComplete,
    onFieldSubmitted: onFieldSubmitted,
    onTap: onTap,
  );
}