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,
       );