跳到主要内容

prefer_final_fields

稳定
推荐
可修复

私有字段可以为 final

详情

#

来自 Effective Dart

应该优先将私有字段声明为 final,如果它们在库的后续代码中没有被重新赋值。

尽可能将字段声明为 final 是一个好的实践,因为它有助于避免意外的重新赋值,并允许编译器进行优化。

错误示例

dart
class BadImmutable {
  var _label = 'hola mundo! BadImmutable'; // LINT
  var label = 'hola mundo! BadImmutable'; // OK
}

错误示例

dart
class MultipleMutable {
  var _label = 'hola mundo! GoodMutable', _offender = 'mumble mumble!'; // LINT
  var _someOther; // LINT

  MultipleMutable() : _someOther = 5;

  MultipleMutable(this._someOther);

  void changeLabel() {
    _label= 'hello world! GoodMutable';
  }
}

正确示例

dart
class GoodImmutable {
  final label = 'hola mundo! BadImmutable', bla = 5; // OK
  final _label = 'hola mundo! BadImmutable', _bla = 5; // OK
}

正确示例

dart
class GoodMutable {
  var _label = 'hola mundo! GoodMutable';

  void changeLabel() {
    _label = 'hello world! GoodMutable';
  }
}

错误示例

dart
class AssignedInAllConstructors {
  var _label; // LINT
  AssignedInAllConstructors(this._label);
  AssignedInAllConstructors.withDefault() : _label = 'Hello';
}

正确示例

dart
class NotAssignedInAllConstructors {
  var _label; // OK
  NotAssignedInAllConstructors();
  NotAssignedInAllConstructors.withDefault() : _label = 'Hello';
}

启用

#

要启用 prefer_final_fields 规则,请在你的 analysis_options.yaml 文件中的 linter > rules 下添加 prefer_final_fields

analysis_options.yaml
yaml
linter:
  rules:
    - prefer_final_fields

如果您改为使用 YAML 映射语法来配置 linter 规则,请在 linter > rules 下添加 prefer_final_fields: true

analysis_options.yaml
yaml
linter:
  rules:
    prefer_final_fields: true