美文网首页Flutter
Flutter(三十七)Hero动画

Flutter(三十七)Hero动画

作者: 天色将变 | 来源:发表于2019-07-20 16:34 被阅读0次
特点

页面A有个圆形头像,页面B也有个圆形头像,头像图片是同一个。从A跳转到B时,一般都是硬性跳转,两个头像之间没有任何关系。而Hero的作用是:在跳转过程中,实现从A的头像过渡到B的头像的效果。

关键点
  • 两个页面的头像都需要用Hero包裹住。
  • 两个Hero的tag要一致。

如:
两个 页面:


image.png
image.png

PageA:

import 'package:flutter/material.dart';

import 'HeroAnimationRouteB.dart';

class HeroAnimationRouteTest extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'RaisedButton',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'RaisedButton'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("PageA"),
      ),
      body: Container(
        alignment: Alignment.topCenter,
        child: Hero(
            tag: "avatar",
            child: Image.asset(
              "images/avatar3.jpg",
              width: 150,
            )),
      ),
      floatingActionButton: FloatingActionButton(
        child: Icon(Icons.arrow_right),
        onPressed: () {
          Navigator.push(context, PageRouteBuilder(pageBuilder:
              (BuildContext context, Animation animation,
                  Animation secondaryAnimation) {
            return HeroAnimationRouteB();
          }));
        },
      ),
    );
  }
}

PageB

import 'package:flutter/material.dart';
class HeroAnimationRouteB extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'PageB',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'RaisedButton'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  @override
  Widget build(BuildContext context) {
    return Center(
      child: Hero(
        tag: "avatar", //唯一标记,前后两个路由页Hero的tag必须相同
        child: Image.asset("images/avatar3.jpg",width: 300,),
      ),
    );
  }
}
欢迎关注我的公众号:Flutter和Dart开发实践
让我们共同学习进步,It is never too late to learn!
image.png

相关文章

  • Flutter(三十七)Hero动画

    特点 页面A有个圆形头像,页面B也有个圆形头像,头像图片是同一个。从A跳转到B时,一般都是硬性跳转,两个头像之间没...

  • flutter九宫格看图

    flutter九宫格图片 利用GridView实现布局,用Hero动画进行展示

  • Flutter动画 4 - Hero动画

    概述 花瓣App的转场动画,这么多年还是没变,还是图片转场动画. 网上有很多人实现过相关效果,先前骚栋18年在做i...

  • Flutter-Hero动画

    详细介绍 你会学到什么: Hero指的是可以在路由(页面)之间“飞行”的widget。 使用Flutter的Her...

  • flutter之Hero动画

    Hero指的是可以在路由(页面)之间“飞行”的widget。使用Flutter的Hero widget创建hero...

  • Flutter Hero动画案例

    Hero 指的是可以在路由(页面)之间“飞行”的 widget,简单来说 Hero 动画就是在路由切换时,有一个共...

  • Flutter 动画篇——Hero

    Hero 动画使用方法 我们先来看一下效果rt: Hero动画实现了元素共享功能,简单来说: Hero动画就是在路...

  • Flutter Hero/FadeTransition动画

    图片列表 --> 图片详情的 Hero动画 图片列表页 图片详情页

  • Flutter中的Hero动画

    实现效果: 主页面列表页 详情页使用Hero包裹,并且要保持tag与父页面一致

  • flutter 开发问题汇总

    Flutter踩坑整理 1、Hero动画 Text 出现黄色条纹 以及红色字体的问题 字体变化需要设置好TextS...

网友评论

    本文标题:Flutter(三十七)Hero动画

    本文链接:https://www.haomeiwen.com/subject/qrsulctx.html