🎬
AnimationControllerのreverseメソッド使用時の注意点
AnimationControllerのreverseメソッドについて
Flutterでアニメーションを実装する際、AnimationController
のreverse()
メソッドを使用する場合の重要な注意点について解説します。
基本的な動作
FlutterのAnimationControllerでのアニメーションには以下の2つの再生方向があります:
- 通常再生:
forward()
メソッド - 逆再生:
reverse()
メソッド
注意点:Curveの逆再生
reverse()
メソッドを使用する際の重要な注意点として、アニメーションのCurveも逆再生されるという特徴があります。
問題の例
以下のようなCurvedAnimation
を使用した場合:
final CurvedAnimation curvedAnimation = CurvedAnimation(
parent: animationController,
curve: Curves.easeOutCirc,
);
このコードでは、reverse()
実行時にeaseOutCirc
のカーブも逆再生されてしまいます。
この動作は、デザイン要件によっては望ましくない場合があります。例えば、逆再生時も通常再生と同じイージングを適用したい場合などです。
解決方法:reverseCurveの適切な設定
この問題はCurvedAnimation
のreverseCurve
プロパティを使用して解決できます。
ただし、単純に同じCurveを指定するだけでは不十分です。reverseCurve
に指定したCurveも逆再生されてしまいます。
正しい実装方法
Curve
クラスのflipped
ゲッターを使用することで、この問題を解決できます:
final CurvedAnimation curvedAnimation = CurvedAnimation(
parent: animationController,
curve: Curves.easeOutCirc,
reverseCurve: Curves.easeOutCirc.flipped, // flippedを使用して逆転を相殺
);
flipped
は指定したCurveを予め逆転させたものを返します。これにより、reverse()
実行時の自動的な逆転と相殺され、結果として通常再生時と同じカーブでアニメーションが実行されます。
こちらからアニメーションを実際に動かして確認することができます
まとめ
-
AnimationController.reverse()
使用時は、Curveも自動的に逆再生される - 逆再生時も通常再生と同じカーブを維持したい場合は、
reverseCurve
にCurve.flipped
を指定する - この設定により、一貫性のあるアニメーション体験を提供できる
Discussion