创建具有 Flutter 的类和对象

ss2ws0br  于 2023-02-13  发布在  Flutter
关注(0)|答案(3)|浏览(159)

我尝试创建一个类和对象但是我得到的错误是

Error: Field 'questionText' should be initialized because its type 'String' doesn't allow null.
  String questionText;
Error: Field 'questionAnswer' should be initialized because its type 'bool' doesn't allow null.
  bool questionAnswer;
class Question{
  String questionText;
  bool questionAnswer;

  Question({String q, bool a}){
    questionText = q;
    questionAnswer= a;
  }
}
iszxjhcz

iszxjhcz1#

在dart中引入空值安全后,初始化规则更加严格。参见未初始化变量:
示例字段必须要么在声明中有一个初始化器,要么使用一个初始化形式,要么在构造函数的初始化列表中初始化。这是很多术语。下面是一些例子:

// Using null safety:
class SomeClass {
 int atDeclaration = 0;
 int initializingFormal;
 int initializationList;

 SomeClass(this.initializingFormal)
     : initializationList = 0;
}

在您的情况下,您使用的是命名参数,因此您还需要将它们标记为必需的(或者使用位置参数)

class Question{
  String questionText;
  bool questionAnswer;

  Question({required String q, required bool a}) :
    questionText = q,
    questionAnswer= a;
}

初始化形参和命名参数的替代方法:(注意类字段和命名参数需要具有相同的名称)

class Question{
  String questionText;
  bool questionAnswer;

  Question({required this.questionText, required this.questionAnswer});
}
vsikbqxv

vsikbqxv2#

最重要的是,如果你使用命名参数,不写“required”就意味着参数是可选的。而且你不能将String?(String或null)类型的变量赋给String类型的变量。这就是为什么你不能将“q”赋给“questionText”。
您可以将属性设置为可选:

class Question{
  String? questionText;
  bool? questionAnswer;

  Question({String q, bool a}){
    questionText = q;
    questionAnswer= a;
  }
}

或者,您可以将参数设置为必需:

class Question{
  String questionText;
  bool questionAnswer;

  Question({required String q,required bool a}){
    questionText = q;
    questionAnswer= a;
  }
}

一个更简单的方法是这样的:

class Question{
  String questionText;
  bool questionAnswer;

  Question({required String this.questionText, required bool this.questionAnswer});
}
czq61nw1

czq61nw13#

这是Flutter课程中FlutterQuizzler任务的问题,
错误:必须初始化不可为null的示例字段“questionAnswer”。必须初始化不可为null的示例字段“questionText”。
original format - see img

class Question {
  String questionText;
  bool questionAnswer;

  Question({String q, bool a}) { //remove '{', replace with ':'
    questionText = q;            //remove ';', replace with ','
    questionAnswer = a;
  }                              //remove extra '{'
}

要解决这个问题,你只需要重新格式化构造函数:
reformatted constructor

class Question {
  String questionText;
  bool questionAnswer;

  Question({required String q, required bool a}) :
    questionText = q,
    questionAnswer = a;
}

您可能需要添加'required',因为值不能为空。

相关问题