【Flutter 2.2.3】TransformやRotatedBoxを使ってIconなどのウィジェットを回転させる

はじめに

こんにちは。Flutterで標準で用意されているIconは色々あります。アイコンの一覧はこちら(api.flutter.dev)
アプリで利用するアイコンを標準のアイコンで済ませる事ができれば、画像アセットを入れなくて済むので楽ちんです。しかし矢印の向きを変えたいなど、ちょっとした回転をかけたいタミングがありましたので書いてみました。参考になれば幸いです。

Transform ウィジェットを使う

まず、回転の角度計算のためにmathを利用するので、Flutterコード内でpi を利用するので以下をインポートします。

そして、回転させたいWidgetをTransform.rotateで囲みます。このサンプルでは、Iconウィジェットを45度右方向に回転しています。

RotatedBox ウィジェットを使う

回転させたいWidgetをRotatedBoxで囲みます。同じく、Iconウィジェットを90度右方向に回転しています。quarterTurnsで何回転させるかを指定するのですが、90度単位でしか調整できないようです。

サンプルコード

サンプルとして、1つのStatelessWidgetを用意しています。

TransformとRotatedBoxの違いについて

Transformは自由角度、RotatedBoxは90度単位で回転できることは分かりましたが、回転させることについて、他に何が違うのでしょうか?
それは、ウィジェットを回転させる際のレイアウト処理に違いがあるようです。
以下はそれぞれ200×100サイズの黒色の親Containerに、150×50の色付きの子Containerを乗せて色付きの子Containerを回転させた場合。

Transform

Transformは、ウィジェットの描画部分(Layer)を回転させるイメージで、表示領域の親Containerが回転していなくとも表示されています。

RotatedBox

RotatedBoxは、ウィジェットの回転をアプリ全体のレイアウト計算よりも前に行うイメージで、子が回転したことで、親よりも高さが高くなり、表示領域を超えて表示されなくなっています。

おわりに

筆者は、アイコンを回転させる目的でTransformを利用しました。Transformの方が回転を自由に決められるし、見た目のみを回転できる感じだったので使いやすかったです。一方でRotatedBoxを利用しなければならない時はどんな時なのか、少し疑問が残りました。
見て頂いて、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です