Flutterの配置を極めよう!AxisAlignmentマスターガイド 📏
はじめに 👋
部品を並べるだけじゃ物足りない!もっとキレイに配置したい!
そんなときに使うのがMainAxisAlignment
とCrossAxisAlignment
です。
スペースの使い方を学ぼう 🎯
1. spaceAround:みんなに余白をプレゼント 🎁
Row(
mainAxisAlignment: MainAxisAlignment.spaceAround,
children: <Widget>[
Container(color: Colors.blue, width: 50, height: 50),
Container(color: Colors.red, width: 50, height: 50),
Container(color: Colors.green, width: 50, height: 50),
],
)
効果:
2. spaceBetween:端っこピッタリ! 📌
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: <Widget>[
Container(color: Colors.blue, width: 50, height: 50),
Container(color: Colors.red, width: 50, height: 50),
Container(color: Colors.green, width: 50, height: 50),
],
)
効果:
3. spaceEvenly:完全均等配置! ⚖️
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: <Widget>[
Container(color: Colors.blue, width: 50, height: 50),
Container(color: Colors.red, width: 50, height: 50),
Container(color: Colors.green, width: 50, height: 50),
],
)
効果:
サイズの調整:MainAxisSize 📏
最大サイズ(max)
Row(
mainAxisSize: MainAxisSize.max,
mainAxisAlignment: MainAxisAlignment.center,
children: [/*...*/],
)
最小サイズ(min)
Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.center,
children: [/*...*/],
)
要素を均等に広げる:Expanded 🌈
Row(
children: <Widget>[
Expanded(
child: Container(color: Colors.blue),
),
Expanded(
flex: 2, // 2倍の幅!
child: Container(color: Colors.red),
),
Expanded(
child: Container(color: Colors.green),
),
],
)
効果:
特別な配置:Stretch & Baseline 📐
Stretch(引き伸ばし)
Row(
crossAxisAlignment: CrossAxisAlignment.stretch,
children: <Widget>[
Container(color: Colors.blue, width: 100),
Container(color: Colors.red, width: 100),
],
)
効果:要素が縦いっぱいに伸びる!
Baseline(文字揃え)
Row(
crossAxisAlignment: CrossAxisAlignment.baseline,
textBaseline: TextBaseline.alphabetic,
children: <Widget>[
Text('大きい文字', style: TextStyle(fontSize: 30)),
Text('小さい文字', style: TextStyle(fontSize: 15)),
],
)
効果:文字の基準線が揃う!
方向の制御 🔄
TextDirection(横方向)
Row(
textDirection: TextDirection.rtl, // 右から左
children: [/*...*/],
)
-
ltr
: 左から右(普通) -
rtl
: 右から左(逆向き)
VerticalDirection(縦方向)
Column(
verticalDirection: VerticalDirection.up, // 下から上
children: [/*...*/],
)
-
down
: 上から下(普通) -
up
: 下から上(逆向き)
やってみよう! 💪
- 3つの箱を均等に配置
Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Container(color: Colors.blue, width: 50, height: 50),
Container(color: Colors.red, width: 50, height: 50),
Container(color: Colors.green, width: 50, height: 50),
],
)
- 真ん中の要素を2倍の大きさに
Row(
children: [
Expanded(child: Container(color: Colors.blue)),
Expanded(flex: 2, child: Container(color: Colors.red)),
Expanded(child: Container(color: Colors.green)),
],
)
困ったときは? 🆘
- 要素が見えない
→ MainAxisSizeを確認 - 配置がおかしい
→ CrossAxisAlignmentを確認 - スペースが思い通りじゃない
→ MainAxisAlignmentの種類を変えてみる
これで君もレイアウトの達人!
素敵なアプリを作ってみよう! 🎨