Flutte GetX 实例化和依赖注入的方法

11 min read

插入/注册依赖Get.put

使用 put 将需要依赖的对象插入到 GetX 中:

Get.put<CounterController>(CounterController());
Get.put<CounterController>(CounterController(), permanent: true);
Get.put<CounterController>(CounterController, tag: "counter");

插入依赖时除了依赖类的实例以外还可以设置额外参数:

  • permanent:是否永久,默认 false 当实例不再使用时会进行销毁,true 则会一直保留
  • tag:标签,用于区分同一个类不同实例。

Get.lazyPut

延迟初始化,在需要用到的时候才会初始化实例对象,即第一次 find 某一个类的时候才会进行初始化。

///只有当第一次使用Get.find<CounterController>时,CounterController才会被调用。
Get.lazyPut<CounterController>(() => CounterController());

Get.lazyPut<CounterController>(
  () {
    // ... some logic if needed
    return CounterController();
  },
  tag: Math.random().toString(),
  fenix: true
)

lazyPut 同样有额外参数,跟 put 基本相同。

  • fenix:类似’永久’,不同的是,当不使用时,实例会被丢弃,但当再次需要使用时,Get会重新创建实例
  • tag:标签,用于区分同一个类不同实例。

Get.putAsync

putAsync 可以异步注册一个实例。用于某些实例需要异步初始化时使用,比如 SharedPreferences:

Get.putAsync<SharedPreferences>(() async {
  final prefs = await SharedPreferences.getInstance();
  await prefs.setInt('counter', 12345);
  return prefs;
});

跟 put 一样,同样拥有 permanenttag 参数,且作用一样。

Get.create

createput 使用方式上基本类似,不同的是它的 permanent 默认为 true。

Get.create<CounterController>(() => CounterController());

Get.find使用

通过 find() 方法获取依赖的实例:

final controller = Get.find<CounterController>();
// 或者
CounterController controller = Get.find();

///通过 tag 获取
final controller = Get.find<CounterController>("counter");

也可以通过 delete() 方法来手动移除注入的依赖实例,大部分情况下不需要手动调用该方法,GetX 内部会自动处理,当不需要时自动移除

Get.delete<CounterController>();