文章目录
问题 - Get.find() 报错!
刚接触Getx, 遇到
Get.find()
确找不到, 进而报错的问题, 一时间有点没有头绪…
"HomeController" not found. You need to call "Get.put(HomeController())" or "Get.lazyPut(()=>HomeController())"
"HomeController" not found. You need to call "Get.put(HomeController())" or "Get.lazyPut(()=>HomeController())"
原因总结
不废话, 先总结下 not found
的原因(如果不全,那就后面补全)
-
1.在Get.find()之前, 确实没有进行 Get.put注入或者 lazyPut
-
2.通过路由/Binding等进行GetController注入时, 忘记在路由中挂载对应Binding
-
3.在上面两条的基础上,还是无法
Get.find()
, 就要考虑是否由于 调用Get.offName()
/Get.offAllNamed()
导致的,
上一个路由会被这两个函数移除,就导致对应注入的GetController
全都被卸载了!!
OK 正文完结 哈哈
后面是我个人的项目踩坑记录, 可看可不看~~
A:路由和控制器设计
- 关于控制器: 一次注入(懒注入), 可以处处
Get.find()
/Get.find<XxxController>()
(任何页面/widget中,想用到GetController, 就直接
Get.find()
多舒服,
如果是用到了,再去临时注入(Get.put()
,情感上接受不了…)
- 关于路由: 单路由栈设计 or 多路由栈设计
单路由栈: 那很好理解,全部页面在一个路由栈里
多路由栈:
这里的路由栈,更倾向于按业务场景进行划分
以本项目为例:Main路由为栈底的业务层路由栈
+以Login为栈底的功能层路由栈
组成两个逻辑路由栈
a1:项目中的Get路由
aa1.项目路由结构
本项目结构不复杂.大概如图
aa2.本项目路由的注意点:
- Main作为初始路由,初始化时即被加载进路由栈
加载进路由,就会
触发
和