You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter styled_text包:如何获取StyledText组件的显示文本?

如何从styled_text组件中提取替换后的纯显示文本?

我在项目里用styled_text包构建富文本,它比Flutter原生RichText好用太多。比如这段代码:

String name = 'Cedric';
StyledText myStyledText = StyledText(
  text: "Hello <name/>, <b>bold text</b>",
  tags: {
    'b': StyledTextTag(style: TextStyle(fontWeight: FontWeight.bold)),
    'name': StyledTextWidgetTag(Text(name)),
  },
);

组件渲染后显示的是“Hello Cedric, bold text”,但调用myStyledText.text只能拿到带标签的原始字符串。我需要把替换完变量、去掉样式标签的纯文本提取出来,传给只接受字符串参数的Tooltip组件,已经找到了解决方案,分享给大家。

解决方案:自定义解析函数

写一个工具函数,专门处理styled_text的原始文本和标签规则,提取出纯显示文本:

String extractStyledTextPlainContent(StyledText styledText) {
  String plainText = styledText.text;

  // 遍历所有标签,分别处理Widget标签和样式标签
  styledText.tags.forEach((tagName, tag) {
    if (tag is StyledTextWidgetTag) {
      // 提取WidgetTag里的文本内容(这里假设是Text组件,可根据实际情况调整)
      if (tag.child is Text) {
        final replacementText = (tag.child as Text).data ?? '';
        // 替换自闭合标签 <tagName/>
        plainText = plainText.replaceAll('<$tagName/>', replacementText);
      }
    } else if (tag is StyledTextTag) {
      // 移除样式标签,保留标签内的文本内容
      plainText = plainText.replaceAll(RegExp('<$tagName>(.*?)</$tagName>'), r'$1');
    }
  });

  return plainText;
}

使用方式

调用这个函数就能拿到需要的纯文本:

String tooltipText = extractStyledTextPlainContent(myStyledText);
// 直接传给Tooltip的message参数
Tooltip(
  message: tooltipText,
  child: YourWidget(),
);

注意事项

这个函数针对示例里的简单标签场景做了处理,如果你的项目里有带属性的标签或者更复杂的标签结构,可以根据styled_text的标签语法扩展正则表达式或者处理逻辑,适配自己的需求。

内容的提问来源于stack exchange,提问作者Cedric

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 08:22:47