Flutter共享元素转场动画:让某个元素在两个页面之间保持一致?
嗨,这里是甜瓜看代码。今天,我们来聊聊共享元素转场动画。你是否曾经在应用中遇到这样的情况?当你从一个页面切换到另一个页面时,想要实现平滑而华丽的过渡效果,让某个元素在两个页面之间保持一致?如果是这样,那本文可能对你会有所帮助,我们开始吧!

什么是共享元素转场动画?
共享元素转场动画是一种动画效果,它允许我们在两个页面之间共享一个元素,并在切换过程中保持该元素的连续性。换句话说,当我们从一个页面跳转到另一个页面时,选定的元素会在两个页面之间进行平滑的过渡动画,给用户带来无缝的视觉体验。
添加所需依赖
在项目目录中打开pubspec.yaml
文件,并添加flutter_staggered_animations
和animated_text_kit
依赖。这些依赖将帮助我们实现动画效果。
dependencies:
flutter:
sdk: flutter
flutter_staggered_animations: ^1.1.1
animated_text_kit: ^4.2.2
创建两个页面
在pages
文件夹中创建两个新文件:home_page.dart
和details_page.dart
。
home_page.dart
在home_page.dart
中,我们将创建一个简单的页面,其中包含一个共享的元素。
import 'package:flutter/material.dart';
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Shared Element Transition'),
),
body: GestureDetector(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => DetailsPage(),
settings: RouteSettings(
arguments: Hero(
tag: 'avatar',
child: CircleAvatar(
backgroundImage: AssetImage('assets/cat_1.jpg'),
radius: 50,
),
),
),
));
},
child: Hero(
tag: 'avatar',
child: CircleAvatar(
foregroundImage: AssetImage('assets/cat.jpg'),
radius: 50,
),
),
),
);
}
}
在这段代码中,我们创建了一个HomePage
小部件,其中包含一个CircleAvatar
小部件,它代表了我们要共享的元素,即头像。我们将该元素包装在一个Hero
小部件中,为它设置了一个标签tag
,以便在切换页面时进行匹配。
同时,我们为GestureDetector
小部件添加了一个onTap
回调,用于导航到DetailsPage
页面。在导航过程中,我们将Hero
小部件作为参数传递给RouteSettings
,以便在目标页面中匹配共享元素。
details_page.dart
接下来,我们来创建DetailsPage
页面,该页面将展示共享的元素,并实现共享元素转场动画。
import 'package:flutter/material.dart';
class DetailsPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
final hero = ModalRoute.of(context)!.settings.arguments as Hero;
return Scaffold(
appBar: AppBar(
title: Text('Details'),
),
body: Container(
margin: EdgeInsets.only(top: 300,left: 188),
child: GestureDetector(
onTap: () {
Navigator.pop(context);
},
child: Hero(
tag: hero.tag,
child: hero.child,
),
),
),
);
}
}
在这里,我们创建了一个DetailsPage
小部件,其中包含了一个AppBar
和一个居中的GestureDetector
小部件。在GestureDetector
小部件中,我们使用了与HomePage
页面中相同的Hero
小部件,以便匹配共享元素。
当应用程序启动后,你应该能够看到一个包含头像的首页。点击头像,你将看到一个平滑的过渡动画,将头像展示在新的页面上。点击新页面上的头像,将会返回到首页。
总结
通过使用Hero
小部件,我们能够在页面切换时保持元素的连续性,为用户提供更加流畅的过渡效果。
希望本篇文章能帮助到你。这里是甜瓜看代码,期待你的关注!
转载自:https://juejin.cn/post/7238779568479191098