如何结合GetX和build_value的使用?

2024-05-11

我们的应用程序有很多提供商(https://pub.dev/packages/provider https://pub.dev/packages/provider)使用的代码built_value (https://pub.dev/packages/built_value https://pub.dev/packages/built_value)能够使用不可变的数据对象。

现在我们希望将整个提供程序功能迁移到 GetX 的状态管理(https://pub.dev/packages/get https://pub.dev/packages/get)但我不清楚如何使这两件事一起工作? GetX 控制器与直接在逻辑部分使用的 Rx 值一起使用,每当值发生变化时,只有订阅了该值的侦听器才会收到通知。但是,当它与built_value?在那里,“实际”值或多或少被保存数据的内部状态隐藏,并且只能通过 getter 间接访问它。

所以例如用户的实际数据只能在user内吸气剂UserProviderState就像下面的例子一样:

abstract class UserProviderState implements Built<UserProviderState, UserProviderStateBuilder> {
  User? get user;
  ...
}

GetX 控制器的示例(不使用built_value) is:


class LoginController extends GetxController {
  RxString username = ''.obs, password = ''.obs;
  RxBool obscurePassword = true.obs;
  ...
}

使用时有点嵌套built_value以及如何正确使用 GetX 的一些建议将非常感激。谢谢


RxObject当其值发生变化时通知侦听器。
IE。 (来自文档):

final name = 'GetX'.obs;` 
// only "updates" the stream, if the value is different from the current one. 
name.value = 'Hey';

As build_value总是返回一个新对象,你总是会得到一个新值。
所以为了触发你的更新RxObject你只需要向它传递一个新值:

class LoginController extends GetxController {
  final state = UserProviderState().obs;
  ...
  void updateState() {
    state.value = state.value..someProperyOfState = 'new val';
  }
}

如果您的意思是要更换UserProviderState with GetxController那么恭喜你,你滥用了built_value你需要从那里移动所有这些属性

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何结合GetX和build_value的使用? 的相关文章