gpt4 book ai didi

flutter - 在 flutter 中将数据持久化/存储在 GetXController 中的正确方法

转载 作者:行者123 更新时间:2023-12-05 00:53:46 24 4
gpt4 key购买 nike

我有这门课并使用“响应式(Reactive)”状态管理,例如

"".obs

现在我计划从本地存储初始化我的状态(get_storage)onInit()

问题:

我在哪里保存我的数据?一旦某些状态发生变化,我也想将其持久化。

我尝试使用监听器,但它永远不会触发。

目前我有这个:

class CosController extends GetxController {
final box = GetStorage();

RxString econtactnr = ''.obs;

@override
void onInit() {
super.onInit();
addListener(() { //NEVER fires
print('hellowwww listener');
});
econtactnr.value = box.read('econtactnr') ?? '';
}

使用响应式状态管理在 GetXControllers 中将状态存储到磁盘的最佳做法是什么?

编辑:我注意到你可以这样做:

    econtactnr.listen((x) {
box.write('econtactnr', econtactnr.value);
});

问题:可以吗?我是否也必须取消该订阅?

最佳答案

GetX 提供 Workers对于这种类型的功能。 ever方法可以在更新值发生变化时监听并存储它。

在您的 onInit 中试试这个

  @override
void onInit() {
super.onInit();
econtactnr.value = box.read('econtactnr') ?? '';
ever(
econtactnr,
(value) {
box.write('econtactnr', value);
},
);
}

只要您拥有 await GetStorage.init();,这将一直有效。在使用 Get.put(CosController()); 初始化之前发生

如果您需要在应用的整个生命周期中存储它,那么您无需担心将其丢弃,因为您总是希望它监听。

如果您出于某种原因确实要处理它,您可以将监听器保存到 Worker变量。

 Worker worker;

@override
void onInit() {
super.onInit();
econtactnr.value = box.read('econtactnr') ?? '';
worker = ever(
econtactnr,
(value) {
box.write('econtactnr', value);
debugPrint(value);
},
);
}

然后使用 worker.dispose(); 进行处理

关于flutter - 在 flutter 中将数据持久化/存储在 GetXController 中的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67134177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com