如何在构建阶段使用其他小部件的约束和大小

时间:2018-06-10 00:40:29

标签: flutter flutter-layout

我想确保涵盖所有案件

  1. 父窗口小部件读取(并可能使用)子项的大小或约束

  2. 子窗口小部件读取(并可能使用)父级的大小或约束

  3. 子窗口小部件读取(并可能使用)其他子项的大小或约束

  4. 解决方案似乎是......

    1. 让构建阶段运行

    2. 然后构建我想要从中检索数据的小部件的大小和约束

    3. 然后我中断了常规的阶段序列(因此绘制帧功能不会运行)

    4. 然后使用我现在拥有的数据重新运行构建阶段

    5. 并允许框架绘制

    6. 问题是我不知道该怎么做

      我之前发布了一个更具体的问题,我得到了一些回复,布局构建器,自定义多子布局和自定义单子布局......

      但这些是针对非常具体的情况

      “布局”构建器构建可依赖于父窗口小部件大小的窗口小部件树。所以它只处理案例2

      另外两个有限制,父母的大小不能取决于孩子的大小。所以它似乎意味着它只处理案例2.

      那么还有其他解决方案吗?

      rect getter插件可以工作,但不会中断绘制框架,因此存在一个口吃框架 https://pub.dartlang.org/packages/rect_getter

      后布局插件我还没有尝试过,但似乎出现了同样的问题因为它说它在第一帧后运行 https://pub.dartlang.org/packages/after_layout

      任何帮助表示赞赏! 我不愿意经常使用周围的工作:/

2 个答案:

答案 0 :(得分:1)

窗口小部件不能故意这样做。 小工具永远不会依赖于大小和位置或任何。甚至不是他们的孩子。

如果您遇到需要的情况,LayoutBuilder大部分时间都应该没问题。

如果不是,您要创建的内容不是Widget。但是RenderObject反而是颤抖的下层之一。

CenterStackColumn等小部件实际上是使用RenderObject计算的。

答案 1 :(得分:0)

我是rect getter插件的作者,我对你的问题非常感兴趣。

是的,正如其他人说的那样,我认为颤动是一个非常灵活的UI框架,所以在大多数情况下我们不需要知道小部件的实际尺寸。但是当我试图写一个动画效果时,模拟打开一本书,我发现有必要知道卡片的直接信息,最后我找到了从中得到一个矩形的方法。来自heros.dart源代码的渲染对象。结果,它变成了你知道的rect getter插件。 flutter_openbookeffect

事实上,也许我和你面临同样的问题,因为我想写一个' Masonry'布局如this,所以我应该知道之前的项目的直接信息,以决定当前项目的绘制位置。

我的解决方案是: 1.通过rect_getter包装子窗口小部件,首先正常构建布局; 2.然后,使用计时器在构建完成后立即获取孩子的直接信息; 3.调用setState()重建布局,并使用子项的rect信息计算视口中每个子项的约束框。

代码片段(未完成): code fragment

当前进展: enter image description here

我的代码可以找到here,但是它们非常糟糕,评论使用中文,所以我不认为你会想要阅读它们。