GetBuilder、GetX、Obx
- GetBuilder在RAM中最高效,但需要手动调用update()刷新,并且所有GetBuilder同一个Controller的地方都会被重建。
- GetX比GetBuilder消耗内存多一些,无需调用update()刷新,并且只有自己使用的值变化了才会rebuild。有越多的 “单独 “部件,GetX的性能就越突出。
一、响应式状态管理
有越多的 “单独 “部件,GetX的性能就越突出!
响应式状态管理,使用.obs,配合GetX、Obx使用
响应式编程对RAM的消耗比较大
使用响应式状态管理,Controller无须手动调用update()去更新,widget会自动更新。
Controller
1 | Class MyController extends GetxController{ |
View
1 | ///使用GetX的方法,将直接绑定具体的值,如myController.name,其他属性更改不会引起重建 |
1 | MyController myController = Get.put(MyController()); |
List
对list进行插入删除操作,会自动重建使用它的widget。
且调用list的属性不需要用.value
1 | //controller中 |
Workers
1 | ///每次Rx变量发出一个新值时,即`count1`变化时调用。 |
二、简单状态管理
对CPU影响最小,已经尽可能花费最少的资源。
简单状态管理使用GetBuilder,修改配合update()进行更新,如果要只rebuild指定属性,需要指定id。
Controller
1 | Class MyController extends GetxController{ |
View
1 | ///使用GetBuilder的方式,需要配合MyController中的update(), |
三、其他地方使用
如果需要在GetBuilder之外,使用Controller,可以用
1 | MyController controller = Get.find<MyController>(); |
其他
Get被设计为从内存中删除每一个没有创建者ID的控制器。
如果你打算这样做,在B类的GetBuilder中添加 “autoRemove: false “标志,并在C类的GetBuilder中使用adopID = true;一般不需要StatefulWidget,除非需要使用混合器如TickerProviderStateMixin。
需要init和dispose,可以使用GetBuilder中的initState与dispose。
更好的做法是使用Controller中的onInit\一般来说,对于大多数场景都是可以使用响应式变量的。
但是,在一个包含了大量对象的List,都使用响应式变量,将生成大量的
StreamBuilder
,必将对内存造成较大的压力,该情况下,就要考虑使用简单状态管理了