如何在 Flutter 中设置折叠元素的动画

2024-01-09

当用户用动画点击不同的小部件(同级或父级)时,如何展开和折叠小部件?

new Column(
    children: <Widget>[
        new header.IngridientHeader(
            new Icon(
                Icons.fiber_manual_record,
                color: AppColors.primaryColor
            ),
            'Voice Track 1'
        ),
        new Grid()
    ],
)

我希望用户能够点击header.IngridientHeader进而Grid小部件应该切换(如果可见则隐藏,反之亦然)。

我正在尝试做一些类似于 Bootstrap 中的 Collapse 的事情。getbootstrap.com/docs/4.0/components/collapse http://getbootstrap.com/docs/4.0/components/collapse

The header.IngridientHeader小部件应该始终保持在原位。这grid是一个可滚动(水平)的小部件。


如果您想将一个小部件折叠到零高度或零宽度,并且该小部件的子部件在折叠时会溢出,我建议尺寸转换 https://api.flutter.dev/flutter/widgets/SizeTransition-class.html or 尺度转换 https://api.flutter.dev/flutter/widgets/ScaleTransition-class.html.

Here is an example of the ScaleTransition widget being used to collapse the container for the four black buttons and status text. My ExpandedSection widget is used with a column to get the following structure. An example of the ScaleTransition widget

使用 SizeTransition 小部件动画的小部件示例:

class ExpandedSection extends StatefulWidget {

  final Widget child;
  final bool expand;
  ExpandedSection({this.expand = false, required this.child});

  @override
  _ExpandedSectionState createState() => _ExpandedSectionState();
}

class _ExpandedSectionState extends State<ExpandedSection> with SingleTickerProviderStateMixin {
  late AnimationController expandController;
  late Animation<double> animation; 

  @override
  void initState() {
    super.initState();
    prepareAnimations();
    _runExpandCheck();
  }

  ///Setting up the animation
  void prepareAnimations() {
    expandController = AnimationController(
      vsync: this,
      duration: Duration(milliseconds: 500)
    );
    animation = CurvedAnimation(
      parent: expandController,
      curve: Curves.fastOutSlowIn,
    );
  }

  void _runExpandCheck() {
    if(widget.expand) {
      expandController.forward();
    }
    else {
      expandController.reverse();
    }
  }

  @override
  void didUpdateWidget(ExpandedSection oldWidget) {
    super.didUpdateWidget(oldWidget);
    _runExpandCheck();
  }

  @override
  void dispose() {
    expandController.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return SizeTransition(
      axisAlignment: 1.0,
      sizeFactor: animation,
      child: widget.child
    );
  }
}

动画容器 https://api.flutter.dev/flutter/widgets/AnimatedContainer-class.html也有效,但如果子级无法调整为零宽度或零高度,Flutter 可能会抱怨溢出。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Flutter 中设置折叠元素的动画 的相关文章

随机推荐

  • ML 中 ref 函数的用法

    考虑到 ref 运算符 我很难理解它的应用以及以下指令的含义 1 在这个定义中我定义什么 val ref x ref 9 val x 9 int 2 我在这里用 ref x ref 12 做什么 val x ref 8 val x ref
  • 计算跨浏览器 iframe 高度

    我的 JavaScript 经验中最困难的问题之一是正确 即 跨浏览器 计算iframe 高度 在我的应用程序中 我有很多动态生成的 iframe 我希望它们都在加载事件结束时执行某种自动调整大小以调整其高度和宽度 如果是height计算我
  • 为什么不能在 osx 中原生安装 docker?

    我希望能够在 OSX 中的 Vagrant 之外使用 docker 目前这是不可能的 导致它不只限于linux安装的具体原因是什么 Docker 只是系统提供的容器之上的一个抽象和自动化层 技术限制是 OS X 不支持操作系统级虚拟化 ht
  • 如何添加添加图像作为下拉箭头?

    我创建了一个带有下拉箭头的应用程序 但箭头的尺寸太小 所以我决定放大箭头的大小 我需要添加图像而不是箭头 是否可以添加图像或调整箭头大小 我当前的 CSS 如下 custom select after content content siz
  • Play框架会话和cookie如何工作?

    play 如何验证 cookie 我注意到重新启动服务器后我仍然登录 即使我 不要在数据库中保存任何会话数据 我也注意到了 我可以将服务器上的日期设置为大于到期日 cookie 的日期 但我仍然登录 我退出了 将 cookie 保存到文本文
  • 简单文件上传返回NULL?

    我正在尝试在 MVC 5 中进行第一个简单的文件上传 我正在遵循我找到的一堆示例 但由于某种原因 在我的 创建 ActionResult 中 uploadFile 始终为 NULL 因此上传代码为从不运行 有人看到我可能做错了什么吗 Vie
  • 单独类库中数据注释的本地化

    我们正在尝试为我们的域模型实现本地化 这些模型存在于我们的解决方案中的单独的类库项目中 然而 我们无法让它工作 因为我们的模型数据注释属性根本没有被翻译 项目结构 Solution Web project 资源文件夹 包含 resx 文件
  • 如何制作一个永不结束的迭代器?

    我只是想知道无限期地迭代集合的最简单方法是什么 即当它到达末尾时next 调用第一个对象 我假设这不是 Java 中预定义的函数 所以只是寻找在 Java 中实现它的最简单方法 有一个方法很优秀谷歌收藏 https github com g
  • 如何使用 conda 或 virtualenv 在虚拟环境之间共享包?

    我有多个 python 项目 每个项目都有自己的虚拟环境 另外我有一个全局 python 环境 我想在虚拟 全局环境之间共享相同的包文件 而不需要多次复制它们 如果可能 Environment Packages GLOBAL A B C D
  • 在编译时完全枚举 D 维数组的索引

    为了测试一些多维结构 需要生成编译时多维索引以完全覆盖所有可能的情况 我寻找编译时廉价的方法来实现上述目的 我目前所做的 include
  • java 10 中使用局部变量类型推断的限制

    Java 10引入了局部变量类型推断特征JEP 286 http openjdk java net jeps 286 我们可以使用局部变量类型推断var这是保留类型名称 但使用它有一些限制 有人可以总结一下在哪些情况下我将无法使用 var
  • 如何在android的城市飞艇中注册apid?

    I have completed client side code by download sample from git for push notification in android After execute of app i go
  • 有条件地更改 Razor 视图中的 CSS 类

    我需要更改 CSS 类 div 带有 forumChild 类的标签 它必须每 3 个循环更改一次 foreach 循环 有没有办法在控制范围内做到这一点 div class Forum p The Forum p foreach var
  • 是否可以在同一帧中打开新的 fxml 文件

    我在锚点窗格中创建了 fxml 文件 但每次我单击按钮时 我都会在新框架中得到下一个 fxml 我希望它在同一帧中打开 public void baropen ActionEvent event handle the event here
  • 导航栏按钮和项目未在 swift 3 中显示

    我在 swift 中以编程方式使用导航栏 但无法在导航栏中显示栏按钮项目 这是我所做的代码 override func viewDidLoad super viewDidLoad let navBar UINavigationBar UIN
  • 存在主义类型。为异构映射编写类的实例

    使用以下类型和类定义 我不明白为什么在创建时会出现错误instance below 我需要 MyMap 来保存异构值的映射 LANGUAGE ExistentialQuantification module Scratch SO Extis
  • 在 Three.js 中将材质分配给 OBJLoader 模型

    我使用以下代码导入了 OBJ 模型 var loader new THREE OBJLoader loader addEventListener load function geometry object geometry content
  • 卸载前检查应用程序是否在 NSIS 中运行

    我是 NSIS 新手 我需要知道在卸载程序中 如何检查应用程序 C 中的 是否正在运行并在卸载之前将其关闭 这是一个稍微更友好的使用版本NS进程 http nsis sourceforge net NsProcess plugin请求应用程
  • 如何在 React 中创建可重用的自定义模态组件?

    我对 React 中的模态概念有疑问 当使用带有 jQ uery 的服务器端渲染模板时 我习惯于有一个始终可用的空全局模态模板 包含在始终扩展的基本模板中 然后 当进行 AJAX 调用时 我只是填充模态 如下所示 modal global
  • 如何在 Flutter 中设置折叠元素的动画

    当用户用动画点击不同的小部件 同级或父级 时 如何展开和折叠小部件 new Column children