我正在尝试将AnimatedContainer
用作用户按下时的简单的扩展效果动画(类似于ExpandableTile
)。
我的问题是,此容器在展开时可以具有10.0的高度或1000.0的高度(必须为动态)。好吧,要制作动画,它需要事先知道高度,这是有道理的。但是在渲染之前如何知道某物的最大高度(我将渲染可以有1到N行的Text)。
我认为有很多可能性,但似乎都不合适。在大多数情况下,我们是从RenderBox
而不是相反的地方获取已经渲染的尺寸,所以这很困扰我。
提前谢谢!
答案 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
中)放在Row
或custom condition
中。