Flutterでパッケージを作ってみる

Flutterで開発していて、外部パッケージ・プラグインはどうやって動いているんだろう?どんな構成なんだろう?ということを疑問に思ったため、調べてみることにしました。以下はFlutterのドキュメントを参考にします

実際につくるとイメージも湧きやすいだろうと簡単なパッケージ・プラグインをつくってみます。

パッケージとは

Flutterでのコードをモジュール化できる仕組み。最小構成は以下のようになる

・Pubspec.yaml:パッケージ名や作成者等を記述するメタデータファイル
・lib:libディレクトリにモジュール化するコードを書き込む。最小構成は<package-name>.dartファイルのみとなる。

パッケージの種類

パッケージには以下の2種類が存在している

Dart Packages

Dartで記述された、基本的にFlutterの機能に依存するパッケージ。pathfluroなどがある

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をつくってみようと思います。

今回使用したコードはこちらです


いいなと思ったら応援しよう!