如何去除Flutter ListView中ListTile之间的空白间距?
解决Flutter ListView中ListTile间空白间距问题
我尝试移除ListView的内边距、ListTile的contentPadding、清除ListTile内容的所有间距,但还是无法消除ListTile之间的空白间距,不清楚间距来源,求解决思路。
相关代码:
Widget buildWidget() { List<ListItem> listData = createListData(); return ListView.builder( padding: const EdgeInsets.all(0), itemCount: listData.length, itemBuilder: (context, index) { final item = listData[index]; return ListTile( contentPadding: const EdgeInsets.all(0), title: item.buildTitle(context), ); } ); }
已验证的解决方案:
问题根源是ListTile默认带有强制内边距,即使设置contentPadding: EdgeInsets.all(0)也无法完全消除。可以通过以下两种方式解决:
- 若必须使用ListTile:
- 设置
visualDensity参数压缩间距,示例:ListTile( contentPadding: const EdgeInsets.all(0), visualDensity: const VisualDensity(horizontal: 0, vertical: -4), // 调整vertical值可控制间距大小 title: item.buildTitle(context), ) - 用
Theme包裹ListTile修改全局tile样式,覆盖默认间距:Theme( data: Theme.of(context).copyWith( listTileTheme: const ListTileThemeData( contentPadding: EdgeInsets.all(0), dense: true, ), ), child: ListTile( title: item.buildTitle(context), ), )
- 设置
- 改用Container替代ListTile:直接用Container承载标题内容,无需额外配置就能彻底消除默认间距,是更简洁的方案。
内容的提问来源于stack exchange,提问作者TJ.dev
相关产品推荐
相关产品推荐

