【Flutter】Redux使用時にStatelessWidgetをアニメーションさせたい時の方法

  • このエントリーをはてなブックマークに追加

FlutterでReduxアーキテクチャパターンを採用している場合、StatelessWidgetでの構築がメインになると思います。

ウィジェットをアニメーションさせたい場合が必ず出てくると思いますが、アニメーションは基本的にStatefulWidgetで行う事が前提となっているようで私は悩みました。

 

公式のドキュメントをみてみると、Statelessでアニメーションをさせる例がありますが、パラメータとしてStatefulWidgetで作成したAnimationControllerを持っている為、StatefulWidgetから呼び出す前提の方法になります。

 

この記事では、完全StatelessWidgetだけでウィジェットにアニメーションを持たせる方法を紹介したいと思います。

 

FlutterのReduxについてはこちらの記事でまとめています。

ここから先の解説はこの記事に沿ってReduxを導入した前提で進めていきますので一度ご覧ください。

FlutterにReduxアーキテクチャを実装させる

アニメーションを持たせる手順

今回紹介する方法はこちらの記事を参考にしました。圧倒的感謝!

How to create animations in Flutter with Redux?

 

①アニメーションを表示させるStatelessWidgetとアニメーションさせるWidget部品を作成

今回は例として画面にツールバーを表示・非表示させるウィジェットを作ります。

画面をタップすると画面下にツールバーが表示します。

もう一度画面をタップするとツールバーが閉じます。

ReduxのStoreConnectorによってStatelessWidgetでも動的に状態を変更させる事ができますが、これだけだとまだアニメーションが設定されていないので、パッパッと瞬時にツールバーが出し入れされてしまいます。

 

②Widget部品にアニメーションを追加する

アニメーションさせる手段として「AnimationContainer」を利用します。

AnimationContainerについては以下の動画と記事が参考になります。

https://flutter.ctrnost.com/basic/animation/animatedcontainer/

 

先ほどのソースのツールバー作成処理に変更を加えます。

表示フラグがFalseの場合ツールバーの高さを0にし、Trueの場合に本来の高さを持たせるようにしています。

高さが切り替わる瞬間にスライドイン・アウトアニメーション(でいいのかな?)を付与しています。

 

StatelessWidgetだけでもアニメーション付けられるんですね!

けっこう焦りました笑

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。

コメントを残す

*