Flutter Renderboxs越过无限高度?

时间:2019-02-09 05:50:52

标签: dart flutter

我对Flutter的渲染框感到困惑。 我的理解是:布局算法从根开始,向下遍历小部件树,将约束向下传递给子级。弹性框在其滚动方向上处于受限约束中,尝试匹配其父约束。

考虑以下代码:

Widget build(BuildContext context) {
    return LayoutBuilder(builder: (context, constraints) {
      print("Parent");
      print(constraints.maxWidth);
      print(constraints.maxHeight);
      return Column(children: [
        LayoutBuilder(builder: (context, constraints) {
          print("Child");
          print(constraints.maxWidth);
          print(constraints.maxHeight);
          return SizedBox(
            height: 12,
          );
        })
      ]);
    });
  }

此打印

flutter: Parent
flutter: 320.0
flutter: 568.0
flutter: Child
flutter: 320.0
flutter: Infinity

高度限制如何突然变成无穷大? 它不应该与它的父项匹配并且是568.0吗?

2 个答案:

答案 0 :(得分:0)

LayoutBuilder的父大小很重要,如果不清楚父大小,约束大小将是无穷大。例如,如果您用脚手架包装小部件,则LayoutBuilder会提供确切的大小。

答案 1 :(得分:0)

这肯定令人困惑。本文档的 Flex 部分有所帮助。一旦 Column 在树中,Column 就会尝试“尽可能大”。为什么在这种情况下“possible”是 Infinity 而不是 568,我不知道,而且它看起来不必要地痛苦和复杂(不像 Flutter 的其余部分)。

https://flutter.dev/docs/development/ui/layout/box-constraints