首页 > 解决方案 > 必须初始化不可为空的实例字段

问题描述

class Foo {
  int count; // Error
  void bar() => count = 0;
}

为什么我已经在bar方法中初始化它时看到错误?count如果被标记,我可以理解这个错误final

标签: dartdart-null-safety

解决方案


您的代码在 Dart 2.12 之前很好,空安全

使用 null 安全性,Dart 无法知道您是否实际将变量分配给count. Dart 可以通过三种方式查看初始化:

  1. 申报时:

    int count = 0;
    
  2. 在初始化形式中:

    Foo(this.count);
    
  3. 在初始化列表中:

    Foo() : count = 0;
    

因此,根据 Dart 的说法,count从未在您的代码中初始化,因此会出现错误。解决方案是用上面显示的 3 种方式初始化它,或者只使用late关键字告诉 Dart 你将在使用它之前在其他点初始化变量。

  1. 使用late关键字:

    class Foo {
      late int count; // No error
      void bar() => count = 0;
    }
    
  2. 使变量可以为空

    class Foo {
      int? count; // No error
      void bar() => count = 0;
    }
    

推荐阅读