我对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吗?
答案 0 :(得分:0)
LayoutBuilder的父大小很重要,如果不清楚父大小,约束大小将是无穷大。例如,如果您用脚手架包装小部件,则LayoutBuilder会提供确切的大小。
答案 1 :(得分:0)
这肯定令人困惑。本文档的 Flex 部分有所帮助。一旦 Column 在树中,Column 就会尝试“尽可能大”。为什么在这种情况下“possible”是 Infinity 而不是 568,我不知道,而且它看起来不必要地痛苦和复杂(不像 Flutter 的其余部分)。
https://flutter.dev/docs/development/ui/layout/box-constraints