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

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

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

回答

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

有了空安全,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;
    }
    

以上是不可为空的实例字段必须被初始化的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>