Flutter 中 Container 的传入约束。难道我理解错了?

问题描述 投票:0回答:3

正如文档所说

没有子项的容器会尝试尽可能大,除非 传入的约束是无界的,在这种情况下,它们会尝试作为 越小越好

好吧,当我对内部容器设置无界传入约束时,我认为它应该是

as small as possible
,但它会扩展到整个屏幕。

  body: Container(
    color: Colors.red,
    constraints: const BoxConstraints(
      maxHeight: double.infinity,
      maxWidth: double.infinity,
    ),
    child: Container(
      color: Colors.green,
    ),
  ),

为什么?

flutter flutter-layout
3个回答
2
投票

如果您进一步阅读文档,您会发现

Container
本身的约束参数将覆盖此行为:

没有子容器的容器会尝试尽可能大,除非传入的约束是无限的,在这种情况下,它们会尝试尽可能小。带有孩子的容器会根据孩子的大小调整自己的大小。构造函数的宽度、高度和约束参数会覆盖此参数。

尝试将内部无子项

Container
包裹在
UnconstrainedBox
中,您会看到它会收缩到零宽度和高度。

body: 
   Container(
    color: Colors.red,
    width: double.infinity,
    height:double.infinity,
    child: UnconstrainedBox(
      child: Container(
        color: Colors.green,
      ),
    ),
)

2
投票

虽然红色容器有无限大的尺寸,但你把它放在有特定尺寸的脚手架体内。所以你的红色容器得到特定的大小,然后你没有孩子的绿色容器得到和它的父母一样大的大小。


0
投票

红色

container
实际上会尽可能小,具体取决于它的孩子。

绿色容器没有子容器,那么正如文档所说,它将尝试尽可能大,除非传入的约束是无界的,

如果您更改子组件,例如文本小部件、列或其他小部件,它将不会获得最大大小。

© www.soinside.com 2019 - 2024. All rights reserved.