我们的应用程序有很多提供商(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(使用前将#替换为@)