[异常] Get.lazyPut() 和 Get.put() 区别,xx not found. You need to call Get.put ()

今天在使用 Getx 管理页面时,碰到一个错误。Get.lazyPut()Get.put() 它两是有区别的。前者作为懒加载的方法,当代码执行到 Get.lazyPut() 注册代码时,实例并没创建。比如

 Get.lazyPut(() => ExampleController());

ExampleController 的实例并没有真正创建出来,GetX会为这个实例保持一个”待创建”的状态。只有真正被请求,被使用时(Get.find()),这个 ExampleController 才会被创建。其实打印日志也能看到,只有切换到该页面,这时候创建和初始化日志才会打印

[GETX] Instance "ExampleController" has been created
[GETX] Instance "ExampleController" has been initialized

并且,这个实例的状态会和页面绑定,页面的退出,会让实例被删除。我碰到一个问题,要保证这个实例 ExampleController 在整个项目运行期间都能可用。所以我需要使用 Get.put() 代替 Get.lazyPut() 来插入实例到内存。

我在这里就犯错了,直接将 lazyPut 方法改成 put 方法,如下:

Get.lazyPut(() => ExampleController());
Get.put(() => ExampleController()); // error

Get.put(ExampleController()); // ok

运行还不报错,也能被创建,但获取时,就是获取失败。这是因为 Get.put 方法要接收实例的,而我传递的是函数。这是误用,我担心很多人不注意也搞错,所以特意记在此。

本文由老郭种树原创,转载请注明:https://guozh.net/the-difference-between-get-lazyput-and-put/

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注