对Flutter GetX的一些理解

GetX的优势

1.内部实现了路由管理,相比目前主流的fluro框架更轻量,并且路由跳转无需上下文对象,支持自定义路由中间件和动态路由传参等功能。
2.提供两种简单灵活的实现状态管理的方式。
3.它内部实现了依赖注入,可以快速的获取到某个状态管理器(GetxController)。
4.在实际开发中,通过上述三点配合使用,可以将界面、业务、路由、依赖等进行分离。在做到UI刷新跨界面交互的同时,又能提高整体模块代码的可维护性和架构的可扩展性
5.提供修改全局语言/主题和其他的一些高级Api以及GetUtils工具类等。
6.可以全局获取上下文对象,所以上述场景都是不需要Context的。
7.只有用到的模块才会被编译到代码中,不会导致包体积增大
8…

状态管理

常用的几种状态管理对比

1.Bloc非常安全和高效,但是模版代码太多,实现太过复杂。
2.Provider内部使用InheritedWidget且依赖上下文对象,对其ChangeNotifier类的任何访问都必须在widget树或widget子树内。
3.Fish_redux层次划分是比较细的,但是写起来很费劲,每次都要生成很多文件。
4.那其实每种方式都有其优缺点,但是Get并不是比任何其他状态管理更好,而是通过和它提供的其他模块搭配使用,使得模块代码更简单灵活且易维护而已。

GetxController *

1.主要是用于分离UI代码与业务逻辑2.提供可以手动刷新UI的方法(update())3.提供和StatefulWidget类似的生命周期,常用的有以下这三个方法1.onInit:数据初始化、加载缓存等处理2.onReady:界面渲染第一帧后调用,刷新UI的操作需要在这里处理3.onClose:做一些清除资源等处理

Get提供响应式状态简单状态两种状态管理器

响应式状态管理器

主要通过Obx和GetX Widget实现,但是GetX Widget 会多消耗内存,所以只介绍Obx的使用

1.创建控制器并继承GetxController,通过.obs扩展方法声明响应式变量(Rx)class Controller extends GetxController { var count = 0.obs}​extension DoubleExtension on double {  RxDouble get obs => RxDouble(this);} 2.使用Obx方法实现定点刷新final logic = Get.find<Controller>();Obx(() => Text(  '${logic.count.value}',));​ 3.Obx()方法刷新的条件* 只有当响应式变量的值发生变化时,才会执行刷新操作,当某个变量初始值为:0,再赋值为:0,并不会执行刷新操作* 该响应式变量改变时,只有包裹该响应式变量的Obx()方法才会执行刷新操作(局部刷新)

简单状态管理器GetBuilder

1.创建控制器并继承GetxControllerclass Controller extends GetxController {  int counter = 0;  void increment() {    counter++;    update();}} 2.通过GetBuilder包裹想要刷新的UI// Stateless/StatefulGetBuilder<Controller>(  // 未注入的控制器需要进行初始化  init: Controller(),  builder: (_) => Text(    '${_.counter}',),) 3.当多处引用了同一个属性,但只想单独更新某一个地方,那么就可以用UniqueID来进行区分。class Controller extends GetxController {  int counter = 0;  void increment() {    counter++;    update(['hc_count']);}}​GetBuilder<CountController>(    builder: (controller) {  return Text(      "${controller.counter}",      style: TextStyle(color: Colors.red, fontSize: 30),    );  },),​GetBuilder<CountController>(    id: 'hc_count',    builder: (controller) {      return Text(      "${controller.counter}",      style: TextStyle(color: Colors.green, fontSize: 30),    );  },), 但是一般这种场景很少见,不需要刷新的直接通过find Controller拿数据就可以。不需要用GetBuilder包裹。或者说有应用其他场景,暂时没想到#### 总结

1.Obx是配合响应式变量使用;GetBuilder是配合update使用。前者响应式变量变化,Obx自动刷新;后者需要使用update手动调用刷新。
2.每一个响应式变量,都会生成对应的GetStream,会对内存造成一定压力。
3.但GetBuilder内部实际上是对StatefulWidget的封装,所以占用资源极小。<

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值