【Flutter】mainAxisAlignmentとcrossAxisAlignmentを理解する

mainAxisAlignment&crossAxisAlignment

Flutterでレイアウトを組み立てる時に、頻繁に利用することになる「mainAxisAlignment」と「crossAxisAlignment」プロパティ。

当記事では、この2つのプロパティの使い方を解説していきます。

目次

【事前知識】「Column」&「Row」ウィジェットについて

まずはAxisAlignmentを理解するにあたって、理解しておかなければならないColumnとRowウィジェットについて見ていきましょう。

Column&Rowウィジェットを簡単に説明すると、行と列を制御するためのウィジェットです。

Columnウィジェットはレイアウトを組む際、「縦方向」にウィジェットを並べたいときに利用し、Rowウィジェットは「横方向」にウィジェットを並べたいときに利用します。

ウィジェット役割
Column「縦方向」にウィジェットを並べたいときに使う
Row「横方向」にウィジェットを並べたいときに使う
Column&Rowウィジェットの役割

Columnウィジェットの使用例

Columnウィジェットを使った場合
@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DEMO'),
      ),
      body: Container(
        color: Colors.grey,
        child: Column( // Columnウィジェットを利用
          children: [
            myContainer(color: Colors.blue),
            myContainer(color: Colors.orange),
            myContainer(color: Colors.red),
          ],
        ),
      ),
    );
  }
}

Widget myContainer({double size = 80, Color color}) {
  return Container(
    color: color,
    width: size,
    height: size,
    margin: EdgeInsets.all(16),
  );
}

Rowウィジェットの使用例

Rowウィジェットを使った場合
@override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DEMO'),
      ),
      body: Container(
        color: Colors.grey,
        child: Row( // Rowウィジェットを利用
          children: [
            myContainer(color: Colors.blue),
            myContainer(color: Colors.orange),
            myContainer(color: Colors.red),
          ],
        ),
      ),
    );
  }
}

Widget myContainer({double size = 80, Color color}) {
  return Container(
    color: color,
    width: size,
    height: size,
    margin: EdgeInsets.all(16),
  );
}

mainAxisAlignmentとcrossAxisAlignmentの使い方

mainAxisAlignmentとcrossAxisAlignment、これらのプロパティはColumn及びRowウィジェットで使うことができます。

Column・Rowウィジェットが行と列を制御するためのウィジェットだったのに対し、AxisAlignmentは子ウィジェットを指定位置に配置するためのプロパティです。

ユウマ

CSSが分かる方であれば、Flexboxで利用する「justify-content」と「align-items」プロパティをイメージしていただけると、非常に理解しやすくなりますよ。

mainAxisAlignmentとcrossAxisAlignmentの早見表

AxisAlignmentプロパティは、Column・Rowウィジェットのどちらを使うかによって、挙動が変わってきます。

具体的な挙動を、下記に早見表としてまとめましたのでご覧下さい。

mainAxisAlignmentColumn(上下)Row(左右)
MainAxisAlignment.start開始地点(上)に配置開始地点(左)に配置
MainAxisAlignment.center上下中央に配置左右中央に配置
MainAxisAlignment.end終了地点(下)に配置終了地点(右)に配置
MainAxisAlignment.spaceEvenly上下の余白含め均等配置左右の余白含め均等配置
MainAxisAlignment.spaceBetween上下の余白含めず均等配置左右の余白含めず均等配置
MainAxisAlignment.spaceAround上下の均等配置(上下余白はウィジェト間余白の半分のサイズ)左右の均等配置(左右余白はウィジェト間余白の半分のサイズ)
crossAxisAlignmentColumn(上下)Row(左右)
CrossAxisAlignment.start開始地点(左)に配置開始地点(上)に配置
CrossAxisAlignment.center左右中央に配置上下中央に配置
CrossAxisAlignment.end終了地点(右)に配置終了地点(下)に配置
MainAxisAlignment.stretchウィジェットを左右幅いっぱいに伸ばすウィジェットを上下幅いっぱいに伸ばす
MainAxisAlignment.baseline大きさの違う文字や図形を揃えて並べる大きさの違う文字や図形を揃えて並べる

上記の表を見ていただけると分かる通り、mainAxisAlignmentプロパティを使う場合、Columnなら上下方向に、Rowなら左右方向にウィジェットの配置位置を指定していることが分かります。

そしてcrossAxisAlignmentプロパティでは、プロパティ名に「クロス」と名の付く通り、Column・Rowウィジェットのそれぞれ交差する方向に対して配置位置を指定できます。

つまり、Columnウィジェットであれば「横方向」に、Rowウィジェットであれば「縦方向」にということです。

AxisAlignmentの関係図
AxisAlignmentの関係図

最後に

mainAxisAlignmentとcrossAxisAlignmentについて、はじめの内は少々ややこしいかもしれませんが、縦横の関係を理解してしまえば割と簡単に使いこなせるようになります。

忘れてしまった時は、今回解説に使った早見表と関係図をぜひ見かえしに来て下さいね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

Webベンチャー企業で働くエンジニア | 効率化のためのツール開発とかが好きな人 | ブログ最高月間収益18万 | 千葉県1995年11月生まれ | 当ブログでは「プログラミング・デザイン・ブログ」に関する内容を中心に、役立つ情報を発信します

目次