当前位置: 首页 > article >正文

Flutter:AnimatedSwitcher当子元素改变时,触发动画

AnimatedSwitcher中的子元素
由:CircularProgressIndicator()
改变为:Image.network('https://cdn.uviewui.com/uview/swiper/1.jpg')
则会触发动画
class _MyHomePageState extends State<MyHomePage> {
  bool flag = true;
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('标题'),
      ),
      body: Center(
        child: Container(
          alignment: Alignment.center,
          width: 400,
          height: 200,
          color: Colors.yellowAccent,
          child: AnimatedSwitcher(
            duration: const Duration(milliseconds: 500),
            child: flag ? const CircularProgressIndicator() : Image.network('https://cdn.uviewui.com/uview/swiper/1.jpg'),
          ),
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: (){
          flag = !flag;
          setState(() {});
        },
        child: const Icon(Icons.add),
      ),
    );
  }
}

在这里插入图片描述

AnimatedSwitcher中通过添加transitionBuilder修改动画效果

// 添加1个缩放动画
child: AnimatedSwitcher(
transitionBuilder:((child, animation){ // 改变动画效果
    return ScaleTransition( // 缩放
      scale: animation,
      child: child,
    );
  }),
  duration: const Duration(milliseconds: 500),
  child: flag ? const CircularProgressIndicator() : Image.network('https://cdn.uviewui.com/uview/swiper/1.jpg'),
),

// 动画也可以叠加使用,在添加一个淡入淡出
child: AnimatedSwitcher(
  transitionBuilder:((child, animation){ // 改变动画效果
    return ScaleTransition( // 缩放
      scale: animation,
      child: FadeTransition(opacity: animation,child: child,), // 淡入淡出
    );
  }),
  duration: const Duration(milliseconds: 500),
  child: flag ? const CircularProgressIndicator() : Image.network('https://cdn.uviewui.com/uview/swiper/1.jpg'),
),

在这里插入图片描述

AnimatedSwitcher里如果是改变同样的组件,如何触发动画

// 相同组件,只是内容更换,需要加key: UniqueKey()唯一的
child: Text(
  flag ? "你好Flutter" : "改变内容",
  key: UniqueKey()
),

http://www.kler.cn/a/406854.html

相关文章:

  • 自动驾驶3D目标检测综述(三)
  • 【自用】常用希腊字母表
  • java http body的格式 ‌application/x-www-form-urlencoded‌不支持文件上传
  • 实时质检-静音检测分析流程(运维人员使用)
  • Java 对象头、Mark Word、monitor与synchronized关联关系以及synchronized锁优化
  • 图的各种应用
  • Ansible使用简介和基础使用
  • 嵌入式 UI 开发的开源项目推荐
  • C#学习笔记——窗口停靠控件WeifenLuo.WinFormsUI.Docking使用-腾讯云开发者社区-腾讯云
  • vue3中父div设置display flex,2个子div重叠
  • 华为无线AC+AP组网实际应用小结
  • FreeIPCC:Ai智能呼叫中心是什么?
  • 【数据结构】归并排序 —— 递归及非递归解决归并排序
  • 基于自混合干涉测量系统的线展宽因子估计算法matlab仿真
  • Python Matplotlib 安装指南:使用 Miniconda 实现跨 Linux、macOS 和 Windows 平台安装
  • MAC C语言 Helloword
  • spring学习(四)
  • DevOps 之 CI/CD入门操作 (二)
  • k8s上面的Redis集群链接不上master的解决办法
  • Powershell 命令行窗口 设置行宽、折行、行省略
  • IText创建加盖公章的pdf文件并生成压缩文件
  • 高级java每日一道面试题-2024年11月22日-JVM篇-说说堆和栈的区别?
  • 纯HTMLCSS实现3D旋转地球
  • 嵌入式C语言面试题 - 2024/11/18
  • 【HM-React】01. React基础-上
  • element-plus教程:Layout 布局