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

Wrap组件中RichText无法换行问题求助(仅用Wrap组件解决)

问题描述

在Card内使用Wrap组件垂直排列元素,设置direction: Axis.vertical后元素成功垂直对齐,但RichText无法自动换行。

效果对比

  • 未设置direction属性时:元素水平排列,RichText内容超出容器宽度时自动换行
  • 设置direction属性时:元素垂直排列,但RichText会无限横向展开,完全不换行

参考代码

Card(
        child: Padding(
            padding: EdgeInsets.all(10),
            child: Wrap(
              runSpacing: 3,
              direction : Axis.vertical,
              children: [
                Icon(Icons.memory),
                RichText(
                  text: TextSpan(
                      text: 'Title : ',
                      style: Theme.of(context).textTheme.titleSmall,
                      children: [
                        TextSpan(
                            text: 'Memory',
                            style: Theme.of(context).textTheme.bodyMedium)
                      ]),
                ),
                RichText(
                  softWrap: true,
                  text: TextSpan(
                      text: 'Des : ',
                      style: Theme.of(context).textTheme.titleSmall,
                      children: [
                        TextSpan(
                            text:
                                'Currently used memory 250 GB remaining is 250 GB ..... !!!!',
                            style: Theme.of(context).textTheme.bodyMedium)
                      ]),
                )
              ],
            )))
解决方案

当Wrap设置Axis.vertical时,主轴为垂直方向,交叉轴为水平方向,此时Wrap不会给子元素施加水平宽度约束,RichText会认为有无限横向空间可用,因此不会触发换行。以下两种方案无需替换Wrap组件,既能保留其间距特性,又能解决换行问题:

方案1:用ConstrainedBox限制最大宽度

给RichText包裹ConstrainedBox,设置maxWidth: double.infinity,让它占满Wrap的可用水平空间:

Card(
  child: Padding(
    padding: EdgeInsets.all(10),
    child: Wrap(
      runSpacing: 3,
      direction: Axis.vertical,
      children: [
        Icon(Icons.memory),
        ConstrainedBox(
          constraints: BoxConstraints(maxWidth: double.infinity),
          child: RichText(
            text: TextSpan(
              text: 'Title : ',
              style: Theme.of(context).textTheme.titleSmall,
              children: [
                TextSpan(
                  text: 'Memory',
                  style: Theme.of(context).textTheme.bodyMedium
                )
              ]),
          ),
        ),
        ConstrainedBox(
          constraints: BoxConstraints(maxWidth: double.infinity),
          child: RichText(
            softWrap: true,
            text: TextSpan(
              text: 'Des : ',
              style: Theme.of(context).textTheme.titleSmall,
              children: [
                TextSpan(
                  text: 'Currently used memory 250 GB remaining is 250 GB ..... !!!!',
                  style: Theme.of(context).textTheme.bodyMedium
                )
              ]),
          ),
        )
      ],
    )
  )
)

方案2:用Expanded填充水平空间

将RichText放在Expanded组件内,让它自动填充Wrap的可用水平宽度:

Card(
  child: Padding(
    padding: EdgeInsets.all(10),
    child: Wrap(
      runSpacing: 3,
      direction: Axis.vertical,
      children: [
        Icon(Icons.memory),
        Expanded(
          child: RichText(
            text: TextSpan(
              text: 'Title : ',
              style: Theme.of(context).textTheme.titleSmall,
              children: [
                TextSpan(
                  text: 'Memory',
                  style: Theme.of(context).textTheme.bodyMedium
                )
              ]),
          ),
        ),
        Expanded(
          child: RichText(
            softWrap: true,
            text: TextSpan(
              text: 'Des : ',
              style: Theme.of(context).textTheme.titleSmall,
              children: [
                TextSpan(
                  text: 'Currently used memory 250 GB remaining is 250 GB ..... !!!!',
                  style: Theme.of(context).textTheme.bodyMedium
                )
              ]),
          ),
        )
      ],
    )
  )
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 14:25:57