BidiTextField class
A text field widget that automatically detects and sets text direction based on content.
BidiTextField
extends Flutter's standard TextField widget but automatically determines
whether the text should be displayed in right-to-left (RTL) or left-to-right (LTR)
direction based on the content of the text itself.
This is particularly useful for applications that support multiple languages with different text directions, as it eliminates the need to manually specify direction.
Example:
BidiTextField(
decoration: InputDecoration(hintText: 'Enter text'),
onDirectionChanged: (direction) {
print('Text direction changed to: $direction');
},
)
- Inheritance
-
- Object
- DiagnosticableTree
- Widget
- StatefulWidget
- TextField
- BidiTextField
Constructors
-
BidiTextField.new({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, bool? showCursor, bool autofocus = false, MaterialStatesController? statesController, String obscuringCharacter = '•', bool obscureText = false, bool? autocorrect = true, 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 = ui.BoxHeightStyle.tight, BoxWidthStyle? selectionWidthStyle = ui.BoxWidthStyle.tight, Brightness? keyboardAppearance, EdgeInsets scrollPadding = const EdgeInsets.all(20.0), DragStartBehavior dragStartBehavior = DragStartBehavior.start, bool? enableInteractiveSelection, TextSelectionControls? selectionControls, GestureTapCallback? onTap, bool onTapAlwaysCalled = false, TapRegionCallback? onTapOutside, MouseCursor? mouseCursor, InputCounterWidgetBuilder? buildCounter, ScrollController? scrollController, ScrollPhysics? scrollPhysics, Iterable<String> ? autofillHints = const <String>[], ContentInsertionConfiguration? contentInsertionConfiguration, Clip clipBehavior = Clip.hardEdge, String? restorationId, bool enableIMEPersonalizedLearning = true, EditableTextContextMenuBuilder? contextMenuBuilder = _defaultContextMenuBuilder, bool canRequestFocus = true, SpellCheckConfiguration? spellCheckConfiguration, TextMagnifierConfiguration? magnifierConfiguration, int? sampleLength = 50, ValueChanged<TextDirection> ? onDirectionChanged}) -
const
Properties
- autocorrect → bool?
-
Whether to enable autocorrection.
finalinherited
-
autofillHints
→ Iterable<
String> ? -
A list of strings that helps the autofill service identify the type of this
text input.
finalinherited
- autofocus → bool
-
Whether this text field should focus itself if nothing else is already
focused.
finalinherited
- buildCounter → InputCounterWidgetBuilder?
-
Callback that generates a custom InputDecoration.counter widget.
finalinherited
- canRequestFocus → bool
-
Determine whether this text field can request the primary focus.
finalinherited
- clipBehavior → Clip
-
The content will be clipped (or not) according to this option.
finalinherited
- contentInsertionConfiguration → ContentInsertionConfiguration?
-
Configuration of handler for media content inserted via the system input
method.
finalinherited
- contextMenuBuilder → EditableTextContextMenuBuilder?
-
Builds the text selection toolbar when requested by the user.
finalinherited
- controller → TextEditingController?
-
Controls the text being edited.
finalinherited
- cursorColor → Color?
-
The color of the cursor.
finalinherited
- cursorErrorColor → Color?
-
The color of the cursor when the InputDecorator is showing an error.
finalinherited
- cursorHeight → double?
-
How tall the cursor will be.
finalinherited
- cursorOpacityAnimates → bool?
-
Whether the cursor will animate from fully transparent to fully opaque
during each cursor blink.
finalinherited
- cursorRadius → Radius?
-
How rounded the corners of the cursor should be.
finalinherited
- cursorWidth → double
-
How thick the cursor will be.
finalinherited
- decoration → InputDecoration?
-
The decoration to show around the text field.
finalinherited
- dragStartBehavior → DragStartBehavior
-
Determines the way that drag start behavior is handled.
finalinherited
- enabled → bool?
-
If false the text field is "disabled": it ignores taps and its
decoration is rendered in grey.
finalinherited
- enableIMEPersonalizedLearning → bool
-
Whether to enable that the IME update personalized data such as typing
history and user dictionary data.
finalinherited
- enableInteractiveSelection → bool
-
Whether to enable user interface affordances for changing the
text selection.
finalinherited
- enableSuggestions → bool
-
Whether to show input suggestions as the user types.
finalinherited
- expands → bool
-
Whether this widget's height will be sized to fill its parent.
finalinherited
- focusNode → FocusNode?
-
Defines the keyboard focus for this widget.
finalinherited
- groupId → Object
-
The group identifier for the TextFieldTapRegion of this text field.
finalinherited
- hashCode → int
-
The hash code for this object.
no setterinherited
-
hintLocales
→ List<
Locale> ? -
List of the languages that the user is expected to use.
finalinherited
- ignorePointers → bool?
-
Determines whether this widget ignores pointer events.
finalinherited
-
inputFormatters
→ List<
TextInputFormatter> ? -
Optional input validation and formatting overrides.
finalinherited
- key → Key?
-
Controls how one widget replaces another widget in the tree.
finalinherited
- keyboardAppearance → Brightness?
-
The appearance of the keyboard.
finalinherited
- keyboardType → TextInputType
-
The type of keyboard to use for editing the text.
finalinherited
- magnifierConfiguration → TextMagnifierConfiguration?
-
The configuration for the magnifier of this text field.
finalinherited
- maxLength → int?
-
The maximum number of characters (Unicode grapheme clusters) to allow in
the text field.
finalinherited
- maxLengthEnforcement → MaxLengthEnforcement?
-
Determines how the maxLength limit should be enforced.
finalinherited
- maxLines → int?
-
The maximum number of lines to show at one time, wrapping if necessary.
finalinherited
- minLines → int?
-
The minimum number of lines to occupy when the content spans fewer lines.
finalinherited
- mouseCursor → MouseCursor?
-
The cursor for a mouse pointer when it enters or is hovering over the
widget.
finalinherited
- obscureText → bool
-
Whether to hide the text being edited (e.g., for passwords).
finalinherited
- obscuringCharacter → String
-
Character used for obscuring text if obscureText is true.
finalinherited
- onAppPrivateCommand → AppPrivateCommandCallback?
-
This is used to receive a private command from the input method.
finalinherited
-
onChanged
→ ValueChanged<
String> ? -
Called when the user initiates a change to the TextField's
value: when they have inserted or deleted text.
finalinherited
-
onDirectionChanged
→ ValueChanged<
TextDirection> ? -
Callback that is called when the text direction changes
final
- onEditingComplete → VoidCallback?
-
Called when the user submits editable content (e.g., user presses the "done"
button on the keyboard).
finalinherited
-
onSubmitted
→ ValueChanged<
String> ? -
Called when the user indicates that they are done editing the text in the
field.
finalinherited
- onTap → GestureTapCallback?
-
Called for the first tap in a series of taps.
finalinherited
- onTapAlwaysCalled → bool
-
Whether onTap should be called for every tap.
finalinherited
- onTapOutside → TapRegionCallback?
-
Called for each tap down that occurs outside of the TextFieldTapRegion
group when the text field is focused.
finalinherited
- onTapUpOutside → TapRegionUpCallback?
-
Called for each tap up that occurs outside of the TextFieldTapRegion
group when the text field is focused.
finalinherited
- readOnly → bool
-
Whether the text can be changed.
finalinherited
- restorationId → String?
-
Restoration ID to save and restore the state of the text field.
finalinherited
- runtimeType → Type
-
A representation of the runtime type of the object.
no setterinherited
- sampleLength → int?
-
Maximum number of characters to sample for direction detection.
final
- scribbleEnabled → bool
-
Whether iOS 14 Scribble features are enabled for this widget.
finalinherited
- scrollController → ScrollController?
-
The ScrollController to use when vertically scrolling the input.
finalinherited
- scrollPadding → EdgeInsets
-
Configures the padding for the edges surrounding a Scrollable when the
text field scrolls into view.
finalinherited
- scrollPhysics → ScrollPhysics?
-
The ScrollPhysics to use when vertically scrolling the input.
finalinherited
- selectAllOnFocus → bool?
-
Whether this field should select all text when gaining focus.
finalinherited
- selectionControls → TextSelectionControls?
-
Optional delegate for building the text selection handles.
finalinherited
- selectionEnabled → bool
-
Same as enableInteractiveSelection.
no setterinherited
- selectionHeightStyle → BoxHeightStyle?
-
Controls how tall the selection highlight boxes are computed to be.
finalinherited
- selectionWidthStyle → BoxWidthStyle?
-
Controls how wide the selection highlight boxes are computed to be.
finalinherited
- showCursor → bool?
-
Whether to show cursor.
finalinherited
- smartDashesType → SmartDashesType
-
Whether to allow the platform to automatically format dashes.
finalinherited
- smartQuotesType → SmartQuotesType
-
Whether to allow the platform to automatically format quotes.
finalinherited
- spellCheckConfiguration → SpellCheckConfiguration?
-
Configuration that details how spell check should be performed.
finalinherited
- statesController → MaterialStatesController?
-
Represents the interactive "state" of this widget in terms of a set of
WidgetStates, including WidgetState.disabled, WidgetState.hovered,
WidgetState.error, and WidgetState.focused.
finalinherited
- strutStyle → StrutStyle?
-
The strut style used for the vertical layout.
finalinherited
- style → TextStyle?
-
The style to use for the text being edited.
finalinherited
- stylusHandwritingEnabled → bool
-
Whether this input supports stylus handwriting, where the user can write
directly on top of a field.
finalinherited
- textAlign → TextAlign
-
How the text should be aligned horizontally.
finalinherited
- textAlignVertical → TextAlignVertical?
-
How the text should be aligned vertically.
finalinherited
- textCapitalization → TextCapitalization
-
Configures how the platform keyboard will select an uppercase or
lowercase keyboard.
finalinherited
- textDirection → TextDirection?
-
The directionality of the text.
finalinherited
- textInputAction → TextInputAction?
-
The type of action button to use for the keyboard.
finalinherited
- toolbarOptions → ToolbarOptions?
-
Configuration of toolbar options.
finalinherited
- undoController → UndoHistoryController?
-
Controls the undo state.
finalinherited
Methods
-
createElement(
) → StatefulElement -
Creates a StatefulElement to manage this widget's location in the tree.
inherited
-
createState(
) → State< BidiTextField> -
Creates the mutable state for this widget at a given location in the tree.
override
-
debugDescribeChildren(
) → List< DiagnosticsNode> -
Returns a list of DiagnosticsNode objects describing this node's
children.
inherited
-
debugFillProperties(
DiagnosticPropertiesBuilder properties) → void -
Add additional properties associated with the node.
inherited
-
noSuchMethod(
Invocation invocation) → dynamic -
Invoked when a nonexistent method or property is accessed.
inherited
-
toDiagnosticsNode(
{String? name, DiagnosticsTreeStyle? style}) → DiagnosticsNode -
Returns a debug representation of the object that is used by debugging
tools and by DiagnosticsNode.toStringDeep.
inherited
-
toString(
{DiagnosticLevel minLevel = DiagnosticLevel.info}) → String -
A string representation of this object.
inherited
-
toStringDeep(
{String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug, int wrapWidth = 65}) → String -
Returns a string representation of this node and its descendants.
inherited
-
toStringShallow(
{String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) → String -
Returns a one-line detailed description of the object.
inherited
-
toStringShort(
) → String -
A short, textual description of this widget.
inherited
Operators
-
operator ==(
Object other) → bool -
The equality operator.
inherited