diff --git a/assets/ethereum_server_list.yml b/assets/ethereum_server_list.yml index 47b975c12..125085d88 100644 --- a/assets/ethereum_server_list.yml +++ b/assets/ethereum_server_list.yml @@ -2,8 +2,6 @@ uri: ethereum.publicnode.com - uri: eth.llamarpc.com -- - uri: rpc.ankr.com/eth - uri: rpc.flashbots.net - diff --git a/cw_core/lib/node.dart b/cw_core/lib/node.dart index fef5f0ecb..4e25957bc 100644 --- a/cw_core/lib/node.dart +++ b/cw_core/lib/node.dart @@ -161,7 +161,7 @@ class Node extends HiveObject with Keyable { } catch (_) { return false; } -} + } Future<bool> requestElectrumServer() async { try { @@ -172,4 +172,17 @@ class Node extends HiveObject with Keyable { return false; } } + + Future<bool> requestEthereumServer() async { + try { + final response = await http.get( + uri, + headers: {'Content-Type': 'application/json'}, + ); + + return response.statusCode >= 200 && response.statusCode < 300; + } catch (_) { + return false; + } + } } diff --git a/lib/view_model/dashboard/balance_view_model.dart b/lib/view_model/dashboard/balance_view_model.dart index 21c0e78ad..7c4c9bb90 100644 --- a/lib/view_model/dashboard/balance_view_model.dart +++ b/lib/view_model/dashboard/balance_view_model.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/entities/fiat_api_mode.dart'; +import 'package:cake_wallet/entities/sort_balance_types.dart'; import 'package:cw_core/transaction_history.dart'; import 'package:cw_core/wallet_base.dart'; import 'package:cw_core/balance.dart'; @@ -81,6 +82,12 @@ abstract class BalanceViewModelBase with Store { @computed bool get isHomeScreenSettingsEnabled => wallet.type == WalletType.ethereum; + @computed + SortBalanceBy get sortBalanceBy => settingsStore.sortBalanceBy; + + @computed + bool get pinNativeToken => settingsStore.pinNativeTokenAtTop; + @computed String get asset { final typeFormatted = walletTypeToString(appStore.wallet!.type); @@ -213,7 +220,7 @@ abstract class BalanceViewModelBase with Store { @computed Map<CryptoCurrency, BalanceRecord> get balances { - return wallet.balance.map((key, value) { + return _sortedBalance.map((key, value) { if (displayMode == BalanceDisplayMode.hiddenBalance) { return MapEntry(key, BalanceRecord( availableBalance: '---', @@ -362,5 +369,33 @@ abstract class BalanceViewModelBase with Store { } String getFormattedFrozenBalance(Balance walletBalance) => walletBalance.formattedFrozenBalance; + + @computed + Map<CryptoCurrency, Balance> get _sortedBalance { + final Map<CryptoCurrency, Balance> sortedMap = {}; + if (pinNativeToken) { + sortedMap[wallet.currency] = wallet.balance[wallet.currency]!; + } + switch (sortBalanceBy) { + case SortBalanceBy.FiatBalance: + sortedMap.addAll(Map.fromEntries(wallet.balance.entries.toList() + ..sort((e1, e2) => double.parse( + _getFiatBalance(price: price, cryptoAmount: e2.value.formattedAvailableBalance)) + .compareTo(double.parse(_getFiatBalance( + price: price, cryptoAmount: e1.value.formattedAvailableBalance)))))); + break; + case SortBalanceBy.GrossBalance: + sortedMap.addAll(Map.fromEntries(wallet.balance.entries.toList() + ..sort((e1, e2) => double.parse(e2.value.formattedAvailableBalance) + .compareTo(double.parse(e1.value.formattedAvailableBalance))))); + break; + case SortBalanceBy.Alphabetical: + sortedMap.addAll(Map.fromEntries(wallet.balance.entries.toList() + ..sort((e1, e2) => e1.key.title.compareTo(e2.key.title)))); + break; + } + + return sortedMap; + } }