Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter &引用;操作员可以’;t不能无条件调用,因为接收方可以为null;迁移到Dart null安全后出错_Flutter_Dart_Type Promotion_Dart Null Safety - Fatal编程技术网

Flutter &引用;操作员可以’;t不能无条件调用,因为接收方可以为null;迁移到Dart null安全后出错

Flutter &引用;操作员可以’;t不能无条件调用,因为接收方可以为null;迁移到Dart null安全后出错,flutter,dart,type-promotion,dart-null-safety,Flutter,Dart,Type Promotion,Dart Null Safety,我正在升级一个基于颤振框架的个人软件包。我注意到在颤振文本小部件源代码中有一个空检查: if(textSpan!=null){ 添加(textSpan!.toDiagnosticsNode(名称:“textSpan”,样式:DiagnosticsTreeStyle.transition)); } 但是,textSpan仍在使用操作员。不必使用,就不应该将文本span升级为不可为空的类型操作员?但是,尝试删除该运算符会出现以下错误: 以下是一个独立的示例: class-MyClass{ 字符串?

我正在升级一个基于颤振框架的个人软件包。我注意到在颤振文本小部件源代码中有一个空检查:

if(textSpan!=null){
添加(textSpan!.toDiagnosticsNode(名称:“textSpan”,样式:DiagnosticsTreeStyle.transition));
}
但是,
textSpan仍在使用
操作员。不必使用
,就不应该将
文本span
升级为不可为空的类型操作员?但是,尝试删除该运算符会出现以下错误:

以下是一个独立的示例:

class-MyClass{
字符串?\u myString;
字符串获取myString{
if(_myString==null){
返回“”;
}
返回_myString;//Dart工程师Erik Ernst:

类型提升仅适用于局部变量……实例变量的提升是不合理的,因为它可能会被运行计算并在每次调用时返回不同对象的getter覆盖。有关类似于类型提升但基于动态检查的机制的讨论,请参阅让我们来看看相关的讨论

因此,本地类型的推广工作:

stringmymethod(String?myString){
if(myString==null){
返回“”;
}
返回myString;
}
但实例变量不会升级。为此,您需要使用
运算符手动告诉Dart,在这种情况下,您确保实例变量不为null:

class-MyClass{
字符串?\u myString;
字符串myMethod(){
if(_myString==null){
返回“”;
}
返回我的字符串!;
}
}
错误: 比方说,这是您的代码,您正在对实例变量执行null检查,但仍然看到一个错误:

class-Foo{
int?i=0;
双杠(){

if(i!=null)return i.toDouble();//这基本上是的另一个版本(我肯定还存在其他问题)@jamesdlin,这很有趣。我没有意识到这比空安全更普遍。局部变量解决方案看起来是最好的选择,特别是当您需要使用+=或*=运算符时。文档详细信息:可以将
myMethod
重写为
String myMethod(){return\u myString???
?@gegobyte,是的(如果添加分号)。
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.