【自学Flutter】31 Hero 动画的使用

31 Hero 动画的使用

1.源代码
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("头像"),),
        body: Center(
            child: Builder(builder: (context){
              return Ink(
                child: InkWell(
                  child: Hero(
                    tag: "same",
                    child: ClipOval(
                      child: Image.network("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2615855213,1306490928&fm=26&gp=0.jpg", width: 100.0,),
                    ),
                  ),
                  onTap: () {
                    Navigator.push(context, PageRouteBuilder(
                        pageBuilder: (BuildContext context, Animation animation,
                            Animation secondaryAnimation) {
                          return FadeTransition(
                            opacity: animation,
                            child: Second(),
                          );
                        })
                    );
                  },
                ),
              );
            }),
        )
      ),
    );
  }
}

class Second extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('第二个页面'),
      ),
      body: Center(
        child: Hero(
          tag: "same",
          child: Image.network("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2615855213,1306490928&fm=26&gp=0.jpg"),
        ),
      )
    );
  }
}

2.解释源代码
import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(title: Text("头像"),),
        body: Center(
            child: Builder(builder: (context){
              //使用InkWell无水波纹效果
              return Ink(
                child: InkWell(
                  child: Hero(
                    //唯一标记,前后两个路由页Hero的tag必须相同
                    tag: "same", 
                    child: ClipOval(
                      child: Image.network("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2615855213,1306490928&fm=26&gp=0.jpg", width: 100.0,),
                    ),
                  ),
                  onTap: () {
                    //打开Second路由
                    Navigator.push(context, PageRouteBuilder(
                        pageBuilder: (BuildContext context, Animation animation,
                            Animation secondaryAnimation) {
                          return FadeTransition(
                            opacity: animation,
                            child: Second(),
                          );
                        })
                    );
                  },
                ),
              );
            }),
        )
      ),
    );
  }
}

class Second extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('第二个页面'),
      ),
      body: Center(
        child: Hero(
          //唯一标记,前后两个路由页Hero的tag必须相同
          tag: "same", 
          child: Image.network("https://ss1.bdstatic.com/70cFuXSh_Q1YnxGkpoWK1HF6hhy/it/u=2615855213,1306490928&fm=26&gp=0.jpg"),
        ),
      )
    );
  }
}

3.效果图

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值