Flutter:如何防止容器在填充物内溢出

Flutter: How to prevent an container overflowing inside a padding

问题

我有一张卡片,其中一行包含两个元素,第二个是一列包含两个文本的元素。其中一个文本可能很长,因此列元素本身可能会溢出。

来自 CSS,此处“宽度:100%”通常就足够了。

我已经尝试过的

我了解到您可以使用 Expanded 或 Flexible 之类的东西来包裹该列,但这会导致文本变得不可见(并且溢出仍然存在)。 我不确定我必须把 Flexible/Expanded.

放在哪里

我调查了类似的问题,总有一个“扩展”,但到目前为止我无法将上述任何解决方案应用于我的布局。

问题

使轮廓框的宽度仅与填充允许的一样宽的最简洁方法是什么?

代码

@override
Widget build(BuildContext context) {
  return (Card(
    child: InkWell(
      onTap: () {
        print("tab" + name);
      },
      child: Padding(
        padding: const EdgeInsets.all(16),
        child: Row(
          children: <Widget>[
            ClipRRect(
              borderRadius: BorderRadius.circular(25),
              child: SizedBox(
                width: 50,
                height: 50,
                child: Image(
                  image: NetworkImage(imageUrl),
                ),
              ),
            ),
            Padding(
              padding: const EdgeInsets.all(16),
              child: Container(
                decoration: BoxDecoration(
                  border: Border.all(width: 1, color: Colors.purpleAccent),
                ),
                child: Column(
                  crossAxisAlignment: CrossAxisAlignment.start,
                  children: [
                    Text(
                      name,
                      overflow: TextOverflow.ellipsis,
                      style: const TextStyle(fontWeight: FontWeight.bold),
                      textAlign: TextAlign.left,
                    ),
                    Text(
                      description,
                      overflow: TextOverflow.ellipsis,
                      textAlign: TextAlign.left,
                    ),
                  ],
                ),
              ),
            ),
          ],
        ),
      ),
    ),
  ));
}

您可以在 Row 内的 Padding 小部件周围放置一个 Expanded 小部件 - Expanded 的 child 将自行调整为 space可用。

对于某些其他上下文,行和列都是 Flex 小部件。 Flex widgets 沿着一个轴布置它们的 children,并且这个轴的大小默认是无限的。即使小部件“知道”显示器上有多少 space 可用,它也不会将该信息传递给它的 children,因此 children 可以随意使用无论他们想要什么大小,这意味着它们可能会溢出容器。

Expanded 小部件只能作为 Flex 小部件的直接 child 放置,并且它会自动占据给定的比例(由 flex 属性 给定) space 可用(默认情况下,这只是所有 space,children 列表中的其他小部件未占用)。

所以基本上,Expanded 将占用 space 与 parent 小部件可用的一样多,然后将限制它的 child 不大于该大小(沿任意轴)属于)。

上面的 link Flex 文档有更多信息。