跳到主要内容

deferred_import_of_extension

延迟库的导入必须隐藏所有扩展。

描述

#

当使用延迟导入的库声明了一个在导入库中可见的扩展时,分析器会产生此诊断。扩展方法在编译时解析,而来自延迟库的扩展在编译时不可用。

更多信息,请参阅 延迟加载库

示例

#

假定文件 a.dart 定义了一个命名扩展

dart
class C {}

extension E on String {
  int get size => length;
}

以下代码会产生此诊断,因为命名扩展对该库可见

dart
import 'a.dart' deferred as a;

void f() {
  a.C();
}

常见修复

#

如果库必须以 deferred 形式导入,则可以添加一个 show 子句列出引用的名称,或者添加一个 hide 子句列出所有命名扩展。添加 show 子句如下所示

dart
import 'a.dart' deferred as a show C;

void f() {
  a.C();
}

添加 hide 子句如下所示

dart
import 'a.dart' deferred as a hide E;

void f() {
  a.C();
}

使用第一种修复方法的好处是,如果导入的库中添加了新的扩展,这些扩展也不会导致生成诊断。

如果库不需要以 deferred 形式导入,或者你需要使用其中声明的扩展方法,则删除关键字 deferred

dart
import 'a.dart' as a;

void f() {
  a.C();
}