空處理
?? ?. 的使用
如果你還不清楚?? ?.
的意思=> Dart 如何優(yōu)雅的避空
- 推薦使用
??
將null
轉(zhuǎn)換為需要的值
Text(title ?? '')
if(title?.isEmpty ?? true){
// ...
}
- 不推薦使用
==
賦值
// 不推薦
if(title?.isEmpty == true){
// ...
}
- 解析
json
實(shí)體數(shù)據(jù)null的處理
// list為null的處理賦值空l(shuí)ist
moreList = List<SRItemModel>.from(map["moreList"]?.map((it) => SRItemModel.fromJsonMap(it)) ?? [])
// 字段為null的處理
goodsName = map["goodsName"] ?? '',
specName = map["specName"] ?? '',
count = map["goodsQty"] ?? 0,
list = map["list"] ?? [],
字符串相關(guān)
使用臨近字符字的方式連接字面量字符串
不需要使用 +
來(lái)連接它們宫蛆。應(yīng)該像 C
和 C++
一樣竿屹,只需要將它們挨著在一起就可以了。這種方式非常適合不能放到一行的長(zhǎng)字符串的創(chuàng)建:
raiseAlarm(
'ERROR: Parts of the spaceship are on fire. Other '
'parts are overrun by martians. Unclear which are which.');
- 而不是類似于Java使用
+
連接
// 不推薦
raiseAlarm('ERROR: Parts of the spaceship are on fire. Other ' +
'parts are overrun by martians. Unclear which are which.');
- 使用
$
插值的形式來(lái)組合字符串和值
'Hello, $name! You are ${year - teacher.birth} years old.';
// 不要使用不必要的大括號(hào)
'Hello, ${name}';
// 更不要再使用這種方式了, 使用$會(huì)看起來(lái)更連貫
'Hello, ' + name + '! You are ' + (year - birth).toString() + ' y...';
集合相關(guān)
首先來(lái)看一下dart創(chuàng)建集合的推薦姿勢(shì):
- 集合字面量
var points = []; // var points = List();
var addresses = {}; // var addresses = Map();
- 指定類型
var points = <Point>[]; // var points = List<Point>();
var addresses = <String, Address>{}; // var addresses = Map<String, Address>();
List<int> singletonList(int value) {
var list = <int>[]; // List<int> list = [];
list.add(value);
return list;
}
- 使用
.isEmpty
和.isNotEmpty
替代.length
if (nameList.isEmpty) // nameList.length == 0
// 使用 ?? 替代 ==
if (nameList?.isEmpty ?? true) // nameList == null || nameList.length == 0
隱式new
羽德、const
- new 關(guān)鍵字成為可選項(xiàng)
Widget build(BuildContext context) {
return Row(
children: [
RaisedButton(
child: Text('Increment'),
),
Text('Click!'),
],
);
}
- 棄用和刪除 new
Widget build(BuildContext context) {
return new Row(
children: [
new RaisedButton(
child: new Text('Increment'),
),
new Text('Click!'),
],
);
}
- primaryColors 是
const
, 它的內(nèi)容const
關(guān)鍵字是隱式的父叙,不需要寫(xiě):
const primaryColors = [
Color("red", [255, 0, 0]),
Color("green", [0, 255, 0]),
Color("blue", [0, 0, 255]),
];
const primaryColors = const [
const Color("red", const [255, 0, 0]),
const Color("green", const [0, 255, 0]),
const Color("blue", const [0, 0, 255]),
];
=>
箭頭語(yǔ)法
=>
這種箭頭語(yǔ)法是一種定義函數(shù)的方法神郊,該函數(shù)將在其右側(cè)執(zhí)行表達(dá)式并返回其值
-
get
、set
class Circle {
num radius;
int _width;
Circle(this.radius, this._width);
num get area => pi * radius * radius;
num get circumference => pi * 2.0 * radius;
set width(int width) => _width = width;
}
bool hasEmpty = aListOfStrings.any((s) {
return s.isEmpty;
});
bool hasEmpty = aListOfStrings.any((s) => s.isEmpty);
級(jí)連..
要對(duì)同一對(duì)象執(zhí)行一系列操作趾唱,請(qǐng)使用級(jí)聯(lián)..
var button = querySelector('#confirm');
button.text = 'Confirm';
button.classes.add('important');
button.onClick.listen((e) => window.alert('Confirmed!'));
// 級(jí)連
querySelector('#confirm')
..text = 'Confirm'
..classes.add('important')
..onClick.listen((e) => window.alert('Confirmed!'));