From b0eeec7568d35719bc0133f06e7f257b31430074 Mon Sep 17 00:00:00 2001 From: julian <julian@cypherstack.com> Date: Tue, 16 Jan 2024 13:08:28 -0600 Subject: [PATCH] eth token prices fixes --- lib/main.dart | 7 ------- .../add_token_view/edit_wallet_tokens_view.dart | 5 ++++- .../add_wallet_view/add_wallet_view.dart | 5 ++++- .../tx_v2/transaction_v2_card.dart | 2 +- lib/services/price_service.dart | 14 ++++++++++---- 5 files changed, 19 insertions(+), 14 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 478315623..1d06bbce5 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -317,13 +317,6 @@ class _MaterialAppWithThemeState extends ConsumerState<MaterialAppWithTheme> _desktopHasPassword = await ref.read(storageCryptoHandlerProvider).hasPassword(); } - - ref - .read(priceAnd24hChangeNotifierProvider) - .tokenContractAddressesToCheck - .addAll( - await MainDB.instance.getEthContracts().addressProperty().findAll(), - ); } Future<void> load() async { diff --git a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart index 4a5dcae28..82ca119a4 100644 --- a/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart +++ b/lib/pages/add_wallet_views/add_token_view/edit_wallet_tokens_view.dart @@ -23,6 +23,7 @@ import 'package:stackwallet/pages/add_wallet_views/add_token_view/sub_widgets/ad import 'package:stackwallet/pages/add_wallet_views/add_token_view/sub_widgets/add_token_text.dart'; import 'package:stackwallet/pages/home_view/home_view.dart'; import 'package:stackwallet/pages_desktop_specific/desktop_home_view.dart'; +import 'package:stackwallet/providers/global/price_provider.dart'; import 'package:stackwallet/providers/global/wallets_provider.dart'; import 'package:stackwallet/themes/stack_colors.dart'; import 'package:stackwallet/utilities/assets.dart'; @@ -151,6 +152,7 @@ class _EditWalletTokensViewState extends ConsumerState<EditWalletTokensView> { if (contract != null) { await MainDB.instance.putEthContract(contract); + unawaited(ref.read(priceAnd24hChangeNotifierProvider).updatePrice()); if (mounted) { setState(() { if (tokenEntities @@ -175,7 +177,8 @@ class _EditWalletTokensViewState extends ConsumerState<EditWalletTokensView> { if (contracts.isEmpty) { contracts.addAll(DefaultTokens.list); - MainDB.instance.putEthContracts(contracts); + MainDB.instance.putEthContracts(contracts).then( + (_) => ref.read(priceAnd24hChangeNotifierProvider).updatePrice()); } tokenEntities.addAll(contracts.map((e) => AddTokenListElementData(e))); diff --git a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart index c817b5899..32e1b618c 100644 --- a/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart +++ b/lib/pages/add_wallet_views/add_wallet_view/add_wallet_view.dart @@ -8,6 +8,7 @@ * */ +import 'dart:async'; import 'dart:io'; import 'package:flutter/material.dart'; @@ -107,6 +108,7 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> { if (contract != null) { await MainDB.instance.putEthContract(contract); + unawaited(ref.read(priceAnd24hChangeNotifierProvider).updatePrice()); if (mounted) { setState(() { if (tokenEntities @@ -143,7 +145,8 @@ class _AddWalletViewState extends ConsumerState<AddWalletView> { if (contracts.isEmpty) { contracts.addAll(DefaultTokens.list); - MainDB.instance.putEthContracts(contracts); + MainDB.instance.putEthContracts(contracts).then( + (value) => ref.read(priceAnd24hChangeNotifierProvider).updatePrice()); } tokenEntities.addAll(contracts.map((e) => EthTokenEntity(e))); diff --git a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_card.dart b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_card.dart index 7130c0517..1401625c9 100644 --- a/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_card.dart +++ b/lib/pages/wallet_view/transaction_views/tx_v2/transaction_v2_card.dart @@ -104,7 +104,7 @@ class _TransactionCardStateV2 extends ConsumerState<TransactionCardV2> { final price = ref .watch(priceAnd24hChangeNotifierProvider.select((value) => isTokenTx - ? value.getTokenPrice(_transaction.otherData!) + ? value.getTokenPrice(tokenContract!.address) : value.getPrice(coin))) .item1; diff --git a/lib/services/price_service.dart b/lib/services/price_service.dart index 8a0b2741a..561aa184c 100644 --- a/lib/services/price_service.dart +++ b/lib/services/price_service.dart @@ -12,7 +12,9 @@ import 'dart:async'; import 'package:decimal/decimal.dart'; import 'package:flutter/foundation.dart'; -import 'package:http/http.dart'; +import 'package:isar/isar.dart'; +import 'package:stackwallet/db/isar/main_db.dart'; +import 'package:stackwallet/models/isar/models/isar_models.dart'; import 'package:stackwallet/networking/http.dart'; import 'package:stackwallet/services/price.dart'; import 'package:stackwallet/utilities/enums/coin_enum.dart'; @@ -20,7 +22,9 @@ import 'package:tuple/tuple.dart'; class PriceService extends ChangeNotifier { late final String baseTicker; - final Set<String> tokenContractAddressesToCheck = {}; + Future<Set<String>> get tokenContractAddressesToCheck async => + (await MainDB.instance.getEthContracts().addressProperty().findAll()) + .toSet(); final Duration updateInterval = const Duration(seconds: 60); Timer? _timer; @@ -52,9 +56,11 @@ class PriceService extends ChangeNotifier { } } - if (tokenContractAddressesToCheck.isNotEmpty) { + final _tokenContractAddressesToCheck = await tokenContractAddressesToCheck; + + if (_tokenContractAddressesToCheck.isNotEmpty) { final tokenPriceMap = await _priceAPI.getPricesAnd24hChangeForEthTokens( - contractAddresses: tokenContractAddressesToCheck, + contractAddresses: _tokenContractAddressesToCheck, baseCurrency: baseTicker, );