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 ?? [];
}
我有多个列表,如果没有分配给它们,默认情况下它们需要为空。 但是我得到这个错误:
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 ?? [];
}