Skip to content

Commit

Permalink
feat: Add empty tokens for evms #2840
Browse files Browse the repository at this point in the history
  • Loading branch information
bibash28 committed Aug 21, 2024
1 parent be59b2c commit dba94f8
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 43 deletions.
22 changes: 22 additions & 0 deletions lib/app/shared/enum/type/blockchain_type.dart
Original file line number Diff line number Diff line change
Expand Up @@ -296,4 +296,26 @@ extension BlockchainTypeX on BlockchainType {

return false;
}

String get category {
switch (this) {
case BlockchainType.tezos:
return 'tezos-ecosystem';

case BlockchainType.ethereum:
return 'ethereum-ecosystem';

case BlockchainType.fantom:
return 'fantom-ecosystem';

case BlockchainType.polygon:
return 'polygon-ecosystem';

case BlockchainType.binance:
return 'binance-smart-chain';

case BlockchainType.etherlink:
return 'etherlink-ecosystem';
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -133,7 +133,7 @@ class AllTokensCubit extends Cubit<AllTokensState> {
);

for (int i = 0; i < state.contracts.length; i++) {
if (i == 6) break;
if (i == 10) break;
final token = state.contracts[i];

if (token.symbol.toUpperCase() == 'XTZ') continue;
Expand Down
104 changes: 62 additions & 42 deletions lib/dashboard/home/tab_bar/tokens/token_page/cubit/tokens_cubit.dart
Original file line number Diff line number Diff line change
Expand Up @@ -182,9 +182,9 @@ class TokensCubit extends Cubit<TokensState> {
}
data = newData;

if (data.length < 5) {
final tokens = await _getEtherlinkTokens(ethereumNetwork);
data.addAll(tokens);
if (data.length == 1) {
final emptyTokens = await getSomeEmptyCoins(ethereumNetwork.type);
data.addAll(emptyTokens);
}
} else {
data.addAll(newData);
Expand Down Expand Up @@ -263,6 +263,11 @@ class TokensCubit extends Cubit<TokensState> {
newData.insert(0, ethereumBaseToken);
}
data = newData;

if (data.length == 1) {
final emptyTokens = await getSomeEmptyCoins(ethereumNetwork.type);
data.addAll(emptyTokens);
}
} else {
data.addAll(newData);
}
Expand Down Expand Up @@ -545,45 +550,6 @@ class TokensCubit extends Cubit<TokensState> {
}
}

Future<List<TokenModel>> _getEtherlinkTokens(
EthereumNetwork ethereumNetwork,
) async {
try {
final response = await client.get(
'${ethereumNetwork.apiUrl}/v2/tokens?type=ERC-20',
headers: <String, dynamic>{'Content-Type': 'application/json'},
) as Map<String, dynamic>;

final items = response['items'] as List<dynamic>;
final tokens = <TokenModel>[];

for (int i = 0; i < items.length; i++) {
if (i == 5) break;
final token = items[i];

if (token is Map<String, dynamic>) {
tokens.add(
TokenModel(
contractAddress: '',
name: token['name'].toString(),
symbol: token['symbol'].toString(),
icon: token['icon_url'].toString(),
balance: '0',
decimals: token['decimals'].toString(),
standard: 'ERC20',
decimalsToShow: 5,
),
);
}
}

return tokens;
} catch (e, s) {
getLogger(toString()).e('error: $e, stack: $s');
return [];
}
}

Future<TokenModel?> _getBaseTokenBalanceOnEthereum(
String walletAddress,
String chain,
Expand Down Expand Up @@ -618,6 +584,60 @@ class TokensCubit extends Cubit<TokensState> {
}
}

Future<List<TokenModel>> getSomeEmptyCoins(
BlockchainType blockchaintype,
) async {
try {
emit(state.copyWith(status: AppStatus.loading));
await dotenv.load();
final apiKey = dotenv.get('COIN_GECKO_API_KEY');

final dynamic result = await client.get(
'${Urls.coinGeckoBase}coins/markets',
queryParameters: {
'vs_currency': 'usd',
'category': blockchaintype.category,
'order': 'market_cap_desc',
'per_page': 10,
'page': 1,
'sparkline': false,
'locale': 'en',
'x_cg_pro_api_key': apiKey,
},
);
final contracts = (result as List<dynamic>)
.map(
(dynamic e) => ContractModel.fromJson(e as Map<String, dynamic>),
)
.toList();

final tokens = <TokenModel>[];
for (int i = 0; i < contracts.length; i++) {
if (i == 10) break;
final token = contracts[i];

if (token.symbol.toUpperCase() == blockchaintype.symbol) continue;

tokens.add(
TokenModel(
name: token.name.toString(),
symbol: token.symbol,
icon: token.image,
balance: '0',
contractAddress: '',
decimals: '18',
),
);
}

return tokens;
} catch (e, s) {
getLogger(runtimeType.toString())
.e('error in getAllContracts(), e: $e, s:$s');
return [];
}
}

Future<TokenModel> _getXtzBalance(
String walletAddress,
) async {
Expand Down

0 comments on commit dba94f8

Please sign in to comment.