概要
「サードパーティ製のパッケージ入れたらメソッド名ぶつかって入れられん…」
あまり多くはないかもしれませんが、同じ名前のクラスやメソッド二つ。
それぞれを同じファイルでimportして使用する場合、名前解決が出来ずコンパイルエラーが起きます。
具体的には以下の様な場合です。
// sample_a.dart
class Foo {
final int value;
const Foo(this.value);
}
class Bar {
final int value;
const Bar(this.value);
}
// sample_b.dart
class Foo {
final String value;
const Foo(this.value);
}
// main.dart
import './sample_a.dart';
import './sample_b.dart';
void main() {
// ここでコンパイルエラー
// Foo(1);
}
この様な場合に、両ファイルで定義されているのはFooクラスです。
main.dartとしては、どちらのFooを使って良いかわかりません。
こんな時に名前解決をする手段は二つあります。
showキーワードを使う
「実は、sample_a.dartをimportしたのはBarクラスが使いたかっただけなんです…。」
そんな時はこちらの解決策が有効です。
// main.dart
import './sample_a.dart' show Bar;
import './sample_b.dart';
void main() {
Foo("1"); // コンパイル出来る
}
この様にすると、mainにはBarしか読み込まれず、無事にFooが解決出来ます。
asキーワードを使う
「ワシは、両方のFooクラスを使いたいんじゃ!」
そんなあなたにはこちらの解決策が有効です。
// main.dart
import './sample_a.dart' as a;
import './sample_b.dart';
void main() {
var a = a.Foo(1);
var b = Foo("1");
}
この様に名前空間の様なものを定義する事が出来ます。
これで無事に名前解決が出来ます。
誰かのお役に立てば。



コメント