Dart18新特性

空安全

空安全(Sound null safety)是 Dart 2.12 中新增的一项特性

environment:
  sdk: ">=2.12.0 <3.0.0"

在没有空安全前,这句代码是没有问题的。

String name = null;

如果想给一个变量赋值 null 要如何处理?只需在类型后面添加 ? 即可

String? name = null;
print('name length:${name?.length}');

操作符 ! 表示当前变量不为 null,开发者需要保证变量不为 null,否则会抛出异常。

String? name = null;
print('name length:${name!.length}');

在集合中:

List<String> list;
List<String>? list1;
List<String?> list2;
List<String?>? list3;

他们的区别就是是否可为 null 的区别:

类型集合是否可为nullitem是否可为null
List
List?
List<String?>
List<String?>?

late

假设有一个属性,此属性的值来源于服务器或者其他方法,那么此时无法给此属性进行初始化,代码如下:

late String name;

void _incrementCounter() {
  name = '123';
  print('name length:${name.length}');
}

late:表示延迟初始化,通常用于延迟加载(比如网络请求),late 声明的变量在使用前一定要进行初始化。

@required

可以通过 @required 来注解 Dart 中的命名参数,用来指示它是必填参数

import 'package:meta/meta.dart';

void main() {
  sendMsg(content: "hello", to: "jack");
}

void sendMsg({@required String content, String to}) {
  print("send msg $content, to $to");
}