Flutter のアニメーションシステムは、型付けされたアニメーションオブジェクトに基づいています。
ウィジェットは、現在の値を読み取って状態の変化を聞くことにより、これらのアニメーションをビルド関数に直接組み込むことができます。または、他のウィジェットに渡すより複雑なアニメーションの基礎としてアニメーションを使用することもできます。
Animation
アニメーションシステムの初級のビルディングブロックはAnimationクラスです。
animation(インスタンス)は、アニメーションのライフタイムのなかで変更される特定の値を表します。
アニメーションを実行するほとんどのウィジェットは、パラメーターとしてAnimationオブジェクトを受け取り、そこからアニメーションの現在の値を読み取り、その値の変更をリッスンします。
addListener
animationの値が変更された時、animationは、addListenerによって追加された全てのlistener(リスナー)に(値の変更を)知らせます。
通常、アニメーションをリッスンするStateオブジェクトは、リスナーコールバックでsetStateを呼び出し、アニメーションの新しい値で再構築する必要があることをウィジェットシステムに通知します。
このパターンは非常に一般的であるため、アニメーションの値が変更されたときにウィジェットを再構築するのに役立つ2つのウィジェット、AnimatedWidgetとAnimatedBuilderが用意されています。
最初のAnimatedWidgetは、ステートレスアニメーションウィジェットに最も役立ちます。 AnimatedWidgetを使用するには、サブクラス化してビルド関数を実装するだけです。 2番目のAnimatedBuilderは、より大きなビルド関数の一部としてアニメーションを含めたい、より複雑なウィジェットに役立ちます。 AnimatedBuilderを使用するには、ウィジェットを作成してビルダー関数を渡すだけです。
addStatusListener
アニメーションは、アニメーションが時間の経過とともにどのような状態にあるか示すAnimationStatus(列挙型、enum)も提供します。
アニメーションの進捗状況を表す列挙型AnimationStatusが定義されている。
AnimationStatusのケースは
- AnimationStatus.dismissed : アニメーションの開始時点の状態
- AnimationStatus.foward : アニメーションが開始時点から終了時点に向かって進んでいる状態
- AnimationStatus.completed : アニメーションが終了時点で停止している状態
- AnimationStatus.reverse : アニメーションが終了時点から開始時点に向かって逆走している状態
以上の四種類。
アニメーションの進行に伴ってアニメーションのステータスが変更するたびに、アニメーションはaddStatusListenerメソッドによって追加されたすべてのリスナーに(ステータスの変更を)通知します。 通常、アニメーションは
dismissedステータス
で始まります。このステータスはアニメーションの範囲の開始時点を表します。
たとえば、0.0から1.0に進行するアニメーションでは、値が0.0の状態がdismissedです。
アニメーションは順方向(0.0から1.0)または逆方向(1.0から0.0)に実行される可能性があります。 最終的に、アニメーションが範囲の終わり(1.0)に達すると、アニメーションは
completedステータス…