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

Flutter中TextSpan能否实现自动换行避免文本溢出

问题解决方法

溢出原因

当前溢出问题是因为Row组件默认不会对子组件做宽度约束,SelectableText.rich拿到了无限的宽度权限,所以会一直单行展示文本,最终超出屏幕宽度溢出。

修复方案

只需要给SelectableText.rich外层包裹Expanded组件即可,Expanded会自动限制子组件的宽度不超过Row的可用屏幕宽度,文本检测到最大宽度约束后会自动换行适配,完美适配长度未知的动态字符串。

修改后的完整代码

import 'package:flutter/material.dart';

void main() async {
  runApp(MaterialApp(
      home: Scaffold(
    body: Form(
      key: GlobalKey(),
      child: Center(
        child: Row(
          crossAxisAlignment: CrossAxisAlignment.start,
          mainAxisSize: MainAxisSize.max,
          children: [
            // 新增Expanded包裹SelectableText
            Expanded(
              child: SelectableText.rich(
                TextSpan(
                  children: [
                    TextSpan(text: "sfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww"),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    ),
  )));
}

补充说明

如果Row内还有其他同级组件,Expanded会自动按flex比例分配可用空间,文本依然会在分配到的宽度范围内自动换行,不需要手动计算宽度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 20:24:06