Flutter之GetX之Obs

1|0Flutter之GetX之Obs

除了之前说过的GetBuilder,GetX还有其他的状态管理方式

一个后缀就可以把一个变量变得可观察,变量每次改变的时候,使用它的小部件就会被更新

var name = '周杰伦'.obs;

然后通过 Obx 或者 GetX 包裹并使用响应式变量的控件,在变量改变的时候就会被更新

Obx (() => Text (controller.name));

.obs就实现了一个被观察者,他们不再是 int 类型,而是 RxInt 类型。对应的小部件也不再是GetBuilder了,而是下面两种

GetX<SumController>( builder: (_) { return Text( '${_.count1}', style: TextStyle(fontWeight: FontWeight.bold), ); }, )
Obx(() => Text( '${Get.find<SumController>().count2}', style: TextStyle(fontWeight: FontWeight.bold), )),

除了通过添加后缀.obs,还有其他方式可以使一个变量变成可观察状态

  1. 使用GetX中的RxType
// 建议使用初始值,但不是强制性的 final name = RxString(''); final isLogged = RxBool(false); final count = RxInt(0); final balance = RxDouble(0.0); final items = RxList<String>([]); final myMap = RxMap<String, int>({});
  1. 使用泛型Rx
final name = Rx<String>(''); final isLogged = Rx<Bool>(false); final count = Rx<Int>(0); final balance = Rx<Double>(0.0); final number = Rx<Num>(0) final items = Rx<List<String>>([]); final myMap = Rx<Map<String, int>>({}); // 自定义类 - 可以是任何类 final user = Rx<User>();

将一个对象转变成可观察的,也有2种方法:

  1. 可以将我们的类值转换为 obs
class RxUser { final name = "Camila".obs; final age = 18.obs; }
  1. 或者可以将整个类转换为一个可观察的类。
class User { User({String name, int age}); var name; var age; } //实例化时。 final user = User(name: "Camila", age: 18).obs;

注意,转化为可观察的变量后,它的类型不再是原生类型,所以取值不能用变量本身,而是.value

虽然这种响应式编程非常好用,但是也不要用的太多了,因为底层其实都是Stream流的实现,用多了之后对内存消耗非常大,而 GetBuilderRAM 中是非常高效的,几乎没有比他更高效的方法。所以这些使用方式在使用过程中要斟酌。


__EOF__

本文作者R1cardo
本文链接https://www.cnblogs.com/r1cardo/p/17289343.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   R1cardo  阅读(2186)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示