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

如何在Text widget中每隔n个字符对字符串进行换行截断处理

实现方法

方法1:固定字符长度拆分(提前指定每行字符数)

先定义字符串拆分工具函数,按指定长度切割字符串后用换行符拼接,放入Text组件即可。
代码示例:

// 字符串拆分工具函数
String splitStringByLength(String input, int splitLength) {
  List<String> chunks = [];
  for (int i = 0; i < input.length; i += splitLength) {
    int end = i + splitLength < input.length ? i + splitLength : input.length;
    chunks.add(input.substring(i, end));
  }
  return chunks.join('\n');
}

// 布局中使用
Row(
  children: [
    // 必须用Expanded/Flexible包裹Text,避免Row布局溢出
    Expanded(
      child: Text(
        splitStringByLength('0xaff0a761260a3c6a271738550f0d7669dc6de96b5629ed7398735c61b8c55555', 20),
        // 搭配等宽字体保证每行字符数对齐
        style: TextStyle(fontFamily: 'monospace'),
      ),
    ),
  ],
)

方法2:自适应布局宽度拆分(根据Row可用宽度动态调整每行字符数)

如果需要根据布局可用空间自动决定拆分长度,可以搭配LayoutBuilder获取可用宽度后动态计算拆分长度:

Row(
  children: [
    Expanded(
      child: LayoutBuilder(
        builder: (context, constraints) {
          const textStyle = TextStyle(fontFamily: 'monospace', fontSize: 14);
          // 等宽字体下单个字符宽度约为字号的0.6倍,可根据实际字体调整
          final charWidth = textStyle.fontSize! * 0.6;
          final maxCharPerLine = (constraints.maxWidth / charWidth).floor();
          final processedStr = splitStringByLength('0xaff0a761260a3c6a271738550f0d7669dc6de96b5629ed7398735c61b8c55555', maxCharPerLine);
          return Text(processedStr, style: textStyle);
        },
      ),
    ),
  ],
)

注意事项

  • Row组件的子元素默认无宽度约束,必须用Expanded或Flexible包裹Text组件,否则文本不会触发换行,会出现布局溢出提示。
  • 建议搭配等宽字体使用,避免不同字符宽度不同导致的每行字符数不一致、对齐错位的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 00:09:00