【Getx】页面管理

2023-09-14  本文已影响0人  24c41111e47b

记录日常使用Get管理页面的一些小tips


常见用法

打开页面
Get.to(()=>Page())

如果使用 Get.to(Page()) 方式打开会有如下警告:
WARNING, consider using: "Get.to(() => Page())" instead of "Get.to(Page())".
Using a widget function instead of a widget fully guarantees that the widget and its controllers will be removed from memory when they are no longer used.
大概意思是,使用 ()=> Page()这种方式打开的页面,如果页面widget和它里面的controllers如果长时间没有使用,会自动从内存中移除,节省内存资源

打开页面,并设置背景透明
Get.to(()=>Page(), opaque: false)

打开页面,并关闭专场动画
Get.to(()=>Page(), transition: Transition.noTransition)

关闭页面, 返回上一级
Get.back()

关闭当前页面,并打开一个新页面
Get.off(()=>Page())

关闭所有页面,并打开一个新页面
Get.offAll(()=>Page())

注册控制器:没有注册过则注册,注册过则直接返回
Get.put(CustomController())

注册控制器:设置标签,用于注册多个控制器
Get.put(CustomController(), tag:"1111")
Get.put(CustomController(), tag:"222")

如果不设置tag,每次都是使用控制器的类型注册,同一个类型只能注册一次,后面都是复用同一个实例;设置了tag就可以注册多个实例

注意:使用上面方式注册的控制器,再页面退出销毁的时候会自动销毁,所以不需要手动调用Get.Delete<CustomController>() 进行销毁

注册 不自动销毁的控制器(永久控制器)
Get.put(CustomController(), permanent: true)
Get.put(CustomController(), permanent: true, tag: "111")

permanent参数默认false,设置true,则控制器被标记为了不可销毁,页面销毁的时候就不会自动销毁控制器,此时需要手动销毁

手动销毁 永久控制器
Get.delete<CustomController>(force: true)
Get.delete<CustomController>(force: true, tag:"111")

通过force参数来强制销毁永久控制器

查找控制器
Get.find<CustomController>()
Get.find<CustomController>(tag: "111")

使用put注册后,使用Find可以查找到注册的控制器实例;
但是如果使用的是Get.create()注册的控制器,使用Find查找会重新生成新的实例返回

手动生成控制器
Get.create<CustomController>(()=>CustomController())

因为create函数的 permanent 参数默认是true,所以生成的对象不能自动被销毁,需要手动销毁;但是也不会被自动放入内存中复用,所以需要自己持有一下生成的对象进行复用

懒注册控制器
Get.lazyPut(() => CustomController());

这种方式注册后不会立即生成实例,只有使用Get.find查找的时候才会首次生成一次,顾名思义懒加载

异步注册控制器
Get.putAsync(() => CustomController())

构建函数是个异步函数,如果构建控制器依赖网络返回数据,可以使用此方法

使用心得

1.如果我们想全局使用某个控制器,可以使用Get.put进行注册,并使用Get.find进行查找访问
2.直播间悬浮功能的实现,可以在关闭页面的时候,不销毁房间控制器,这样就可以实现只关闭页面,并没有关闭真正的房间逻辑(前提是遵循了MVC架构)

Getx的依赖注入,除了可以注入控制器,也可以注入Page,核心作用是通过依赖注入功能可以在多处共享对象


参考文章:
Getx的依赖原理

上一篇下一篇

猜你喜欢

热点阅读