get.put和get.lazyput之间的差异



我是Getx的依赖注入的新手,所以有人能向我解释Get.put()Get.lazyPut()的好处,并告诉我它们有什么区别吗?

简短回答

  • Get.put()将立即放入
  • Get.lazyPut()将在需要时放入

据我所知,put已经将该类的一个实例直接放入内存中,而lazyPut只是将其构建器放入其中。

lazyPut的一个好处是,它可以节省内存,直到你真正find它。你也可以在它的生成器中放入更复杂的代码。lazyPut的另一个优点是,你还可以在它上面写fenix: true,这意味着它可以重建,以防它之前被处理掉。

我认为使用put的唯一好处是find应该比调用时稍微快一点,因为它不需要首先调用构建器来获得实例。我不知道是否还有其他好处。

lazyPut的情况下,它只创建实例,并且只有在使用时才会实例化,请在此处查看更多详细信息

Get.put((:

将注入一个依赖项,并在注入时立即开始执行,我的意思是,当你像这样注入它时,它的生命周期方法,如onInit()onReady(),将执行:

class ControllerOne extends GetxController {
int a = 1;
@override
void onInit() {
print('ControllerOne onInit');
super.onInit();
}
@override
void onReady() {
print('ControllerOne onReady');
super.onReady();
}
}

final controller = Get.put(ControllerOne()); // will inject that dependecy, and immediately will call onInit() method  then onReady() method

调试日志:

ControllerOne onInit
ControllerOne onReady

Get.lazPut((:

还将注入一个依赖项,但在您真正使用该控制器之前,它不会开始执行生命周期方法onInit()onReady()

class ControllerTwo extends GetxController {
int b = 2;
@override
void onInit() {
print('ControllerTwo onInit');
super.onInit();
}
@override
void onReady() {
print('ControllerTwo onReady');
super.onReady();
}
}
final controller = Get.lazyPut(() => ControllerTwo()); // will inject that dependecy, and wait until it's used then it will call onInit() method, then onReady() method

调试日志:

/* nothing will be printed right now */

但如果我们确实使用控制器,例如:

controller.b = 10;

则控制器将开始运行将启动:

调试日志:

ControllerTwo onInit
ControllerTwo onReady

希望这能澄清它!

最新更新