【发布时间】:2018-10-01 03:42:29
【问题描述】:
我有一个Strings 的列表,例如,
var moviesTitles = ['Inception', 'Heat', 'Spider Man'];
并且想在 Flutter 中使用 moviesTitles.map 将它们转换为 Tab Widgets 的列表。
【问题讨论】:
标签: functional-programming dart flutter
我有一个Strings 的列表,例如,
var moviesTitles = ['Inception', 'Heat', 'Spider Man'];
并且想在 Flutter 中使用 moviesTitles.map 将它们转换为 Tab Widgets 的列表。
【问题讨论】:
标签: functional-programming dart flutter
你可以使用
moviesTitles.map((title) => Tab(text: title)).toList()
示例:
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs:
moviesTitles.map((title) => Tab(text: title)).toList()
,
),
【讨论】:
toList?
map<T> 返回 Iterable<T> 而不是 List<T>
map() 返回的Iterable 是懒惰的。它还没有被评估,只有当有人实际迭代它时。调用toList(),除了返回一个实际的列表外,还会强制执行此评估。
我尝试了同样的方法,但是在函数映射中使用了一个不同的列表,其中包含更多的值。我的问题是忘记了退货声明。这很重要:)
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs:
moviesTitles.map((title) {return Tab(text: title)}).toList()
,
),
【讨论】:
{}声明的,问题是一行函数
map((title) => Tab(text: title)).toList() ,因此无需返回...
是的,你也可以这样做
List<String> listTab = new List();
map.forEach((key, val) {
listTab.add(val);
});
//your widget//
bottom: new TabBar(
controller: _controller,
isScrollable: true,
tabs: listTab
,
),
【讨论】:
我是新来的颤振。我发现这样也可以实现。
tabs: [
for (var title in movieTitles) Tab(text: title)
]
注意:需要 dart sdk 版本 >= 2.3.0, see here
【讨论】:
tabs: [...data.map((title) { return Text(title);}).toList(), extra_widget],
tabs: data.map((title) { return Text(title);}).toList(),
对我来说很好用
【讨论】: