1.字符串模板

  1. '${3 + 2}' // '5'
  2. '${"word".toUpperCase()}' // 'WORD'
  3. '$myObject' // The value of myObject.toString()

2.可空变量

NOTICE:

  • dart2.2开始可以将 ? 添加到该类型中以表示变量可能为空。
  • 省略赋值null,因为在dart未赋值变量的默认值为null。
  1. // int a = null; // INVALID in null-safe Dart.(错误写法)
  2. // dart2.2开始可以将 `?` 添加到该类型中以表示变量可能为空.
  3. // 省略赋值null,因为在dart未赋值变量的默认值:null
  4. int? a = null; // Valid in null-safe Dart.
  5. int? a; // The initial value of a is null.

3.感知空的操作符

  1. /// `??=` 操作符仅在该变量当前为空值时才将右侧的值分配给变量
  2. int? a; // = null
  3. a ??= 3; print(a); // <-- Prints 3.
  4. a ??= 5; print(a); // <-- Still prints 3.
  5. /// 若 `左侧表达式` 值为空,在这种情况下,它将返回其右侧的表达式;否则它将返回其左侧的表达式。
  6. print(1 ?? 3); // <-- Prints 1.
  7. print(null ?? 12); // <-- Prints 12.

4.有条件的财产访问

  1. myObject?.someProperty;
  2. // 两种等价: 上面可以理解为语法糖形式
  3. (myObject != null) ? myObject.someProperty : null;
  4. // 多层级调用
  5. myObject?.someProperty?.someMethod()

5.集合字面

  1. // List<String>
  2. // 泛型: <String>[]
  3. final aListOfStrings = ['one', 'two', 'three'];
  4. // Set<String> or <String>{}
  5. final aSetOfStrings = {'one', 'two', 'three'};
  6. // Map<String, int> or <String, double>{}
  7. final aMapOfStringsToInts = {
  8. 'one': 1,
  9. 'two': 2,
  10. 'three': 3,
  11. };

6.Cascades 级联

  1. var button = querySelector('#confirm');
  2. button.text = 'Confirm';
  3. button.classes.add('important');
  4. button.onClick.listen((e) => window.alert('Confirmed!'));
  5. // 多个操作连续调用执行 `..`
  6. querySelector('#confirm')
  7. ..text = 'Confirm'
  8. ..classes.add('important')
  9. ..onClick.listen((e) => window.alert('Confirmed!'));