为什么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
相关产品推荐
相关产品推荐

