【发布时间】:2021-06-12 21:25:00
【问题描述】:
我有一个从零高度开始的容器,需要在用户交互后展开。
- 我尝试使用 AnimatedContainer / AnimatedSize 并将子小部件的高度从
0更改为null,但在这两种情况下,Flutter 都抱怨它无法从0插入到null。 - 我还尝试使用 BoxConstraints(使用
maxHeight = double.infinity扩展)而不是显式高度,在这种情况下,Flutter 抱怨它无法从有限值内插到不定值。 - 我也尝试将 mainAxisSize 设置为 min/max,在这种情况下 Flutter 抱怨
vsync是null。
如何以动画方式扩展小部件,使其动态增长到足以包裹其内容?如果这不能动态完成,那么有什么安全的方法来调整内容大小以使它们在不同的屏幕尺寸上都有意义?在 web 开发中,我知道像 em 这样的东西是相对大小的,但是在 Flutter 的上下文中,我不知道如何可靠地控制事物的大小。
更新:正如@pskink 所建议的,将孩子包装在 Align 小部件中并为 Align 的 heightFactor 参数设置动画即可完成折叠。但是,当崩溃的孩子本身有孩子时,我仍然无法崩溃工作。例如,Column 小部件根本不使用 ClipRect 进行剪辑(请参阅https://github.com/flutter/flutter/issues/29357),即使我使用 Wrap 而不是 Column,如果 Wrap 的子项是 Rows,那也不起作用。不知道如何让剪辑始终如一地工作。
【问题讨论】:
-
检查
expansion_tile.dart源文件 - 它使用了Align.heightFactor来制造技巧 -
@pskink 它有点工作,但即使使用 ClipRect 包装它也不会剪裁。你是怎么剪辑的?
-
@pskink ClipRect 不适用于列/换行/行
-
我不明白你的意思
-
github.com/flutter/flutter/issues/29357 我的意思是它不会剪切列/换行/行
标签: flutter flutter-animation flutter-container