From 59861705e44e431e6f161fed93588feedbfde453 Mon Sep 17 00:00:00 2001 From: Bibash Shrestha Date: Thu, 5 Dec 2024 18:30:38 +0545 Subject: [PATCH] refactor: Fix blockchain network management issue #3153 --- lib/app/view/app.dart | 1 + .../cubit/manage_accounts_cubit.dart | 12 --- .../cubit/manage_network_cubit.dart | 81 ++++++++++++++++--- lib/enterprise/cubit/enterprise_cubit.dart | 10 ++- lib/splash/bloclisteners/blocklisteners.dart | 2 +- lib/wallet/cubit/wallet_cubit.dart | 6 +- 6 files changed, 80 insertions(+), 32 deletions(-) diff --git a/lib/app/view/app.dart b/lib/app/view/app.dart index 9d63894bb..28d581098 100644 --- a/lib/app/view/app.dart +++ b/lib/app/view/app.dart @@ -157,6 +157,7 @@ class App extends StatelessWidget { create: (context) => ManageNetworkCubit( secureStorageProvider: secureStorageProvider, walletCubit: context.read(), + profileCubit: context.read(), ), ), BlocProvider( diff --git a/lib/dashboard/drawer/blockchain_settings/manage_accounts/cubit/manage_accounts_cubit.dart b/lib/dashboard/drawer/blockchain_settings/manage_accounts/cubit/manage_accounts_cubit.dart index 907cbd697..39fea1847 100644 --- a/lib/dashboard/drawer/blockchain_settings/manage_accounts/cubit/manage_accounts_cubit.dart +++ b/lib/dashboard/drawer/blockchain_settings/manage_accounts/cubit/manage_accounts_cubit.dart @@ -43,18 +43,6 @@ class ManageAccountsCubit extends Cubit { blockchainType: blockchainType, ); emit(state.success(currentCryptoIndex: index)); - - final testnet = credentialsCubit - .profileCubit.state.model.profileSetting.blockchainOptions?.testnet; - - if (testnet != null) { - final currentNetworkList = blockchainType.networks; - if (testnet) { - await manageNetworkCubit.setNetwork(currentNetworkList[1]); - } else { - await manageNetworkCubit.setNetwork(currentNetworkList[0]); - } - } } Future editCryptoAccount({ diff --git a/lib/dashboard/drawer/blockchain_settings/manage_network/cubit/manage_network_cubit.dart b/lib/dashboard/drawer/blockchain_settings/manage_network/cubit/manage_network_cubit.dart index 1f74aa5a6..910c233fc 100644 --- a/lib/dashboard/drawer/blockchain_settings/manage_network/cubit/manage_network_cubit.dart +++ b/lib/dashboard/drawer/blockchain_settings/manage_network/cubit/manage_network_cubit.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:altme/app/app.dart'; +import 'package:altme/dashboard/dashboard.dart'; import 'package:altme/wallet/cubit/wallet_cubit.dart'; import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; @@ -15,12 +16,12 @@ class ManageNetworkCubit extends Cubit { ManageNetworkCubit({ required this.secureStorageProvider, required this.walletCubit, - }) : super(ManageNetworkState(network: TezosNetwork.mainNet())) { - loadNetwork(); - } + required this.profileCubit, + }) : super(ManageNetworkState(network: TezosNetwork.mainNet())); final SecureStorageProvider secureStorageProvider; final WalletCubit walletCubit; + final ProfileCubit profileCubit; Future loadNetwork() async { final blockchainType = walletCubit.state.currentAccount?.blockchainType; @@ -41,21 +42,22 @@ class ManageNetworkCubit extends Cubit { if (jsonData.containsKey(key)) { final index = jsonData[key] as int; blockchainNetwork = blockchainType.networks[index]; + emit(state.copyWith(network: blockchainNetwork)); } else { - // take index 0 of the current account - blockchainNetwork = blockchainType.networks[0]; + await addNewNetwork( + blockchainType: blockchainType, + networkJsonData: jsonData, + ); } } else { - // take index 0 of the current account - blockchainNetwork = blockchainType.networks[0]; + await addNewNetwork( + blockchainType: blockchainType, + networkJsonData: {}, + ); } - - emit(state.copyWith(network: blockchainNetwork)); } Future setNetwork(BlockchainNetwork network) async { - if (network == state.network) return; - final blockchainNetworkJson = await secureStorageProvider .get(SecureStorageKeys.blockChainNetworksIndexing); @@ -67,6 +69,43 @@ class ManageNetworkCubit extends Cubit { jsonData = {}; } + await saveAndEmitNetwork(network: network, networkJsonData: jsonData); + } + + Future addNewNetwork({ + required BlockchainType blockchainType, + required Map networkJsonData, + }) async { + final profileModel = profileCubit.state.model; + if (profileModel.profileType == ProfileType.enterprise) { + final testnet = profileModel.profileSetting.blockchainOptions?.testnet; + if (testnet != null) { + final currentNetworkList = blockchainType.networks; + if (testnet) { + await saveAndEmitNetwork( + network: currentNetworkList[1], + networkJsonData: networkJsonData, + ); + } else { + await saveAndEmitNetwork( + network: currentNetworkList[0], + networkJsonData: networkJsonData, + ); + } + } + } else { + final blockchainNetwork = blockchainType.networks[0]; + await saveAndEmitNetwork( + network: blockchainNetwork, + networkJsonData: networkJsonData, + ); + } + } + + Future saveAndEmitNetwork({ + required BlockchainNetwork network, + required Map networkJsonData, + }) async { final blockchainType = network.type; final supportedNetworks = blockchainType.networks; final key = blockchainType.name; @@ -76,13 +115,29 @@ class ManageNetworkCubit extends Cubit { /// map with index is saved /// {'tezos': 1 , 'ethereum': 1} - jsonData[key] = index; + networkJsonData[key] = index; await secureStorageProvider.set( SecureStorageKeys.blockChainNetworksIndexing, - jsonEncode(jsonData), + jsonEncode(networkJsonData), ); emit(state.copyWith(network: network)); } + + Future resetOtherNetworks(BlockchainNetwork network) async { + final blockchainType = walletCubit.state.currentAccount?.blockchainType; + + if (blockchainType == null) return; + + final supportedNetworks = blockchainType.networks; + final key = blockchainType.name; + + final index = supportedNetworks.indexOf(network); + final networkJsonData = {key: index}; + await secureStorageProvider.set( + SecureStorageKeys.blockChainNetworksIndexing, + jsonEncode(networkJsonData), + ); + } } diff --git a/lib/enterprise/cubit/enterprise_cubit.dart b/lib/enterprise/cubit/enterprise_cubit.dart index 7614c8dcd..f468c30de 100644 --- a/lib/enterprise/cubit/enterprise_cubit.dart +++ b/lib/enterprise/cubit/enterprise_cubit.dart @@ -579,11 +579,15 @@ class EnterpriseCubit extends Cubit { final blockchainType = manageNetworkCubit.walletCubit.state.currentAccount!.blockchainType; final currentNetworkList = blockchainType.networks; + + var network = currentNetworkList[0]; + if (testnet) { - await manageNetworkCubit.setNetwork(currentNetworkList[1]); - } else { - await manageNetworkCubit.setNetwork(currentNetworkList[0]); + network = currentNetworkList[1]; } + + await manageNetworkCubit.setNetwork(network); + await manageNetworkCubit.resetOtherNetworks(network); } emit( diff --git a/lib/splash/bloclisteners/blocklisteners.dart b/lib/splash/bloclisteners/blocklisteners.dart index 9515cbd6d..453b419b8 100644 --- a/lib/splash/bloclisteners/blocklisteners.dart +++ b/lib/splash/bloclisteners/blocklisteners.dart @@ -125,8 +125,8 @@ final walletBlocAccountChangeListener = BlocListener( }, listener: (context, state) async { try { + await context.read().loadNetwork(); if (Parameters.walletHandlesCrypto) { - await context.read().loadNetwork(); unawaited(context.read().fetchFromZero()); unawaited(context.read().fetchFromZero()); } diff --git a/lib/wallet/cubit/wallet_cubit.dart b/lib/wallet/cubit/wallet_cubit.dart index a8c68af90..73bfde89a 100644 --- a/lib/wallet/cubit/wallet_cubit.dart +++ b/lib/wallet/cubit/wallet_cubit.dart @@ -214,6 +214,9 @@ class WalletCubit extends Cubit { await Future.delayed(const Duration(milliseconds: 500)); await walletConnectCubit.initialise(); + /// set new account as current + await setCurrentWalletAccount(cryptoAccountDataList.length - 1); + emitCryptoAccount(updatedCryptoAccount); onComplete?.call( @@ -222,9 +225,6 @@ class WalletCubit extends Cubit { message: ResponseString.RESPONSE_STRING_CRYPTO_ACCOUNT_ADDED, ), ); - - /// set new account as current - await setCurrentWalletAccount(cryptoAccountDataList.length - 1); } Future _createBlockchainAccount({