概要
「サードパーティ製のパッケージ入れたらメソッド名ぶつかって入れられん…」
あまり多くはないかもしれませんが、同じ名前のクラスやメソッド二つ。
それぞれを同じファイルで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"); }
この様に名前空間の様なものを定義する事が出来ます。
これで無事に名前解決が出来ます。
誰かのお役に立てば。
コメント