Dart:如何创建一个空列表作为默认参数

Dart: how to create an empty list as a default parameter

我有多个列表,如果没有分配给它们,默认情况下它们需要为空。 但是我得到这个错误:

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?
}

像这样

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

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

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

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

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

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

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

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

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