1. ホーム
  2. flutter

[解決済み] Flutterで複数のウィジェットをレンダリングするためにリストを反復処理する?

2022-10-15 07:20:08

質問

このように定義された文字列のリストがあります。

var list = ["one", "two", "three", "four"]; 

テキストウィジェットを使って、画面上に値を並べて表示させたいと思います。私はこれを試みるために、以下のコードを使用してみました。

for (var name in list) {
   return new Text(name);
}

しかし、このコードを実行すると、for ループは一度だけ実行され、レンダリングされるテキストウィジェットは次のような一種類だけです。 one (リストの最初の項目) と書かれたテキストウィジェットが 1 つだけ表示されます。さらに、for ループの中にログ メッセージを追加すると、それも 1 回だけ実行されます。なぜ、私の for ループはリストの長さに基づいてループしないのでしょうか?それは一度だけ実行され、その後終了するようです。

どのように解決するのですか。

基本的に、関数で 'return' を押すと、関数は停止して反復処理を継続しません。したがって、必要なのは、すべてをリストに格納して、それをウィジェットの子として追加することです。

このようにすることができます。

  Widget getTextWidgets(List<String> strings)
  {
    List<Widget> list = new List<Widget>();
    for(var i = 0; i < strings.length; i++){
        list.add(new Text(strings[i]));
    }
    return new Row(children: list);
  }

とか、もっといいのは、.map()演算子を使って、こんな風にすることです。

  Widget getTextWidgets(List<String> strings)
  {
    return new Row(children: strings.map((item) => new Text(item)).toList());
  }