TextFormField constructor

TextFormField({
  1. Key? key,
  2. Object groupId = EditableText,
  3. TextEditingController? controller,
  4. String? initialValue,
  5. FocusNode? focusNode,
  6. String? forceErrorText,
  7. InputDecoration? decoration = const InputDecoration(),
  8. TextInputType? keyboardType,
  9. TextCapitalization textCapitalization = TextCapitalization.none,
  10. TextInputAction? textInputAction,
  11. TextStyle? style,
  12. StrutStyle? strutStyle,
  13. TextDirection? textDirection,
  14. TextAlign textAlign = TextAlign.start,
  15. TextAlignVertical? textAlignVertical,
  16. bool autofocus = false,
  17. bool readOnly = false,
  18. @Deprecated('Use `contextMenuBuilder` instead. ' 'This feature was deprecated after v3.3.0-0.5.pre.') ToolbarOptions? toolbarOptions,
  19. bool? showCursor,
  20. String obscuringCharacter = '•',
  21. bool obscureText = false,
  22. bool autocorrect = true,
  23. SmartDashesType? smartDashesType,
  24. SmartQuotesType? smartQuotesType,
  25. bool enableSuggestions = true,
  26. MaxLengthEnforcement? maxLengthEnforcement,
  27. int? maxLines = 1,
  28. int? minLines,
  29. bool expands = false,
  30. int? maxLength,
  31. ValueChanged<String>? onChanged,
  32. GestureTapCallback? onTap,
  33. bool onTapAlwaysCalled = false,
  34. TapRegionCallback? onTapOutside,
  35. VoidCallback? onEditingComplete,
  36. ValueChanged<String>? onFieldSubmitted,
  37. FormFieldSetter<String>? onSaved,
  38. FormFieldValidator<String>? validator,
  39. List<TextInputFormatter>? inputFormatters,
  40. bool? enabled,
  41. bool? ignorePointers,
  42. double cursorWidth = 2.0,
  43. double? cursorHeight,
  44. Radius? cursorRadius,
  45. Color? cursorColor,
  46. Color? cursorErrorColor,
  47. Brightness? keyboardAppearance,
  48. EdgeInsets scrollPadding = const EdgeInsets.all(20.0),
  49. bool? enableInteractiveSelection,
  50. TextSelectionControls? selectionControls,
  51. InputCounterWidgetBuilder? buildCounter,
  52. ScrollPhysics? scrollPhysics,
  53. Iterable<String>? autofillHints,
  54. AutovalidateMode? autovalidateMode,
  55. ScrollController? scrollController,
  56. String? restorationId,
  57. bool enableIMEPersonalizedLearning = true,
  58. MouseCursor? mouseCursor,
  59. EditableTextContextMenuBuilder? contextMenuBuilder = _defaultContextMenuBuilder,
  60. SpellCheckConfiguration? spellCheckConfiguration,
  61. TextMagnifierConfiguration? magnifierConfiguration,
  62. UndoHistoryController? undoController,
  63. AppPrivateCommandCallback? onAppPrivateCommand,
  64. bool? cursorOpacityAnimates,
  65. BoxHeightStyle selectionHeightStyle = ui.BoxHeightStyle.tight,
  66. BoxWidthStyle selectionWidthStyle = ui.BoxWidthStyle.tight,
  67. DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  68. ContentInsertionConfiguration? contentInsertionConfiguration,
  69. MaterialStatesController? statesController,
  70. Clip clipBehavior = Clip.hardEdge,
  71. bool scribbleEnabled = true,
  72. bool canRequestFocus = true,
})

Creates a FormField that contains a TextField.

When a controller is specified, initialValue must be null (the default). If controller is null, then a TextEditingController will be constructed automatically and its text will be initialized to initialValue or the empty string.

For documentation about the various parameters, see the TextField class and TextField.new, the constructor.

Implementation

TextFormField({
  super.key,
  this.groupId = EditableText,
  this.controller,
  String? initialValue,
  FocusNode? focusNode,
  super.forceErrorText,
  InputDecoration? decoration = const InputDecoration(),
  TextInputType? keyboardType,
  TextCapitalization textCapitalization = TextCapitalization.none,
  TextInputAction? textInputAction,
  TextStyle? style,
  StrutStyle? strutStyle,
  TextDirection? textDirection,
  TextAlign textAlign = TextAlign.start,
  TextAlignVertical? textAlignVertical,
  bool autofocus = false,
  bool readOnly = false,
  @Deprecated(
    'Use `contextMenuBuilder` instead. '
    'This feature was deprecated after v3.3.0-0.5.pre.',
  )
  ToolbarOptions? toolbarOptions,
  bool? showCursor,
  String obscuringCharacter = '•',
  bool obscureText = false,
  bool autocorrect = true,
  SmartDashesType? smartDashesType,
  SmartQuotesType? smartQuotesType,
  bool enableSuggestions = true,
  MaxLengthEnforcement? maxLengthEnforcement,
  int? maxLines = 1,
  int? minLines,
  bool expands = false,
  int? maxLength,
  this.onChanged,
  GestureTapCallback? onTap,
  bool onTapAlwaysCalled = false,
  TapRegionCallback? onTapOutside,
  VoidCallback? onEditingComplete,
  ValueChanged<String>? onFieldSubmitted,
  super.onSaved,
  super.validator,
  List<TextInputFormatter>? inputFormatters,
  bool? enabled,
  bool? ignorePointers,
  double cursorWidth = 2.0,
  double? cursorHeight,
  Radius? cursorRadius,
  Color? cursorColor,
  Color? cursorErrorColor,
  Brightness? keyboardAppearance,
  EdgeInsets scrollPadding = const EdgeInsets.all(20.0),
  bool? enableInteractiveSelection,
  TextSelectionControls? selectionControls,
  InputCounterWidgetBuilder? buildCounter,
  ScrollPhysics? scrollPhysics,
  Iterable<String>? autofillHints,
  AutovalidateMode? autovalidateMode,
  ScrollController? scrollController,
  super.restorationId,
  bool enableIMEPersonalizedLearning = true,
  MouseCursor? mouseCursor,
  EditableTextContextMenuBuilder? contextMenuBuilder = _defaultContextMenuBuilder,
  SpellCheckConfiguration? spellCheckConfiguration,
  TextMagnifierConfiguration? magnifierConfiguration,
  UndoHistoryController? undoController,
  AppPrivateCommandCallback? onAppPrivateCommand,
  bool? cursorOpacityAnimates,
  ui.BoxHeightStyle selectionHeightStyle = ui.BoxHeightStyle.tight,
  ui.BoxWidthStyle selectionWidthStyle = ui.BoxWidthStyle.tight,
  DragStartBehavior dragStartBehavior = DragStartBehavior.start,
  ContentInsertionConfiguration? contentInsertionConfiguration,
  MaterialStatesController? statesController,
  Clip clipBehavior = Clip.hardEdge,
  bool scribbleEnabled = true,
  bool canRequestFocus = true,
}) : assert(initialValue == null || controller == null),
     assert(obscuringCharacter.length == 1),
     assert(maxLines == null || maxLines > 0),
     assert(minLines == null || minLines > 0),
     assert(
       (maxLines == null) || (minLines == null) || (maxLines >= minLines),
       "minLines can't be greater than maxLines",
     ),
     assert(
       !expands || (maxLines == null && minLines == null),
       'minLines and maxLines must be null when expands is true.',
     ),
     assert(!obscureText || maxLines == 1, 'Obscured fields cannot be multiline.'),
     assert(maxLength == null || maxLength == TextField.noMaxLength || maxLength > 0),
     super(
       initialValue: controller != null ? controller.text : (initialValue ?? ''),
       enabled: enabled ?? decoration?.enabled ?? true,
       autovalidateMode: autovalidateMode ?? AutovalidateMode.disabled,
       builder: (FormFieldState<String> field) {
         final _TextFormFieldState state = field as _TextFormFieldState;
         final InputDecoration effectiveDecoration = (decoration ?? const InputDecoration())
             .applyDefaults(Theme.of(field.context).inputDecorationTheme);
         void onChangedHandler(String value) {
           field.didChange(value);
           onChanged?.call(value);
         }
         return UnmanagedRestorationScope(
           bucket: field.bucket,
           child: TextField(
             groupId: groupId,
             restorationId: restorationId,
             controller: state._effectiveController,
             focusNode: focusNode,
             decoration: effectiveDecoration.copyWith(errorText: field.errorText),
             keyboardType: keyboardType,
             textInputAction: textInputAction,
             style: style,
             strutStyle: strutStyle,
             textAlign: textAlign,
             textAlignVertical: textAlignVertical,
             textDirection: textDirection,
             textCapitalization: textCapitalization,
             autofocus: autofocus,
             statesController: statesController,
             toolbarOptions: toolbarOptions,
             readOnly: readOnly,
             showCursor: showCursor,
             obscuringCharacter: obscuringCharacter,
             obscureText: obscureText,
             autocorrect: autocorrect,
             smartDashesType: smartDashesType ?? (obscureText ? SmartDashesType.disabled : SmartDashesType.enabled),
             smartQuotesType: smartQuotesType ?? (obscureText ? SmartQuotesType.disabled : SmartQuotesType.enabled),
             enableSuggestions: enableSuggestions,
             maxLengthEnforcement: maxLengthEnforcement,
             maxLines: maxLines,
             minLines: minLines,
             expands: expands,
             maxLength: maxLength,
             onChanged: onChangedHandler,
             onTap: onTap,
             onTapAlwaysCalled: onTapAlwaysCalled,
             onTapOutside: onTapOutside,
             onEditingComplete: onEditingComplete,
             onSubmitted: onFieldSubmitted,
             inputFormatters: inputFormatters,
             enabled: enabled ?? decoration?.enabled ?? true,
             ignorePointers: ignorePointers,
             cursorWidth: cursorWidth,
             cursorHeight: cursorHeight,
             cursorRadius: cursorRadius,
             cursorColor: cursorColor,
             cursorErrorColor: cursorErrorColor,
             scrollPadding: scrollPadding,
             scrollPhysics: scrollPhysics,
             keyboardAppearance: keyboardAppearance,
             enableInteractiveSelection: enableInteractiveSelection ?? (!obscureText || !readOnly),
             selectionControls: selectionControls,
             buildCounter: buildCounter,
             autofillHints: autofillHints,
             scrollController: scrollController,
             enableIMEPersonalizedLearning: enableIMEPersonalizedLearning,
             mouseCursor: mouseCursor,
             contextMenuBuilder: contextMenuBuilder,
             spellCheckConfiguration: spellCheckConfiguration,
             magnifierConfiguration: magnifierConfiguration,
             undoController: undoController,
             onAppPrivateCommand: onAppPrivateCommand,
             cursorOpacityAnimates: cursorOpacityAnimates,
             selectionHeightStyle: selectionHeightStyle,
             selectionWidthStyle: selectionWidthStyle,
             dragStartBehavior: dragStartBehavior,
             contentInsertionConfiguration: contentInsertionConfiguration,
             clipBehavior: clipBehavior,
             scribbleEnabled: scribbleEnabled,
             canRequestFocus: canRequestFocus,
           ),
         );
       },
     );