跳到主要内容

diagnostic_describe_all_properties

稳定
有修复可用

在调试方法中引用所有公共属性。

详情

#

debug 方法实现中引用所有公共属性。

Diagnosticable 的实现者应该在 debugFillProperties(...)debugDescribeChildren(...) 方法实现中引用所有公共属性,以提高运行时的可调试性。

公共属性定义为满足以下条件的字段和 getter:

  • 不是包私有的(例如,以 _ 开头)
  • 不是 static 或重写
  • 本身不是 WidgetWidget 的集合

此外,在 Flutter 中,“debug”前缀的属性被特殊对待。出于诊断目的,属性 foo 和带前缀的属性 debugFoo 被视为有效描述同一属性,只需引用其中一个即可。

错误示例

dart
class Absorber extends Widget {
  bool get absorbing => _absorbing;
  bool _absorbing;
  bool get ignoringSemantics => _ignoringSemantics;
  bool _ignoringSemantics;
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('absorbing', absorbing));
    // Missing reference to ignoringSemantics
  }
}

正确示例

dart
class Absorber extends Widget {
  bool get absorbing => _absorbing;
  bool _absorbing;
  bool get ignoringSemantics => _ignoringSemantics;
  bool _ignoringSemantics;
  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(DiagnosticsProperty<bool>('absorbing', absorbing));
    properties.add(DiagnosticsProperty<bool>('ignoringSemantics', ignoringSemantics));
  }
}

启用

#

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

analysis_options.yaml
yaml
linter:
  rules:
    - diagnostic_describe_all_properties

如果改用 YAML map 语法配置 linter 规则,请在 linter > rules 下添加 diagnostic_describe_all_properties: true

analysis_options.yaml
yaml
linter:
  rules:
    diagnostic_describe_all_properties: true