Flutter 堆栈内的对齐小部件占据全屏

Flutter 堆栈内的对齐小部件占据全屏,flutter,Flutter,我使用align在堆栈中定位小部件。当我在堆栈内的任何子对象中使用align时,堆栈将占据全屏。否则,堆栈的高度与最高的子堆栈的高度相同。我在这里感到困惑。“对齐”不是用于对齐堆栈中的子对象吗 这是我的密码: bottomNavigationBar: Stack( children: <Widget>[ Container( color: Colors.greenAccent, width: double.infinity,

我使用align在堆栈中定位小部件。当我在堆栈内的任何子对象中使用align时,堆栈将占据全屏。否则,堆栈的高度与最高的子堆栈的高度相同。我在这里感到困惑。“对齐”不是用于对齐堆栈中的子对象吗

这是我的密码:

   bottomNavigationBar: Stack(
    children: <Widget>[
      Container(
        color: Colors.greenAccent,
        width: double.infinity,
        height: 45,
      ),
      Align(
        alignment: Alignment.bottomCenter,
        child: Container(
         width: 80,
         height: 80,
          decoration: BoxDecoration(color: Colors.deepPurpleAccent, shape: BoxShape.circle),
          child: IconButton(icon: Icon(Icons.search), onPressed: (){}),
        ),
      )

    ],
  )
bottomNavigationBar:堆栈(
儿童:[
容器(
颜色:Colors.greenAccent,
宽度:double.infinity,
身高:45,
),
对齐(
对齐:对齐.bottomCenter,
子:容器(
宽度:80,
身高:80,
装饰:盒子装饰(颜色:Colors.deeppurpleacent,形状:BoxShape.circle),
子项:IconButton(图标:icon(Icons.search),onPressed:(){}),
),
)
],
)

现在,当我从第二个子项中删除Align小部件时,堆栈与其子项一样大。

没有问题。它应该占据整个屏幕

由未定位的子项定义的堆栈大小。如果使用“对齐”,堆栈没有限制,它将展开

若您想要在小部件之间建立关系,则必须使用定位小部件

从文档:

堆栈自身的大小将包含所有未定位的子对象,这些子对象根据对齐方式进行定位(在从左到右的环境中默认为左上角,在从右到左的环境中默认为右上角)

而且

然后,根据其顶部、右侧、底部和左侧属性,相对于堆栈放置定位的子对象


是的,它会混淆一段时间,甚至有经验的开发人员在使用堆栈时有时也会混淆。它是最难完全掌握的小部件之一。

您没有为其
宽度因子
高度因子
提供
对齐
小部件的值,并且您提到的行为是根据以下条件预期的:

如果此小部件的尺寸受到约束且widthFactor和heightFactor为空,则此小部件将尽可能大

为了确认这一点,我将值
1.0
分配给
widthFactor
heightFactor
,并将其返回到预期大小(较大的小部件的大小,即
FloatingActionButton
):


堆栈将与其未定位的子堆栈一样大。Align使堆栈与上面代码中的屏幕一样大。将堆栈限制为与其内容一样大。我把这堆东西包在一个容器里,给它一个固定的高度

现在,堆栈的高度受到限制。所以当我现在在它的子对象中使用align时。它只有容纳它的容器那么高


简而言之,只需用一个固定高度的容器将这堆东西包起来。

好的,谢谢你的回答,这真的很有帮助。这消除了我的疑虑,我能够解决我在特定场景中遇到的问题。
 Align(
        alignment: Alignment.bottomCenter,
        widthFactor: 1.0,
        heightFactor: 1.0,
        child: Container(
          width: 80,
          height: 80,
          decoration: BoxDecoration(color: Colors.deepPurpleAccent, shape: BoxShape.circle),
          child: IconButton(icon: Icon(Icons.search), onPressed: (){}),
        ),
      )