我在bottomNavigationBar
中有此代码”
bottomNavigationBar: BottomAppBar(
child: IntrinsicHeight(
child: Row(
children: <Widget>[
IconButton(
icon: Icon(Icons.arrow_back_ios),
onPressed: () => Navigator.of(context).pop(),
),
Spacer(),
IconButton(
icon: Text(
"QR",
style: Theme.of(context).textTheme.title,
),
onPressed: () => Navigator.of(context).pop(),
),
VerticalDivider(
color: Theme.of(context).textTheme.headline.color,
),
IconButton(
icon: Icon(Icons.share),
onPressed: () => Navigator.of(context).pop(),
),
],
),
),
),
并且代码按预期工作。
如果我删除IntrinsicHeight小部件,则分隔线将一直遍及所有屏幕。
我想要替代方法的原因是因为在IntrinsicHeight
的文档中说:
This class is relatively expensive. Avoid using it where possible.
便宜的替代品是什么?
谢谢
答案 0 :(得分:2)
如果您正在寻找“一种使行适合动态内容的最小高度的廉价方法”,那么就没有了。
便宜的解决方案是在Row
上固定高度-通常将其包装在SizedBox
中:
SizedBox(
height: 42,
child: Row(...),
)
如果内容具有固定高度,则此方法效果很好。但是高度不是动态的。
答案 1 :(得分:0)
在这种情况下,您可以使用height = 48的SizedBox(这是default height of the IconButton小部件),也可以避免使用VerticalDivider并通过在共享图标上添加左边框来绘制它。
function greet(person: IPerson) {
alert(person.getGreeting("Zammetti"));
}
答案 2 :(得分:0)
在Flutter中,这似乎违反直觉,但是当大多数小部件都受到 bound 约束时,它们会尝试填充允许的 whole (有界)空间,而在给定< strong>无限制约束(设置为INFINITY),它们仅占用所需的空间(它们的内在大小)。因此,要使小部件具有其固有的大小,可以尝试用UnconstrainedBox
包装它。
但是在您的情况下可能会出现问题,因为您使用的是Row
,并且其高度不应无界。.
答案 3 :(得分:0)
将小部件包装在具有特定高度的容器中,这是固有高度的替代方案。