目次
概要
今回のブログポストでは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で開発されています。興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。






