Flutter Getx中的put和lazyPut函数使用案例解析
案发现场
在main.dart的runApp函数入口通过AppControllerBinding中的Get.lazyPut懒加载绑定了一个全局的controller,在A界面通过Get.find(),可以拿到这个controller,我退出A界面(还没退出APP)controller就回调了onClose函数,我再次进入商品列表界面
提示我:
"AppController" not found. You need to call "Get.put(AppController())" or "Get.lazyPut(()=>AppController())"
这个时候我很奇怪,既然是通过runApp入口绑定的全局的Controller,为什么在A界面第一次使用的时候可以获取到,退出来就销毁了,在进入A界面就直接报错了呢?
这就要来细读一下Getx中put和lazyPut这两个函数以及他们的参数。
Get.put
Get.put<AppController>(AppController(),permanent: false);
核心是第二个参数permanent,默认是false
当为false的时候,当在A视图中put,退出A视图就会销毁,当在B视图在使用的时候,就会报错
"AppController" not found. You need to call "Get.put(AppController())" or "Get.lazyPut(()=>AppController())"
当为true的时候,一旦put之后,就不会销毁,其他视图也可以继续使用
Get.lazyPut
Get.lazyPut<AppController>(() => AppController(),fenix: true);
到了lazyPut函数又不一样了,因为参数变成fenix了,并不是上面的permanent,而fenix的意思也有很大的区别。我们容易知道lazyPut是懒加载的,在那个视图需要的时候,就在哪个视图初始化,而fenix这个参数就比较重要。
fenix为false的时候:
第一次进入视图的时候初始化,退出视图的时候,销毁,再次进入该视图会报错
"AppController" not found. You need to call "Get.put(AppController())" or "Get.lazyPut(()=>AppController())"
fenix为true的时候:
第一次进入视图的时候初始化,退出视图的时候,销毁,再次进入该视图重新初始化。
这就是案发现场的原因!!!!!
以上就是Flutter Getx中的put和lazyPut函数使用案例解析的详细内容,更多关于Flutter Getx函数put lazyPut的资料请关注脚本之家其它相关文章!
相关文章
Android App中制作仿MIUI的Tab切换效果的实例分享
这篇文章主要介绍了Android App中制作仿MIUI的Tab切换效果的实例分享,实现具有跟随手指滚动而滚动功能的ViewPagerIndicator,需要的朋友可以参考下2016-04-04
Android的SurfaceView和TextureView介绍及使用示例
SurfaceView 是一种用于直接将图形绘制到屏幕的Android组件,下面给大家分享SurfaceView使用示例,它展示了如何在 Android 应用中创建并使用,感兴趣的朋友一起看看吧2024-12-12
AndroidStudio上传本地项目到码云的方法步骤(OSChina)
这篇文章主要介绍了AndroidStudio上传本地项目到码云的方法步骤(OSChina),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2018-04-04


最新评论