BidiText class

A text widget that automatically detects and sets text direction based on content.

BidiText is a StatelessWidget that wraps Flutter's standard Text widget and automatically determines whether the text should be displayed in right-to-left (RTL) or left-to-right (LTR) direction based on its content.

Use the primary constructor for plain strings and BidiText.rich for styled InlineSpan trees (mirrors Text.rich).

Breaking change (v2.0.0)

BidiText no longer extends Text. It extends StatelessWidget and builds a Text internally. If your code relied on bidiTextInstance is Text type checks, update them — all widget behaviour is identical.

Example:

BidiText('Hello world!')  // Will display in LTR direction
BidiText('مرحبا بالعالم!')  // Will display in RTL direction
BidiText('Hello مرحبا')  // Direction will be determined by content analysis

// Styled text (mirrors Text.rich):
BidiText.rich(
  TextSpan(children: [
    TextSpan(text: 'Hello ', style: TextStyle(fontWeight: FontWeight.bold)),
    TextSpan(text: 'مرحبا'),
  ]),
)
Inheritance

Constructors

BidiText(String data, {Key? key, TextStyle? style, StrutStyle? strutStyle, TextAlign? textAlign, Locale? locale, bool? softWrap, TextOverflow? overflow, TextScaler? textScaler, int? maxLines, String? semanticsLabel, TextWidthBasis? textWidthBasis, TextHeightBehavior? textHeightBehavior, Color? selectionColor, int? sampleLength = 50})
Creates a BidiText widget with a plain string.
const
BidiText.rich(InlineSpan textSpan, {Key? key, TextStyle? style, StrutStyle? strutStyle, TextAlign? textAlign, Locale? locale, bool? softWrap, TextOverflow? overflow, TextScaler? textScaler, int? maxLines, String? semanticsLabel, TextWidthBasis? textWidthBasis, TextHeightBehavior? textHeightBehavior, Color? selectionColor, int? sampleLength = 50})
Creates a BidiText widget with an InlineSpan — a drop-in replacement for Text.rich.
const

Properties

data String?
The plain text string. Non-null only when using the primary constructor.
final
hashCode int
The hash code for this object.
no setterinherited
key Key?
Controls how one widget replaces another widget in the tree.
finalinherited
locale Locale?
Used to select a font when the same Unicode character can be rendered differently depending on the locale.
final
maxLines int?
Maximum number of lines to show.
final
overflow TextOverflow?
How visual overflow should be handled.
final
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
selectionColor Color?
The color to use when painting the selection.
final
semanticsLabel String?
An optional semantics label for this widget.
final
softWrap bool?
Whether the text should break at soft line breaks.
final
strutStyle StrutStyle?
The strut style used for the vertical layout.
final
style TextStyle?
The text style to apply. Defaults to ambient DefaultTextStyle.
final
textAlign TextAlign?
How the text should be aligned horizontally.
final
textDirection TextDirection?
no setter
textHeightBehavior TextHeightBehavior?
final
textScaler TextScaler?
The font scaling strategy to use when laying out and rendering the text.
final
textSpan InlineSpan?
The InlineSpan for rich text. Non-null only when using BidiText.rich.
final
textWidthBasis TextWidthBasis?
Defines how to measure the width of the rendered text.
final

Methods

build(BuildContext context) Widget
Describes the part of the user interface represented by this widget.
override
createElement() StatelessElement
Creates a StatelessElement to manage this widget's location in the tree.
inherited
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