diff --git a/assets/translations/en.json b/assets/translations/en.json index 55570ff007d50c892ae02ff8bb1a3686f11a3d57..938cb7992497634b97cf22c7a820553fa3e5eed7 100644 --- a/assets/translations/en.json +++ b/assets/translations/en.json @@ -104,6 +104,7 @@ "identityConfirmed": "Identity confirmed", "identityExpired": "Identity expired", "confirmYourIdentity": "Confirm your identity", + "noResult": "No results", "noDuniterNodeAvailableTryLater": "No Duniter node available, please try again later", "youAreConnectedToNode": "You are connected to node", "accountActivity": "Account activity", @@ -210,5 +211,6 @@ "displaySettings": "Display Settings", "indexer": "Indexer", "anAutoNodeChoosed": "A secure and valid node will be automatically used from a random list.", - "rootWallet": "Root Wallet" + "rootWallet": "Root Wallet", + "blockN": "block N°{}" } \ No newline at end of file diff --git a/assets/translations/es.json b/assets/translations/es.json index 065c10ad0bd4bbe7366f081cbe2df8b193ebcef7..2cb824b3a48b364d3c180250ba437e035b8727d6 100644 --- a/assets/translations/es.json +++ b/assets/translations/es.json @@ -105,6 +105,7 @@ "identityConfirmed": "Identidad confirmada", "identityExpired": "Identidad caducada", "confirmYourIdentity": "Confirma tu identidad", + "noResult": "Ningún resultado", "noDuniterNodeAvailableTryLater": "No hay ningún nodo Duniter disponible, por favor, inténtalo más tarde", "youAreConnectedToNode": "Estás conectado al nodo", "accountActivity": "Actividad de la cuenta", @@ -211,5 +212,6 @@ "displaySettings": "Parametros interficie", "indexer": "Indexer", "anAutoNodeChoosed": "Se usará automáticamente un nodo seguro y valido desde una lista aleatoria.", - "rootWallet": "Monedero raíz" + "rootWallet": "Monedero raíz", + "blockN": "bloque N°{}" } diff --git a/assets/translations/fr.json b/assets/translations/fr.json index 095b1ab6bc89e29fd90c5dc73be7d5bb49aac4aa..05a7e92bfb0e8d9e424dccdf894e314e643ac7fb 100644 --- a/assets/translations/fr.json +++ b/assets/translations/fr.json @@ -211,5 +211,6 @@ "displaySettings": "Affichage", "indexer": "Indexer", "anAutoNodeChoosed": "Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", - "rootWallet": "Portefeuille racine" + "rootWallet": "Portefeuille racine", + "blockN": "bloc N°{}" } diff --git a/assets/translations/it.json b/assets/translations/it.json index 82d561985372de45d89923fd26ebd6da9a0c799d..0d56e566332c95478a8e5145e5417df424bc7d8d 100644 --- a/assets/translations/it.json +++ b/assets/translations/it.json @@ -105,6 +105,7 @@ "identityConfirmed": "Identitá confermata", "identityExpired": "Identitá scaduta", "confirmYourIdentity": "Conferma identitá", + "noResult": "Nessun risultato", "noDuniterNodeAvailableTryLater": "Non ci sono nodi Duniter disponibili, per favore, riprova piú tardi", "youAreConnectedToNode": "Sei connesso al nodo", "accountActivity": "Attivitá del conto", @@ -211,5 +212,6 @@ "displaySettings": "Impostazioni interfaccia", "indexer": "Indexer", "anAutoNodeChoosed": "Un nodo sicuro e valido sará automaticamente scelto da una lista casuale.", - "rootWallet": "Portafoglio radice" + "rootWallet": "Portafoglio radice", + "blockN": "blocco N°{}" } \ No newline at end of file diff --git a/lib/globals.dart b/lib/globals.dart index 002369e8ab9d2a8e0c3eacd587f55a98e2cb7756..f743c25089cd7cb70a6942391b751cf37bda1324 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -54,6 +54,7 @@ late int udValue; // Indexer late DateTime startBlockchainTime; +bool startBlockchainInitialized = false; late int currentUdIndex; diff --git a/lib/providers/duniter_indexer.dart b/lib/providers/duniter_indexer.dart index ec4c9e554793c1c184ec01a0769a8ab21598255e..6aa4430bf9cbc6babd2405a36b04938d42879b26 100644 --- a/lib/providers/duniter_indexer.dart +++ b/lib/providers/duniter_indexer.dart @@ -31,7 +31,7 @@ class DuniterIndexer with ChangeNotifier { final request = await client.postUrl(Uri.parse('$endpoint/v1/graphql')); final response = await request.close(); if (response.statusCode != 200) { - log.d('INDEXER IS OFFILINE'); + log.d('INDEXER IS OFFLINE'); indexerEndpoint = ''; isLoadingIndexer = false; notifyListeners(); @@ -47,7 +47,7 @@ class DuniterIndexer with ChangeNotifier { return true; } } catch (e) { - log.d('INDEXER IS OFFILINE'); + log.d('INDEXER IS OFFLINE'); indexerEndpoint = ''; isLoadingIndexer = false; notifyListeners(); @@ -227,8 +227,12 @@ Future<bool> isIdtyExist(String name) async { Future<DateTime> getBlockStart() async { final result = await _execQuery(getBlockchainStartQ, {}); - startBlockchainTime = DateTime.parse(result.data!['block'][0]['created_at']); - return startBlockchainTime; + if(!result.hasException){ + startBlockchainTime = DateTime.parse(result.data!['block'][0]['created_at']); + startBlockchainInitialized = true; + return startBlockchainTime; + } + return DateTime(0,0,0,0,0); } Future<QueryResult> _execQuery( @@ -311,7 +315,7 @@ Map computeHistoryView(repository, lastDateDelimiter, isDouble) { finalAmount = '$amount $currencyName'; } - if (date.compareTo(startBlockchainTime) < 0) { + if (startBlockchainInitialized && date.compareTo(startBlockchainTime) < 0) { isMigrationTime = true; } else { isMigrationTime = false; diff --git a/lib/providers/substrate_sdk.dart b/lib/providers/substrate_sdk.dart index a6f6013ccfd31832118afba2dd986df22143956f..8275eb1b50ff0342958f9780e17b6accdf2b42bd 100644 --- a/lib/providers/substrate_sdk.dart +++ b/lib/providers/substrate_sdk.dart @@ -88,7 +88,12 @@ class SubstrateSdk with ChangeNotifier { } Future _getStorage(String call) async { - return await sdk.webView!.evalJavascript('api.query.$call'); + try{ + return await sdk.webView!.evalJavascript('api.query.$call'); + }catch(e){ + log.i("catched _getStorage error"); + return Future(() {}); + } } Future _getStorageConst(String call) async { @@ -134,11 +139,14 @@ class SubstrateSdk with ChangeNotifier { if (certsCounterCache[address] == null) { certsCounterCache.putIfAbsent(address, () => []); } - certsCounterCache.update( - address, - (value) => - [certsReceiver['receivedCount'], certsReceiver['issuedCount']]); - + try{ + certsCounterCache.update( + address, + (value) => + [certsReceiver['receivedCount'] as int, certsReceiver['issuedCount'] as int]); + }catch(e){ + // catching String to int error .. network error? + } return certsCounterCache[address]!; } @@ -370,21 +378,24 @@ class SubstrateSdk with ChangeNotifier { // } Future initCurrencyParameters() async { - currencyParameters['ss58'] = - await _getStorageConst('system.ss58Prefix.words'); - currencyParameters['minCertForMembership'] = - await _getStorageConst('wot.minCertForMembership.words'); - currencyParameters['newAccountPrice'] = - await _getStorageConst('account.newAccountPrice.words'); - currencyParameters['existentialDeposit'] = - await _getStorageConst('balances.existentialDeposit.words'); - currencyParameters['certPeriod'] = - await _getStorageConst('cert.certPeriod.words'); - currencyParameters['certMaxByIssuer'] = - await _getStorageConst('cert.maxByIssuer.words'); - currencyParameters['certValidityPeriod'] = - await _getStorageConst('cert.validityPeriod.words'); - + try{ + currencyParameters['ss58'] = + await _getStorageConst('system.ss58Prefix.words'); + currencyParameters['minCertForMembership'] = + await _getStorageConst('wot.minCertForMembership.words'); + currencyParameters['newAccountPrice'] = + await _getStorageConst('account.newAccountPrice.words'); + currencyParameters['existentialDeposit'] = + await _getStorageConst('balances.existentialDeposit.words'); + currencyParameters['certPeriod'] = + await _getStorageConst('cert.certPeriod.words'); + currencyParameters['certMaxByIssuer'] = + await _getStorageConst('cert.maxByIssuer.words'); + currencyParameters['certValidityPeriod'] = + await _getStorageConst('cert.validityPeriod.words'); + }catch(e){ + log.i('error while getting storageVals (network?)'); + } log.i('currencyParameters: $currencyParameters'); } diff --git a/lib/screens/home.dart b/lib/screens/home.dart index f4976796fbd029756ba4529169e3fc678d3533ba..66d3407372ad02b1f3b8d5ad919db649378533e6 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -116,11 +116,11 @@ class _HomeScreenState extends State<HomeScreen> { await sub.connectNode(context); // Currency parameters await sub.initCurrencyParameters(); + // Indexer Blockchain start + getBlockStart(); } } - - // Indexer Blockchain start - getBlockStart(); + }); // await sub.connectNode(ctx); } diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index a7002d5e7ad1683a21d8c2a4f505bfd727db26af..9406d74efe6bc539a32c32e46b792f1c2f0b42e0 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -17,6 +17,7 @@ import 'package:gecko/screens/myWallets/import_g1_v1.dart'; import 'package:gecko/screens/myWallets/unlocking_wallet.dart'; import 'package:gecko/screens/myWallets/wallet_options.dart'; import 'package:gecko/screens/wallet_view.dart'; +import 'package:gecko/screens/myWallets/choose_chest.dart'; import 'package:gecko/widgets/balance.dart'; import 'package:gecko/widgets/bottom_app_bar.dart'; import 'package:gecko/widgets/commons/offline_info.dart'; @@ -222,23 +223,23 @@ class _WalletsHomeState extends State<WalletsHome> { const SizedBox(height: 20), InkWell( key: keyChangeChest, - onTap: null, - // () { - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) { - // return const ChooseChest(); - // }), - // ); - // }, + onTap: + () { + Navigator.push( + context, + MaterialPageRoute(builder: (context) { + return const ChooseChest(); + }), + ); + }, child: SizedBox( width: 400, height: 60, child: Center( child: Text('changeChest'.tr(), - style: TextStyle( + style: const TextStyle( fontSize: 22, - color: Colors.grey[500], + color: orangeC, fontWeight: FontWeight.w500))), ), ), diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 18c61df61639754797160113e00dfeb5206bc10c..8b8be39de64afc105d06211c4ceff4a863456cb5 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -249,7 +249,7 @@ class SettingsScreen extends StatelessWidget { height: sub.getConnectedEndpoint() == null ? 60 : 20, child: Text( sub.getConnectedEndpoint() ?? - "Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", + "anAutoNodeChoosed".tr(), //"Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", style: TextStyle( fontSize: 15, fontStyle: FontStyle.italic, @@ -259,7 +259,7 @@ class SettingsScreen extends StatelessWidget { ); }), Text( - 'bloc N°${sub.blocNumber}', + 'blockN'.tr(args: [sub.blocNumber.toString()]), //'bloc N°${sub.blocNumber}', style: TextStyle(fontSize: 14, color: Colors.grey[700]), ) ], @@ -386,7 +386,7 @@ class SettingsScreen extends StatelessWidget { height: 60, child: Text( sub.getConnectedEndpoint() ?? - "Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", + "anAutoNodeChoosed".tr(), //"Un noeud sûr et valide sera choisi automatiquement parmis une liste aléatoire.", style: TextStyle( fontSize: 15, fontStyle: FontStyle.italic, diff --git a/lib/widgets/name_by_address.dart b/lib/widgets/name_by_address.dart index dd26abc4cb9844ac94c1d2b8eb1061e67ca6d9f1..483603b81e55b1a8bb08845082b1a195d69463d2 100644 --- a/lib/widgets/name_by_address.dart +++ b/lib/widgets/name_by_address.dart @@ -1,3 +1,4 @@ +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/g1_wallets_list.dart'; @@ -55,8 +56,11 @@ class NameByAddress extends StatelessWidget { ), builder: (QueryResult result, {VoidCallback? refetch, FetchMore? fetchMore}) { - if (result.hasException) { - return Text(result.exception.toString()); + + if (kDebugMode) { + if (result.hasException) { + return Text(result.exception.toString()); + } } if (result.isLoading) { diff --git a/lib/widgets/search_identity_query.dart b/lib/widgets/search_identity_query.dart index 6f95858258d8d091dc45ff517c5f52aa6557f1be..b6225b48aa27c2c3fbe6fc6a5b986f4755b63e10 100644 --- a/lib/widgets/search_identity_query.dart +++ b/lib/widgets/search_identity_query.dart @@ -1,4 +1,5 @@ import 'package:easy_localization/easy_localization.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/queries_indexer.dart'; @@ -24,7 +25,7 @@ class SearchIdentityQuery extends StatelessWidget { final duniterIndexer = Provider.of<DuniterIndexer>(context, listen: false); final searchProvider = Provider.of<SearchProvider>(context, listen: false); if (indexerEndpoint == '') { - return const Text('Aucun résultat'); + return Text('noResult'.tr()); } log.d(indexerEndpoint); @@ -52,8 +53,11 @@ class SearchIdentityQuery extends StatelessWidget { ), builder: (QueryResult result, {VoidCallback? refetch, FetchMore? fetchMore}) { - if (result.hasException) { - return Text(result.exception.toString()); + + if (kDebugMode) { + if (result.hasException) { + return Text(result.exception.toString()); + } } if (result.isLoading) {