跳到主内容

未定义的扩展方法

方法 '{0}' 未在扩展 '{1}' 中定义。

描述

#

当使用扩展覆盖来调用方法,但该方法未在指定的扩展中定义时,分析器会生成此诊断。当引用静态方法但该方法未在指定的扩展中定义时,分析器也会生成此诊断。

示例

#

以下代码会生成此诊断,因为扩展 E 未声明名为 b 的实例方法

dart
extension E on String {
  String a() => 'a';
}

extension F on String {
  String b() => 'b';
}

void f() {
  E('c').b();
}

以下代码会生成此诊断,因为扩展 E 未声明名为 a 的静态方法

dart
extension E on String {}

var x = E.a();

常见修复

#

如果方法名称不正确,请将其更改为现有方法的名称

dart
extension E on String {
  String a() => 'a';
}

extension F on String {
  String b() => 'b';
}

void f() {
  E('c').a();
}

如果方法名称正确,但扩展名称错误,请将扩展名称更改为正确的名称

dart
extension E on String {
  String a() => 'a';
}

extension F on String {
  String b() => 'b';
}

void f() {
  F('c').b();
}

如果方法和扩展的名称都正确,但方法未定义,请定义该方法

dart
extension E on String {
  String a() => 'a';
  String b() => 'z';
}

extension F on String {
  String b() => 'b';
}

void f() {
  E('c').b();
}