Flutter动画库:animations(路由过渡动画或者页面切换动画)

news2024/11/26 8:42:07

animations

animations 是一个 Flutter 库,它提供了一组用于创建动画效果的工具和组件。这个库的核心重点是路由过渡动画或者页面切换动画

地址
https://pub-web.flutter-io.cn/packages/animations

安装

flutter pub add animations

看了下官方文档和官方例子,然后就有点懵。差点以为找错库了。还好flutter中的库可以直接点开(ctrl+鼠标右键)查看源码

点开:import 'package:animations/animations.dart';,可以看到有以下几个文件
在这里插入图片描述
modal.dart用不到,另外几个就是官方提供给我们的动画。下面一块看一下,以下都是使用的默认配置,记得引入下面这个包

`import 'package:animations/animations.dart';`

fade_scale_transition

Center(
  child: ElevatedButton(
onPressed: () {
  showModal(
      context: context,
      // 配置
      configuration: const FadeScaleTransitionConfiguration(),
      builder: (context) {
        return const Center(
          child: SizedBox(
            width: 250,
            height: 250,
            child: Material(
              child: Center(
                child: FlutterLogo(size: 250),
              ),
            ),
          ),
        );
      });
},
child: const Text("打开弹窗"),
));

在这里插入图片描述

fade_through_transition

这个是一个路由切换动画

MaterialApp(
      theme: ThemeData(
          // 设置页面过渡主题
          pageTransitionsTheme: const PageTransitionsTheme(builders: {
        TargetPlatform.android: FadeThroughPageTransitionsBuilder(),
        TargetPlatform.iOS: FadeThroughPageTransitionsBuilder(),
      })),
      // 路由
      routes: {
        '/': (BuildContext context) {
          return Container(
            color: Colors.red,
            child: Center(
              child: TextButton(
                child: const Text('Push route'),
                onPressed: () {
                  Navigator.of(context).pushNamed('/a');
                },
              ),
            ),
          );
        },
        '/a': (BuildContext context) {
          return Container(
            color: Colors.blue,
            child: Center(
              child: TextButton(
                child: const Text('Pop route'),
                onPressed: () {
                  Navigator.of(context).pop();
                },
              ),
            ),
          );
        },
      },
      // home: YcHomePage(),
    );

在这里插入图片描述

open_container

这个还是很不错的

Center(
        child: OpenContainer(
      transitionDuration: const Duration(milliseconds: 500),
      // 打开状态
      openBuilder: (BuildContext context, VoidCallback _) {
        return const SecondPage();
      },
      // 闭合状态
      closedBuilder: (BuildContext context, VoidCallback openContainer) {
        return GestureDetector(
          onTap: openContainer,
          child: Container(
            width: 200,
            height: 200,
            color: Colors.blue,
            child: const Center(
              child: Text(
                'Tap to Open',
                style: TextStyle(
                  color: Colors.white,
                  fontSize: 20,
                ),
              ),
            ),
          ),
        );
      },
    ));
class SecondPage extends StatelessWidget {
  const SecondPage({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Second Page'),
      ),
      body: const Center(
        child: Text(
          'Second Page',
          style: TextStyle(
            fontSize: 24,
            fontWeight: FontWeight.bold,
          ),
        ),
      ),
    );
  }
}

在这里插入图片描述

page_transition_switcher

可以用于在不同页面之间实现平滑的过渡动画。它可以让我们在切换页面时应用自定义的过渡效果,比如淡入淡出、滑动、缩放等。


// 创建一个PageTransitionSwitcher组件,并将需要切换的页面作为其子组件。
class SwitcherContainer extends StatefulWidget {
  const SwitcherContainer({Key? key}) : super(key: key);

  
  _SwitcherContainerState createState() => _SwitcherContainerState();
}

class _SwitcherContainerState extends State<SwitcherContainer> {
  int _pageIndex = -1;

  
  Widget build(BuildContext context) {
    return PageTransitionSwitcher(
      // 过渡时间
      duration: const Duration(milliseconds: 500),
      // 过渡构建函数,还有其他的构建函数具体见源码
      transitionBuilder: (child, animation, secondaryAnimation) {
        return FadeThroughTransition(
          animation: animation,
          secondaryAnimation: secondaryAnimation,
          child: child,
        );
      },
      child: _getPage(_pageIndex),
    );
  }

  Widget _getPage(int index) {
    switch (index) {
      case 0:
        return const FirstPage();
      default:
        return Center(
          child: ElevatedButton(
              onPressed: () {
                setState(() {
                  _pageIndex = 0;
                });
              },
              child: const Text("跳转")),
        );
    }
  }
}

class FirstPage extends StatelessWidget {
  const FirstPage({Key? key}) : super(key: key);

  
  Widget build(BuildContext context) {
    return const Scaffold(
      body: Center(
        child: Text(
          'Second Page',
          style: TextStyle(
            fontSize: 24,
            fontWeight: FontWeight.bold,
          ),
        ),
      ),
    );
  }
}

这里写的例子不太合适,正常应该是跑马灯那样进行切换。
在这里插入图片描述

shared_axis_transition

SharedAxisPageTransitionsBuilderanimations库中的一个过渡构建器,它可以在页面之间应用共享坐标轴的过渡动画效果。它提供了三个不同的过渡类型:SharedAxisTransitionType.scaledSharedAxisTransitionType.horizontalSharedAxisTransitionType.vertical,分别表示缩放、水平和垂直方向的过渡效果。

这个也是一个路由过渡动画

class MyApp extends StatelessWidget {
  //创建widget的唯一标识
  const MyApp({Key? key}) : super(key: key);
  //重写build方法
  
  Widget build(BuildContext context) {
    // ChangeNotifierProvider 会返回一个 ChangeNotifier 对象,它允许消费者在 CounterState 对象发生变化时收到通知。
    return MaterialApp(
      home: const YcHomePage(),
      theme: ThemeData(
          pageTransitionsTheme: const PageTransitionsTheme(builders: {
        TargetPlatform.android: SharedAxisPageTransitionsBuilder(
          transitionType: SharedAxisTransitionType.scaled,
        ),
        TargetPlatform.iOS: SharedAxisPageTransitionsBuilder(
          transitionType: SharedAxisTransitionType.scaled,
        ),
      })),
    );
  }
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/778512.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

编程规范—代码风格

先看以下两段代码。 对于计算机来说&#xff0c;这两段代码并没有什么区别&#xff0c;都可以执行&#xff0c;执行结果也一样。但是对于我们人类来说&#xff0c;第二段代码显然看起来更舒适&#xff0c;程序的可读性也更强&#xff0c;跟写作文类似&#xff0c;把所有内容挤在…

RocksDB架构

1、rocksdb是什么? RocksDB中文网 | 一个持久型的key-value存储 rocksdb是一种KV存储引擎&#xff0c;常用于数据库存储数据&#xff0c;无法直接使用&#xff0c;没有提供sql命令&#xff0c;通过调用rocksdb提供的api进行数据库的读写等操作。 rocksdb是以leveldb为基础开…

WinCE OSDesign项目创建模拟器

vs2005创建OSDesign项目&#xff0c;WinCE6 1.解决方案管理器&#xff0c;项目鼠标右键属性 默认语言设置 编译选项 2.主菜单&#xff1a;Target->Connectivity Options Add Device/Remove Device不用管 Kernel Service Map Core Service Settings默认 Service Status默…

网络安全(黑客)自学路线笔记

一、什么是黑客&#xff1f; 黑客泛指IT技术主攻渗透窃取攻击技术的电脑高手&#xff0c;现阶段黑客所需要掌握的远远不止这些。 二、为什么要学习黑客技术&#xff1f; 其实&#xff0c;网络信息空间安全已经成为海陆空之外的第四大战场&#xff0c;除了国与国之间的博弈&am…

企业微信在ios机型无法吊起打开个人信息页接口(openUserProfile)

wx.qy.openUserProfile({type: 1,//1表示该userid是企业成员&#xff0c;2表示该userid是外部联系人userid: "wmEQlEGwAAHxbWYDOK5u3Af13xlYAAAA", //可以是企业成员&#xff0c;也可以是外部联系人success: function(res) {// 回调} });遇到的问题&#xff1a;调用打…

flutter开发实战-实现推送功能Push Notification

flutter开发实战-实现推送功能Push Notification 推送服务现在可以说是所有 App 的标配了&#xff0c;最近在Flutter工程项目上实现推送功能。flutter上实现推送功能需要依赖原生的功能&#xff0c;需要插件实现&#xff0c;这里使用的是极光推送的服务。 一、效果图 效果图…

整车总线系列——FlexRay 七

整车总线系列——FlexRay 七 我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 没有人关注你。也无需有人关注你。你必须承认自己的价值&#xff0c;你不能…

swagger对json数据的处理

在实习中遇到了一个不寻常的事情&#xff0c;今天和同事讨论一个小问题&#xff0c;同事使用swagger&#xff0c;想要调用一个接口&#xff0c;这个接口要传递一个json对象&#xff0c;对应java的一个实体类&#xff0c;但是有一个属性同事不想看到它&#xff0c;就用JsonIgnor…

主从复制 [学习笔记] MaterSlave

文章目录 前言MySQL主从复制的实战案例1、环境搭建2、主库配置&#xff0c;进入vim /etc/my.cnf3、重启数据库4、建立同步账号5、锁表设置只读6、设置主库状态7、备份数据库资料8、解锁9、主库备份数据上传到从库10、slave从库设置11、还原数据的备份12、设定从主库同步 前言 …

物流智能搬运机器人|HEGERLS四向穿梭车在复杂生产场景下的智能化作业应用

一般而言&#xff0c;物流有三个基本环节&#xff1a;存取、输送和分拣。在存取环节&#xff0c;常用方式有两种&#xff1a;托盘存取和料箱存取。以前托盘存取应用得多一些&#xff0c;但随着电商、新零售的兴起&#xff0c;B2b、B2C业务快速增长&#xff0c;订单碎片化趋势明…

ripv2小实验

子网划分 192.168.1.0/24&#xff1a; 192.168.1.0/26 192.168.1.64/26 192.168.1.128/26 192.168.1.192/26 192.168.1.0/26划分为 192.168.1.0/26 192.168.1.4/26 192.168.1.8/26 192.168.1.12/26 192.168.1.16/26 192.168.1.20/26 192.168.…

IDEA如何打包springboot成jar包,并运行、停止、重启,本地依赖不能打包怎么办

1、将springboot项目打包成jar 第一步 这里要注意依赖的包的导入&#xff0c;有pom.xml中网络依赖导入&#xff0c;有的包是本地依赖导入&#xff0c;本地依赖的包只需在pom.xml加入一下代码即可&#xff01; <dependency><groupId>jacob</groupId>//名称…

idea设置git 忽略的文件

1、FIle-->setting 打开设置对话框。 2、 找到如图所示的FileType。 3、添加需要忽略的文件&#xff0c;比如idea&#xff0c;classes&#xff0c;添加完后&#xff0c;点击apply、OK 保存。 注&#xff1a;本设置基于idea 2023.1.3版本

【FPGA】串口通信讲解-状态机判断数据值

&#x1f389;欢迎来到FPGA专栏~串口通信讲解 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能指正&…

【ShaderToy中图形效果转译到UnityShaderlab案例分享,实现粒子场_ParticleField】

Shader"ShaderToy/ParticleField" {Properties{_iMouse("iMouse", Vector) = (0,0,0,0)}SubSha

怎么把PDF转为word?1分钟解决难题

PDF文件在我们的电脑上应用非常广泛&#xff0c;由于其较高的安全性和兼容性&#xff0c;得到了广泛的认可。然而&#xff0c;对于一些人来说&#xff0c;PDF文件不能直接进行编辑和修改可能是一个问题。因此&#xff0c;通常我们需要将其转换为Word格式&#xff0c;以便在Word…

uniapp 微信小程序 input详解 带小数点的input、可查看密码的输入框input

官网文档地址 1、template <!-- 本示例未包含完整css&#xff0c;获取外链css请参考上文&#xff0c;在hello uni-app项目中查看 --> <template><view><view class"uni-common-mt"><view class"uni-form-item uni-column"&g…

Mysql 主从复制、读写分离

目录 前言 一、主从复制原理 1.1 MySQL的复制类型 1.2 mysql主从复制的工作原理 1.3 MySQL主从复制延迟 1.4 MySQL四种同步方式 1.5 MySQL支持的复制类型 二、 MySQL应用场景 三、主从复制实验 3.1 MySQL主从服务器时间同步 3.1.1 安装ntp、修改配置文件 3.1.2 两台…

如何查看小程序的APPID和AppSecret

小程序APPID可以在手机上打开小程序后&#xff0c;点击右上角三点&#xff1a; 然后点击中间位置的小程序名称&#xff0c;进入小程序介绍页面&#xff1a; 点击“更多资料”后&#xff0c;进入页面就可以看到上方有APPID&#xff1a; 另一种方法&#xff1a; 在微信公众平台登…

安装:【vue】npm install -g @vue/cli出现错误

安装Vue脚手架&#xff0c;cli就是Command Line Interface 命令行接口 工具 进行到npm install -g vue/cli这一步出现错误&#xff0c;操作步骤如下&#xff1a; 1.通过 wins打开开始栏的搜索框&#xff0c;输入cmd&#xff0c;管理员身份运行 2.先下载node.js 不知道有没有…