dart 为什么有些集装箱拍满屏幕的高度?

fhity93d  于 2023-03-15  发布在  其他
关注(0)|答案(1)|浏览(123)

编辑:
问题:为什么一些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
            ));
  }

这似乎很奇怪,有什么具体的解释吗?

回答

对于不采用完整heightContainer,请将其替换为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不显示。
bottomNavigationBarBlocBuilder如何影响body
输出:
state.userModel?.cartTotalDiscountedPrice != 0

state.userModel?.cartTotalDiscountedPrice == 0

5m1hhzi4

5m1hhzi41#

我认为这不是BlocBuilder的问题。这可以用下面的代码重现:

class Demo extends StatelessWidget {
  const Demo({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        appBar: AppBar(
          title: const Text('Demo Cart'),
        ),
        body: const Center(child: Text('Hello')),
        bottomNavigationBar: Container());
  }
}

有一个容器或任何其他小部件没有大小导致脚手架主体向上移动。
没有子容器的容器会尽量大,除非传入约束是无界的,在这种情况下,它们会尽量小。
如果需要空白空间,可以使用SizedBox.shrink()

更新日期:

摘要:容器尝试次数,顺序为:荣誉对齐方式、根据子级调整自身大小、遵守宽度、高度和约束、扩展以适合父级、尽可能小。
更具体地说:
如果小部件没有子级、高度、宽度和约束,并且父级提供了无界约束,则Container将尝试尽可能小地调整大小。
如果小部件没有子级也没有对齐方式,但提供了高度、宽度或约束,则Container将尝试尽可能小,同时提供这些约束和父级约束。
如果小部件没有子级、高度、宽度、约束和对齐方式,但父级提供了有界约束,则Container将展开以适应父级提供的约束。
如果小部件有对齐方式,并且父小部件提供了无界约束,那么Container会尝试围绕子小部件调整自身大小。
如果小部件具有对齐方式,并且父小部件提供了有界约束,则Container会尝试扩展以适合父小部件,然后根据对齐方式将子小部件定位在自身内。
否则,小部件有一个子部件,但没有高度、宽度、约束和对齐方式,Container将约束从父部件传递到子部件,并调整自身大小以匹配子部件。
More about Container class

相关问题