颤振中IntrinsicHeight的替代方法是什么?

时间:2019-08-02 14:22:03

标签: flutter dart

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

并且代码按预期工作。

enter image description here

如果我删除IntrinsicHeight小部件,则分隔线将一直遍及所有屏幕。

enter image description here

我想要替代方法的原因是因为在IntrinsicHeight的文档中说: This class is relatively expensive. Avoid using it where possible.

便宜的替代品是什么?

谢谢

4 个答案:

答案 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)

将小部件包装在具有特定高度的容器中,这是固有高度的替代方案。