必须初始化不可为空的实例字段“taskTitle”

Posted

技术标签:

【中文标题】必须初始化不可为空的实例字段“taskTitle”【英文标题】:Non-nullable instance field 'taskTitle' must be initialized 【发布时间】:2021-09-24 23:32:48 【问题描述】:

我是 Flutter 开发的新手,在我的代码中为什么我会收到此错误(必须初始化不可为空的实例字段 taskTitle),尽管 在构造函数中初始化实例字段 .

所以,我假设每当创建这个类实例时,用户都需要提供两个成员,所以这个错误不应该发生(尽管如果添加了后期修饰符,这个错误就会消失)。

请消除我的疑虑。

class Task 
  String taskTitle;
  bool isDone = false;

  Task(String taskTitle, bool isDone) 
    this.taskTitle = taskTitle;
    this.isDone = isDone;
  

【问题讨论】:

【参考方案1】:

您正在使用dart null safety 环境,为此,您必须将taskTitle 变量声明为nullable 变量(如果它可以通过定义为空):

String? taskTitle;

或者如果它不为空,那么你可以说:

late String taskTitle;

这意味着稍后您将初始化 taskTitle 变量并且它不会为空。

【讨论】:

虽然是真的,但它实际上并没有回答为什么 OP 发布的代码抱怨它可能为 null 的问题,而它是其他语言构建不可为 null 类型的首选模式。【参考方案2】:

因为编译器无法完美地评估正文。主体是一些任意代码,能够抛出异常、具有副作用并且通常会做各种令人讨厌的事情。使用提供的方法启用 dart 以确保您的变量确实充满了一些东西:

class Task 
  String taskTitle;
  bool isDone;

  Task(this.taskTitle, this.isDone);

你也写的更短。

【讨论】:

以上是关于必须初始化不可为空的实例字段“taskTitle”的主要内容,如果未能解决你的问题,请参考以下文章

必须初始化不可为空的实例字段

必须初始化不可为空的实例字段“_localizedStrings”

必须初始化不可为空的实例字段“_selectedSize”

为啥我收到警告说必须初始化一个不可为空的字段(当我确定我正在初始化它时)?

颤振错误->必须初始化不可为空的“项目”

在不可为空的字段上验证 NotBlank