必须初始化不可为空的实例字段“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”