[GetX] ディペンデンシー管理

2022-01-24 hit count image

FlutterでGetXを使ってディペンデンシーを管理する方法について説明します。

概要

今回のブログポストではGetXを使ってディペンデンシーを管理する方法について説明します。

ブログシリーズ

このブログポストはFlutterで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.putGet.lazyPutGet.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());
}));

ルートでディペンデンシー注入

次のようにGetPagebindingを使ってコントローラーを生成して、注入することができます。

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で開発されています。

興味がある方はアプリをダウンロードしてアプリを使ってくれると本当に助かります。

Posts