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(),
      ),
    ],
  ),
),
4

1 回答 1

9

简短的回答是否定的,因为在构建功能时,小部件尚未布局,因此它们没有大小。

更长的答案是,要实现自定义布局效果,您可以使用自定义布局构建器,但在您的情况下这无济于事,因为自定义布局构建器无法根据其子级调整自身大小。下一个级别是直接构建一个自定义渲染对象,这正是 Stack 和 Row 和 Column 等实际上的内容。然后你可以做任何你想做的事情,布局明智。

于 2016-12-13T03:00:35.800 回答