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