Dart2.13后的新特性Null safety,late关键字,空类型声明符?,非空断言!,required关键字
空安全(Null safety)
帮助开发者避免一些日常开发中很难被发现的错误,并且额外的好处是改善性能。
? 可空类型
!类型断言
如图可以看出当我们直接给赋空值时会报错,点击快速修复后在int后加了一个?,表示a是一个可空类型,可以赋值为空
void main() {
int? a = 123;
a = null;
print(a);
}
同理也可在方法返回值类型后加?表示返回值可以为null
类型断言
如图当我们给一个可空类型的字符串赋空值打印时会有警告信息,点击快速修复会在str后加!
void main() {
printLength(null);
}
void printLength(String? str) {
try {
print(str!.length);
} catch (e) {
print('为null');
}
}
late关键词
用于延迟初始化
点击快速修复后,在属性前添加了late关键词
class Person {
late String name;
late int age;
setName(String name, int age) {
this.name = name;
this.age = age;
}
void getInfo() {
print("$name----$age");
print("Person1:${this.name}----${this.age}");
}
}
void main() {
Person p = new Person();
p.setName("张三", 20);
}
required关键词
主要用于允许根据标记任何命名参数(函数或类),使得它们不为空
由图可以看出,命名参数没有赋初值时会报错,点击快速修复,可以在String前加required,表示这是一个必须传入的参数
String printInfo(String name, {int age = 0, required String sex}) {
if (age != 0) {
return "姓名:$name---性别:$sex---年龄:$age";
}
return "姓名:$name---性别:$sex---年龄保密";
}
void main() {
String str = printInfo("张三", age: 20, sex: "男");
print(str);
}
总结
由于前面知识点是跟着B站教程学习,自己所用的Dart版本比较新,跟B站教程上面有一些不一样,比如上面的空安全,还late,required关键字等,在没有学习这一节之前,遇到类似问题我都是直接在变量类型后面加?,了解了Dart新特性之后才对前面遇到的问题有了一定的认识。