Flutter问题:Expanded与ListTile的trailing属性配合报错如何解决?
解决ListTile trailing中使用Expanded报错的问题
错误本质
Expanded是专门给Row/Column/Flex这类弹性布局组件设计的,它需要向父级弹性组件传递FlexParentData数据。但ListTile的trailing区域属于Box布局,仅能接受BoxParentData,直接把Expanded放在trailing里必然触发类型不匹配的断言错误。
修复方案
把Expanded移到Row内部,让Row作为trailing的直接子组件,再给Row里需要占据剩余空间的文本组件加上Expanded。这样既实现内容不挤压的需求,又完全符合Flutter的布局规则。
修改后的代码
children: List.generate( 10, (index) => ListTile( key: keys[index], trailing: Row( mainAxisSize: MainAxisSize.min, children: <Widget>[ Text(index.toString()), // 给需要占空间的文本添加Expanded Expanded( child: Text(' The index is ${index.toString()}'), ), IconButton( icon: const Icon(Icons.edit), onPressed: () {}, color: Theme.of(context).primaryColor, ), IconButton( icon: const Icon(Icons.delete), onPressed: () {}, color: Theme.of(context).shadowColor, ), ], ), ), ),
额外提醒:必须给Row加上mainAxisSize: MainAxisSize.min,避免Row默认占满整个宽度,导致ListTile的title区域被完全挤压消失。
内容的提问来源于stack exchange,提问作者fluttergogo
相关产品推荐
相关产品推荐

