戳这里了解《Flutter入门与实战》专栏,持续更新、系统学习!
前言
由于升级了 Flutter 版本,升级完之后跑了一下之前的代码,也没什么问题。升级后最大的区别在于升级后的版本支持 Dart 的 null safety
版本了。关于 null safety
其实并不是什么新鲜事了,很早的时候 Swift 就已经支持了,Dart是从2.12.2版本开始支持该特性的。本篇以官方文档为蓝本,聊一下 Dart 的 null safety
特性。官方文档链接:Null Safety。
null safety
最大的特点就是默认声明的对象是非空的,除非你明确该对象可以为空。
Nullable 和 non-nullable 类型
当你选择使用 null satety
特性时,所有的类型默认是非空的。例如如果声明了一个 String
类型的变量,那么就意味着它一直包含字符串值。如果你想要一个 String
对象能够接收字符串值或null
,那么就需要在类型声明后面加上?
标识,一个声明为String?
类型的变量可以包含字符串值或 null
。
String? str1;
String str2;
// OK
str1 = null;
// 报错
str2 = null;
// OK
List<String?> strList1 = ['a', null, 'c'];
// 报错
List<String> strList2 = ['a', null, 'c'];
空断言操作符!
如果确定一个对象或表达式返回值有值,那么就可以使用空断言操作符!强制转为不为空对象,然后可以使用它赋值给非空对象,或访问其属性或方法,如 valiable!.xx
。这种情况下,如果对于nullable
对象不加!,编译器就会报错。但是,如果对象本身是null
,加!
操作符会导致异常。
int? couldReturnNullButDoesnt() =>