有没有办法获取现有小部件的大小?
Posted
技术标签:
【中文标题】有没有办法获取现有小部件的大小?【英文标题】:Is there a way to get the size of an existing widget? 【发布时间】:2017-04-27 23:46:16 【问题描述】:我试图让我的 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(),
),
],
),
),
【问题讨论】:
我发现一个更好的方法来达到我想要的效果是根本不使用堆栈,只是一个带有两个按钮的行,并将重叠的按钮放在一个 Transform 小部件内,其变换属性为“new Matrix4.translationValues(-30.0, 0.0, 0.0)",但我仍然对我最初问题的答案感到好奇。 嗨!您实际上可以回答自己的问题。如果您找到答案,请将其添加为答案。比上面的评论更容易找到:) 我以后会的。不过,我的评论并不能回答我关于如何获取小部件大小的问题,这就是为什么我只是将其作为评论。 【参考方案1】:简短的回答是否定的,因为在构建功能时,小部件尚未布局,因此它们没有大小。
更长的答案是,要实现自定义布局效果,您可以使用自定义布局构建器,但在您的情况下这无济于事,因为自定义布局构建器无法根据其子级调整自身大小。下一个层次是直接构建一个自定义渲染对象,这正是 Stack 和 Row 和 Column 等实际上是什么。然后你可以根据布局做任何你想做的事情。
【讨论】:
以上是关于有没有办法获取现有小部件的大小?的主要内容,如果未能解决你的问题,请参考以下文章