feat: persist whether a wallet still needs its recovery phrase backed up

This commit is contained in:
Blazebrain
2026-08-28 23:07:43 +01:00
parent 9a66b511e3
commit e95d9d143e
6 changed files with 75 additions and 6 deletions
@@ -107,6 +107,7 @@ abstract class DashboardViewModelBase with Store {
wallet = appStore.wallet! {
showDecredInfoCard = wallet.type == WalletType.decred &&
(sharedPreferences.getBool(PreferencesKey.showDecredInfoCard) ?? true);
showSeedBackupReminder = wallet.walletInfo.showSeedBackupReminder;
name = wallet.name;
type = wallet.type;
@@ -207,6 +208,7 @@ abstract class DashboardViewModelBase with Store {
loadCardDesigns();
showDecredInfoCard = wallet?.type == WalletType.decred &&
sharedPreferences.getBool(PreferencesKey.showDecredInfoCard) != false;
loadSeedBackupReminder();
tradeMonitor.stopTradeMonitoring();
tradeMonitor.monitorActiveTrades(wallet!.id);
@@ -892,6 +894,22 @@ abstract class DashboardViewModelBase with Store {
@observable
late bool showDecredInfoCard;
@observable
late bool showSeedBackupReminder;
@computed
bool get hasBalance => wallet.balance.values.any(
(balance) =>
!balance.available.isZero ||
!balance.unavailable.isZero ||
!(balance.secondAvailable?.isZero ?? true) ||
!(balance.secondUnavailable?.isZero ?? true) ||
!(balance.frozen?.isZero ?? true),
);
@computed
bool get shouldShowSeedBackupReminder => showSeedBackupReminder && hasBalance;
@computed
bool get showPayjoinCard =>
wallet.type == WalletType.bitcoin &&
@@ -1121,6 +1139,17 @@ abstract class DashboardViewModelBase with Store {
sharedPreferences.setBool(PreferencesKey.showDecredInfoCard, false);
}
@action
void loadSeedBackupReminder() {
showSeedBackupReminder = wallet.walletInfo.showSeedBackupReminder;
}
@action
Future<void> dismissSeedBackupReminder() async {
showSeedBackupReminder = false;
await wallet.walletInfo.updateShowSeedBackupReminder(false);
}
@action
void dismissPayjoin() {
settingsStore.showPayjoinCard = false;
@@ -1,7 +1,9 @@
import 'dart:async';
import 'dart:math';
import 'package:cake_wallet/utils/feature_flag.dart';
import 'package:cw_core/utils/print_verbose.dart';
import 'package:cw_core/wallet_info.dart';
import 'package:flutter/foundation.dart';
import 'package:cw_core/wallet_type.dart';
import 'package:mobx/mobx.dart';
@@ -16,11 +18,14 @@ abstract class WalletSeedViewModelBase with Store {
: name = wallet.name,
seed = wallet.seed!,
walletType = wallet.type,
_walletInfo = wallet.walletInfo,
currentOptions = ObservableList<String>(),
verificationIndices = ObservableList<int>() {
setupSeedVerification();
}
final WalletInfo _walletInfo;
@observable
String name;
@@ -133,6 +138,7 @@ abstract class WalletSeedViewModelBase with Store {
} else {
// All verification steps completed
isVerificationComplete = true;
unawaited(markSeedVerified());
}
return true;
@@ -141,4 +147,12 @@ abstract class WalletSeedViewModelBase with Store {
return false;
}
}
Future<void> markSeedVerified() async {
if (!_walletInfo.showSeedBackupReminder) {
return;
}
await _walletInfo.updateShowSeedBackupReminder(false);
}
}