Dart: mapeo de una lista (list.map)

84

Tengo una lista de Strings, por ejemplo,

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

y quería usarlos moviesTitles.mappara convertirlos en una lista de Tab Widgetcorreos electrónicos en Flutter.

AbdulMomen عبدالمؤمن
fuente

Respuestas:

140

puedes usar

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

ejemplo:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),
AbdulMomen عبدالمؤمن
fuente
14
¿Por qué necesitamos toList?
onmyway133
2
@ onmyway133 porque la pregunta es sobre el mapeo de una lista
AbdulMomen عبدالمؤمن
4
@AbdulMomen عبدالمؤمن Creo que la pregunta es por qué es necesario en primer lugar. En Swift, el mapeo de un Array <E> devuelve un Array <R> del nuevo tipo de resultado. ¿Por qué el resultado de mapear una lista de dardos <E> no es ya una lista?
Michael Long
14
@MichaelLong porque aquí, en Dart, map<T>devuelve un en Iterable<T>lugar de unList<T>
AbdulMomen عبدالمؤمن
42
El Iterableque map()vuelve es perezoso. Aún no se evalúa, solo cuando alguien realmente lo itera. Llamar toList(), además de devolver una lista real, fuerza esta evaluación.
Gábor
19

Soy nuevo en aletear. Descubrí que también se puede lograr de esta manera.

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

Nota: Requiere que la versión de dart sdk sea> = 2.3.0, ver aquí

CrackRead
fuente
3

Intento este mismo método, pero con una lista diferente con más valores en el mapa de funciones. Mi problema fue olvidar una declaración de devolución. Esto es muy importante :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),
Matias de Andrea
fuente
1
Es porque su función se declara con {}la pregunta es una función de línea
Mehrdad Shokri
1

Sí, también puedes hacerlo de esta manera

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

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

Esta trabajando bien para mi

Azhar Ali
fuente