Dart: mapowanie listy (list.map)

88

Mam listę Strings np.

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

i chciałem użyć moviesTitles.mapdo konwersji ich na listę Tab Widgetsw Flutter.

AbdulMomen عبدالمؤمن
źródło

Odpowiedzi:

150

możesz użyć

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

przykład:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),
AbdulMomen عبدالمؤمن
źródło
19
Dlaczego potrzebujemy toList?
onmyway133
2
@ onmyway133, ponieważ pytanie dotyczy mapowania listy
AbdulMomen عبدالمؤمن
5
@AbdulMomen عبدالمؤمن Myślę, że pytanie brzmi, dlaczego jest to potrzebne w pierwszej kolejności. W języku Swift mapowanie Array <E> zwraca Array <R> nowego typu wyniku. Dlaczego wynik mapowania listy rzutek <E> nie jest jeszcze listą?
Michael Long
16
@MichaelLong becaues tutaj, w Dart, map<T>zwraca Iterable<T>zamiast aList<T>
AbdulMomen عبدالمؤمن
46
To, Iterableco map()wraca, jest leniwe. Nie jest jeszcze oceniany, tylko wtedy, gdy ktoś go faktycznie iteruje. Wywołanie toList(), oprócz zwrócenia aktualnej listy, wymusza tę ocenę.
Gábor,
20

Jestem nowy w trzepotaniu. Przekonałem się, że można to również osiągnąć w ten sposób.

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

Uwaga: Wymaga wersji sdk dart> = 2.3.0, patrz tutaj

CrackRead
źródło
3

Próbuję tej samej metody, ale z inną listą z większą liczbą wartości w mapie funkcji. Moim problemem było zapomnienie oświadczenia o zwrocie. To jest bardzo ważne :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),
Matias de Andrea
źródło
1
To dlatego, że funkcja jest zadeklarowana w {}tej kwestii jest jedna linia funkcja
Mehrdad Shokri
2

Tak, Ty też możesz to zrobić w ten sposób

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

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

U mnie działa dobrze

Azhar Ali
źródło