dart_29 空安全

18 阅读1分钟
  • 减少数据异常错误
  • 提高程序性能

默认不可空

String title = 'hello';

type? 可空

String? title = null;

value! 值保证不为空,主观上

String? title = 'hello';
String newTitle = title!;

value?. 不为空才执行

String? title = 'hello';
bool isEmpty = title?.isEmpty();

value?? 如果空执行

String? title = 'hello';
String newTitle = title ?? 'cat';

late 声明

延迟加载修饰符

声明一个不可空的变量,并在声明后初始化。

late String description;

void main() {
  description = 'Feifei!';
  print(description);
}

late 类成员延迟初始

class WPHttpService extends GetxService {
  late final Dio _dio;

  @override
  void onInit() {
    ...

    _dio = Dio(options);

    ...
  }

加上 late 后就可以不用构造函数的时候初始化了

List、泛型

 List<String?>? l;
  l = [];
  l.add(null);
  l.add('a');
  print(l);
类型集合是否可空数据项是否可空
Listnono
List?yesno
List<String?>noyes
List<String?>?yesyes

Map

Map<String, String?>? m;
 m = {};
 m['a'] = 'b';
 m['b'] = null;
 print(m);
类型集合是否可空数据项是否可空
Map<String, int>nono*
Map<String, int>?yesno*
Map<String, int?>noyes
Map<String, int?>?yesyes

* 可能返回空