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

Is there a way to get the size of an existing widget?

我正在尝试让我的 UI 在一张全角卡片的中间显示两个按钮,其中一个稍微重叠另一个。因为 Stack 只会与其未定位的子项一样宽,所以我添加了一个宽度为 double.INFINITY 的 SizedBox 的未定位子项来给我一个 canvas 来放置按钮,但我没有'知道将什么作为 SizedBox 的高度。理想情况下,无论用户是在 phone 还是平板电脑上,我都希望这个小部件能够适当地调整自身大小,所以我宁愿将 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、Row 和 Column 等等的实际含义。然后你可以做任何你想做的,布局方面。