Dart:映射列表(list.map)
Posted
技术标签:
【中文标题】Dart:映射列表(list.map)【英文标题】:Dart: mapping a list (list.map) 【发布时间】:2018-10-01 03:42:29 【问题描述】:我有一个String
s 的列表,例如,
var moviesTitles = ['Inception', 'Heat', 'Spider Man'];
并且想在 Flutter 中使用 moviesTitles.map
将它们转换为 Tab
Widget
s 的列表。
【问题讨论】:
【参考方案1】:你可以使用
moviesTitles.map((title) => Tab(text: title)).toList()
示例:
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs:
moviesTitles.map((title) => Tab(text: title)).toList()
,
),
【讨论】:
我们为什么需要toList
?
@onmyway133 因为问题是关于映射列表
@AbdulMomenعبدالمؤمن 我相信问题是为什么首先需要它。在 Swift 中,映射 Arraymap<T>
返回 Iterable<T>
而不是 List<T>
map()
返回的Iterable
是懒惰的。它还没有被评估,只有当有人实际迭代它时。调用toList()
,除了返回一个实际的列表外,还会强制执行此评估。【参考方案2】:
我尝试了同样的方法,但是在函数映射中使用了一个不同的列表,其中包含更多的值。我的问题是忘记了退货声明。这很重要:)
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs:
moviesTitles.map((title) return Tab(text: title)).toList()
,
),
【讨论】:
这是因为你的函数是用
声明的,问题是一行函数
只需将其更改为 map((title) => Tab(text: title)).toList()
,因此无需返回...
是的,这是第一个(投票最多的)评论。我在返回 @Nima 之前为代码添加了这条注释【参考方案3】:
是的,你也可以这样做
List<String> listTab = new List();
map.forEach((key, val)
listTab.add(val);
);
//your widget//
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs: listTab
,
),
【讨论】:
【参考方案4】:我是新来的颤振。我发现这样也可以实现。
tabs: [
for (var title in movieTitles) Tab(text: title)
]
注意:需要 dart sdk 版本 >= 2.3.0, see here
【讨论】:
【参考方案5】:tabs: [...data.map((title) return Text(title);).toList(), extra_widget],
tabs: data.map((title) return Text(title);).toList(),
对我来说很好用
【讨论】:
以上是关于Dart:映射列表(list.map)的主要内容,如果未能解决你的问题,请参考以下文章