[英]How can I use animation/animation not running during a Hero transition in 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(...),
);
事實證明, 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,
);
},
正如馬特所說,默認行為只發出開始和結束值,所以我們應該聽動畫以獲得完整的可動畫小部件。 下面是一個例子:
Hero(
tag: "YourHeroTag",
flightShuttleBuilder: (BuildContext flightContext,
Animation<double> animation,
HeroFlightDirection flightDirection,
BuildContext fromHeroContext,
BuildContext toHeroContext,) {
return AnimatedBuilder(
animation: animation,
builder: (context, value) {
return Container(
color: Color.lerp(Colors.white, Colors.black87, animation.value),
);
},
);
},
child: Material( // Wrap in Material to prevent missing theme, mediaquery, ... features....
// ...
)
)
建議包裹在Material
小部件中以防止意外丟失樣式。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.