必须初始化不可为空的实例字段
Non-nullable instance field must be initialized
class Foo {
int count; // Error
void bar() => count = 0;
}
为什么我已经在 bar
方法中初始化它时看到错误?如果 count
被标记为 final
.
,我可以理解这个错误
(您的代码在 Dart 2.12 之前没有问题,null 安全)
使用空安全,Dart 无法知道您是否真的将变量分配给 count
。 Dart 可以通过三种方式查看初始化:
申报时:
int count = 0;
在初始化形式中:
Foo(this.count);
在初始化列表中:
Foo() : count = 0;
因此,根据 Dart,count
从未在您的代码中初始化,因此出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用 late
关键字,它会告诉 Dart 您将在使用它之前的某个其他时间点初始化变量。
使用late
关键字:
class Foo {
late int count; // No error
void bar() => count = 0;
}
使变量可为空:
class Foo {
int? count; // No error
void bar() => count = 0;
}
这些是 Dart 关于空安全的新规则
class Note {
late int _id;
late String _title;
late String? _description;
late String _date;
late int _priority;
}
确保在你的变量之前输入 late
使用 late 关键字在第一次读取变量时初始化变量,而不是在创建变量时。
class Questionz {late String questionText;late bool questionAnswer;Questionz({required String t, required bool a}) {
questionText = t;
questionAnswer = a;}}
in pubspec.yaml 如果您正在使用:
environment: sdk: ">=2.12.0 <3.0.0"
改为environment: sdk: ">=2.7.0 <3.0.0"
2.12.0 空安全功能已开启 &
2.7.0 空安全功能关闭
提示:不要手动复制更改
了解更多信息https://dart.dev/null-safety
为了空安全,在变量后使用 ?
,如 var a?
,而在使用变量时,在变量后使用 !
,如:if(a!){}
在我的例子中,我发现给予了?和 !对变量有帮助:
double? _bmi; // adding ? to the double
String calculateBMI(){
_bmi=weight/pow(height/100, 2);
return _bmi!.toStringAsFixed(1);// adding ! to the private variable
}
String getResult(){
if(_bmi!>=25){ //adding ! to the private variable
return 'Overweight';
} else if (_bmi!>=18.5)
{
return 'normal';
}else{return 'underweight';}
class Foo {
int count; // Error
void bar() => count = 0;
}
为什么我已经在 bar
方法中初始化它时看到错误?如果 count
被标记为 final
.
(您的代码在 Dart 2.12 之前没有问题,null 安全)
使用空安全,Dart 无法知道您是否真的将变量分配给 count
。 Dart 可以通过三种方式查看初始化:
申报时:
int count = 0;
在初始化形式中:
Foo(this.count);
在初始化列表中:
Foo() : count = 0;
因此,根据 Dart,count
从未在您的代码中初始化,因此出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用 late
关键字,它会告诉 Dart 您将在使用它之前的某个其他时间点初始化变量。
使用
late
关键字:class Foo { late int count; // No error void bar() => count = 0; }
使变量可为空:
class Foo { int? count; // No error void bar() => count = 0; }
这些是 Dart 关于空安全的新规则
class Note {
late int _id;
late String _title;
late String? _description;
late String _date;
late int _priority;
}
确保在你的变量之前输入 late
使用 late 关键字在第一次读取变量时初始化变量,而不是在创建变量时。
class Questionz {late String questionText;late bool questionAnswer;Questionz({required String t, required bool a}) {
questionText = t;
questionAnswer = a;}}
in pubspec.yaml 如果您正在使用:
environment: sdk: ">=2.12.0 <3.0.0"
改为environment: sdk: ">=2.7.0 <3.0.0"
2.12.0 空安全功能已开启 & 2.7.0 空安全功能关闭
提示:不要手动复制更改
了解更多信息https://dart.dev/null-safety
为了空安全,在变量后使用 ?
,如 var a?
,而在使用变量时,在变量后使用 !
,如:if(a!){}
在我的例子中,我发现给予了?和 !对变量有帮助:
double? _bmi; // adding ? to the double
String calculateBMI(){
_bmi=weight/pow(height/100, 2);
return _bmi!.toStringAsFixed(1);// adding ! to the private variable
}
String getResult(){
if(_bmi!>=25){ //adding ! to the private variable
return 'Overweight';
} else if (_bmi!>=18.5)
{
return 'normal';
}else{return 'underweight';}