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


Ответы:


150

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

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

пример:

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

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, см. Здесь


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
  ,
),

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.