Null safety
Null safety 翻译成中文的意思是空安全
null safety 可以帮助开发者避免一些日常开发中很难被发现的错误,并且额外的好处是可以改善性能
Flutter2.2.0 之后的版本都要求使用null safety
? 可空类型 / !类型断言
//- ? 可空类型案例
String username = "hello"; // 表示非空类型
username = null; // 这里因为有空安全限制,所有会报错
String? username = "hello"; // ? 表示可空类型
username = null;
print(username);
List<String>? l1 = ["张三", "李四", "王五"];
l1 = null;
String? getData(apiUrl) {
if (apiUrl != null) {
return 'this is server data';
}
return null;
}
print(getData(null));
//- !类型断言
//- 类型断言:如果str不等于null 会打印str的长度,如果等于null会抛出异常
void printLength(String? str) {
print(str!.length); //- 如果传递进来的是null,就会抛出异常,需要使用的时候可以使用try...catch
}
// print(str!.length);
printLength(null);
late 关键字
延迟初始化属性
// 如果初始化不定义值是多少,并且定义了构造函数,就不会报错
class Demo {
String name;
int age;
Demo(this.name, this.age);
}
// 如果初始化不定义值是多少,也不需要定义构造函数,就可以使用late进行延迟初始化
class Demo {
late String name;
late int age;
}
required关键字
最开始 required 是注释
现在它已经作为内置修饰符
主要用于允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个 required 参数或者该参数有个默认值
String printUserInfo(String username, {int age, String sex}) { //- 这样写可选参数是不对的
return "$username --- $age";
}
String printUserInfo(String username, {int age = 10, String sex = "男"}) { //- 给默认参数
return "$username --- $age";
}
print(printUserInfo("张三"));
print(printUserInfo("张三", age: 20));
String printUserInfo(String username, {required int age, required String sex}) {//- required表示必须传入的参数
return "$username --- $age";
}
print(printUserInfo("张三", age: 20, sex: "男"));
// 表示name是可选参数,age是必填参数
class Person {
String? name;
int age;
Person({this.name, required this.age});
String getName() {
return "${this.name} --- ${this.age}";
}
}
Person p = new Person(age: 20);
print(p.getName()); //- null --- 20