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

Flutter:AnimatedBuilder自定义显示动画

1、自定义显示动画,实现淡入淡出

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{
  late AnimationController _controller;
  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 500)
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('标题'),
      ),
      body: Column(
        children: [
          Container(
            child: AnimatedBuilder(
              animation: _controller,
              builder: (context,child){
                return Opacity(
                  // Tween定义显示范围0.5-1.0之前,animate(_controller).value 会在0- 1之间自动切换
                  opacity: Tween(begin: 0.5,end: 1.0).animate(_controller).value,
                  child: Container(
                    width: 200,
                    height: 200,
                    color: Colors.red,
                  ),
                );
              },
            ),
          ),
          ElevatedButton(onPressed: (){
            _controller.forward();
          }, child: const Text('显示')),
          ElevatedButton(onPressed: (){
            _controller.reverse();
          }, child: const Text('隐藏')),
        ],
      ),
    );
  }
}

在这里插入图片描述

2、自定义显示动画,实现位移

class _MyHomePageState extends State<MyHomePage> with SingleTickerProviderStateMixin{
  late AnimationController _controller;
  @override
  void initState() {
    super.initState();
    _controller = AnimationController(
      vsync: this,
      duration: const Duration(milliseconds: 500)
    );
  }

  @override
  Widget build(BuildContext context) {
    // 可以通过追加chain定义动画曲线
    Animation x =
        Tween(begin: -100.0,end: 100.0)
        .chain(CurveTween(curve: Curves.bounceInOut))
        .animate(_controller);
    return Scaffold(
      appBar: AppBar(
        title: const Text('标题'),
      ),
      body: Column(
        children: [
          AnimatedBuilder(
            animation: _controller,
            builder: (context,value){
            return Container(
              width: 100,
              height: 100,
              color: Colors.red,
              // Tween(-100 到100 之间)进行动画
              // animate(_controller).value 从0到1 之间过度
              transform: Matrix4.translationValues(x.value, 0.0, 0.0),
            );
          }),
          ElevatedButton(onPressed: (){
            _controller.forward();
          }, child: const Text('移动')),
          ElevatedButton(onPressed: (){
            _controller.reverse();
          }, child: const Text('还原')),
        ],
      ),
    );
  }
}

在这里插入图片描述


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

相关文章:

  • 循环输出1~100之间的每个数
  • Cesium 加载B3DM模型
  • 解决Docker环境变量的配置的通用方法
  • el-progress进度条框开着时,要实时刷新显示进度条
  • C/C++精品项目之图床共享云存储(8):将项目最后变成多线程
  • Flutter中sqflite的使用案例
  • mac-mini的时间机器,数据备份到alist 中的网盘
  • 山东春季高考-C语言-综合应用题
  • WPF里面的C1FlexGrid表格控件添加RadioButton单选
  • Hive离线数仓结构分析
  • 树莓派2装FreeBSD14.1 Raspberry Pi2 install FreeBSD14.1 00000121:error:0A000086:SSL
  • ✅✅✅【Vue.js】sd.js基于jQuery Ajax最新原生完整版for凯哥API版本
  • 深度学习中的正则化技术
  • C++中的组合模式
  • 「Mac玩转仓颉内测版23」基础篇3 - 深入理解整数类型
  • Ubuntu24.04解决向日葵安装libgconf-2-4依赖问题
  • 鸿蒙学习高效开发与测试-ArkUI 框架(2)
  • MySQL 视图使用详解
  • [C#] 关于数组的详细解释以及使用注意点
  • 【QT常用技术讲解】QSettings把中文输入到配置文件
  • Nuxt.js 应用中的 webpack:configResolved事件钩子
  • 二叉树遍历相关算法题|后序遍历非递归|下到上左到右层次遍历|先序遍历非递归(C)
  • QT简单设计 网格布局 QT5.12.3环境 C++实现
  • 【pytorch-04】:线性回归案例(手动构建)
  • mongoDB回顾笔记(一)
  • springboot嗨玩旅游网站