推广

Flutter Hero控件实现共享元素转换动画

iseeyu2年前 (2024-02-21)推广119

效果图

其实Flutter中官方给我们提供了非常好用的控件:Hero。

中文网给出的定义是:Hero指的是可以在路由(页面)之间“飞行”的widget。将 hero从一个路由飞到另一个路由。

hero 动画代码应该具有以下结构:

1.定义一个起始 hero widget,称为”源 hero”。 hero 指定其图形表示(通常是图片)和识别标记,并且位于源路由定义的当前显示的 widget树中。

2.定义一个结束的 hero widget,称为”目标 hero”。这位 hero 也指定了它的图形表示,以及与源 hero 相同的标记。重要的是两个 hero widget都使用相同的标签创建,通常是代表底层数据的对象。为了获得最佳效果, hero 应该有几乎相同的 widget树。

3.创建一个包含目标 hero 的路由。目标路由定义了动画结束时的 widget树。

4.通过导航器将目标路由入栈来触发动画。Navigator推送和弹出操作会为每对 hero 配对,并在源路由和目标路由中使用匹配的标签触发 hero 动画。

5.Flutter计算从起点到终点对 hero 界限进行动画处理的补间(生成每一帧大小和位置),并在叠加层中执行动画。

根据要求及定义就可以直接撸代码了,很简单:

首先是第一个界面:

Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            InkWell(
              onTap: (){
                Navigator.push(context, MaterialPageRoute(builder: (context) {
                  return SecondHeroPage(tag: "tag",imageUrl: imageUrl,);
                }));
              },
              child: Hero(
                  tag: "tag",
                  child: Image.network(
                    imageUrl,
                    width: 200,
                    height: 200,
                  )),
            ),
            Text("点击图片跳转")
          ],
        ),
      ),
    );
  }

第二个界面

Widget build(BuildContext context) {
    return Scaffold(
      body: Column(
        children: <Widget>[
          InkWell(
            onTap: (){
              Navigator.of(context).pop();//这里pop后也是有动画的
            },
            child: Hero(
                tag: widget.tag,
                child: Image.network(
                  widget.imageUrl,
                  width: double.infinity,
                  height: 500,
                  fit: BoxFit.fill,
                )),
          ),
          Text("点击图片返回")
        ],
      ),
    );
  }

注意这里的tag一定要和第一个界面Hero中的tag一致
总的来说,这个效果实现起来非常简单的,但是用到实际项目中呈现出的用户体验会非常好!
代码地址

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/57450.html

相关文章

SEO优化为什么与数据分析有联系剖析数据找准优化方向。

SEO优化为什么与数据分析有联系剖析数据找准优化方向。

做查找引擎优化也好,转查找引擎优化数据剖析也罢,假如自身具有杰出的作业技能,都能在各自的细分范畴获得优异成绩。 就经历来看,查找引擎优化与数据剖析是密不可分的。查找引擎优化是一个进程,是经过优化办法将关键词排名提高的一个动态进程,数据剖析是一个效果,经过数据剖析,核对查找引擎优化作业的成效,发现查...

SEO文章该怎么写才容易被百度收录?(怎么才能让百度收录网站)

SEO文章该怎么写才容易被百度收录?(怎么才能让百度收录网站)

原创,1500字,植入关键词,一天写过15篇飘过 结合个人的经验来看,seo文章怎么写才容易被百度收录有以下几点建议: 一、软文标题要让百度容易收录一篇软文要发挥销售力,必须首先要被百度收录,被百度收录,客户才能在搜索结果中找到和点击阅读。尽管百度对文章收录有很多因素影响,但一个好的标题会促进百...

安伟任郑州市委书记

极目新闻记者 胡莉据河南日报1月21日消息,河南省委决定:安伟同志任中共郑州市委委员、常委、书记。安伟曾任周口市委书记。安伟出生于1966年,早年他长期在河南省委工作,曾任:省委政策研究室副主任,省委副秘书长,省委农村工作办公室常务副主任(正厅级)等职。安伟(资料图)曾会见...

怎样互联网营销更合理呢。

怎样互联网营销更合理呢。

随之信息科技的健全,互联网已变成衣食住行的必须品,愿意在互联网的浪潮中占有优点影响力,还要持续的升级营销方式,互联网营销应时而生。许多人想要知道怎样互联网营销最合理,怎么才能变成公司必须的高薪职位互联网营销优秀人才,且看小编的剖析。 互联网营销是根据互联网技术来保持营销推广,就现阶段关键分成四...

我来分享网站用户体验度需要从哪些方面做。

我来分享网站用户体验度需要从哪些方面做。

互联网的发展,让越来越多的企业已经注重企业网站的力量,尤其是营销型网站,在网站的运营以及网站体验度方面,需要更加注重。网站托管公司小编这里提到,想要发挥网站真正的价值,必须提升网站的用户体验度,那么网站用户体验度需要从做?下面小编为大家做了简单的叙述。 1、网站速度、稳定性 当你...

我来分享怎样优化网站列表页文章页。

我来分享怎样优化网站列表页文章页。

一般企业网站seo优化都是首页为主,设置上几个热门,那么,怎样优化网站页文章页,下面小编来为大家分享一些技巧。 网站列表页 一、这个时候列表页面是网站的第二个重要的页面,首页是第一的,列表页的关键词变化较大,这个时候注意的就是关键词的密度。 二、列表页设置一些流量大关键词,列表页和其他页面相比...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片