flutter - 具有动态高度的动画容器 Flutter

我正在使用 animatedContainer 在按下按钮时显示 listView.builder()。这是一个要显示的简单子(monad)列表,但问题是我不知道 ListView 构建器的高度会传递给 animatedContainer 高度约束。有什么方法可以动态获取 ListView 生成器的高度或任何其他方法来实现这一点?

我需要什么?

  • 动画容器需要高度,但我不知道高度 ListView 生成器。
  • 当我使用 Normal Container 时,我没有设置 height: 属性,所以 它会自动环绕 child

是这样的:https://getbootstrap.com/docs/4.0/components/collapse/

AnimatedContainer(
duration: Duration(milliseconds: 200),
curve: Curves.easeIn,
height: _expanded ? 150 : 0, // This height I cannot set here explicitly. I need to set dynamically like, get child's height
child: ListView.builder(
  key: listViewKey,
  shrinkWrap: true,
  scrollDirection: Axis.vertical,
  physics: const NeverScrollableScrollPhysics(),
  itemCount: loadedSubCategories.length,
  itemBuilder: (ctx, i) => ChangeNotifierProvider.value(
  value: loadedSubCategories[i],
  child: SubCategoryItem(loadedSubCategories[i].categoryId,
     loadedSubCategories[i].subCategoryId)),
  ),
),

当我使用普通的 Container() 时,我不会设置 height: 属性,这样它会自动获取 child 的高度,但我需要高度,因为我想扩展子类别一种动画方式。

SubCategories 的每个元素具有不同的高度和 Subcategories 的数量也是未知的。所以用 subcategories.length 计算高度也是不可能的。

非常感谢任何建议,谢谢

最佳答案

您可以使用 AnimatedSize 小部件实现您想要的。

它会自动创建一个小部件,该小部件会自行设置动画以匹配其子级大小,您无需为其提供任何高度或宽度。 你只需要用它包装你的小部件

AnimatedSize(
            curve: Curves.fastOutSlowIn,
            duration: Duration(milliseconds: 300),
            vsync: this,
            child: Container()
)

你可以看看at获取更多信息。

https://stackoverflow.com/questions/66101838/

相关文章:

c++ - 自动类型检测是否只查看一个语句

java - 输出最大分数

java - 如果有 happens-before 保证,让 "this"在构造函数的最后一个语句中

flutter - 调用者没有执行指定操作的权限

javascript - 使用路由器 "No overload matches this call"

c# - 如何使用 C# 连接到 Azure 存储表

ajax - ASP.NET Core Razor ajax POST 请求数据对象为空

javascript - React App - 我的警告窗口出现两次

python - 将 seq2seq NLP 模型转换为 ONNX 格式会对其性能产生负面影响吗?

swift - 如何使用 SwiftUI 中的扩展将 Hashable 协议(protocol)添加