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();
}