import 'package:cake_wallet/view_model/wallet_new_vm.dart'; import 'package:hive/hive.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/di.dart'; import 'package:cake_wallet/store/app_store.dart'; import 'package:cake_wallet/core/key_service.dart'; import 'package:cw_core/wallet_service.dart'; import 'package:cake_wallet/view_model/wallet_list/wallet_list_item.dart'; import 'package:cw_core/wallet_info.dart'; part 'wallet_list_view_model.g.dart'; class WalletListViewModel = WalletListViewModelBase with _$WalletListViewModel; abstract class WalletListViewModelBase with Store { WalletListViewModelBase(this._walletInfoSource, this._appStore, this._keyService, this.walletNewVM) { wallets = ObservableList(); _updateList(); } @observable ObservableList wallets; final AppStore _appStore; final Box _walletInfoSource; final KeyService _keyService; final WalletNewVM walletNewVM; @action Future loadWallet(WalletListItem wallet) async { final password = await _keyService.getWalletPassword(walletName: wallet.name); final walletService = getIt.get(param1: wallet.type); final loadedWallet = await walletService.openWallet(wallet.name, password); _appStore.changeCurrentWallet(loadedWallet); _updateList(); } @action Future remove(WalletListItem wallet) async { final walletService = getIt.get(param1: wallet.type); await walletService.remove(wallet.name); await _walletInfoSource.delete(wallet.key); _updateList(); } void _updateList() { wallets.clear(); wallets.addAll(_walletInfoSource.values.map((info) => WalletListItem( name: info.name, type: info.type, key: info.key, isCurrent: info.name == _appStore.wallet.name && info.type == _appStore.wallet.type))); } }