目次
概要
今回のブログポストではGetXを使ってディペンデンシーを管理する方法について説明します。
ブログシリーズ
このブログポストはFlutterでGetXを使う方法についてシリーズとしてまとめています。GetXの他の使い方については下記のリンクを参考してください。
- [GetX] 状態管理
- [GetX] ルート管理
- [GetX] ディペンデンシー管理
- [GetX] 多言語
- [GetX] テーマ
- [GetX] BottomSheet
- [GetX] Dialog
- [GetX] スナックバー
- [GetX] プラットフォームやデバイス情報
GetXのインストール
FlutterでGetXの使う方法を確認するため次のコマンドを使ってFlutterの新しいプロジェクトを生成します。
flutter create dependency_management
そして次のコマンドを実行してGetX
パッケージをインストールします。
flutter pub add get
このようにインストールしたGetXを使ってディペンデンシーを管理する方法について説明します。
Get.put
一般的にはGetXでディペンデンシーを管理するためには次のようにGet.put
を使います。
Get.put(CountController());
Get.put
で追加されたコントローラーを次のように変数に割り当てて使います。
final controller = Get.put(CountController());
...
print(controller.count.value);
...
controller.increment();
Get.lazyPut
Get.put
を使ってコントローラーを追加したら、当該コードが実行される時点でコントローラーがメモリ上に生成されます。しかし、次のようにGet.lazyPut
を使うと、実際コントローラーを使う時点でコントローラーがメモリに生成されます。
Get.lazyPut<CountController>(() => CountController());
Get.putAsync
追加するコントローラーがFuture
をリターンする場合、次のようにGet.putAsync
を使って非同期コントローラーを処理することができます。
Get.putAsync<CountController>(() async => await CountController());
Get.find
Get.put
、Get.lazyPut
、Get.putAsync
を使ってコントローラーを追加したら、次のようにGet.find
を使って追加したコントローラーを探して使うことができます。
final controller = Get.find<CountController>();
...
print(controller.count.value);
...
controller.increment();
画面移動時、ディペンデンシー注入
次のようにGet.to
で画面を移動する時、binding
を使ってコントローラーを生成して、注入することができます。
Get.to(Second(), binding: BindingsBuilder(() {
Get.put(CountController());
}));
または、次のようにGet.toNamed
でも使うことができます。
Get.toNamed('/second', binding: BindingsBuilder(() {
Get.put(CountController());
}));
ルートでディペンデンシー注入
次のようにGetPage
でbinding
を使ってコントローラーを生成して、注入することができます。
getPages: [
GetPage(name:"/", page: () => Home()),
GetPage(name:"/second", page: () => Second(), binding: BindingsBuilder(() {
Get.lazyPut<CountController>(() => CountController());
})),
]
binding分離
上で、Get.to / Get.toNamed
またはGetPage
でbindingを直接使いましたが、次のようにbinding
を分離することができます。
class SecondBinding implements Bindings {
@override
void dependencies() {
Get.lazyPut<CountController>(() => CountController());
}
}
このように生成したbinding
を次のようにGet.to / Get.toNamed
で使うことができます。
Get.to(Second(), binding: binding: SecondBinding());
または次のようにGetPage
でも使うことができます。
getPages: [
GetPage(name:"/", page: () => Home()),
GetPage(name:"/second", page: () => Second(), binding: SecondBinding()),
]
permanentとGetxService
GetXでコントローラーは使い終わったら、自動でメモリから削除されます。しかし、あらかじめデータをロードしたり、よく使えるコントローラーはあらかじめメモリにロードして、ロードされたコントローラーを削除せずに引き続き使う場合があります。この場合、次のようにpermanent
オプションを使います。
Get.put(CountController(), permanent: true);
または次のようにGetxController
を使うことではなくGetxService
を使って削除されないコントローラーを生成することができます。
// class CountController extends GetxController {
class CountController extends GetxService {
...
}
Get.reset
すでにメモリに追加されたコントローラーを初期化する必要がある場合、次のようにGet.reset
を使います。
Get.reset();
主に次のようにテストコードを作成する時、使います。
setUp(() {
Get.reset();
});
Get.remove
あまり使えませんが、特定な状況でメモリに登録されたコントローラーを削除する必要がある場合、Get.remove
を使って削除することができます。
Get.delete<CountController>();
GetXはコントローラーの使いが終わったら、自動でメモリから削除されるので、普通は使うことがないです。
完了
これでGetXでディペンデンシーを管理する方法についてみてみました。また、GetXで生成したコントローラーを続けて使えるように維持する方法や、初期化する方法などについてもみてみました。
私のブログが役に立ちましたか?下にコメントを残してください。それは私にとって大きな大きな力になります!
アプリ広報
Deku
が開発したアプリを使ってみてください。Deku
が開発したアプリはFlutterで開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。