编辑:
问题:为什么一些Container
在抖动中占据了屏幕的全部高度,而其他的没有?
让我举例说明:
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
body: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text("This is Text 1"),
Container(), // 👈 This doesn't take full height of the screen
Text("This is Text 2 ")
],
)
// bottomNavigationBar: Container(), // 👈 Where as this take
));
}
这似乎很奇怪,有什么具体的解释吗?
回答:
对于不采用完整height
的Container
,请将其替换为SizedBox.shrink()
原始问题:
我遇到了这个奇怪的错误,我目睹了第一次,并没有它的发生线索。
body: Text("Hello"),
bottomNavigationBar: BlocBuilder<UserCubit, UserState>(
builder: (context, state) {
if (state.userModel?.cartTotalDiscountedPrice != 0) {
return Material(...);
}
return Container();
},
问题是当state.userModel?.cartTotalDiscountedPrice
的值为0
时,正文不显示,这里hello
不显示。bottomNavigationBar
的BlocBuilder
如何影响body
?
输出:
当state.userModel?.cartTotalDiscountedPrice != 0
当state.userModel?.cartTotalDiscountedPrice == 0
1条答案
按热度按时间5m1hhzi41#
我认为这不是BlocBuilder的问题。这可以用下面的代码重现:
有一个容器或任何其他小部件没有大小导致脚手架主体向上移动。
没有子容器的容器会尽量大,除非传入约束是无界的,在这种情况下,它们会尽量小。
如果需要空白空间,可以使用
SizedBox.shrink()
。更新日期:
摘要:容器尝试次数,顺序为:荣誉对齐方式、根据子级调整自身大小、遵守宽度、高度和约束、扩展以适合父级、尽可能小。
更具体地说:
如果小部件没有子级、高度、宽度和约束,并且父级提供了无界约束,则Container将尝试尽可能小地调整大小。
如果小部件没有子级也没有对齐方式,但提供了高度、宽度或约束,则Container将尝试尽可能小,同时提供这些约束和父级约束。
如果小部件没有子级、高度、宽度、约束和对齐方式,但父级提供了有界约束,则Container将展开以适应父级提供的约束。
如果小部件有对齐方式,并且父小部件提供了无界约束,那么Container会尝试围绕子小部件调整自身大小。
如果小部件具有对齐方式,并且父小部件提供了有界约束,则Container会尝试扩展以适合父小部件,然后根据对齐方式将子小部件定位在自身内。
否则,小部件有一个子部件,但没有高度、宽度、约束和对齐方式,Container将约束从父部件传递到子部件,并调整自身大小以匹配子部件。
More about
Container
class