【问题标题】:Dart: mapping a list (list.map)Dart:映射列表(list.map)
【发布时间】:2018-10-01 03:42:29
【问题描述】:

我有一个Strings 的列表,例如,

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

并且想在 Flutter 中使用 moviesTitles.map 将它们转换为 Tab Widgets 的列表。

【问题讨论】:

    标签: functional-programming dart flutter


    【解决方案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 中,映射 Array 会返回新结果类型的 Array。为什么映射 Dart List 的结果还不是列表?
    • @MichaelLong 因为在这里,在 Dart 中,map<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(),
        

        对我来说很好用

        【讨论】:

          猜你喜欢
          • 2023-03-15
          • 2020-07-04
          • 2021-08-15
          • 2020-05-21
          • 2021-04-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多