Dart: Zuordnung einer Liste (list.map)

84

Ich habe eine Liste von Strings, z.

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

und wollte verwenden moviesTitles.map, um sie in eine Liste von Tab Widgets in Flutter zu konvertieren .

AbdulMomen عبدالمؤمن
quelle

Antworten:

140

Sie können verwenden

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

Beispiel:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),
AbdulMomen عبدالمؤمن
quelle
14
Warum brauchen wir toList?
onmyway133
2
@ onmyway133, weil die Frage über die Zuordnung einer Liste ist
AbdulMomen عبدالمؤمن
4
@AbdulMomen عبدالمؤمن Ich glaube, die Frage ist, warum es überhaupt benötigt wird. In Swift gibt die Zuordnung eines Arrays <E> ein Array <R> des neuen Ergebnistyps zurück. Warum ist das Ergebnis der Zuordnung einer Dartliste <E> nicht bereits eine Liste?
Michael Long
14
@MichaelLong, weil hier in Dart map<T>ein Iterable<T>statt einesList<T>
AbdulMomen
42
Das Iterable, was map()zurückkommt, ist faul. Es wird noch nicht ausgewertet, nur wenn jemand es tatsächlich wiederholt. Das Aufrufen toList()erzwingt zusätzlich zur Rückgabe einer tatsächlichen Liste diese Auswertung.
Gábor
19

Ich bin neu im Flattern. Ich fand, dass man es auch so erreichen kann.

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

Hinweis: Die dart sdk-Version muss> = 2.3.0 sein ( siehe hier)

CrackRead
quelle
3

Ich versuche die gleiche Methode, aber mit einer anderen Liste mit mehr Werten in der Funktionszuordnung. Mein Problem war, eine Rückgabeerklärung zu vergessen. Dies ist sehr wichtig :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),
Matias de Andrea
quelle
1
Es ist, weil Ihre Funktion mit {}der Frage deklariert ist, ist eine
Zeilenfunktion
1

Ja, das können Sie auch so machen

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

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),
AlexPad
quelle
0
...data.map((title) { return Text(title);}).toList(),

Es funktioniert gut für mich

Azhar Ali
quelle