相关疑难解决方法(0)

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

class Foo {
  int count; // Error
  void bar() => count = 0;
}
Run Code Online (Sandbox Code Playgroud)

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

dart dart-null-safety

12
推荐指数
2
解决办法
2万
查看次数

Dart null 安全性不适用于类字段

我已将我的 Dart 代码迁移到 NNBD / Null Safety。其中一些看起来像这样:

class Foo {
  String? _a;
  void foo() {
    if (_a != null) {
      _a += 'a';
    }
  }
}

class Bar {
  Bar() {
    _a = 'a';
  }
  String _a;
}
Run Code Online (Sandbox Code Playgroud)

这会导致两个分析错误。对于_a += 'a';

值可以为“空”的表达式必须先进行空检查,然后才能取消引用。尝试在取消引用之前检查该值是否为“空”。

对于Bar() {

不可为空的实例字段 '_a' 必须被初始化。尝试添加初始化表达式,或在此构造函数中添加字段初始化器,或将其标记为“迟到”。

在这两种情况下,我已经完全按照错误提示做了!那是怎么回事?

我正在使用 Dart 2.12.0-133.2.beta(12 月 15 日星期二)。

编辑:我发现这个页面说:

分析器无法对整个应用程序的流程进行建模,因此它无法预测全局变量或类字段的值。

但这对我来说没有意义 -在这种情况下只有一个可能的流控制路径从if (_a != null)_a += 'a';- 没有异步代码并且 Dart 是单线程的 …

dart dart-null-safety

11
推荐指数
1
解决办法
2万
查看次数

标签 统计

dart ×2

dart-null-safety ×2