メインコンテンツにスキップ

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