Dart: отображение списка (list.map)

88

У меня есть список String, например,

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

и хотел использовать moviesTitles.mapдля преобразования их в список Tab Widgets во Flutter.

AbdulMomen عبدالمؤمن
источник

Ответы:

150

вы можете использовать

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

пример:

    bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) => Tab(text: title)).toList()
      ,
    ),
AbdulMomen عبدالمؤمن
источник
19
Зачем нам это нужно toList?
onmyway133
2
@ onmyway133, потому что вопрос заключается в отображении списка
AbdulMomen عبدالمؤمن
5
@AbdulMomen عبدالمؤمن Я считаю, что вопрос в том, зачем это вообще нужно. В Swift сопоставление Array <E> возвращает Array <R> нового типа результата. Почему результат сопоставления Dart List <E> еще не является списком?
Майкл Лонг
16
@MichaelLong, потому что здесь, в Dart, map<T>возвращает Iterable<T>вместоList<T>
AbdulMomen عبدالمؤمن
46
Тот, Iterableчто map()возвращается, ленив. Он еще не оценивается, только когда кто-то его действительно повторяет. Вызов toList(), помимо возврата фактического списка, форсирует эту оценку.
Gábor
20

Я новичок в трепете. Я обнаружил, что можно добиться этого и таким образом.

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

Примечание: требуется версия dart sdk> = 2.3.0, см. Здесь

CrackRead
источник
3

Я пробую тот же метод, но с другим списком с большим количеством значений в карте функций. Моя проблема заключалась в том, чтобы забыть оператор возврата. Это очень важно :)

 bottom: new TabBar(
      controller: _controller,
      isScrollable: true,
      tabs:
        moviesTitles.map((title) { return Tab(text: title)}).toList()
      ,
    ),
Матиас де Андреа
источник
1
Это потому, что ваша функция объявлена ​​с {}вопросом - это однострочная функция
Мехрдад Шокри,
2

Да, вы тоже можете это сделать

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

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),
AlexPad
источник
0
...data.map((title) { return Text(title);}).toList(),

У меня все работает нормально

Ажар Али
источник