vue 页面切换动画_Flutter Hero动画让你的APP页面切换充满动效 不一样的体验 不一样的细节处理...

优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维。


本文章实现的Demo效果,如下图所示:

8d2690e3870c2a5839d608ad4aee0ea8.gif

class HeroHomePage extends StatefulWidget {  @override  _TestPageState createState() => _TestPageState();}class _TestPageState extends State<HeroHomePage> {  @override  Widget build(BuildContext context) {    return Scaffold(      //背景      backgroundColor: Colors.grey[200],      //标题      appBar: AppBar(        title: Text("每日分享"),      ),      //页面主体      body: buildBodyWidget(),    );  }  ...  }

页面的主体就是这里显示的图文,使用Row来将图片与文本区域左右排列,代码如下:

75f5a0e65d4831d706ea17b57e8ba1db.png

  Widget buildBodyWidget() {    //水波纹点击事件监听    return InkWell(      //手指点击抬起时的回调      onTap: () {        //打开新的页面        openPageFunction();      },      child: Container(        padding: EdgeInsets.all(10),        color: Colors.white,        //线性布局左右排列        child: Row(          //主轴方向开始对齐 在这里是左对齐           mainAxisAlignment: MainAxisAlignment.start,          //交叉轴上开始对齐 在这里是顶部对齐          crossAxisAlignment: CrossAxisAlignment.start,          children: [            //左侧的图片            buildLeftImage(),            //右侧的文本区域            buildRightTextArea()],        ),      ),    );  }

2 显示图片的构建

左侧的图片区域 需要 使用 Hero 来包裹,因为这里就是Hero动画触发的效果,代码如下:

  ///左侧的图片区域  Container buildLeftImage() {    return Container(      margin: EdgeInsets.only(right: 12),      child: Hero(        tag: "test",        child: Image.asset(          "images/banner3.webp",          width: 96,          fit: BoxFit.fill,          height: 96,        ),      ),    );  }

3 右侧的文本区域

d3c2a15c38adebcb93a0b0fe1f65a1f4.png

  ///右侧的文本区域  Expanded buildRightTextArea() {    return Expanded(      child: Column(        crossAxisAlignment: CrossAxisAlignment.start,        mainAxisSize: MainAxisSize.min,        children: [          Text(            "优美的应用",            softWrap: true,            overflow: TextOverflow.ellipsis,            maxLines: 3,            style: TextStyle(fontSize: 16),          ),          Text(            "优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力,当然也需要码农年轻灵活的思维。",            softWrap: true,            overflow: TextOverflow.ellipsis,            maxLines: 3,            style: TextStyle(fontSize: 14, color: Colors.black38),          )        ],      ),    );  }

4 自定义透明过度动画路由

Hero达成两个页面之间共享元素的连动效果,但是页面的切换效果造成碍眼的体验,配合一个透明过度,达成舒适的体验,代码如下:

  ///自定义路由动画  void openPageFunction() {    Navigator.of(context).push(      PageRouteBuilder(        pageBuilder: (BuildContext context, Animation<double> animation,            Animation<double> secondaryAnimation) {          //目标页面          return DetailsPage();        },        //打开新的页面用时        transitionDuration: Duration(milliseconds: 1800),        //关半页岩用时        reverseTransitionDuration: Duration(milliseconds: 1800),        //过渡动画构建        transitionsBuilder: (          BuildContext context,          Animation<double> animation,          Animation<double> secondaryAnimation,          Widget child,        ) {          //渐变过渡动画          return FadeTransition(            // 透明度从 0.0-1.0            opacity: Tween(begin: 0.0, end: 1.0).animate(              CurvedAnimation(                parent: animation,                //动画曲线规则,这里使用的是先快后慢                curve: Curves.fastOutSlowIn,              ),            ),            child: child,          );        },      ),    );  }

5 最后就是点击图文信息打开的详情页面

class DetailsPage extends StatelessWidget {  @override  Widget build(BuildContext context) {    return Scaffold(      //背景透明      backgroundColor: Colors.white,      appBar: AppBar(        title: Text("精彩人生"),      ),      body: buildCurrentWidget(context),    );  }  Widget buildCurrentWidget(BuildContext context) {    return Container(      color: Colors.white,      padding: EdgeInsets.all(8),      margin: EdgeInsets.all(10),      child: Column(        crossAxisAlignment: CrossAxisAlignment.start,        children: [          //图片区域          buildHero(context),          SizedBox(            width: 22,          ),          //文字区域          buildTextContainer(),        ],      ),    );  }}

页面分为两部分,第一部分的图片,使用Hero过渡 ,需要注意的是 目标 Hero 的直接子类必须是一个 Material包裹,代码如下:

  ///图片区域  Hero buildHero(BuildContext context) {    return Hero(      tag: "test",      child: Material(        color: Colors.blue,        child: InkWell(          onTap: () {            Navigator.of(context).pop();          },          child: Image.asset(            "images/banner3.webp",            fit: BoxFit.fill,          ),        ),      ),    );  }

第二部分就是一个普通的文本了

  Container buildTextContainer() {    return Container(      child: Text(        "优美的应用体验 来自于细节的处理,更源自于码农的自我要求与努力",        softWrap: true,        overflow: TextOverflow.ellipsis,        maxLines: 3,        style: TextStyle(fontSize: 16),      ),    );  }

点击原文可获取源码。

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

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

相关文章

自定义左右侧滑菜单

实现效果&#xff1a; 左右侧滑菜单&#xff0c;侧滑栏占主屏比为60%监听触控&#xff0c;自定义滑动动画&#xff0c;当侧边栏滑动超过50%松开触控将自动滑动到60%&#xff0c;未超过50%松开触控回归侧边栏隐藏为主屏设置蒙版效果&#xff0c;根据侧滑菜单的占屏比设置主屏蒙版…

ubuntu php7 memcache,linux上安装php7 memcache扩展

php7安装memcache扩展需要memcache php7的分支 否则安装会失败php7的memcache扩展安装&#xff0c;真的很让人心碎&#xff01;下面则是php7的扩展memcache安装了。用之前的php版本安装是没有问题&#xff0c;但是用了php7安装 http://pecl.php.net/package/memcache 下的任一…

好文推荐系列--------(3)GruntJS 在线重载 提升生产率至新境界

好文原文地址&#xff1a;http://segmentfault.com/a/1190000000354555 本文将首先介绍grunt-markdown插件如何配合HTML模板使用&#xff0c;接着我将介绍如何使用grunt-watch插件将工作效率提升至新层次。如果你不熟悉GruntJS&#xff0c;请先阅读我关于GruntJS的文章。 Githu…

二叉树的创建_大多数人都不会手写创建并遍历二叉树,一航这里帮你终结了

创建二叉树、遍历二叉树、二叉树的最近公共祖先任何疑问、意见、建议请公众号留言或联系qq474356284先序、后序创建二叉树先中后层序遍历二叉树二叉树的最近公共祖先 输入格式&#xff1a;创建二叉树时的输入&#xff1a;如序列&#xff1a;{1 2 -1 -1 3 -1 -1}表示1结点有2,…

zookeeper 密码_阿里资深JAVA架构带你深度剖析dubbo和zookeeper关系

为什么要用dubbo&#xff1f;当网站规模达到了一定的量级的时候&#xff0c;普通的MVC框架已经不能满足我们的需求&#xff0c;于是分布式的服务框架和流动式的架构就凸显出来了。单一应用架构当网站流量很小时&#xff0c;只需一个应用&#xff0c;将所有功能都部署在一起&…

nw.js FrameLess Window下的窗口拖拽与窗口大小控制

nw.js FrameLess Window下的窗口拖拽与窗口大小控制 很多时候&#xff0c;我们觉得系统的Frame框很难看&#xff0c;于是想自定义。 自定义Frame的第一步是在package.config文件中将frame选项设置为false。 { "name": "1", "main": "index.…

linux 文件重命名_如何在 Linux 上重命名一组文件 | Linux 中国

要用单个命令重命名一组文件&#xff0c;请使用 rename 命令。它需要使用正则表达式&#xff0c;并且可以在开始前告诉你会有什么更改。-- Sandra Henry-stocker几十年来&#xff0c;Linux 用户一直使用 mv 命令重命名文件。它很简单&#xff0c;并且能做到你要做的。但有时你需…

oracle插入性能优化,Oracle-insert性能优化

看见朋友导入数据&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速的方法&#xff0c;整理下&#xff01; 向表中插入数据有很多办法,但是方法不同&#xff0c;性能差别很看见朋友导入数据&#xff0c;&#xff0c;花了很长时间都没完成&#xff01;其实有很多快速…

dba_segments和dba_tables的不同

create table tset as select * from dba_objects; select count(*) from tset; select table_name,blocks,empty_blocks from dba_tables where table_name’TSET’; select segment_name,bytes,blocks,extents from dba_segments where segment_name’TSET’; 问题来了&#…

微博air客户端_打磨近十年,接近「完美」的 macOS 第三方微博客户端:Maipo

2020年11月13日&#xff0c;macOS Big Sur正式推送当天&#xff0c;Maipo for 微博也迎来了4.0.0大版本更新。从Weibo for Mac&#xff08;2011年&#xff09;、WeiboX&#xff08;2014年&#xff09;到Maipo&#xff08;2017年&#xff09;&#xff0c;跨度近十年&#xff0c;…

输入框联动查询

目的&#xff1a;类似于百度的搜索联动&#xff0c;输入前面的几个字&#xff0c;查询出可能的结果供用户选择&#xff0c;如下&#xff1a; html部分&#xff1a;在“中”这个输入框下面隐藏一个ul属性&#xff0c;例如: <ul class"am-padding-left-0 uhide" id&…

LoadRunner函数

一、基础函数简介 在VU左边导航栏中&#xff0c;有三个LoadRunner框架函数&#xff0c;分别是vuser_init()、Action()、vuser_end()。这三个函数存在于任何Vuser类型的脚本中。 vuser_init:虚拟用户的初始化函数&#xff0c;一般将用户初始化的操作放在这里&#xff0c;如登录操…

TPLink 备份文件bin文件解析

TPLink 路由器备份文件bin文件 测试路由器 WR885&#xff0c;备份文件加密方式DES&#xff0c;密钥&#xff1a;478DA50BF9E3D2CF linux端&#xff1a; openssl enc -d -des-ecb -nopad -K 478DA50BF9E3D2CF -in config.bin python&#xff1a; python默认没有安装crypto需要自…

linux的文件搜索命令,Linux文件搜索命令find的用法 | 术与道的分享

不管在Windows还是Linux中&#xff0c;最重要的问题不是说你能搜索到这个文件&#xff0c;而是最好少用搜索&#xff0c;应该是你在整个服务器的规划里面&#xff0c;把所以的文件目录规划的很好。就像如果你在家里找衣服&#xff0c;如果不是你乱扔&#xff0c;就不可能花费太…

vue v-if判断数组元素的值_Vue项目上线做的一些基本优化

前言本文主要是做一个Vue性能优化的帖子&#xff0c;做一个参考文档&#xff0c;对以后项目上线做一些集合文档。如果对各位在项目优化时&#xff0c;做一个文档参照。开发过程在开发项目的时候&#xff0c;就要注意项目的一些小技巧&#xff0c;下面我就罗列一些经常用到的优化…

BZOJ 4000: [TJOI2015]棋盘( 状压dp + 矩阵快速幂 )

状压dp, 然后转移都是一样的, 矩阵乘法快速幂就行啦. O(logN*2^(3m)) ---------------------------------------------------------------------------------------------#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define …

linux传文件file,linux文件的传输与压缩快速入门

scp --- 用于远程拷贝文件上传文件scp file userip:/file下载文件scp userip:/file filersync --- 远程同步&#xff0c;速度块&#xff0c;默认会忽略&#xff0c;文件属性&#xff0c;链接文件&#xff0c;设备文件-r --- 同步目录-p --- 同步权限-o --- 同步文件所有人-g --…

delphi 中如果不进行 closehandle 会怎么样_心理学:当你迷茫了,请坚持做三件事,你的未来会越来越好...

我们总是这样激励自己&#xff1a;未来是美好的。但是&#xff0c;生活不可能处处如意&#xff0c;人的一生也难以风平浪静&#xff0c;有巅峰就有低谷&#xff0c;有明朗就有迷茫。或是找不到未来发展的方向&#xff0c;或是事业、生活遭受了重大挫折&#xff0c;我们每个人都…

随笔2 PAT1001.A+B Format (20)

1001.AB Format(20) 题目链接 1001.AB Format (20) C 代码 第一次使用markdown&#xff0c;还不是很习惯&#xff0c;现在努力的在适应它 首先这道题我们很容易就可以读懂题意&#xff0c;就是简单的ab&#xff0c;只不过要求我们在输出sum的时候处理一下数字的格式。那么我的做…

mybatis传递多个参数_深入浅出MyBatis:MyBatis解析和运行原理

原文&#xff1a;https://juejin.im/post/5abcbd946fb9a028d1412efc本篇文章是「深入浅出MyBatis&#xff1a;技术原理与实践」书籍的总结笔记。上一篇介绍了反射和动态代理基础&#xff0c;主要是为本篇文章做个铺垫&#xff0c;反射使配置和灵活性大大提高&#xff0c;可以给…