From 7464ead41c52046f25b803fba8b920209be728c2 Mon Sep 17 00:00:00 2001 From: malik1004x Date: Thu, 11 Dec 2025 23:23:49 +0100 Subject: [PATCH] Remove SecretStore class for Backup viewmodels (fix for backup password not restoring) (#2723) * backup page viewmodels without secretstore class * minor reaction optimization * minor reaction optimization --- lib/di.dart | 14 ++++------ lib/src/screens/backup/backup_page.dart | 1 + .../backup/edit_backup_password_page.dart | 7 +++++ lib/store/secret_store.dart | 28 ------------------- lib/view_model/backup_view_model.dart | 23 +++++++++------ .../edit_backup_password_view_model.dart | 9 ++---- 6 files changed, 32 insertions(+), 50 deletions(-) delete mode 100644 lib/store/secret_store.dart diff --git a/lib/di.dart b/lib/di.dart index 800399b61..276a470ea 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -224,7 +224,6 @@ import 'package:cake_wallet/store/dashboard/trade_filter_store.dart'; import 'package:cake_wallet/store/dashboard/trades_store.dart'; import 'package:cake_wallet/store/dashboard/transaction_filter_store.dart'; import 'package:cake_wallet/store/node_list_store.dart'; -import 'package:cake_wallet/store/secret_store.dart'; import 'package:cake_wallet/store/seed_settings_store.dart'; import 'package:cake_wallet/store/settings_store.dart'; import 'package:cake_wallet/store/templates/exchange_template_store.dart'; @@ -417,9 +416,6 @@ Future setup({ appName: "Cake Wallet")); getIt.registerLazySingleton(() => TrezorViewModel(getIt())); - final secretStore = await SecretStoreBase.load(getIt.get()); - - getIt.registerSingleton(secretStore); getIt.registerFactory(() => KeyService(getIt.get())); @@ -1354,13 +1350,15 @@ Future setup({ _transactionDescriptionBox, getIt.get(), getIt.get())); - getIt.registerFactory(() => BackupViewModel( - getIt.get(), getIt.get(), getIt.get())); getIt.registerFactory(() => BackupPage(getIt.get())); - getIt.registerFactory( - () => EditBackupPasswordViewModel(getIt.get(), getIt.get())); + getIt.registerSingleton( + EditBackupPasswordViewModel(getIt.get()), + ); + + getIt.registerFactory(() => BackupViewModel( + getIt.get(),getIt.get(), getIt.get())); getIt.registerFactory(() => EditBackupPasswordPage(getIt.get())); diff --git a/lib/src/screens/backup/backup_page.dart b/lib/src/screens/backup/backup_page.dart index b4889e7b0..b682f7479 100644 --- a/lib/src/screens/backup/backup_page.dart +++ b/lib/src/screens/backup/backup_page.dart @@ -105,6 +105,7 @@ class BackupPage extends BasePage { } void onExportBackup(BuildContext context) { + if(backupViewModelBase.backupPassword.isEmpty) return; showPopUp( context: context, builder: (dialogContext) { diff --git a/lib/src/screens/backup/edit_backup_password_page.dart b/lib/src/screens/backup/edit_backup_password_page.dart index 30ce91a22..50d720b60 100644 --- a/lib/src/screens/backup/edit_backup_password_page.dart +++ b/lib/src/screens/backup/edit_backup_password_page.dart @@ -7,6 +7,7 @@ import 'package:cake_wallet/src/screens/base_page.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/view_model/edit_backup_password_view_model.dart'; +import 'package:mobx/mobx.dart'; class EditBackupPasswordPage extends BasePage { EditBackupPasswordPage(this.editBackupPasswordViewModel) @@ -14,6 +15,12 @@ class EditBackupPasswordPage extends BasePage { textEditingController.text = editBackupPasswordViewModel.backupPassword; textEditingController .addListener(() => editBackupPasswordViewModel.backupPassword = textEditingController.text); + + reaction((_) => editBackupPasswordViewModel.backupPassword, (_) { + if (textEditingController.text != editBackupPasswordViewModel.backupPassword) { + textEditingController.text = editBackupPasswordViewModel.backupPassword; + } + }); } final EditBackupPasswordViewModel editBackupPasswordViewModel; diff --git a/lib/store/secret_store.dart b/lib/store/secret_store.dart deleted file mode 100644 index aa185ae3d..000000000 --- a/lib/store/secret_store.dart +++ /dev/null @@ -1,28 +0,0 @@ -import 'package:cake_wallet/core/secure_storage.dart'; -import 'package:cake_wallet/entities/secret_store_key.dart'; -import 'package:mobx/mobx.dart'; - -part 'secret_store.g.dart'; - -class SecretStore = SecretStoreBase with _$SecretStore; - -abstract class SecretStoreBase with Store { - static Future load(SecureStorage storage) async { - final secretStore = SecretStore(); - final backupPasswordKey = generateStoreKeyFor(key: SecretStoreKey.backupPassword); - final backupPassword = await storage.read(key: backupPasswordKey); - // FIX-ME: backupPassword ?? '' ??? - secretStore.write(key: backupPasswordKey, value: backupPassword ?? ''); - - return secretStore; - } - - SecretStoreBase() : values = ObservableMap(); - - ObservableMap values; - - String read(String key) => values[key] as String; - - String write({required String key, required String value}) => - values[key] = value; -} diff --git a/lib/view_model/backup_view_model.dart b/lib/view_model/backup_view_model.dart index f8900a244..d9adb1b66 100644 --- a/lib/view_model/backup_view_model.dart +++ b/lib/view_model/backup_view_model.dart @@ -4,7 +4,7 @@ import 'package:cake_wallet/core/backup_service_v3.dart'; import 'package:cake_wallet/core/execution_state.dart'; import 'package:cake_wallet/core/secure_storage.dart'; import 'package:cake_wallet/entities/secret_store_key.dart'; -import 'package:cake_wallet/store/secret_store.dart'; +import 'package:cake_wallet/view_model/edit_backup_password_view_model.dart'; import 'package:cw_core/root_dir.dart'; import 'package:cw_core/utils/print_verbose.dart'; import 'package:flutter/foundation.dart'; @@ -25,21 +25,28 @@ class BackupExportFile { class BackupViewModel = BackupViewModelBase with _$BackupViewModel; abstract class BackupViewModelBase with Store { - BackupViewModelBase(this.secureStorage, this.secretStore, this.backupService) + BackupViewModelBase(this.secureStorage, this.backupService, this.editBackupPasswordViewModel) : isBackupPasswordVisible = false, backupPassword = '', state = InitialExecutionState() { - final key = generateStoreKeyFor(key: SecretStoreKey.backupPassword); - secretStore.values.observe((change) { - if (change.key == key) { - backupPassword = secretStore.read(key); + init(); + + reaction((_) => editBackupPasswordViewModel.backupPassword, (value) { + if(value != backupPassword) { + backupPassword = value; } - }, fireImmediately: true); + }); + + reaction((_)=>backupPassword, (value){ + if(value != editBackupPasswordViewModel.backupPassword) { + editBackupPasswordViewModel.backupPassword = value; + } + }); } final SecureStorage secureStorage; - final SecretStore secretStore; final BackupServiceV3 backupService; + final EditBackupPasswordViewModel editBackupPasswordViewModel; @observable ExecutionState state; diff --git a/lib/view_model/edit_backup_password_view_model.dart b/lib/view_model/edit_backup_password_view_model.dart index 64c6c166a..2f775897e 100644 --- a/lib/view_model/edit_backup_password_view_model.dart +++ b/lib/view_model/edit_backup_password_view_model.dart @@ -1,7 +1,6 @@ import 'package:cake_wallet/core/secure_storage.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/entities/secret_store_key.dart'; -import 'package:cake_wallet/store/secret_store.dart'; part 'edit_backup_password_view_model.g.dart'; @@ -9,12 +8,11 @@ class EditBackupPasswordViewModel = EditBackupPasswordViewModelBase with _$EditBackupPasswordViewModel; abstract class EditBackupPasswordViewModelBase with Store { - EditBackupPasswordViewModelBase(this.secureStorage, this.secretStore) - : backupPassword = secretStore.read(generateStoreKeyFor(key: SecretStoreKey.backupPassword)), - _originalPassword = ''; + EditBackupPasswordViewModelBase(this.secureStorage,) + : backupPassword = "", + _originalPassword = ''{init();} final SecureStorage secureStorage; - final SecretStore secretStore; @observable String backupPassword; @@ -38,6 +36,5 @@ abstract class EditBackupPasswordViewModelBase with Store { Future save() async { final key = generateStoreKeyFor(key: SecretStoreKey.backupPassword); await secureStorage.write(key: key, value: backupPassword); - secretStore.write(key: key, value: backupPassword); } }