如何将TextSpan列表转换为单一文本,可直接传入TextSpan的text属性
解决TextSpan列表转单文本字符串的方案
分两种场景实现:
场景1:TextSpan无嵌套子节点
如果你的listTextSpan里的所有TextSpan都没有嵌套children,直接用map遍历拼接即可:
List<TextSpan> listTextSpan = [TextSpan(text: "Hello"), TextSpan(text: "World")]; String singleText = listTextSpan.map((span) => span.text ?? '').join();
拼接后得到的singleText值就是HelloWorld,可以直接传入TextSpan的text参数使用。
场景2:TextSpan存在嵌套子节点
如果列表里的TextSpan可能嵌套了子TextSpan,就需要用递归的方式提取所有层级的文本:
// 递归提取所有TextSpan的文本 String extractAllText(List<TextSpan> spans) { final buffer = StringBuffer(); for (final span in spans) { if (span.text != null) buffer.write(span.text); if (span.children?.isNotEmpty == true) { buffer.write(extractAllText(span.children!)); } } return buffer.toString(); } // 调用获取合并后的文本 String singleText = extractAllText(listTextSpan);
注意:该转换仅会合并纯文本内容,原有每个TextSpan单独配置的样式(颜色、字号、字重等)都会丢失,如果需要保留多样式效果,仍然推荐直接将列表传入TextSpan的children属性使用。
内容的提问来源于stack exchange,提问作者Alex Maina
相关产品推荐
相关产品推荐

