Null safety翻译成中文的意思是空安全。null safety可以帮助开发者避免一些日常开发中很难被发现的错误,并且额外的好处是可以改善性能。 Flutter2.2.0(2021年5月19日发布) 之后的版本都要求使用null safety。
##? 可空类型
示例演示:
int a=123;
print(a);
String username="张三";
print(username);
List<String> l1=["张三","李四","王五"];
print(l1);
int a=123; //非空的int类型
a=null; //A value of type 'Null' can't be assigned to a variable of type 'int'
String username="张三"; //非空的String类型
username=null; //A value of type 'Null' can't be assigned to a variable of type 'String'.
String? username="张三"; // String? 表示username是一个可空类型
username=null;
print(username);
int? a=123; // int? 表示a是一个可空类型
a=null;
print(a);
List<String> l1=["张三","李四","王五"];
l1=null; //A value of type 'Null' can't be assigned to a variable of type 'List<String>'.
List<String>? l1=["张三","李四","王五"];
l1=null;
print(l1);
调用方法
print(getData("http://www.itying.com"));
print(getData(null));
##! 类型断言
示例演示
void printLength(String? str){
try {
print(str!.length);
} catch (e) {
print("str is null");
}
}
String? str="this is str";
str=null;
//类型断言: 如果str不等于null 会打印str的长度,如果等于null会抛出异常
print(str!.length);
printLength("str");
printLength(null);
#required关键词 required翻译成中文的意思是需要、依赖 required关键词最开始 @required 是注解 现在它已经作为内置修饰符。 主要用于允许根据需要标记任何命名参数(函数或类),使得它们不为空。因为可选参数中必须有个 required 参数或者该参数有个默认值。
// name 可以传入也可以不传入 age必须传入
class Person {
String? name; //可空属性
int age;
Person({this.name, required this.age}); //表示 name 和age 必须传入
String getName() {
return "${this.name}---${this.age}";
}
}
void main(args) {
Person p = new Person(name: "张三", age: 20);
print(p.getName()); //张三---20
Person p1 = new Person(age: 20);
print(p1.getName()); //null---20
}