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:
  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.
  • @immutable


TextSpan({String text, List<InlineSpan> children, TextStyle style, GestureRecognizer recognizer, String semanticsLabel})
Creates a TextSpan with the given values. [...]


children List<InlineSpan>
Additional spans to include as children. [...]
hashCode int
The hash code for this object. [...]
read-only, override
recognizer GestureRecognizer
A gesture recognizer that will receive events that hit this span. [...]
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited
semanticsLabel String
An alternative semantics label for this TextSpan. [...]
style TextStyle
The TextStyle to apply to this span. [...]
final, inherited
text String
The text contained in this span. [...]


build(ParagraphBuilder builder, {double textScaleFactor: 1.0, 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) → 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 checked 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. [...]
describeSemantics(Accumulator offset, List<int> semanticsOffsets, List semanticsElements) → void
Populates the semanticsOffsets and semanticsElements with the appropriate data to be able to construct a SemanticsNode. [...]
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.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent 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
Returns 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. [...]
visitTextSpan(bool visitor(TextSpan span)) bool
Walks this TextSpan and any descendants in pre-order and calls visitor for each span that has content. [...]
@Deprecated('Use to visitChildren instead. ' 'This feature was deprecated after v1.7.3.'), override


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