ListTile 中的前导图像溢出

Posted

技术标签:

【中文标题】ListTile 中的前导图像溢出【英文标题】:Leading Image overflows in ListTile 【发布时间】:2019-09-02 15:26:36 【问题描述】:

我有一个ListViewListTile。每个ListTile 都有一个titleTextsubtitleText,以及leadingImage

现在,图像太大,垂直延伸到下一行,与那里的图像重叠。

如何确保图像保持在界限内?

编辑:

我不想给图像一个固定的大小,而是让它调整到由标题+副标题的固有高度给定的列表图块的高度。

【问题讨论】:

【参考方案1】:

这样做:

leading: SizedBox(
  height: 100.0,
  width: 100.0, // fixed width and height
  child: Image.asset(...)
)

【讨论】:

我想让图片调整为Title+Subtitle的高度。 图像本身也有一个 fit : BoxFit 属性不起作用。为什么 FittedBox 应该更好?【参考方案2】:

您应该在您的ListTile 中使用CircleAvatar 作为leading。如果您愿意,它也有一个 radius 属性,您可以更改它。

leading: CircleAvatar(
  backgroundImage: AssetImage("..."), // no matter how big it is, it won't overflow
),

如果你想使用矩形图像,你可以使用

leading: ConstrainedBox(
  constraints: BoxConstraints(
    minWidth: 44,
    minHeight: 44,
    maxWidth: 64,
    maxHeight: 64,
  ),
  child: Image.asset(profileImage, fit: BoxFit.cover),
),

【讨论】:

我们也有 BoxAvatar 吗? NO 没有 BoxAvatar,您可以使用另一个选项 ConstrainedBox 并根据您的需要为其指定最小/最大宽度/高度。 嗨,我在尝试使用它时遇到“FlutterError(无法加载资产:http/www.blabla.......”异常。我在Harsh Bhikadia 解决方案中遇到了同样的异常. 你知道它会导致什么吗? @Tim's 你可能想看看this 回答如何将图像添加到你的项目。 @Tim's 你能问一个单独的问题吗,如果没有看到你的代码,我无法帮助你。谢谢【参考方案3】:

我的代码和带有字幕和图块的图片如下所示

  Widget _buildRow(WordPair pair) 
    return ListTile(
      title: Text(
        'Title of messages comes here',
        style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold),
      ),
      subtitle: Text(
        pair.asPascalCase,
        style: _font,
      ),
      leading: ConstrainedBox(
        constraints: BoxConstraints(
          minWidth: 44,
          minHeight: 44,
          maxWidth: 44,
          maxHeight: 44,
        ),
        child: Image.asset('assets/message_lock.png', fit: BoxFit.cover),
      ),
    );
  

【讨论】:

你能告诉我你的解决方案和我的有什么不同吗?

以上是关于ListTile 中的前导图像溢出的主要内容,如果未能解决你的问题,请参考以下文章

如何从 ListTile 前导属性中删除固有填充?前导属性容器的填充颜色

如何对齐 ListTile 中的文本?

如何缩小 ListTile 中的图像但不展开它?

在 ListTile 中更改 CircleAvatar 大小

VStack 前导对齐中的中心图像

在 Flutter 中将图像添加到 ListTile