由于dart 在2.12.2 及之后自动启用了空安全,故
一个问号 ?:
String? str = null;
这代表默认允许str 变量的值为空。
如果希望将String? 类型的变量值赋值给String 类型的变量,需要多加一层判断将非空值赋值上去
String? str = null;
if (str == null) {
str = "默认值";
}
也可以利用下面的双问号来代替该判断变量是否为空并赋值的语句
String? str = null;
String notNullStr = str ?? "指定如果str为空时要赋值的默认值";
具体??怎么用看下面的说明
两个问号 ??:
String? str = null;
str ??= "默认值";
这代表先判断str 是否为null ,如果为null 则将??= 后的值赋值给str 变量,否则保持str 的变量内容不变
!:
String? str = null;
try {
String notNullStr = str!;
} catch (e) {
print(e);
}
这代表使用!操作符判断str 是否为null,由于为null时会抛出异常,故一般包裹try catch 使用