Flutter 状态管理 --Getx 学习 2
已经确定依赖已经初始化完成的,需要使用 controller 的 widget
例如
/// 命名路由 GetPage(name: AppRoutes.SPLASH,page: () => SplashPage(),binding: BindingsBuilder.put(() => Get.put(SplashController())),),/// 闪屏界面 class SplashPage extends GetView<SplashController> {@overrideWidget build(BuildContext context) {return Scaffold(body: Image.asset(R.LOGO_SPLASH_ID,width: double.infinity,height: double.infinity,fit: BoxFit.cover,));}}
GetBuilder
GetBuilder 相比 Obx,GetBuilder 是手动的状态管理器,需要更改的时候主动需要调用 update();
因为 GetBuilder 是手动的状态管理器,所以相比 Obx,内部没有维护 StreamSubscription,内存消耗就会少
GetBuilder 源码还是很好理解的,点进去看下,就简单介绍下怎么使用
/// 必创参数,回调返回子 widgetfinal GetControllerBuilder<T> builder;/// 默认是 true; 如果 Controller 已经注册,如果是已懒加载的方式注册的,GetBuilder 移除的时候删除/// 删除 controller,如果没有注册调用 init 初始化,GetBuilder 移除的时候删除也删除 controller/// 设置 false,调用 init 初始化,GetBuilder 移除的时候删除也删除 controllerfinal bool global;/// 这个 id 很有用,如果同一个 controller,被多个 GetBuilder 关联,当需要赛选其中一个刷新时候/// 调用 update(['id']);final Object id;/// 同一个类型有多个不同的实例时,tag 区分;唯一 final String tag;/// 默认 true,时候自动回收 controllerfinal bool autoRemove;/// 默
认 false 控制当 GetBuilder 移除的时候是否删除内存中的 controllerfinal bool assignId;/// 过滤器,控制刷新时机 final Object Function(T value) filter;/// 对应 state 生命周期的回调 final void Function(State state) initState, dispose, didChangeDependencies;final void Function(GetBuilder oldWidget, State state) didUpdateWidget;/// 当 controller 没有注册的时候,初始化 final T init;
GetX
Getx 相比 GetBuilder 实现了自动响应数据变化,
Getx 相比 Obx,内部可以初始化 controller,以及 state 生命周期的回调,controller 时候及时回收等;
Getx 相比 GetBuilder、Obx 效率要低,
MixinBuilder
看名字就知道融合 Obx、GetBuilder 功能
既可以手动控制刷新,也可以自动刷新;
内存消耗最多的,效率最低的
Getx 还提供很多局部刷新的 weidget ValueBuilder 、ObxValue 等,都很简单,
这里有个很实用的技巧,例如 ObxValue((data) => Switch(value: data.value,onChanged: data, // Rx 有一个 _callable_函数! 你可以使用 (flag) => data.value = flag,),false.obs,),/// 响应数据 data,data();会调用 call()方法,自动赋值,自动刷新 T call([T v]) {
评论