[Flutter]Columnの要素を動的に作成するには?

Flutter

どうも、ちょげ(@chogetarou)です。

Columnの要素を動的に作成する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

Columnの要素を動的に作成する方法は3つあります。

for

1つは、「for文」もしくは「for in文」を使う方法です。

具体的には、Columnの引数「children」のリスト内でfor文を使います。

Column(
  children: [
    for (var i = 0; i < 10; i++)
      Widget(),
  ],
),

リスト内でfor文を使う時は1つだけ条件があり、{}は使えず、1文で完結出来るものとなります。

以下は、使用例です。

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          mainAxisSize: MainAxisSize.min,
          children: [
            for (var i = 0; i < 10; i++)
              Container(
                height: 70,
                color: i.isOdd ? Colors.blue : Colors.pink,
              ),
          ],
        ),
      ),
    );
  }

map

2つ目は、配列のmapメソッドを使う方法です。

具体的には、List、Set、Mapが持つmapメソッドを使い、全ての要素で処理をし、ウェジェットのリストを返します。

そのリストをColumnの引数「children」に指定します。

Column(
  children: _list
      .map(
        (e) => Widget(),
      )
      .toList(),
),

以下は、使用例です。

  var _numbers = [
    1,
    2,
    3,
    4,
    5,
  ];

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: _numbers
              .map(
                (e) => Container(
                  height: 100,
                  width: double.infinity,
                  color: Colors.blue[100],
                  child: Text('$e'),
                  alignment: Alignment.center,
                ),
              )
              .toList(),
        ),
      ),
    );
  }

関数

3つ目は、関数を使う方法です。

具体的には、表示するウェジェットのリストを戻り値とする関数を作ります。

  List<Widget> _createList() {
    ~~~リストの作成~~~
    return WidgetList();
  }

以下は、使用例です。

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: Scaffold(
        body: Column(
          children: _createList(),
        ),
      ),
    );
  }

  List<Widget> _createList() {
    var _list = <Widget>[];

    for (var i = 0; i < 10; i++) {
      _list.add(
        Container(
          height: 70,
          width: double.infinity,
          color: Colors.green[100],
          child: Text('$i'),
          alignment: Alignment.center,
        ),
      );
    }

    return _list;
  }

まとめ

Columnの要素を動的に作成する方法は、次の3つです。

  • for文もしくはfor in文
  • mapメソッド
  • 関数

コメント

タイトルとURLをコピーしました