如何解决飞镖类中的错误
所以我正在开发这个测验应用程序,我只是为我的问题和答案创建了一个类。但是 vscode 一直告诉我有错误。有人可以帮我吗?
这里是 main.dart
import 'package:Flutter/material.dart';
import 'question.dart';
void main() {
runApp(HomePage());
}
class HomePage extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,home: Scaffold(
backgroundColor: Colors.grey[900],body: SafeArea(
child: Padding(
padding: EdgeInsets.symmetric(horizontal: 10.0),child: Quizzler(),),);
}
}
class Quizzler extends StatefulWidget {
@override
QuizzlerState createState() => QuizzlerState();
}
class QuizzlerState extends State<Quizzler> {
List<Widget> scoreKeeper = [];
List<Domande> domandeBank = [
Domande(d: 'Il sole è una stella',r: true),Domande(d: 'Il latte è verde',r: false),Domande(d: 'Il mare è blu',];
int qNumber = 0;
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.spaceBetween,crossAxisAlignment: CrossAxisAlignment.stretch,children: <Widget>[
Expanded(
flex: 5,child: Padding(
padding: const EdgeInsets.all(10.0),child: Center(
child: Text(
domandeBank[qNumber].domande,style: TextStyle(color: Colors.white),textAlign: TextAlign.center,Expanded(
child: Padding(
padding: const EdgeInsets.all(10.0),child: TextButton(
style: TextButton.styleFrom(padding: EdgeInsets.zero),child: Container(
color: Colors.green,height: 50,width: double.infinity,child: Center(
child: Text(
"True",onpressed: () {
setState(() {
bool risCorretta = domandeBank[qNumber].risposte;
if (risCorretta == true) {
scoreKeeper.add(
Icon(
Icons.check,color: Colors.green,);
} else {
scoreKeeper.add(
Icon(
Icons.close,color: Colors.red,);
}
qNumber++;
});
},child: Container(
color: Colors.red,child: Center(
child: Text(
"False",onpressed: () {
setState(() {
bool risCorretta = domandeBank[qNumber].risposte;
if (risCorretta == false) {
scoreKeeper.add(
Icon(
Icons.check,Row(
children: scoreKeeper,],);
}
}
这里是 question.dart 类
class Domande {
String domande;
bool risposte;
Domande({String d,bool r}) {
domande = d;
risposte = r;
}
}
我得到的错误:
Non-nullable instance field 'domande' must be initialized.
Try adding an initializer expression,or add a field initializer in this constructor,or mark it 'late'.
Non-nullable instance field 'risposte' must be initialized.
Try adding an initializer expression,or mark it 'late'.
The parameter 'd' can't have a value of 'null' because of its type,but the implicit default value is 'null'.
Try adding either an explicit non-'null' default value or the 'required' modifier.
The parameter 'r' can't have a value of 'null' because of its type,but the implicit default value is 'null'.
Try adding either an explicit non-'null' default value or the 'required' modifier.
解决方法
首先你可以省略这部分。
domande = d;
risposte = r;
将 constructor 参数分配给实例变量的模式非常常见,但是使用 dart,您可以像下面的代码片段那样完成。
现在我们来解决你的问题。首先,您使用的是 null-safety 并创建了不是 nullable
的变量。然后你用 optional parameters
创建了你的构造函数,这意味着这些参数可以是 null
,但你的类变量不能为空。这就是您出现此错误的原因。
您可以使用关键字 required 解决此问题,这意味着您的变量是 mandatory
。
class Domande {
String domande;
bool risposte;
Domande({required this.domande,required this.risposte});
}
解决此问题的另一种方法是使用 nullable
使变量 ?
。但是,如果这些变量是 null
,请确保处理这种情况。
class Domande {
String? domande;
bool? risposte;
Domande({this.domande,this.risposte});
}
,
错误与Null Safety in Flutter有关。这基本上意味着,您需要处理代码中的空值。
当您使用以下代码时:
class Domande {
String domande;
bool risposte;
Domande({String d,bool r}) {
domande = d;
risposte = r;
}
}
在构造函数中,Domande({String d,bool r})
你定义了一个非必需参数,那么你就可以使用如下代码:
var item = Domande();
默认参数 d
和 r
为空。但是空安全功能强制您定义可为空的参数。因此,您需要将代码更改为:
class Domande {
String? domande; // nullable
bool? risposte; // nullable
Domande({String d,bool r}) {
domande = d;
risposte = r;
}
}
那么,无论何时使用 Domande
类,都需要处理 domande
和 risposte
的空值。
或者,您可以通过向参数添加 Domande
关键字来强制您的 required
创建始终具有非空值:
class Domande {
String domande;
bool risposte;
Domande({required String d,required bool r}) {
domande = d;
risposte = r;
}
}
因此,您不需要处理空值。但是您不得不使用以下代码创建对象:
var item = Domande(d: "d",r:false);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。