在绘制小部件之前如何知道其大小?

时间:2019-05-27 18:50:01

标签: flutter dart widget flutter-layout

我正在尝试将AnimatedContainer用作用户按下时的简单的扩展效果动画(类似于ExpandableTile)。

我的问题是,此容器在展开时可以具有10.0的高度或1000.0的高度(必须为动态)。好吧,要制作动画,它需要事先知道高度,这是有道理的。但是在渲染之前如何知道某物的最大高度(我将渲染可以有1到N行的Text)。

我认为有很多可能性,但似乎都不合适。在大多数情况下,我们是从RenderBox而不是相反的地方获取已经渲染的尺寸,所以这很困扰我。

提前谢谢!

1 个答案:

答案 0 :(得分:0)

我最终使用Offstage小部件找到了解决方案,该小部件非常适合这种情况。

解决方案

将子树包装在Offstage中并为其分配键(可以是GlobalKey),然后,在实际渲染它之前,我可以通过以下操作获得其高度:

  void _getWidgetHeight() {
    if (subtreeHeight == null) {
      RenderBox renderBox = key.currentContext.findRenderObject();
      subtreeHeight = renderBox.size.height;
    }
    setState(() {
      _isOffstage = false;
    });
  }

这样,例如,如果您有一个AnimatedContainer,并且需要为其最终大小设置动画,则可以具有以下内容:

AnimatedContainer(
        duration: Duration(milliseconds: 250),
        height: subtreeHeight ?? 100.0 // some default size,
      ...
  )

,它将相应地呈现。

请注意,请确保子树中的内容可以在制作动画时插入Container内(例如,如果使用Offstage,则将Flexible包裹在Column中)放在Rowcustom condition中。

相关问题