Mig*_*ivo 2 widget dart flutter flutter-layout
I\xe2\x80\x99m 尝试使用 an来实现用户按下时AnimatedContainer展开效果的简单动画(类似于)。ExpandableTile
我的问题是,这个容器在展开时可以具有 10.0 高度或 1000.0 (它必须是动态的)。好的,要为其制作动画,它需要事先知道高度,这是有道理的。但是在渲染之前我怎么知道它的最大高度(I\xe2\x80\x99m 将渲染可以有 1 到 N 行的文本))。
\n\n我\xe2\x80\x99想过很多可能性,但似乎都不合适。大多数时候,我们从已经渲染的东西中获取尺寸,而RenderBox不是相反,所以这有点困扰我。
先感谢您!
\n我最终通过使用非常适合这种情况的Offstage小部件找到了解决方案。
\n\n将子树包装在 a 中Offstage并为其分配一个键(可以是 a GlobalKey),然后,在实际渲染它之前,我可以通过执行以下操作来获取其高度:
void _getWidgetHeight() {\n if (subtreeHeight == null) {\n RenderBox renderBox = key.currentContext.findRenderObject();\n subtreeHeight = renderBox.size.height;\n }\n setState(() {\n _isOffstage = false;\n });\n }\nRun Code Online (Sandbox Code Playgroud)\n\n这样,AnimatedContainer例如,如果您有一个 ,并且需要将动画设置为其最终大小,则可以使用以下内容:
AnimatedContainer(\n duration: Duration(milliseconds: 250),\n height: subtreeHeight ?? 100.0 // some default size,\n ...\n )\nRun Code Online (Sandbox Code Playgroud)\n\n它会相应地呈现。
\n\n请注意,请确保子树中的内容可以在动画时插入到内部(Container例如,如果您\xc2\xb4在 a或中使用它,则将其包装在 a 中)。OffstageFlexibleColumnRow
| 归档时间: |
|
| 查看次数: |
1469 次 |
| 最近记录: |