我是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
希望这能澄清它!