TextSpan class

An immutable span of text.

A TextSpan object can be styled using its style property. The style will be applied to the text and the children.

A TextSpan object can just have plain text, or it can have children TextSpan objects with their own styles that (possibly only partially) override the style of this object. If a TextSpan has both text and children, then the text is treated as if it was an un-styled TextSpan at the start of the children list. Leaving the TextSpan.text field null results in the TextSpan acting as an empty node in the InlineSpan tree with a list of children.

To paint a TextSpan on a Canvas, use a TextPainter. To display a text span in a widget, use a RichText. For text with a single style, consider using the Text widget.

The text "Hello world!", in black:
const TextSpan(
  text: 'Hello world!',
  style: TextStyle(color: Colors.black),

There is some more detailed sample code in the documentation for the recognizer property.

The TextSpan.text will be used as the semantics label unless overridden by the TextSpan.semanticsLabel property. Any PlaceholderSpans in the TextSpan.children list will separate the text before and after it into two semantics nodes.

See also:

  • WidgetSpan, a leaf node that represents an embedded inline widget in an InlineSpan tree. Specify a widget within the children list by wrapping the widget with a WidgetSpan. The widget will be laid out inline within the paragraph.
  • Text, a widget for showing uniformly-styled text.
  • RichText, a widget for finer control of text rendering.
  • TextPainter, a class for painting TextSpan objects on a Canvas.
Implemented types


TextSpan({String? text, List<InlineSpan>? children, TextStyle? style, GestureRecognizer? recognizer, MouseCursor? mouseCursor, PointerEnterEventListener? onEnter, PointerExitEventListener? onExit, String? semanticsLabel, Locale? locale, bool? spellOut})
Creates a TextSpan with the given values.


children List<InlineSpan>?
Additional spans to include as children.
cursor MouseCursor
Returns the value of mouseCursor.
no setteroverride
hashCode int
The hash code for this object.
no setteroverride
locale Locale?
The language of the text in this span and its span children.
mouseCursor MouseCursor
Mouse cursor when the mouse hovers over this span.
onEnter PointerEnterEventListener?
Triggered when a mouse pointer, with or without buttons pressed, has entered the region and validForMouseTracker is true.
onExit PointerExitEventListener?
Triggered when a mouse pointer, with or without buttons pressed, has exited the region and validForMouseTracker is true.
recognizer GestureRecognizer?
A gesture recognizer that will receive events that hit this span.
runtimeType Type
A representation of the runtime type of the object.
no setterinherited
semanticsLabel String?
An alternative semantics label for this TextSpan.
spellOut bool?
Whether the assistive technologies should spell out this text character by character.
style TextStyle?
The TextStyle to apply to this span.
text String?
The text contained in this span.
validForMouseTracker bool
Whether this is included when MouseTracker collects the list of annotations.
no setteroverride


build(ParagraphBuilder builder, {TextScaler textScaler = TextScaler.noScaling, List<PlaceholderDimensions>? dimensions}) → void
Apply the style, text, and children of this object to the given ParagraphBuilder, from which a Paragraph can be obtained. Paragraph objects can be drawn on Canvas objects.
codeUnitAt(int index) int?
Returns the UTF-16 code unit at the given index in the flattened string.
codeUnitAtVisitor(int index, Accumulator offset) int?
Performs the check at each InlineSpan for if the index falls within the range of the span and returns the corresponding code unit. Returns null otherwise.
compareTo(InlineSpan other) RenderComparison
Describe the difference between this span and another, in terms of how much damage it will make to the rendering. The comparison is deep.
computeSemanticsInformation(List<InlineSpanSemanticsInformation> collector, {Locale? inheritedLocale, bool inheritedSpellOut = false}) → void
Walks the InlineSpan tree and accumulates a list of InlineSpanSemanticsInformation objects.
computeToPlainText(StringBuffer buffer, {bool includeSemanticsLabels = true, bool includePlaceholders = true}) → void
Walks the InlineSpan tree and writes the plain text representation to buffer.
debugAssertIsValid() bool
In debug mode, throws an exception if the object is not in a valid configuration. Otherwise, returns true.
debugDescribeChildren() List<DiagnosticsNode>
Returns a list of DiagnosticsNode objects describing this node's children.
debugFillProperties(DiagnosticPropertiesBuilder properties) → void
Add additional properties associated with the node.
getSemanticsInformation() List<InlineSpanSemanticsInformation>
Flattens the InlineSpan tree to a list of InlineSpanSemanticsInformation objects.
getSpanForPosition(TextPosition position) InlineSpan?
Returns the InlineSpan that contains the given position in the text.
getSpanForPositionVisitor(TextPosition position, Accumulator offset) InlineSpan?
Returns the text span that contains the given position in the text.
handleEvent(PointerEvent event, HitTestEntry<HitTestTarget> entry) → void
Override this method to receive events.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
toDiagnosticsNode({String? name, DiagnosticsTreeStyle? style}) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by DiagnosticsNode.toStringDeep.
toPlainText({bool includeSemanticsLabels = true, bool includePlaceholders = true}) String
Flattens the InlineSpan tree into a single string.
toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) String
A string representation of this object.
toStringDeep({String prefixLineOne = '', String? prefixOtherLines, DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a string representation of this node and its descendants.
toStringShallow({String joiner = ', ', DiagnosticLevel minLevel = DiagnosticLevel.debug}) String
Returns a one-line detailed description of the object.
toStringShort() String
A brief description of this object, usually just the runtimeType and the hashCode.
visitChildren(InlineSpanVisitor visitor) bool
Walks this TextSpan and its descendants in pre-order and calls visitor for each span that has text.
visitDirectChildren(InlineSpanVisitor visitor) bool
Calls visitor for each immediate child of this InlineSpan.


operator ==(Object other) bool
The equality operator.