有没有办法获取现有小部件的大小?

10

我想让我的UI显示两个按钮,其中一个略微重叠另一个,在全宽度的卡片中间。因为Stack只会像其未定位的子元素一样宽,所以我添加了一个非定位的SizedBox子元素,其宽度为double.INFINITY,以便为我放置按钮提供画布,但我不知道要将SizedBox高度设置为多少。理想情况下,我希望这个部件可以根据用户使用的手机或平板电脑自适应地调整大小,所以我更愿意基于当前按钮大小来确定SizedBox的高度,而不仅仅是硬编码一个数字。

有没有办法找到给定现有部件的大小?如果没有,那么确定需要在多个屏幕尺寸上看起来好的对象的高度的方法是什么?

示例代码:

new Card(
  child: new Stack(
    children: <Widget>[
      new SizedBox(
        width: double.INFINITY,
      ),
      new Positioned(
        left: 1.0,
        child: getButtonOne(),
      ),
      new Positioned(
        right: 1.0,
        child: getButtonTwo(),
      ),
    ],
  ),
),

我发现实现我想要的效果的更好方法是根本不使用Stack,只需使用两个按钮的一行,并将重叠的按钮放在一个Transform小部件中,其变换属性为“new Matrix4.translationValues(-30.0,0.0,0.0)”,但我仍然对我的原始问题的答案感到好奇。 - Reagankm
你好!实际上你可以回答自己的问题。如果你找到了答案,请将其添加为答案。比上面的评论更容易找到 :) - Seth Ladd
我会在未来做到的。不过,我的评论并不是关于如何获取小部件大小的答案,这就是为什么我只把它作为评论的原因。 - Reagankm
1个回答

9
短答案是否定的,因为在构建功能期间,小部件尚未布局,因此它们没有大小。
更长的答案是,为了实现自定义布局效果,您可以使用自定义布局生成器,但在您的情况下,这不会有所帮助,因为自定义布局生成器无法根据其子元素调整大小。接下来的级别就是直接构建自定义渲染对象,这正是Stack、Row、Column等所做的。然后,您可以按照您想要的任何方式进行布局。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接