12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter/Dart】import文のas/show/hideって何?

Posted at

Flutterの開発において(他の言語でもそうですが)、import文を書いて別ファイルやパッケージの読み込みを行うことが出来ます。

import 'package:myproject/pages/home_page.dart';
import 'package:intl/intl.dart';

このimport文の末尾に読み込んだファイルやパッケージに任意の名前を付けることが出来ます。

import 'package:intl/intl.dart' as intl;
// intl.パッケージ内のクラス名
intl.NumberFormat('#,###', 'en_US')

こんな感じでよく使いますね。

そもそもなんで任意の名前を付けるのか?

例えば、NumberFormatというクラスがあるファイルにintlパッケージをimportし、intlパッケージのNumberFormatの機能を使おうとするとクラス名が重複しているので正しく読み込まれません。この場合、任意の名前を付けることによってこのようなバグを防ぐことが出来ます。

import 'package:intl/intl.dart' as intl;
// intl.パッケージ内のクラス名
intl.NumberFormat('#,###', 'en_US')
// 上記のNumberFormatはintlパッケージのクラスと認識される
class NumberFormat {
}

ではas/show/hideの違いはなんでしょう?

as/show/hideの違いは何?

asを使うと、import先のすべての関数とクラスにアクセスすることができます。

import 'package:intl/intl.dart' as intl;

// 両方ともアクセス可能
intl.NumberFormat('#,###', 'en_US')
intl.DateFormat('yyyy-MM-dd')

showを使うと、パッケージ内でアクセス可能なクラスや関数を指定することが出来ます。

import 'package:intl/intl.dart' show NumberFormat;
// アクセス可能
NumberFormat('#,###', 'en_US')
// showで指定していないのでアクセス不可
DateFormat('yyyy-MM-dd')

反対にhideを使うと、アクセス不可のクラスを指定することが出来ます。

import 'package:intl/intl.dart' hide DateFormat;
// アクセス可能
NumberFormat('#,###', 'en_US')
// hideの指定によりアクセス不可
DateFormat('yyyy-MM-dd')

また、asとshow、hideを組み合わせることも可能です。

import 'package:intl/intl.dart' as intl show NumberFormat;
// アクセス可能
intl.NumberFormat('#,###', 'en_US')
// showで指定していないのでアクセス不可
intl.DateFormat('yyyy-MM-dd')

基本的にはasを使うで問題ないと思いますが、規模の大きいアプリの場合は名前の衝突を防ぐためにもshowやhideを使い分けることが大事になるかもしれないですね。

参考

12
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?