【问题标题】:How to override variables on Dart/flutter如何覆盖 Dart/flutter 上的变量
【发布时间】:2019-12-30 14:59:27
【问题描述】:

我来自 TS/JS 背景,我在 Javasctipt/Typesctipt 中使用它之前的值来覆盖属性:

let arr = ['messi', 'mo salah'];
arr = arr.filter( name => name != 'messi');

// results
// arr = ['mo salah'];

现在在 Dart 中,我不能这样做,我已经搜索了文档/互联网,但没有找到正确语法的有用答案!

我所做的和上面的代码一样:

var arr = ['messi', 'mo salah'];
arr = arr.where( (name) => name != 'messi' );

// results
nothing showing up

我在一些使用飞镖创建搜索的文章中看到,他们首先清除 arr 然后添加新的过滤器 arr:

var arr = ['messi', 'mo salah'];
var filter = arr.where( (name) => name != 'messi' );

// then
arr.clear();
arr.addAll(filter);

【问题讨论】:

    标签: variables flutter dart syntax


    【解决方案1】:

    问题是列表上的方法返回一个类型为WhereIterable<String> 的变量。运行以下代码即可看到:

     void main() {
       dynamic arr = ['messi', 'mo salah'];
       arr = arr.where((name) => name != 'messi');
       print(arr.runtimeType); // WhereIterable<String>
     }
    

    当您编写 var arr 时,List 成为类型,并且由于 Dart 是一种严格类型的语言,因此您不能将 x 类型的值分配给 y 类型的变量,除非其中一个是动态的. dynamic 类型意味着它可以采用任何类型,就像 TS 中的任何类型一样。因此,您必须在 arr 上调用 toList() 将其从可迭代转换为列表:

     void main() {
       var arr = ['messi', 'mo salah'];
       arr = arr.where((name) => name != 'messi').toList();
       print(arr); // [mo salah]
     }
    

    【讨论】:

      【解决方案2】:

      你可以使用retainWhere,结果:[no salah]

      List<String> x = ["messi", "no salah"];
      x.retainWhere((f) => f != "messi");
      print(x);
      

      您的代码将创建一个新列表,但此代码将更新您的列表。您可以选择对您的目的有用的。

      【讨论】:

        【解决方案3】:

        我在这里写的时候已经找到了我的问题的答案,

        我错过了什么?是或 TS/JS 中的 filterdart 中的 where 之间的区别,过滤器返回 array 类型但 where 不是,我必须转换通过在末尾添加 toList() 将其添加到数组中。

        所以我在 dart 中的最终代码应该是这样的:

        var arr = ['messi', 'mo salah'];
        arr = arr.where( (name) => name != 'messi' ).toList();
        
        // results
        // arr = ['mo salah'];
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-08-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多