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

为什么Flutter中ListTile组件trailing属性无法正常承载Row组件?

渲染异常原因

ListTile 组件对trailing位置的控件预留了固定上限的水平显示空间,你直接嵌套的Row组件默认水平主轴尺寸规则为MainAxisSize.max,会强制尝试占据父级给到的全部可用水平宽度,二者约束不匹配就会触发水平方向的布局溢出渲染异常。

修复方法

给trailing位置的Row组件添加mainAxisSize: MainAxisSize.min属性,让Row的宽度自动收缩到刚好包裹内部两个IconButton的尺寸,不会超出trailing区域的宽度限制即可。

修复后的完整代码如下:

Card(
  elevation: 10,
  shape: RoundedRectangleBorder(
    borderRadius: BorderRadius.all(Radius.circular(10))
  ),
  margin: EdgeInsets.only(
    bottom: 10,
  ),
  child: ListTile(
    leading: Text('tests'),
    trailing: Row(
      // 新增该行配置解决溢出问题
      mainAxisSize: MainAxisSize.min,
      children:[
        IconButton(
          icon: Icon(
            Icons.update,
            color: Colors.red,
          ),
          onPressed: () {
            setState(() {
              _update();
            });
          },
        ),
        IconButton(
          icon: Icon(
            Icons.delete,
            color: Colors.red,
          ),
          onPressed: () {
            setState(() {
              _delete();
            });
          },
        ),
      ]
    )
  ),
)

补充说明:如果后续trailing里要放的控件更多,哪怕设置了min宽度还是超出,也可以把Row替换成Wrap做自适应折行,或者直接自定义ListTile的子组件布局,不用受ListTile内置的边距、空间预留规则限制。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:36:30