micomia株式会社の井上です。今回はStackについて解説していきます。
初心者にもわかりやすく解説していくのでぜひご一読ください。
1. Stackとは?
Stackとは、日本語だと何かを積み重ねている状態を指します。以前の記事でも紹介したように、ColumnやRowだと縦か横に並べることしかできませんが、Stackがあると同じ位置に複数の要素を重ねて表示させたりすることができます。
ですが、Stackを多用しすぎるとデザインが崩れやすくなってしまうので基本的にはColumnやRowを使用して実装することをお勧めします。ColumnとRowについては別の記事で詳しく解説しているのでそちらも是非ご覧ください。
Columnとは?|初心者向けのFlutterFlow徹底解説Rowとは?|初心者向けのFlutterFlow徹底解説
2. Stackの実装方法
StackはColumnやRowと同じようにWidgetとして実装できます。

Stackだけで何かできるわけではないので、子要素としてまずはButtonを追加してみます。

追加できました。ColumnやRowだと、ここから上下に動かすか、左右に動かすかしかできませんがStackは自由に動かすことができます。
動かす前に、まずStackのWidthとHeightを指定します。

右側のProperties Panelで今回はWidthとHeightをそれぞれ400に設定してみました。
この状態でButtonのWidgetを選択して動かしてみます。


このように、上下左右自由に動かすことができました。これがStackの特徴的な機能です。
基本的にはColumnとRowで位置を調節する方がデザイン崩れの恐れがなくて良いのですが、どうしてもColumnとRowだけでは実装できない場合であったり、いくつかのWidgetを重ねて実装してConditional Visibilityを使うなどで実装したい時にはもってこいのWidgetです。
3. なぜStackを多用するのは良くないのか
ここまで何度か「極力ColumnとRowで実装する方が良い」というようなことを言ってきましたが、なぜなのでしょうか?
実例をもとに、どんなデザイン崩れが起きるのか解説していきます。
例えば、このようにStackを使用してButtonの真横にTextがあるデザインを作ったとします。

このままの状態だと何ら問題ないのですが、アプリは絶対に同じサイズの端末で使用されるとは限りません。タブレット端末のサイズでこの画面を開いた状態を見てみると、

スマホサイズでは真ん中あたりにあったのにこのように左端に寄ってしまっています。
このようなデザインの崩れが頻発しがちなのでStackを多用することはあまりおすすめできません。
4. まとめ
今回はStackについて解説していきました。Stackは自由自在にWidgetを動かすことができて一見すごく便利なものに見えますが、それが結果的にデザインの崩れを引き起こしてしまうので、極力StackではなくColumnとRowで実装し、必要な時はうまく活用できるようにしましょう!
本記事の内容を動画で見たい方は以下をご覧ください。


.webp%3Falt%3Dmedia%26token%3D44d272c7-1e7a-46d7-86de-dc2bec67a3e4&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbc168691-5281-4eab-8c08-ed7fe5624582&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8f9453ad-d017-4640-8b7b-4c5d55391f46&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D904686c4-e792-4c6a-b5ce-e7648fd53404&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8db330f1-3fab-48b7-8dcf-dd8c6f47836a&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Ddef3da75-721c-4e42-8cd8-f06795bb771f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8fec979d-a6dc-4d03-960f-330f997108a7&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D6bddee16-071d-41fd-8a4b-f2026bcff617&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D9ba70870-6b39-4eab-b9c2-e126ef08cb09&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D8a795f56-e8a9-4be1-937b-65c1a89922b3&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Dbe65d589-2f4c-4ad8-82a1-7ddb73af2620&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0aa104f5-928b-4ddf-a535-d8574b7667a8&w=3840&q=75)

.webp%3Falt%3Dmedia%26token%3D45131e3d-4777-421a-a556-bcc8d462dfe1&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D09daf923-4a62-4c31-af6f-f3d99a9f635b&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D0e63e93b-1558-48a5-8b24-d1ae7cfa487f&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D240fcc34-b7e7-4c86-b294-fdfc2a66db21&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3Db288c602-2902-4f93-8eca-903ec8f86440&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D6040f2d9-1a54-476c-9999-5e0aeb8e8a74&w=3840&q=75)
.webp%3Falt%3Dmedia%26token%3D3c4b1b17-9fec-405e-9e02-8d34961b6f16&w=3840&q=75)