import 'package:hash_wallet/core/amount_parsing_proxy.dart'; import 'package:hash_wallet/di.dart'; import 'package:hash_wallet/entities/preferences_key.dart'; import 'package:hash_wallet/reactions/wallet_connect.dart'; import 'package:hash_wallet/src/screens/wallet_connect/services/walletkit_service.dart'; import 'package:hash_wallet/themes/core/theme_store.dart'; import 'package:hash_wallet/utils/exception_handler.dart'; import 'package:cw_core/transaction_info.dart'; import 'package:cw_core/wallet_type.dart'; import 'package:mobx/mobx.dart'; import 'package:cw_core/balance.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/transaction_history.dart'; import 'package:hash_wallet/store/wallet_list_store.dart'; import 'package:hash_wallet/store/authentication_store.dart'; import 'package:hash_wallet/store/settings_store.dart'; import 'package:hash_wallet/store/node_list_store.dart'; import 'package:shared_preferences/shared_preferences.dart'; part 'app_store.g.dart'; class AppStore = AppStoreBase with _$AppStore; abstract class AppStoreBase with Store { AppStoreBase({ required this.authenticationStore, required this.walletList, required this.settingsStore, required this.nodeListStore, required this.themeStore, }) : _amountParsingProxy = AmountParsingProxy(settingsStore.displayAmountsInSatoshi) { reaction( (_) => settingsStore.displayAmountsInSatoshi, (value) => _amountParsingProxy = AmountParsingProxy(value), ); } AuthenticationStore authenticationStore; @observable WalletBase, TransactionInfo>? wallet; @observable String? currentRouteName; WalletListStore walletList; SettingsStore settingsStore; NodeListStore nodeListStore; ThemeStore themeStore; @observable AmountParsingProxy _amountParsingProxy; @computed AmountParsingProxy get amountParsingProxy => _amountParsingProxy; @action Future changeCurrentWallet( WalletBase, TransactionInfo> wallet) async { bool changingToSameWalletType = this.wallet?.type == wallet.type; this.wallet?.close(shouldCleanup: !changingToSameWalletType); this.wallet = wallet; this.wallet!.setExceptionHandler(ExceptionHandler.onError); if (isWalletConnectCompatibleChain(wallet.type)) { await getIt.get().onDispose(); getIt.get().create(); await getIt.get().init(); } await getIt.get().setString(PreferencesKey.currentWalletName, wallet.name); await getIt .get() .setInt(PreferencesKey.currentWalletType, serializeToInt(wallet.type)); } }