スタック Stack を使って、自由に要素を並べます。

縦方向に要素を並べる

Stack は自由に要素を並べるためのウィジットです。 children に並べたい要素を配列として要素を入れていきます。

例えば、

Stack(
  children: <Widget>[
    Align(
      alignment: Alignment.topLeft,
      child: Text('左上'),
    ),
    Align(
      alignment: Alignment.topCenter,
      child: Text('上'),
    ),
  ],
)

のようになります。このように Align と組み合わせることで、どこに表示するか決めます。

中身の要素の指定は、 child ではなくて、 children であることに注意しましょう。 <Widget>[] の中に、各要素をカンマ区切りで書いていくことで指定します。

コードの例

例えば、コードは以下のようになります。

import 'package:flutter/material.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'わかりやすい'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: SafeArea(child: Stack(
        children: <Widget>[
          Align(
            alignment: Alignment.topLeft,
            child: Text('左上'),
          ),
          Align(
            alignment: Alignment.topCenter,
            child: Text('上'),
          ),
          Align(
            alignment: Alignment.topRight,
            child: Text('右上'),
          ),
          Align(
            alignment: Alignment.centerLeft,
            child: Text('左'),
          ),
          Align(
            alignment: Alignment.center,
            child: Text('中央'),
          ),
          Align(
            alignment: Alignment.centerRight,
            child: Text('右'),
          ),
          Align(
            alignment: Alignment.bottomLeft,
            child: Text('左下'),
          ),
          Align(
            alignment: Alignment.bottomCenter,
            child: Text('下'),
          ),
          Align(
            alignment: Alignment.bottomRight,
            child: Text('右下'),
          ),
        ],
      ),
      ),
    );
  }
}

スクリーンショット

参考リンク