跳到主要内容

final_not_initialized_constructor

所有 final 变量都必须被初始化,但 '{0}' 和 '{1}' 没有。

所有 final 变量都必须被初始化,但 '{0}' 没有。

所有 final 变量都必须被初始化,但 '{0}'、'{1}' 和 {2} 个其他变量没有。

描述

#

当一个类定义了一个或多个没有初始值的 final 实例字段,并且至少有一个构造函数没有初始化这些字段时,分析器会产生此诊断。所有 final 实例字段在实例创建时都必须被初始化,无论是通过字段的初始值设定项还是通过构造函数。

示例

#

以下代码会产生此诊断

dart
class C {
  final String value;

  C();
}

常见修复

#

如果值应该直接传递给构造函数,则使用初始化形式参数来初始化字段 value

dart
class C {
  final String value;

  C(this.value);
}

如果该值应从调用者提供的值间接计算,则添加一个参数并包含一个初始化表达式

dart
class C {
  final String value;

  C(Object o) : value = o.toString();
}

如果字段的值不依赖于可以传递给构造函数的值,则在字段声明中为该字段添加一个初始值设定项

dart
class C {
  final String value = '';

  C();
}

如果字段的值不依赖于可以传递给构造函数的值,但不同的构造函数需要将其初始化为不同的值,则在初始化列表中为该字段添加一个初始值设定项

dart
class C {
  final String value;

  C() : value = '';

  C.named() : value = 'c';
}

然而,如果该值对于所有实例都相同,则考虑使用静态字段而不是实例字段

dart
class C {
  static const String value = '';

  C();
}