在 GetXController 中持久保存/存储数据的正确方法
Proper way to persist / store data in GetXController in flutter
我有这个 class 并使用“反应式”状态管理,例如
"".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);
},
);
}
只要在使用 Get.put(CosController());
初始化之前发生 await GetStorage.init();
,这就会起作用并持续存在
如果您需要在应用程序的整个生命周期中存储它,那么您无需担心处置它,因为您总是希望它能够监听。
如果您出于任何原因确实想要处理它,您可以将侦听器保存到 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();
进行处理
我有这个 class 并使用“反应式”状态管理,例如
"".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);
},
);
}
只要在使用 Get.put(CosController());
await GetStorage.init();
,这就会起作用并持续存在
如果您需要在应用程序的整个生命周期中存储它,那么您无需担心处置它,因为您总是希望它能够监听。
如果您出于任何原因确实想要处理它,您可以将侦听器保存到 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();