Implementation
TextField desire(List desirable) {
final desires = [
this,
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 TextField(
controller: controller,
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),
onChanged: onChanged,
onEditingComplete: onEditingComplete,
onSubmitted: onSubmitted,
onAppPrivateCommand: onAppPrivateCommand,
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),
selectionHeightStyle: mapDesire<BoxHeightStyle, TextField>(
desires, (e) => e.selectionHeightStyle, BoxHeightStyle.tight)!,
selectionWidthStyle: mapDesire<BoxWidthStyle, TextField>(
desires, (e) => e.selectionWidthStyle, BoxWidthStyle.tight)!,
keyboardAppearance: mapDesire<Brightness, TextField>(
desires, (e) => e.keyboardAppearance),
scrollPadding: mapDesire<EdgeInsets, TextField>(
desires, (e) => e.scrollPadding, const EdgeInsets.all(20))!,
dragStartBehavior: mapDesire<DragStartBehavior, TextField>(
desires, (e) => e.dragStartBehavior, DragStartBehavior.start)!,
enableInteractiveSelection: mapDesire<bool, TextField>(
desires, (e) => e.enableInteractiveSelection, true)!,
selectionControls: mapDesire<TextSelectionControls, TextField>(
desires, (e) => e.selectionControls),
onTap: onTap,
mouseCursor:
mapDesire<MouseCursor, TextField>(desires, (e) => e.mouseCursor),
buildCounter: mapDesire<
Widget? Function(
BuildContext, {
required int currentLength,
required bool isFocused,
required int? maxLength,
}),
TextField>(desires, (e) => e.buildCounter),
scrollController: scrollController,
scrollPhysics:
mapDesire<ScrollPhysics, TextField>(desires, (e) => e.scrollPhysics),
autofillHints: autofillHints,
restorationId: restorationId,
enableIMEPersonalizedLearning: mapDesire<bool, TextField>(
desires, (e) => e.enableIMEPersonalizedLearning, true)!,
);
}