在线编程
DartPad
配置相关
开启 Linter 规则
在 flutter 工程的根路径下添加名为 analysis_options.yaml
的文件,即可配置静态分析的相关规则
具体配置可参考:github.com/jonataslaw/…
编码相关
避空运算符
Dart 提供了一系列方便的运算符用于处理可能会为空值的变量。其中一个是 ??=
赋值运算符,仅当该变量为空值时才为其赋值:
int? a; // = null
a ??= 3;
print(a); // <-- Prints 3.
a ??= 5;
print(a); // <-- Still prints 3.
复制代码
另外一个避空运算符是 ??
,如果该运算符左边的表达式返回的是空值,则会计算并返回右边的表达式。
print(1 ?? 3); // <-- Prints 1.
print(null ?? 12); // <-- Prints 12.
复制代码
初始化列表
有时,当你在实现构造函数时,您需要在构造函数体执行之前进行一些初始化。例如,final 修饰的字段必须在构造函数体执行之前赋值。在初始化列表中执行此操作,该列表位于构造函数的签名与其函数体之间:
Point.fromJson(Map<String, num> json)
: x = json['x'],
y = json['y'] {
print('In Point.fromJson(): ($x, $y)');
}
复制代码
初始化列表也是放置断言的便利位置,它仅会在开发期间运行:
NonNegativePoint(this.x, this.y)
: assert(x >= 0),
assert(y >= 0) {
print('I just made a NonNegativePoint: ($x, $y)');
}
复制代码
扩展操作符“…”
Dart 在 2.3 引入了 扩展操作符(...
)和 空感知扩展操作符(...?
),它们提供了一种将多个元素插入集合的简洁方法。
例如,你可以使用扩展操作符(...
)将一个 List 中的所有元素插入到另一个 List 中:
var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);
复制代码
如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?
)来避免产生异常:
var list;
var list2 = [0, ...?list];
assert(list2.length == 1);
复制代码
可以查阅扩展操作符建议获取更多关于如何使用扩展操作符的信息。
集合中的 if
Dart 还同时引入了 集合中的 if 和 集合中的 for 操作,在构建集合时,可以使用条件判断 (if
) 和循环 (for
)。
下面示例是使用 集合中的 if 来创建一个 List 的示例,它可能包含 3 个或 4 个元素:
var nav = [
'Home',
'Furniture',
'Plants',
if (promoActive) 'Outlet'
];
复制代码
懒加载
In the following example, if the temperature
variable is never used, then the expensive _readThermometer()
function is never called:
// This is the program's only call to _readThermometer().
late String temperature = _readThermometer(); // Lazily initialized.
复制代码