Flutterでパッケージを作ってみる
Flutterで開発していて、外部パッケージ・プラグインはどうやって動いているんだろう?どんな構成なんだろう?ということを疑問に思ったため、調べてみることにしました。以下はFlutterのドキュメントを参考にします
実際につくるとイメージも湧きやすいだろうと簡単なパッケージ・プラグインをつくってみます。
パッケージとは
Flutterでのコードをモジュール化できる仕組み。最小構成は以下のようになる
・Pubspec.yaml:パッケージ名や作成者等を記述するメタデータファイル
・lib:libディレクトリにモジュール化するコードを書き込む。最小構成は<package-name>.dartファイルのみとなる。
パッケージの種類
パッケージには以下の2種類が存在している
Dart Packages
Dartで記述された、基本的にFlutterの機能に依存するパッケージ。pathやfluroなどがある
Plugin Packages
いくつかのプラットフォームのネイティブAPIにアクセスするDart Packageを言う。AndroidやiOS、web、linuxなどのデバイスに対応して書かれている。
パッケージの作り方
1. Packageを作成する
以下のコマンドで作成します。
gh repo create helloworld
flutter create --template=package .
2. 必要なコードを書く
あとは自分が書きたいコードを書くだけです。今回は以下のように、lib>helloworld.dartに記述しました。
class HelloWorld {
void hello() => print('Hello World!');
}
3. Packageを公開する
以下のコードで公開できます。--dry-runモードでFlutterの自動分析が入るようです。公開は取り消せません!ご注意を!
flutter pub publish --dry-run
flutter pub publish
flutter pub publish --dry-runを実行したところ、pubspec.yamlにhomepageとrepositoryを入れるように怒られました。Warningなので公開はできるようです。公開します。
Publishing helloworld 0.0.1 to https://pub.dartlang.org:
|-- .gitignore
|-- .metadata
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- lib
| '-- helloworld.dart
|-- pubspec.yaml
'-- test
'-- helloworld_test.dart
Package validation found the following potential issue:
* It's strongly recommended to include a "homepage" or "repository" field in your pubspec.yaml
Package has 1 warning.
pub finished with exit code 65
flutter pub publishを実行し、以下の出力が出ました。
Publishing helloworld 0.0.1 to https://pub.dartlang.org:
|-- .gitignore
|-- .metadata
|-- CHANGELOG.md
|-- LICENSE
|-- README.md
|-- lib
| '-- helloworld.dart
|-- pubspec.yaml
'-- test
'-- helloworld_test.dart
Package validation found the following potential issue:
* It's strongly recommended to include a "homepage" or "repository" field in your pubspec.yaml
Publishing is forever; packages cannot be unpublished.
Policy details are available at https://pub.dev/policy
Package has 1 warning.. Do you want to publish helloworld 0.0.1 (y/N)? y
Pub needs your authorization to upload packages on your behalf.
In a web browser, go to https://accounts.google.com/o/oauth2/auth~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Then click "Allow access".
指示通りのURLにアクセスし、認証したところ公開がSuccessしたというメッセージが表示されました。しかし、pubdevにはまだ反映されていませんでした。少々時間がかかるようです。こちらで自分のPackageが確認できます。
まとめ
今回は最小構成でFlutterのPackageをつくってみました。
Flutterの外部モジュール化にはPackageとPluginの2種類があります。PackageはPythonなどと同様に、importするとPackageで実装したクラス、メソッドが利用できるようでした。
次回はPluginをつくってみようと思います。
今回使用したコードはこちらです