Getx框架中Get.create()是什么及作用?与Get.put()/lazyPut()的区别
Getx 中 Get.create()、Get.put()、Get.lazyPut() 的区别
先搞懂 Get.create() 的含义
你看到的代码:
Get.create<ShoppingController>(() => ShoppingController());
文档描述的意思很直接:当你用Get.create注册控制器后,每调用一次Get.find<ShoppingController>(),就会生成一个全新的ShoppingController实例。比如在页面A调用Get.find()拿到实例A,页面B再调用Get.find()拿到的是完全独立的实例B,两者的状态、数据互不影响。
和 Get.put()、Get.lazyPut() 的核心区别
1. Get.put()
- 注册时立即创建实例,且整个生命周期内是单例:
Get.put<ShoppingController>(ShoppingController()); - 不管调用多少次
Get.find(),拿到的都是同一个实例,数据状态全局共享。 - 适合需要全局统一状态的场景,比如购物车控制器,所有页面操作的都是同一组购物车数据。
2. Get.lazyPut()
- 懒加载创建实例:注册时不会初始化控制器,只有第一次调用
Get.find()的时候才会创建实例。 - 同样是单例,后续调用
Get.find()都返回同一个实例:Get.lazyPut<ShoppingController>(() => ShoppingController()); - 适合控制器初始化开销大,或者不一定会用到的场景,能节省内存。
三者对比总结
| 方法 | 创建时机 | 是否单例 | 适用场景 |
|---|---|---|---|
| Get.create() | 每次find时创建 | 否 | 需要多个独立实例的场景 |
| Get.put() | 注册时立即创建 | 是 | 全局共享状态、必须立即初始化 |
| Get.lazyPut() | 首次find时创建 | 是 | 懒加载、非必要立即初始化的场景 |
内容的提问来源于stack exchange,提问作者Gwhyyy
相关产品推荐
相关产品推荐

