diff --git a/cw_monero/lib/monero_subaddress_list.dart b/cw_monero/lib/monero_subaddress_list.dart index 0c5284d93..fc5181ddb 100644 --- a/cw_monero/lib/monero_subaddress_list.dart +++ b/cw_monero/lib/monero_subaddress_list.dart @@ -34,8 +34,9 @@ abstract class MoneroSubaddressListBase with Store { try { _isUpdating = true; refresh(accountIndex: accountIndex); + final newAddrs = await getAll(); subaddresses.clear(); - subaddresses.addAll(await getAll()); + subaddresses.addAll(newAddrs); _isUpdating = false; } catch (e) { _isUpdating = false; diff --git a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart index a2d1a3f27..85293fd5e 100644 --- a/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart +++ b/lib/view_model/wallet_address_list/wallet_address_list_view_model.dart @@ -214,7 +214,7 @@ abstract class WalletAddressListViewModelBase extends WalletChangeListenerViewMo final addressList = ObservableList(); if (wallet.type == WalletType.monero) { - final primaryAddress = monero!.getSubaddressList(wallet).subaddresses.first; + final primaryAddress = monero!.getSubaddressList(wallet).subaddresses.firstOrNull; final addressItems = monero!.getSubaddressList(wallet).subaddresses.map((subaddress) { final isPrimary = subaddress == primaryAddress; diff --git a/lib/view_model/wallet_address_list/wallet_address_util.dart b/lib/view_model/wallet_address_list/wallet_address_util.dart index d4df5249d..21bb14395 100644 --- a/lib/view_model/wallet_address_list/wallet_address_util.dart +++ b/lib/view_model/wallet_address_list/wallet_address_util.dart @@ -25,9 +25,16 @@ Future createNewAddress(WalletBase wallet, String label) async { await monero! .getSubaddressList(wallet) .addSubaddress(wallet, accountIndex: monero!.getCurrentAccount(wallet).id, label: label); - final addr = await monero! + final subaddressList = await monero! .getSubaddressList(wallet) - .subaddresses + .subaddresses; + if(subaddressList.isEmpty) { + // this shouldn't happen, we just added an addr. + // somehow, it happened once in prod regardless. + // we just return instead of crashing, user can press the button again ig + return; + } + final addr = subaddressList .first .address; // first because the order is reversed wallet.walletAddresses.manualAddresses.add(addr);