CupertinoTextField.borderless constructor

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

Creates a borderless iOS-style text field.

To provide a prefilled text entry, pass in a TextEditingController with an initial value to the controller parameter.

To provide a hint placeholder text that appears when the text entry is empty, pass a String to the placeholder parameter.

The maxLines property can be set to null to remove the restriction on the number of lines. In this mode, the intrinsic height of the widget will grow as the number of lines of text grows. By default, it is 1, meaning this is a single-line text field and will scroll horizontally when it overflows. maxLines must not be zero.

The text cursor is not shown if showCursor is false or if showCursor is null (the default) and readOnly is true.

If specified, the maxLength property must be greater than zero.

The selectionHeightStyle and selectionWidthStyle properties allow changing the shape of the selection highlighting. These properties default to ui.BoxHeightStyle.tight and ui.BoxWidthStyle.tight respectively.

See also:

  • minLines, which is the minimum number of lines to occupy when the content spans fewer lines.
  • expands, to allow the widget to size itself to its parent's height.
  • maxLength, which discusses the precise meaning of "number of characters" and how it may differ from the intuitive meaning.

Implementation

const CupertinoTextField.borderless({
  super.key,
  this.groupId = EditableText,
  this.controller,
  this.focusNode,
  this.undoController,
  this.decoration,
  this.padding = const EdgeInsets.all(7.0),
  this.placeholder,
  this.placeholderStyle = _kDefaultPlaceholderStyle,
  this.prefix,
  this.prefixMode = OverlayVisibilityMode.always,
  this.suffix,
  this.suffixMode = OverlayVisibilityMode.always,
  this.crossAxisAlignment = CrossAxisAlignment.center,
  this.clearButtonMode = OverlayVisibilityMode.never,
  this.clearButtonSemanticLabel,
  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.obscuringCharacter = '•',
  this.obscureText = false,
  this.autocorrect = true,
  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.onTapOutside,
  this.inputFormatters,
  this.enabled = true,
  this.cursorWidth = 2.0,
  this.cursorHeight,
  this.cursorRadius = const Radius.circular(2.0),
  this.cursorOpacityAnimates = true,
  this.cursorColor,
  this.selectionHeightStyle = ui.BoxHeightStyle.tight,
  this.selectionWidthStyle = ui.BoxWidthStyle.tight,
  this.keyboardAppearance,
  this.scrollPadding = const EdgeInsets.all(20.0),
  this.dragStartBehavior = DragStartBehavior.start,
  bool? enableInteractiveSelection,
  this.selectionControls,
  this.onTap,
  this.scrollController,
  this.scrollPhysics,
  this.autofillHints = const <String>[],
  this.contentInsertionConfiguration,
  this.clipBehavior = Clip.hardEdge,
  this.restorationId,
  this.scribbleEnabled = true,
  this.enableIMEPersonalizedLearning = true,
  this.contextMenuBuilder = _defaultContextMenuBuilder,
  this.spellCheckConfiguration,
  this.magnifierConfiguration,
}) : 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 > 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);