Mat*_*att 5 animation widget dart flutter
我有一张描绘产品的卡片网格。当点击一张卡片时,我希望它翻转(围绕 Y 轴)以显示显示细节的“另一面”,同时增长以填充屏幕。
我已经成功地使翻转动画正常工作,但我无法弄清楚如何让它在英雄过渡期间运行。从这篇文章来看,我似乎需要利用flightShuttleBuilder才能为叠加层设置动画,但我的动画在过渡期间不会运行:
return Hero(
tag: 'test',
flightShuttleBuilder: (
BuildContext flightContext,
Animation<double> animation,
HeroFlightDirection flightDirection,
BuildContext fromHeroContext,
BuildContext toHeroContext,
) {
final Hero toHero = toHeroContext.widget;
return Transform(
transform: Matrix4.identity()..rotateY(-pi * animation.value),
alignment: FractionalOffset.center,
child: toHero,
);
},
child: Card(...),
);
Run Code Online (Sandbox Code Playgroud)
事实证明,flightShuttleBuilder仅在过渡的开始和结束时发出值,而不是在整个动画中发出值。从GitHub 上的这个问题来看,这显然是预期的行为。
解决方法是创建您自己的过渡,该过渡从AnimatedWidget; 它将正常发出值并可用于flightShuttleBuilder:
class FlipcardTransition extends AnimatedWidget {
final Animation<double> flipAnim;
final Widget child;
FlipcardTransition({@required this.flipAnim, @required this.child})
: assert(flipAnim != null),
assert(child != null),
super(listenable: flipAnim);
@override
Widget build(BuildContext context) {
return Transform(
transform: Matrix4.identity()
..rotateY(-pi * flipAnim.value),
alignment: FractionalOffset.center,
child: child,
);
}
}
...
flightShuttleBuilder: (BuildContext flightContext,
Animation<double> animation,
HeroFlightDirection flightDirection,
BuildContext fromHeroContext,
BuildContext toHeroContext,) {
final Hero toHero = toHeroContext.widget;
return FlipcardTransition(
flipAnim: animation,
child: toHero,
);
},
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2549 次 |
| 最近记录: |