Tos*_*kan 4 flutter flutter-getx
我有这个课程并使用“反应式”状态管理,例如
"".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') ?? '';
}
Run Code Online (Sandbox Code Playgroud)
使用反应式状态管理将状态存储到 GetXController 中的磁盘的最佳实践是什么?
编辑:我注意到你可以这样做:
econtactnr.listen((x) {
box.write('econtactnr', econtactnr.value);
});
Run Code Online (Sandbox Code Playgroud)
问题:这样可以吗?我也必须取消该订阅吗?
GetX为此类功能提供了Workers 。该ever方法可以监听并存储更新后的值,只要它发生变化。
在你的试试这个onInit
@override
void onInit() {
super.onInit();
econtactnr.value = box.read('econtactnr') ?? '';
ever(
econtactnr,
(value) {
box.write('econtactnr', value);
},
);
}
Run Code Online (Sandbox Code Playgroud)
只要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);
},
);
}
Run Code Online (Sandbox Code Playgroud)
然后使用worker.dispose();
| 归档时间: |
|
| 查看次数: |
3662 次 |
| 最近记录: |