Dart:映射列表(list.map)


Answers:


139

您可以使用

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

例:

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

14
我们为什么需要toList
onmyway133

2
@ onmyway133,因为该问题与映射列表有关
AbdulMomenعبدالمؤمن

4
@AbdulMomenعبدالمؤمن我相信问题是为什么首先需要它。在Swift中,映射Array <E>返回新结果类型的Array <R>。为什么映射Dart List <E>的结果还不是列表?
Michael Long

14
@MichaelLong因为这里在Dart中map<T>返回的是一个Iterable<T>而不是List<T>
AbdulMomenعبدالمؤمن19-4-20

41
Iterablemap()的回报是懒惰。它只有在有人真正对其进行迭代时才被评估。调用toList(),除了返回实际列表外,还会强制执行此评估。
加博尔

19

我是新来的。我发现人们也可以通过这种方式实现这一目标。

 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
这是因为您的函数所声明{}的问题是一个单行函数
Mehrdad Shokri,

1

是的,您也可以这样做

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

 //your widget//
 bottom: new TabBar(
  controller: _controller,
  isScrollable: true,
  tabs: listTab
  ,
),

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.