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

如何让Flutter Row组件内的可变长度文本在可用空间内自动换行

问题根因

Row 布局中未被Flexible/Expanded包裹的子组件不会受到父布局的宽度约束,Text 组件无法感知到最大可用宽度,因此即使设置了softWrap: true也无法触发自动换行逻辑。

解决方案

将中间的 Text 组件用Flexible包裹即可,注意不要使用Expanded,否则会强制 Text 占满所有剩余水平空间,导致短文本场景下两侧的红色容器无法正常展示。

修改后的代码如下:

Row(
  children: [
    Expanded(
      flex: 1,           
      child: Container(
        height: 20,
        color: Colors.red,
      ),
    ),
    Flexible(
      child: Text(
        $variableLengthText,
        softWrap: true,
        // 可选配置:限制最大行数、设置溢出样式
        // maxLines: 2,
        // overflow: TextOverflow.ellipsis,
      ),
    ),
    Expanded(
      flex: 1,
      child: Container(
        height: 20,
        color: Colors.red,
      ),
    ),
  ],
)

实现效果

  • 文本宽度小于可用空间时:左右两个红色 Container 平分剩余空间,文本自然居中,和原有预期一致
  • 文本宽度超过可用空间时:Flexible 会自动限制 Text 的最大可用宽度,触发自动换行,此时无剩余空间分配给左右两侧的 Expanded 组件,红色容器会自动隐藏,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:15:01