我想确保涵盖所有案件
父窗口小部件读取(并可能使用)子项的大小或约束
子窗口小部件读取(并可能使用)父级的大小或约束
子窗口小部件读取(并可能使用)其他子项的大小或约束
解决方案似乎是......
让构建阶段运行
然后构建我想要从中检索数据的小部件的大小和约束
然后我中断了常规的阶段序列(因此绘制帧功能不会运行)
然后使用我现在拥有的数据重新运行构建阶段
并允许框架绘制
问题是我不知道该怎么做
我之前发布了一个更具体的问题,我得到了一些回复,布局构建器,自定义多子布局和自定义单子布局......
但这些是针对非常具体的情况
“布局”构建器构建可依赖于父窗口小部件大小的窗口小部件树。所以它只处理案例2
另外两个有限制,父母的大小不能取决于孩子的大小。所以它似乎意味着它只处理案例2.
那么还有其他解决方案吗?
rect getter插件可以工作,但不会中断绘制框架,因此存在一个口吃框架 https://pub.dartlang.org/packages/rect_getter
后布局插件我还没有尝试过,但似乎出现了同样的问题因为它说它在第一帧后运行 https://pub.dartlang.org/packages/after_layout
任何帮助表示赞赏! 我不愿意经常使用周围的工作:/
答案 0 :(得分:1)
窗口小部件不能故意这样做。 小工具永远不会依赖于大小和位置或任何。甚至不是他们的孩子。
如果您遇到需要的情况,LayoutBuilder
大部分时间都应该没问题。
如果不是,您要创建的内容不是Widget
。但是RenderObject
反而是颤抖的下层之一。
Center
,Stack
或Column
等小部件实际上是使用RenderObject
计算的。
答案 1 :(得分:0)
我是rect getter插件的作者,我对你的问题非常感兴趣。
是的,正如其他人说的那样,我认为颤动是一个非常灵活的UI框架,所以在大多数情况下我们不需要知道小部件的实际尺寸。但是当我试图写一个动画效果时,模拟打开一本书,我发现有必要知道卡片的直接信息,最后我找到了从中得到一个矩形的方法。来自heros.dart源代码的渲染对象。结果,它变成了你知道的rect getter插件。
事实上,也许我和你面临同样的问题,因为我想写一个' Masonry'布局如this,所以我应该知道之前的项目的直接信息,以决定当前项目的绘制位置。
我的解决方案是: 1.通过rect_getter包装子窗口小部件,首先正常构建布局; 2.然后,使用计时器在构建完成后立即获取孩子的直接信息; 3.调用setState()重建布局,并使用子项的rect信息计算视口中每个子项的约束框。
我的代码可以找到here,但是它们非常糟糕,评论使用中文,所以我不认为你会想要阅读它们。