Dart:不要重命名重写方法的参数 (avoid_renaming_method_parameters)

Dart: Don't rename parameters of overridden methods (avoid_renaming_method_parameters)

我有一个要覆盖的方法:

@override
bool operator ==(Object o) {
  if (identical(this, o)) return true;

  return o is Song &&
      o.id == id &&
      o.name == name &&
      o.lyrics == lyrics &&
      o.url == url;
}

但是我收到来自 flutter_lints 的 lint 警告:

Don't rename parameters of overridden methods. dart(avoid_renaming_method_parameters)

它在抱怨什么?我该如何解决?

我找到了答案所以我在下面发帖。

当您重写一个带参数的方法时,您应该使用与来自 super class 的原始方法相同的参数名称。如果你不知道它们是什么,看看超级class源码就知道了。

在你的情况下你有:

@override
bool operator ==(Object o) {
  // ...
}

但是如果你看一下超级 class 的源代码(可能是 Object 除非你有一些其他的 class 覆盖了相等运算符),你会看到以下:

external bool operator ==(Object other);

所以要消除警告,您应该将 o 更改为 other:

@override
bool operator ==(Object other) {
  // ...
}

一般情况下,当您收到分析器的投诉时,您可以搜索警告消息中报告的 lint ID。在本例中,即 avoid_renaming_method_parametersThe documentation for the avoid_renaming_method_parameters lint 解释触发它的原因和原因:

Methods that override another method, but do not have their own documentation comment, will inherit the overridden method's comment when dartdoc produces documentation. If the inherited method contains the name of the parameter (in square brackets), then dartdoc cannot link it correctly.

因此,即使位置参数的名称通常无关紧要,avoid_renaming_method_parameters lint 也会在以下两种情况下触发:

  • 参数名称与覆盖方法的名称不同。
  • 覆盖不提供自己的 dartdoc 注释。