跳到主要內容

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