【问题标题】:Dart: how to create an empty list as a default parameterDart:如何创建一个空列表作为默认参数
【发布时间】:2021-06-04 20:46:37
【问题描述】:

如果没有为它们分配任何内容,我有多个默认需要为空的列表。 但我得到这个错误:

class Example {
    List<String> myFirstList;
    List<String> mySecondList;

    Example({
        this.myFirstList = [];  // <-- Error: default value must be constant
        this.mySecondList = [];
    });
}

当然,如果我让它保持不变,我以后就不能再改变它了:

Example({
    this.myFirstList = const [];
    this.mySecondList = const [];
});

...

Example().myFirstList.add("foo"); // <-- Error: Unsupported operation: add (because it's constant)

我找到了一种这样做的方法,但是我怎样才能对多个列表做同样的事情:

class Example {
    List<String> myFirstList;
    List<String> mySecondList;

    Example({
        List<String> myFirstList;
        List<String> mySecondList;
    }) : myFirstList = myFirstList ?? []; // <-- How can I do this with multiple lists?
}

【问题讨论】:

    标签: list flutter dart parameters default


    【解决方案1】:

    像这样

    class Example {
        List<String> myFirstList;
        List<String> mySecondList;
    
        Example({
            List<String> myFirstList,
            List<String> mySecondList,
        }) : myFirstList = myFirstList ?? [], 
             mySecondList = mySecondList ?? [];
    }
    

    【讨论】:

    • 谢谢!不敢相信我自己没想到这一点;)
    【解决方案2】:

    扩展 YoBo 的答案(因为我无法对此发表评论)

    请注意,启用空安全性后,您必须将? 添加到构造函数的字段中,即使类成员被标记为非空;

    class Example {
    List<String> myFirstList;
    List<String> mySecondList;
    
    Example({
        List<String>? myFirstList,
        List<String>? mySecondList,
    }) : myFirstList = myFirstList ?? [], 
         mySecondList = mySecondList ?? [];
    }
    

    在构造函数中看到你将可选参数标记为可空(因为在初始化中未指定默认为空),然后初始化器部分中的空感知运算符?? 可以做到这一点,并在需要时创建一个空列表.

    【讨论】:

      【解决方案3】:
      class Example {
          List<String> myFirstList;
          List<String> mySecondList;
      
          Example({
              List<String> myFirstList,
              List<String> mySecondList,
          }) : myFirstList = myFirstList ?? [], 
               mySecondList = mySecondList ?? [];
      }
      

      【讨论】:

      • edit您的帖子包含解释
      猜你喜欢
      • 2019-05-30
      • 2016-07-05
      • 1970-01-01
      • 2021-03-14
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      相关资源
      最近更新 更多