ダート:リストのマッピング(list.map)


83

私はのリストを持っていますString、例えば、

var moviesTitles = ['Inception', 'Heat', 'Spider Man'];

そしてmoviesTitles.map、それらをTab WidgetFlutterのsのリストに変換するために使用したかったのです。

回答:


139

あなたが使用することができます

moviesTitles.map((title) => Tab(text: title)).toList()

例:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),

14
なぜ必要なのtoListですか?
onmyway1 3319年

2
@ onmyway133質問はリストをマッピングについてですので
AbdulMomenعبدالمؤمن

4
@AbdulMomenعبدالمؤمن問題は、そもそもなぜそれが必要なのかということだと思います。Swiftでは、Array <E>をマッピングすると、新しい結果タイプのArray <R>が返されます。Dart List <E>をマッピングした結果がまだリストになっていないのはなぜですか?
マイケル・ロング

14
ダートで、ここbecauesを@MichaelLong、map<T>返すIterable<T>代わりにList<T>
AbdulMomenعبدالمؤمن

41
Iterableそのmap()リターンは怠惰です。誰かが実際にそれを繰り返したときだけ、それはまだ評価されていません。を呼び出すtoList()と、実際のリストが返されるだけでなく、この評価が強制されます。
ガーボル

19

私はフラッターに不慣れです。私は、この方法でもそれを達成できることを発見しました。

 tabs: [
    for (var title in movieTitles) Tab(text: title)
  ]

注:dartsdkのバージョンが2.3.0以上である必要があります。こちらをご覧ください


3

これと同じ方法を試しますが、関数マップの値が多い別のリストを使用します。私の問題は、returnステートメントを忘れることでした。これは非常に重要です :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),

1
これは{}、質問が1行の関数であると宣言されているためです
Mehrdad Shokri

1

はい、あなたもこの方法でそれを行うことができます

 List<String> listTab = new List();
 map.forEach((key, val) {
  listTab.add(val);
 });

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.