RichText

富文本段落文本组件

RichText组件可以显示多种不同样式的文本。要显示的文本通过TextSpan对象数组设置,每个对象都有关联的样式,文本可能会根据布局约束跨多行显示,也可能全部显示在同一行。

RichText组件中显示的文本必须显式设置样式,在选择使用何种样式时,可以考虑使用当前BuildContextDefaultTextStyle.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必须位于SelectionAreaSelectableRegion的子树中,并且需要将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
})

属性

属性名属性类型说明
childrenList<Widget>子组件
localeLocale?根据地区不同,使用对应的unicode字体展示内容
maxLinesint?设置最大行数,当文本内容超过最大行数的时候,根据overflow决定截断方式
overflowTextOverflow文本溢出时的处理行为
selectionColorColor?选中文本的背景色
selectionRegistrarSeletionRegistrar?用于在RichText上注册使用的SelectionArea等选择组件
softWrapbool设置文本是否在超出宽度时,选择合适位置换行
strutStyleStrutStyle?为整段文字设置统一、可预测的高度基线和行高,不受实际字形(如中文、英文、emoji、上下标)的影响
textInlineSpan文本内容
textAlignTextAlign文本在水平方向上的排列方式
textDirectionTextDirection?水平方向上文本排列方向,从左往右还是从右往左
textHeightBehaviorTextHeightBehavior?微调行高计算规则,设置第一行或者最后一行的行空白处要不要参与整体高度计算
textScalerTextScaler文本大小缩放
textWidthBasisTextWidthBasis用于告诉渲染引擎文本宽度是按照文本最长的一行,还是父布局给的约束宽度