Skip to content

Commit

Permalink
refactor: Fix blockchain network management issue #3153
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Dec 5, 2024
1 parent cb15a44 commit 5986170
Show file tree
Hide file tree
Showing 6 changed files with 80 additions and 32 deletions.
1 change: 1 addition & 0 deletions lib/app/view/app.dart
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@ class App extends StatelessWidget {
create: (context) => ManageNetworkCubit(
secureStorageProvider: secureStorageProvider,
walletCubit: context.read<WalletCubit>(),
profileCubit: context.read<ProfileCubit>(),
),
),
BlocProvider<PolygonIdCubit>(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,18 +43,6 @@ class ManageAccountsCubit extends Cubit<ManageAccountsState> {
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<void> editCryptoAccount({
Expand Down
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -15,12 +16,12 @@ class ManageNetworkCubit extends Cubit<ManageNetworkState> {
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<void> loadNetwork() async {
final blockchainType = walletCubit.state.currentAccount?.blockchainType;
Expand All @@ -41,21 +42,22 @@ class ManageNetworkCubit extends Cubit<ManageNetworkState> {
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: <String, dynamic>{},
);
}

emit(state.copyWith(network: blockchainNetwork));
}

Future<void> setNetwork(BlockchainNetwork network) async {
if (network == state.network) return;

final blockchainNetworkJson = await secureStorageProvider
.get(SecureStorageKeys.blockChainNetworksIndexing);

Expand All @@ -67,6 +69,43 @@ class ManageNetworkCubit extends Cubit<ManageNetworkState> {
jsonData = <String, dynamic>{};
}

await saveAndEmitNetwork(network: network, networkJsonData: jsonData);
}

Future<void> addNewNetwork({
required BlockchainType blockchainType,
required Map<String, dynamic> 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<void> saveAndEmitNetwork({
required BlockchainNetwork network,
required Map<String, dynamic> networkJsonData,
}) async {
final blockchainType = network.type;
final supportedNetworks = blockchainType.networks;
final key = blockchainType.name;
Expand All @@ -76,13 +115,29 @@ class ManageNetworkCubit extends Cubit<ManageNetworkState> {
/// 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<void> 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),
);
}
}
10 changes: 7 additions & 3 deletions lib/enterprise/cubit/enterprise_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -579,11 +579,15 @@ class EnterpriseCubit extends Cubit<EnterpriseState> {
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(
Expand Down
2 changes: 1 addition & 1 deletion lib/splash/bloclisteners/blocklisteners.dart
Original file line number Diff line number Diff line change
Expand Up @@ -125,8 +125,8 @@ final walletBlocAccountChangeListener = BlocListener<WalletCubit, WalletState>(
},
listener: (context, state) async {
try {
await context.read<ManageNetworkCubit>().loadNetwork();
if (Parameters.walletHandlesCrypto) {
await context.read<ManageNetworkCubit>().loadNetwork();
unawaited(context.read<TokensCubit>().fetchFromZero());
unawaited(context.read<NftCubit>().fetchFromZero());
}
Expand Down
6 changes: 3 additions & 3 deletions lib/wallet/cubit/wallet_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -214,6 +214,9 @@ class WalletCubit extends Cubit<WalletState> {
await Future<void>.delayed(const Duration(milliseconds: 500));
await walletConnectCubit.initialise();

/// set new account as current
await setCurrentWalletAccount(cryptoAccountDataList.length - 1);

emitCryptoAccount(updatedCryptoAccount);

onComplete?.call(
Expand All @@ -222,9 +225,6 @@ class WalletCubit extends Cubit<WalletState> {
message: ResponseString.RESPONSE_STRING_CRYPTO_ACCOUNT_ADDED,
),
);

/// set new account as current
await setCurrentWalletAccount(cryptoAccountDataList.length - 1);
}

Future<CryptoAccountData> _createBlockchainAccount({
Expand Down

0 comments on commit 5986170

Please sign in to comment.