diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/coin_details_page.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/coin_details_page.dart index 72b0f90b56..df08aa1b19 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/coin_details_page.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/coin_details_page.dart @@ -40,9 +40,11 @@ class CoinDetailsPage extends HookConsumerWidget { Widget build(BuildContext context, WidgetRef ref) { final walletView = ref.watch(currentWalletViewDataProvider).requireValue; final coinsGroup = walletView.coinGroups.firstWhere((e) => e.symbolGroup == symbolGroup); - final networkSelectorData = ref.watch( - networkSelectorNotifierProvider(symbolGroup: symbolGroup), - ); + final networkSelectorData = ref + .watch( + networkSelectorNotifierProvider(symbolGroup: symbolGroup), + ) + .valueOrNull; final history = ref .watch( coinTransactionHistoryNotifierProvider(symbolGroup: symbolGroup), diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/components/balance/balance.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/components/balance/balance.dart index 00dc28835a..7168953329 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/components/balance/balance.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/components/balance/balance.dart @@ -58,6 +58,7 @@ class Balance extends ConsumerWidget { .read( networkSelectorNotifierProvider(symbolGroup: coinsGroup.symbolGroup), ) + .valueOrNull ?.selected .mapOrNull(network: (network) => network.network); final wallet = ref @@ -84,6 +85,7 @@ class Balance extends ConsumerWidget { .read( networkSelectorNotifierProvider(symbolGroup: coinsGroup.symbolGroup), ) + .valueOrNull ?.selected .mapOrNull(network: (n) => n.network); diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/balance_provider.r.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/balance_provider.r.dart index 6a1431e802..ba36788120 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/balance_provider.r.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/balance_provider.r.dart @@ -27,7 +27,7 @@ class CoinBalanceNotifier extends _$CoinBalanceNotifier { CoinBalanceState build({required String symbolGroup}) { final currentNetwork = ref.watch( networkSelectorNotifierProvider(symbolGroup: symbolGroup).select( - (state) => state?.selected.whenOrNull(network: (network) => network), + (asyncState) => asyncState.valueOrNull?.selected.whenOrNull(network: (network) => network), ), ); diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/coin_transaction_history_notifier_provider.r.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/coin_transaction_history_notifier_provider.r.dart index ecbd4b595c..eb5ac83346 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/coin_transaction_history_notifier_provider.r.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/coin_transaction_history_notifier_provider.r.dart @@ -82,7 +82,7 @@ class CoinTransactionHistoryNotifier extends _$CoinTransactionHistoryNotifier { _network = ref.watch( networkSelectorNotifierProvider(symbolGroup: symbolGroup).select( - (state) => state?.selected.whenOrNull(network: (network) => network), + (asyncState) => asyncState.valueOrNull?.selected.whenOrNull(network: (network) => network), ), ); diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/network_selector_notifier.r.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/network_selector_notifier.r.dart index 694a5637d1..d16ac3f5db 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/network_selector_notifier.r.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/network_selector_notifier.r.dart @@ -9,7 +9,7 @@ part 'network_selector_notifier.r.g.dart'; @riverpod class NetworkSelectorNotifier extends _$NetworkSelectorNotifier { @override - NetworkSelectorData? build({required String symbolGroup}) { + Future build({required String symbolGroup}) async { final networksValue = ref .watch( syncedCoinsBySymbolGroupProvider(symbolGroup), @@ -25,20 +25,32 @@ class NetworkSelectorNotifier extends _$NetworkSelectorNotifier { ...wrappedNetworks, ]; + // Get previous selection from state (safe with valueOrNull in async providers) + final previousState = state.valueOrNull; + final previousSelection = previousState?.selected; + + // Preserve previous selection if it's still valid, otherwise use first item + final selectedItem = previousSelection != null && items.contains(previousSelection) + ? previousSelection + : items.first; + return NetworkSelectorData( items: items, - selected: items.first, + selected: selectedItem, ); } set selected(SelectedNetworkItem item) { + final currentState = state.valueOrNull; + if (currentState == null) return; + final canUpdate = item.map( - network: (item) => state?.items.contains(item) ?? false, + network: (item) => currentState.items.contains(item), all: (_) => true, ); if (canUpdate) { - state = state!.copyWith(selected: item); + state = AsyncData(currentState.copyWith(selected: item)); } } } diff --git a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/selected_crypto_wallet_notifier.r.dart b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/selected_crypto_wallet_notifier.r.dart index 07c73b6637..fbfc6b32c3 100644 --- a/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/selected_crypto_wallet_notifier.r.dart +++ b/lib/app/features/wallets/views/pages/coins_flow/coin_details/providers/selected_crypto_wallet_notifier.r.dart @@ -16,7 +16,7 @@ class SelectedCryptoWalletNotifier extends _$SelectedCryptoWalletNotifier { SelectedCryptoWalletData build({required String symbolGroup}) { final network = ref.watch( networkSelectorNotifierProvider(symbolGroup: symbolGroup).select( - (state) => state?.selected.whenOrNull(network: (network) => network), + (asyncState) => asyncState.valueOrNull?.selected.whenOrNull(network: (network) => network), ), );