看文需知:该文为观看B站大地老师讲解课程所作笔记,该篇为P15的内容。
该部分为Dart2.13之后的新特性,包括Null safety、late关键字、空类型声明符?、非空断言!、required关键字。
Null safety & 空类型声明符?
顾名思义,意思为空安全,该特性可以帮助开发者避免一些日常开发中很难被发现的错误,并且改良性能。
Flutter2.2.0(2021年5月19日发布),之后的版本都要求使用null safety。
void main(List<String> args) {
// int a = 123;
// a = null; //A value of type 'Null' can't be assigned to a variable of type 'int'.
// String b = "123";
// b = null;//A value of type 'Null' can't be assigned to a variable of type 'String'.
String? aa = "123";
aa = null;
print(aa);
}
输出:
null
String?表示可空类型。类似的有:
List<String>? list = ["小红"];
非空断言!
如果不为空,会
void main(List<String> args) {
String? str = "123";
str = null;
print(str!.length);//类型断言
}
这样的写法会抛出异常。
所以。同时需要的是进行try catch进行抛出。
void main(List<String> args) {
printStr("123");
printStr(null);
}
void printStr(String? str){
try{
print(str!.length);
}catch(e){
print("str is null");
}
}
late关键字
用于延迟初始化。
class Person{
// String name;//Non-nullable instance field 'name' must be initialized.
late String name;
setName(String name){
this.name = name;
}
getName(){
return name;
}
}
void main(List<String> args) {
Person p1 = new Person();
p1.setName("小红");
print(p1.getName());
}
required关键字
老版本中,最开始使用 @required 注解。
现在是作为内置修饰符。主要用于允许根据需要标记任何命名参数(函数或类),使得它们不得为空。
String printName(String name, {int age = 10, String sex = "男"}){
return "名字:$name---性别:$age----sex:$sex";
}
// String printName1(String name, {int age, String sex}){//会报错
// return "名字:$name---性别:$age----sex:$sex";
// }
String printName2(String name, {required int age, required String sex}){
return "名字:$name---性别:$age----sex:$sex";
}
void main(List<String> args) {
print(printName("小红"));
// print(printName1("小红"));
// print(printName2("小红"));//加入关键字后只传入一个参数会报错
print(printName2("小红", age:20, sex:"女"));
}