RichText
富文本段落文本组件
RichText组件可以显示多种不同样式的文本。要显示的文本通过TextSpan对象数组设置,每个对象都有关联的样式,文本可能会根据布局约束跨多行显示,也可能全部显示在同一行。
RichText组件中显示的文本必须显式设置样式,在选择使用何种样式时,可以考虑使用当前BuildContext的DefaultTextStyle.of提供默认值。
当所有文本使用相同样式时,使用Text组件的默认构造函数会更加简洁。
RichText(
text: TextSpan(
text: 'Hello ',
style: DefaultTextStyle.of(context).style,
children: const <TextSpan>[
TextSpan(text: 'bold', style: TextStyle(fontWeight: FontWeight.bold)),
TextSpan(text: ' world!'),
],
),
)
这个例子展示了使用RichText组件在一段文字中展示不同的文本样式。

选择
要使RichText组件文本内容可选中,RichText必须位于SelectionArea或SelectableRegion的子树中,并且需要将SelectionRegistrar赋值给RichText.selectionRegistrar。可以通过SelectionContainer.maybeOf从上下文中获取SelectionRegistrar。这样用户就可以用鼠标或触摸事件选中RichText中的文本。
如果启用了选择功能,还需要设置selectionColor,以便绘制选区高亮。
RichText(
text: const TextSpan(text: 'Hello'),
selectionRegistrar: SelectionContainer.maybeOf(context),
selectionColor: const Color(0xAF6694e8),
)
这个例子演示了如何在SelectionArea子树中为RichText分配一个SelectionRegistrar。

构造函数
RichText.new({
Key? key,
required InlineSpan text,
TextAlign textAlign = TextAlign.start,
TextDirection? textDirection,
bool softWrap = true,
TextOverflow overflow = TextOverflow.clip,
('Use textScaler instead. ' 'Use of textScaleFactor was deprecated in preparation for the upcoming nonlinear text scaling support. ' 'This feature was deprecated after v3.12.0-2.0.pre.') double textScaleFactor = 1.0,
TextScaler textScaler = TextScaler.noScaling,
int? maxLines,
Locale? locale,
StrutStyle? strutStyle,
TextWidthBasis textWidthBasis = TextWidthBasis.parent,
TextHeightBehavior? textHeightBehavior,
SelectionRegistrar? selectionRegistrar,
Color? selectionColor
})
属性
| 属性名 | 属性类型 | 说明 |
|---|---|---|
| children | List<Widget> | 子组件 |
| locale | Locale? | 根据地区不同,使用对应的unicode字体展示内容 |
| maxLines | int? | 设置最大行数,当文本内容超过最大行数的时候,根据overflow决定截断方式 |
| overflow | TextOverflow | 文本溢出时的处理行为 |
| selectionColor | Color? | 选中文本的背景色 |
| selectionRegistrar | SeletionRegistrar? | 用于在RichText上注册使用的SelectionArea等选择组件 |
| softWrap | bool | 设置文本是否在超出宽度时,选择合适位置换行 |
| strutStyle | StrutStyle? | 为整段文字设置统一、可预测的高度基线和行高,不受实际字形(如中文、英文、emoji、上下标)的影响 |
| text | InlineSpan | 文本内容 |
| textAlign | TextAlign | 文本在水平方向上的排列方式 |
| textDirection | TextDirection? | 水平方向上文本排列方向,从左往右还是从右往左 |
| textHeightBehavior | TextHeightBehavior? | 微调行高计算规则,设置第一行或者最后一行的行空白处要不要参与整体高度计算 |
| textScaler | TextScaler | 文本大小缩放 |
| textWidthBasis | TextWidthBasis | 用于告诉渲染引擎文本宽度是按照文本最长的一行,还是父布局给的约束宽度 |