首页 > 其他分享 >Flutter Icons交错动画

Flutter Icons交错动画

时间:2023-12-25 15:34:18浏览次数:37  
标签:动画 const Icons controller animation override super Flutter iconState

import 'package:flutter/material.dart';

class AnimateIcons extends StatelessWidget {
  const AnimateIcons({super.key});

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Icons动画'),
      ),
      body: const AnimateIconsContent(),
    );
  }
}

class MyAnimationIcon extends AnimatedWidget {
  const MyAnimationIcon({super.key, required Animation<double> animation})
      : super(listenable: animation);
  // 设置 动画显示的时间,
  static final _opacityTween = Tween<double>(begin: 0, end: 1)
      .chain(CurveTween(curve: const Interval(0.3, 1.0)));
  static final _opacityTween1 = Tween<double>(begin: 1, end: 0)
      .chain(CurveTween(curve: const Interval(0, 0.8)));
  @override
  Widget build(BuildContext context) {
    final animation = listenable as Animation<double>;
    return Container(
      child: Stack(children: [
        ScaleTransition(
          scale: _opacityTween.animate(animation),
          child: Icon(Icons.menu),
        ),
        ScaleTransition(
          scale: _opacityTween1.animate(animation),
          child: Icon(Icons.close),
        )
        // ScaleTransition(scale: animation)
      ]),
    );
  }
}

class AnimateIconsContent extends StatefulWidget {
  const AnimateIconsContent({super.key});

  @override
  State<AnimateIconsContent> createState() => _AnimateIconsContentState();
}

class _AnimateIconsContentState extends State<AnimateIconsContent>
    with SingleTickerProviderStateMixin {
  late AnimationController _controller;
  String iconState = '';

  @override
  void initState() {
    // TODO: implement initState
    super.initState();
    _controller = AnimationController(
      duration: const Duration(seconds: 1),
      vsync: this,
    )..addStatusListener((status) {
        setState(() {
          iconState = status.toString();
        });
      });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(children: [
          AnimatedIcon(
            icon: AnimatedIcons.close_menu,
            progress: _controller,
          ),
          MyAnimationIcon(
            animation: _controller,
          ),
          const SizedBox(
            height: 20,
          ),
          SizedBox(
            child: Text(iconState),
          )
        ]),
      ),
      floatingActionButton: FloatingActionButton(onPressed: () {
        if (iconState == 'AnimationStatus.completed') {
          _controller.reverse();
        } else if (iconState == 'AnimationStatus.dismissed' ||
            iconState == '') {
          _controller.forward();
        }
      }),
    );
  }
}

标签:动画,const,Icons,controller,animation,override,super,Flutter,iconState
From: https://www.cnblogs.com/angelwgh/p/17926187.html

相关文章

  • 26、Flutter中命名路由
    Flutter中的命名路由main.dart中配置路由voidmain(){runApp(MaterialApp(theme:ThemeData(appBarTheme:constAppBarTheme(color:Colors.blue,//设置导航栏颜色(新版本的设置方法)),),//home:Scaffold(body:MyFlutter1())......
  • 25、Flutter中基本路由
    Flutter路由介绍Flutter中的路由通俗的讲就是页面跳转。在Flutter中通过Navigator组件管理路由导航。并提供了管理堆栈的方法。如:Navigator.push和Navigator.popFlutter中给我们提供了两种配置路由跳转的方式:1、基本路由2、命名路由Flutter中的基本路由使用想从HomePage......
  • flutter中背景图片(动态图片)
    单页面设置背景图片使用 Container 组件和 decoration 属性:优点:简单易用,适用于大多数情况下的页面背景设置。缺点:无法控制背景图片的位置和层级。classMyBookextendsStatelessWidget{constMyBook({super.key});@overrideWidgetbuild(BuildContextcontex......
  • Unity引擎2D游戏开发,野猪基本的移动逻辑和动画
    一、类的继承在Scripts下创建Enemy文件夹,里面再创建两个C#文件将Boar文件内的代码修改为以下代码,:后的是Enemy,即继承了Enemy类publicclassBoar:Enemy{}在Enemy内,编写基本属性publicclassEnemy:MonoBehaviour{[Header("基本参数")]//基本移动速度......
  • [CSS]动画,平移到某个位置,停住
    animation-fill-mode:forwards; <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><......
  • Flutter中 关于package:flutter/cupertino.dart和package:flutter/material.dart的区
    import'package:flutter/cupertino.dart';和import'package:flutter/material.dart';这两个语句分别用于导入Flutter框架中的不同部分,而且它们通常用于创建不同风格的用户界面。1.import'package:flutter/material.dart';:这是导入Material部分的语句,Material是一种设计......
  • flutter 桌面通知 气泡消息数量
    先上效果原理Android操作系统提供的NotificationManager接口来设置应用程序图标上的徽章iOS操作系统提供的UIApplication.shared.applicationIconBadgeNumber使用flutterflutterpubaddflutter_app_badger通过在启动退出时候更新气泡import'package......
  • Unity3D UI帧动画详解
    nity3D是一款非常强大的游戏开发引擎,它提供了丰富的功能和工具,使开发者能够轻松创建各种类型的游戏。其中,UI(UserInterface)是游戏开发中非常重要的一部分,它用于展示游戏中的各种信息和交互元素。在Unity3D中,我们可以使用UI帧动画来创建各种炫酷的UI效果。本文将详细介绍Unity3D中U......
  • 在Flutter中使用PhotoViewGallery指南
    介绍Flutter中的PhotoViewGallery是一个功能强大的插件,用于在应用中展示可缩放的图片。无论是构建图像浏览器、相册应用,还是需要在应用中查看大图的场景,PhotoViewGallery都是一个不错的选择。添加依赖首先,需要在pubspec.yaml文件中添加photo_view插件的依赖。打开该文件,然后在depen......
  • Flutter 显式动画
    创建AnimationController的同时,也赋予了一个vsync参数。vsync的存在防止后台动画消耗不必要的资源。您可以通过添加SingleTickerProviderStateMixin到类定义,将有状态的对象用作vsync因为addListener()函数调用setState(),所以每次Animation生成一个新的数字,当前帧......