我正在升级一个基于 Flutter 框架的个人包。我在 Flutter Text 小部件源代码中注意到这里有一个空检查:
if (textSpan != null) {
properties.add(textSpan!.toDiagnosticsNode(name: 'textSpan', style: DiagnosticsTreeStyle.transition));
}
但是,textSpan!
仍在使用!
运算符。不应该textSpan
在不使用!
运算符的情况下提升为不可为空的类型吗?但是,尝试删除运算符会出现以下错误:
An expression whose value can be 'null' must be null-checked before it can be dereferenced. Try checking that the value isn't 'null' before dereferencing it.
这是一个独立的示例:
class MyClass {
String? _myString;
String get myString {
if (_myString == null) {
return '';
}
return _myString; // <-- error here
}
}
我得到一个编译时错误:
错误:“字符串?”类型的值 无法从函数“myString”返回,因为它的返回类型为“String”。
或者,如果我尝试_mySting.length
获取以下错误:
不能无条件访问属性“长度”,因为接收者可以为“空”。
我认为进行 null 检查会提升_myString
为不可为 null 的类型。为什么不呢?
我的问题在 GitHub 上得到了解决,所以我在下面发布了一个答案。