【问题标题】:Non-nullable instance field 'taskTitle' must be initialized必须初始化不可为空的实例字段“taskTitle”
【发布时间】: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;
  }
}

【问题讨论】:

    标签: flutter dart dart-null-safety


    【解决方案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);
    }
    

    你也写的更短。

    【讨论】:

      猜你喜欢
      • 2021-07-06
      • 1970-01-01
      • 2021-09-14
      • 2021-10-11
      • 2021-08-27
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多