Hero 是 Flutter 提供的页面转场动画的一种。github
在进行页面转场时,它可以共享页面间视图元素。bash
经过 Hero,能够很容易的实现图中的动画效果。app
接下来看看如何实现的吧。ide
1.跳转位置添加 Hero,包裹须要共享的 Widgetpost
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
showPhoto(context);
},
child: Hero(
key: Key(photo.assetName),
// tag 是关键
tag: photo.tag,
child: Image.asset(
photo.assetName,
package: photo.assetPackage,
fit: BoxFit.cover,
)));
}
复制代码
2.目标页的共享元素也使用 Hero 包裹动画
Scaffold(
appBar: AppBar(title: Text('Hero PageB')),
body: SizedBox.expand(
child: Hero(
// tag 是关键
tag: photo.tag,
child: ClipRect(
child: Image.asset(
photo.assetName,
package: photo.assetPackage,
fit: BoxFit.cover,
),
),
),
),
);
复制代码
实现方式很简单,就是使用 Hero 包裹两个页面间的共享元素。ui
其中关键就是共享元素的 tag
必须相同。spa
剩余的处理 Flutter 已经帮开发者完成了。3d
快本身动手试试吧。