TextField constructor
- Key? key,
- Object groupId = EditableText,
- TextEditingController? controller,
- FocusNode? focusNode,
- UndoHistoryController? undoController,
- InputDecoration? decoration = const InputDecoration(),
- TextInputType? keyboardType,
- TextInputAction? textInputAction,
- TextCapitalization textCapitalization = TextCapitalization.none,
- TextStyle? style,
- StrutStyle? strutStyle,
- TextAlign textAlign = TextAlign.start,
- TextAlignVertical? textAlignVertical,
- TextDirection? textDirection,
- bool readOnly = false,
- @Deprecated('Use `contextMenuBuilder` instead. ' 'This feature was deprecated after v3.3.0-0.5.pre.') ToolbarOptions? toolbarOptions,
- bool? showCursor,
- bool autofocus = false,
- MaterialStatesController? statesController,
- String obscuringCharacter = '•',
- bool obscureText = false,
- bool? autocorrect,
- SmartDashesType? smartDashesType,
- SmartQuotesType? smartQuotesType,
- bool enableSuggestions = true,
- int? maxLines = 1,
- int? minLines,
- bool expands = false,
- int? maxLength,
- MaxLengthEnforcement? maxLengthEnforcement,
- ValueChanged<String> ? onChanged,
- VoidCallback? onEditingComplete,
- ValueChanged<String> ? onSubmitted,
- AppPrivateCommandCallback? onAppPrivateCommand,
- List<TextInputFormatter> ? inputFormatters,
- bool? enabled,
- bool? ignorePointers,
- double cursorWidth = 2.0,
- double? cursorHeight,
- Radius? cursorRadius,
- bool? cursorOpacityAnimates,
- Color? cursorColor,
- Color? cursorErrorColor,
- BoxHeightStyle? selectionHeightStyle,
- BoxWidthStyle? selectionWidthStyle,
- Brightness? keyboardAppearance,
- EdgeInsets scrollPadding = const EdgeInsets.all(20.0),
- DragStartBehavior dragStartBehavior = DragStartBehavior.start,
- bool? enableInteractiveSelection,
- bool? selectAllOnFocus,
- TextSelectionControls? selectionControls,
- GestureTapCallback? onTap,
- bool onTapAlwaysCalled = false,
- TapRegionCallback? onTapOutside,
- TapRegionUpCallback? onTapUpOutside,
- MouseCursor? mouseCursor,
- InputCounterWidgetBuilder? buildCounter,
- ScrollController? scrollController,
- ScrollPhysics? scrollPhysics,
- Iterable<String> ? autofillHints = const <String>[],
- ContentInsertionConfiguration? contentInsertionConfiguration,
- Clip clipBehavior = Clip.hardEdge,
- String? restorationId,
- @Deprecated('Use `stylusHandwritingEnabled` instead. ' 'This feature was deprecated after v3.27.0-0.2.pre.') bool scribbleEnabled = true,
- bool stylusHandwritingEnabled = EditableText.defaultStylusHandwritingEnabled,
- bool enableIMEPersonalizedLearning = true,
- EditableTextContextMenuBuilder? contextMenuBuilder = _defaultContextMenuBuilder,
- bool canRequestFocus = true,
- SpellCheckConfiguration? spellCheckConfiguration,
- TextMagnifierConfiguration? magnifierConfiguration,
- List<Locale> ? hintLocales,
Creates a Material Design text field.
If decoration is non-null (which is the default), the text field requires
one of its ancestors to be a Material widget.
To remove the decoration entirely (including the extra padding introduced
by the decoration to save space for the labels), set the decoration to
null.
The maxLines property can be set to null to remove the restriction on
the number of lines. By default, it is one, meaning this is a single-line
text field. maxLines must not be zero.
The maxLength property is set to null by default, which means the
number of characters allowed in the text field is not restricted. If
maxLength is set a character counter will be displayed below the
field showing how many characters have been entered. If the value is
set to a positive integer it will also display the maximum allowed
number of characters to be entered. If the value is set to
TextField.noMaxLength then only the current length is displayed.
After maxLength characters have been input, additional input
is ignored, unless maxLengthEnforcement is set to
MaxLengthEnforcement.none.
The text field enforces the length with a LengthLimitingTextInputFormatter,
which is evaluated after the supplied inputFormatters, if any.
The maxLength value must be either null or greater than zero.
If maxLengthEnforcement is set to MaxLengthEnforcement.none, then more
than maxLength characters may be entered, and the error counter and
divider will switch to the decoration.errorStyle when the limit is
exceeded.
The text cursor is not shown if showCursor is false or if showCursor
is null (the default) and readOnly is true.
The selectionHeightStyle and selectionWidthStyle properties allow
changing the shape of the selection highlighting. These properties default
to EditableText.defaultSelectionHeightStyle and
EditableText.defaultSelectionHeightStyle, respectively.
See also:
- maxLength, which discusses the precise meaning of "number of characters" and how it may differ from the intuitive meaning.
Implementation
const TextField({
  super.key,
  this.groupId = EditableText,
  this.controller,
  this.focusNode,
  this.undoController,
  this.decoration = const InputDecoration(),
  TextInputType? keyboardType,
  this.textInputAction,
  this.textCapitalization = TextCapitalization.none,
  this.style,
  this.strutStyle,
  this.textAlign = TextAlign.start,
  this.textAlignVertical,
  this.textDirection,
  this.readOnly = false,
  @Deprecated(
    'Use `contextMenuBuilder` instead. '
    'This feature was deprecated after v3.3.0-0.5.pre.',
  )
  this.toolbarOptions,
  this.showCursor,
  this.autofocus = false,
  this.statesController,
  this.obscuringCharacter = '•',
  this.obscureText = false,
  this.autocorrect,
  SmartDashesType? smartDashesType,
  SmartQuotesType? smartQuotesType,
  this.enableSuggestions = true,
  this.maxLines = 1,
  this.minLines,
  this.expands = false,
  this.maxLength,
  this.maxLengthEnforcement,
  this.onChanged,
  this.onEditingComplete,
  this.onSubmitted,
  this.onAppPrivateCommand,
  this.inputFormatters,
  this.enabled,
  this.ignorePointers,
  this.cursorWidth = 2.0,
  this.cursorHeight,
  this.cursorRadius,
  this.cursorOpacityAnimates,
  this.cursorColor,
  this.cursorErrorColor,
  this.selectionHeightStyle,
  this.selectionWidthStyle,
  this.keyboardAppearance,
  this.scrollPadding = const EdgeInsets.all(20.0),
  this.dragStartBehavior = DragStartBehavior.start,
  bool? enableInteractiveSelection,
  this.selectAllOnFocus,
  this.selectionControls,
  this.onTap,
  this.onTapAlwaysCalled = false,
  this.onTapOutside,
  this.onTapUpOutside,
  this.mouseCursor,
  this.buildCounter,
  this.scrollController,
  this.scrollPhysics,
  this.autofillHints = const <String>[],
  this.contentInsertionConfiguration,
  this.clipBehavior = Clip.hardEdge,
  this.restorationId,
  @Deprecated(
    'Use `stylusHandwritingEnabled` instead. '
    'This feature was deprecated after v3.27.0-0.2.pre.',
  )
  this.scribbleEnabled = true,
  this.stylusHandwritingEnabled = EditableText.defaultStylusHandwritingEnabled,
  this.enableIMEPersonalizedLearning = true,
  this.contextMenuBuilder = _defaultContextMenuBuilder,
  this.canRequestFocus = true,
  this.spellCheckConfiguration,
  this.magnifierConfiguration,
  this.hintLocales,
}) : assert(obscuringCharacter.length == 1),
     smartDashesType =
         smartDashesType ?? (obscureText ? SmartDashesType.disabled : SmartDashesType.enabled),
     smartQuotesType =
         smartQuotesType ?? (obscureText ? SmartQuotesType.disabled : SmartQuotesType.enabled),
     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),
     // Assert the following instead of setting it directly to avoid surprising the user by silently changing the value they set.
     assert(
       !identical(textInputAction, TextInputAction.newline) ||
           maxLines == 1 ||
           !identical(keyboardType, TextInputType.text),
       'Use keyboardType TextInputType.multiline when using TextInputAction.newline on a multiline TextField.',
     ),
     keyboardType =
         keyboardType ?? (maxLines == 1 ? TextInputType.text : TextInputType.multiline),
     enableInteractiveSelection = enableInteractiveSelection ?? (!readOnly || !obscureText);