📜  listtile 删除填充颤动 (1)

📅  最后修改于: 2023-12-03 15:02:45.788000             🧑  作者: Mango

ListTile 删除填充颤动

ListTile 组件是 Flutter 中非常常用的一个组件,用于快速构建列表项。但是在某些情况下,当我们想要删除一个 ListTile 中的填充或间距时,会发现删除之后会有颤动或者布局会发生变化。

这篇文章将介绍如何去除ListTile中的填充或间距,以及如何避免出现颤动或布局变化的问题。

删除填充或间距

默认情况下,ListTile 中包含了一些内边距和外边距,如果我们想要去除这些填充或间距,可以通过以下方式实现。

ListTile(
  dense: true, // 去除内外边距
  contentPadding: EdgeInsets.zero, // 去除内边距
  title: Text('Title'),
  subtitle: Text('Subtitle'),
  leading: Icon(Icons.access_alarm),
  trailing: Icon(Icons.arrow_forward),
)

通过 dense 属性可以去除内外边距,通过 contentPadding 属性可以去除内边距,如上面的示例代码所示。

避免颤动或布局变化

在去除填充或间距之后,我们可能会发现列表项会出现颤动或者布局发生变化。这是因为去除填充或间距之后,文本和图标的位置会变化,从而导致布局发生变化。

为了避免出现这种情况,我们可以通过指定固定的宽度或高度,或者使用 FlexibleExpanded 等布局组件来解决问题。

例如,我们可以使用 SizedBox 组件指定一个固定的宽度,从而避免出现布局变化。

ListTile(
  dense: true, // 去除内外边距
  contentPadding: EdgeInsets.zero, // 去除内边距
  title: SizedBox(
    width: 100,
    child: Text('Title'),
  ),
  subtitle: SizedBox(
    width: 100,
    child: Text('Subtitle'),
  ),
  leading: Icon(Icons.access_alarm),
  trailing: Icon(Icons.arrow_forward),
)

如果希望能够自适应布局,可以使用 FlexibleExpanded 等布局组件。例如,下面的示例代码使用了 Expanded 组件,文本内容会自适应宽度,从而避免了布局变化。

ListTile(
  dense: true, // 去除内外边距
  contentPadding: EdgeInsets.zero, // 去除内边距
  title: Expanded(
    child: Text('Title'),
  ),
  subtitle: Expanded(
    child: Text('Subtitle'),
  ),
  leading: Icon(Icons.access_alarm),
  trailing: Icon(Icons.arrow_forward),
)

通过以上方式,我们可以轻松地去除 ListTile 中的填充或间距,并且避免出现颤动或布局变化的问题。