具有 dynamix 高度的动画容器 Flutter

MBK*_*MBK 1 flutter animatedcontainer

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

我需要的?

  • 动画容器需要高度,但我不知道列表视图生成器的高度。
  • 当我使用普通容器时,我没有设置height:属性,所以它会自动环绕子容器

像这样的东西: 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)),
  ),
),
Run Code Online (Sandbox Code Playgroud)

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

具有不同高度的子类别的每个元素和子类别的数量也是未知的。因此计算高度subcategories.length也是不可能的。

非常感谢任何建议,谢谢

小智 16

您可以使用 AnimatedSize widget 实现您想要的效果。

它会自动创建一个小部件,该小部件会自行动画以匹配其子尺寸,并且您不需要为其提供任何高度或宽度。你只需要用它包裹你的小部件

AnimatedSize(
            curve: Curves.fastOutSlowIn,
            duration: Duration(milliseconds: 300),
            vsync: this,
            child: Container()
)
Run Code Online (Sandbox Code Playgroud)

您可以查看更多信息。