【发布时间】:2021-12-09 19:30:36
【问题描述】:
TL;DR
如果没有关于它的文档,我如何知道小部件的布局规则(它将向其父级请求什么大小以及它将传递给其子级的约束)?
问题详情
我有这个非常基本的应用程序
void main() {
runApp(
Container(
color: Colors.red,
width: 20,
height: 20,
),
);
}
我原以为 Container 的宽度和高度为 20,但我得到的 Container 填满了整个屏幕。
阅读thisflutter.dev 上关于理解约束的文章,在其last part called "Learning the layout rules for specific widgets
" 中,他们提到了如何通过找到createRenderObject 方法然后找到performLayout 方法来做到这一点。
但是,此createRenderObject 方法仅适用于RenderObjectWidget 的子类。例如,浏览Transform小部件的代码,我发现createRenderObject返回一个RenderTransform,扩展RenderProxyBox,最终实现performLayout为:
@override
void performLayout() {
if (child != null) {
child!.layout(constraints, parentUsesSize: true);
size = child!.size;
} else {
size = computeSizeForNoChild(constraints);
}
}
我可以得出结论,Transform 小部件最终将采用其子级的大小,因为 size = child!.size; 这一行。
但在上面Container的情况下,是直接扩展StatelessWidget。我无法通过其代码导航找到performLayout 和createRenderObject 方法,我只能找到createElement,但我在与容器关联的渲染树中寻找RenderObject,而不是元素。
问题
所以问题是如何找到与无状态小部件/有状态小部件相关联的渲染对象,以便了解该小部件将为其子级提供的布局规则并在这种情况下自行遵循它们?
【问题讨论】:
标签: android flutter dart layout flutter-layout