Chris Buckett 的回答非常适合常量。显然有一个三元运算符在成员初始化程序中起作用。因此,如果字段的初始化很昂贵(比如需要函数调用和/或创建对象),这种方法似乎有效:
- 不要费心初始化类中的成员 - 更喜欢构造函数。否则,可能是白费力气。
- 跳过漂亮的this.member参数语法。而是使用成员名称并以此来限定成员。在作业中。
- 在成员初始化程序中使用?parm和三元运算符。这是一个示例,其中假定为成员创建默认值是昂贵的。
class Formats {
static Map<String, dynamic> defaultFormats() {
print("Expensive call - avoid if possible");
return {"th": 'default th', "td": 'default td'};
}
Map<String, dynamic> leftTbl;
Map<String, dynamic> rightTbl;
Formats(
{Map<String, dynamic>? leftTbl,
Map<String, dynamic>? rightTbl})
: leftTbl = leftTbl ?? defaultFormats(),
rightTbl = rightTbl ?? defaultFormats();
@override
String toString() {
return """
l => $leftTbl,
r => $rightTbl
""";
}
}
样品用途:
print(new Formats());
print(new Formats(leftTbl: {"th":'solid #089', "td":'solid #089' }));
print(new Formats(leftTbl: {"th":'solid #189', "td":'solid #189'},
rightTbl: {"th":'solid #189', "td":'solid #189'}));
输出:
Expensive call - avoid if possible
Expensive call - avoid if possible
l => {th: default th, td: default td},
r => {th: default th, td: default td}
Expensive call - avoid if possible
l => {th: solid #089, td: solid #089},
r => {th: default th, td: default td}
l => {th: solid #189, td: solid #189},
r => {th: solid #189, td: solid #189}