From cbbd4eee34f255c16c578277a0bff97f8b75041b Mon Sep 17 00:00:00 2001 From: poka Date: Tue, 23 Aug 2022 00:25:16 +0200 Subject: [PATCH] refactoring: Declare keys for all widgets int widgets_keys.dart --- integration_test/app_test.dart | 101 ++++-------------- integration_test/tests_utility.dart | 55 ++++++++++ lib/models/widgets_keys.dart | 73 ++++++++++++- lib/providers/chest_provider.dart | 5 +- lib/providers/duniter_indexer.dart | 3 +- lib/providers/wallet_options.dart | 11 +- lib/providers/wallets_profiles.dart | 3 +- lib/screens/activity.dart | 5 +- lib/screens/common_elements.dart | 7 +- lib/screens/home.dart | 33 ++---- lib/screens/myWallets/chest_options.dart | 9 +- lib/screens/myWallets/choose_chest.dart | 5 +- lib/screens/myWallets/choose_wallet.dart | 3 +- lib/screens/myWallets/import_g1_v1.dart | 3 +- lib/screens/myWallets/manage_membership.dart | 5 +- lib/screens/myWallets/restore_chest.dart | 7 +- lib/screens/myWallets/show_seed.dart | 3 +- lib/screens/myWallets/unlocking_wallet.dart | 5 +- lib/screens/myWallets/wallet_options.dart | 15 +-- lib/screens/myWallets/wallets_home.dart | 10 +- lib/screens/my_contacts.dart | 3 +- lib/screens/onBoarding/10.dart | 2 +- .../onBoarding/11_congratulations.dart | 3 +- lib/screens/onBoarding/5.dart | 5 +- lib/screens/onBoarding/6.dart | 7 +- lib/screens/onBoarding/9.dart | 5 +- lib/screens/search_result.dart | 3 +- lib/screens/settings.dart | 3 +- lib/screens/wallet_view.dart | 9 +- 29 files changed, 235 insertions(+), 166 deletions(-) create mode 100644 integration_test/tests_utility.dart diff --git a/integration_test/app_test.dart b/integration_test/app_test.dart index 839881d..b0257be 100644 --- a/integration_test/app_test.dart +++ b/integration_test/app_test.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; -import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_test/flutter_test.dart'; import 'package:gecko/models/widgets_keys.dart'; @@ -7,110 +5,51 @@ import 'package:integration_test/integration_test.dart'; import 'package:gecko/main.dart' as app; +import 'tests_utility.dart'; + void main() { IntegrationTestWidgetsFlutterBinding.ensureInitialized(); - group('end-to-end test', () { - testWidgets('Ğecko basics', (tester) async { + group('Ğecko basics', () { + testWidgets('Import chests', (tester) async { app.main(); - // await Future.delayed(const Duration(seconds: 5)); await tester.pumpAndSettle(const Duration(seconds: 1)); + // await deleteAllWallets(tester); await restoreChest(tester); - - // Verify the Gecko is well connected. - // await waitFor(tester, 'Vous êtes bien connecté'); - - // Open my chest - await goKey(tester, 'manageWallets', duration: 500); - // await goKey(tester, 'chooseChest'); - - // Enter secret code - await enterText(tester, keyPinForm, 'AAAAA'); - - await tester.pumpAndSettle(); - - // Verify the wallet 3 is here - await waitFor(tester, 'Porteuille 3'); + }); + testWidgets('Send 10 ĞD to ChristCosmic', (tester) async { + // await goKey(tester, buttonKey); }); }); } // Customs actions Future deleteAllWallets(WidgetTester tester) async { - await goKey(tester, 'drawerMenu'); - await goKey(tester, 'parameters'); - await goKey(tester, 'deleteAllWallets'); - await goKey(tester, 'confirmPopop'); + await goKey(tester, keyDrawerMenu); + await goKey(tester, keyParameters); + await goKey(tester, keyDeleteAllWallets); + await goKey(tester, keyConfirm); await tester.pumpAndSettle(); } Future restoreChest(WidgetTester tester) async { - await goKey(tester, 'restoreChest'); + await goKey(tester, keyRestoreChest); Clipboard.setData(const ClipboardData( text: 'smart joy blossom stomach champion fun diary relief gossip hospital logic bike')); await tester.pumpAndSettle(); - await goKey(tester, 'pasteMnemonic'); + await goKey(tester, keyPastMnemonic); await tester.pumpAndSettle(); - await goKey(tester, 'goNext'); - await goKey(tester, 'goNext'); - await goKey(tester, 'goNext'); - await goKey(tester, 'goNext'); - await goKey(tester, 'cachePassword'); + await goKey(tester, keyGoNext); + await goKey(tester, keyGoNext); + await goKey(tester, keyGoNext); + await goKey(tester, keyGoNext); + await goKey(tester, keyCachePassword); await enterText(tester, keyPinForm, 'AAAAA'); await waitFor(tester, 'Accéder à mon coffre'); - await goKey(tester, 'goWalletHome'); + await goKey(tester, keyGoWalletsHome); await waitFor(tester, 'ĞD'); await goBack(tester); await waitFor(tester, "y'a pas de lézard"); } - -// CUSTOM METHODES -Future goKey(WidgetTester tester, String buttonKey, - {Finder? customFinder, int duration = 100}) async { - await tester.pumpAndSettle(Duration(milliseconds: duration)); - final Finder finder = customFinder ?? find.byKey(Key(buttonKey)); - await tester.tap(finder); - // await tester.pumpAndSettle(Duration(milliseconds: duration)); -} - -Future goBack(WidgetTester tester) async { - final NavigatorState navigator = tester.state(find.byType(Navigator)); - navigator.pop(); - await tester.pump(); -} - -Future enterText( - WidgetTester tester, GlobalKey fieldKey, String textIn, - [int duration = 200]) async { - await tester.pumpAndSettle(Duration(milliseconds: duration)); - await tester.enterText(find.byKey(fieldKey), textIn); -} - -Future waitFor( - WidgetTester tester, - String text, { - Duration timeout = const Duration(seconds: 5), -}) async { - final end = DateTime.now().add(timeout); - - Finder finder = find.textContaining(text); - - do { - if (DateTime.now().isAfter(end)) { - throw Exception('Timed out waiting for text $text'); - } - - await tester.pumpAndSettle(); - await Future.delayed(const Duration(milliseconds: 100)); - } while (finder.evaluate().isEmpty); -} - -extension Truncate on String { - String truncate({required int max, String suffix = ''}) { - return length < max - ? this - : '${substring(0, substring(0, max - suffix.length).lastIndexOf(" "))}$suffix'; - } -} diff --git a/integration_test/tests_utility.dart b/integration_test/tests_utility.dart new file mode 100644 index 0000000..30bd14d --- /dev/null +++ b/integration_test/tests_utility.dart @@ -0,0 +1,55 @@ +// CUSTOM METHODES +import 'package:flutter/material.dart'; +import 'package:flutter_test/flutter_test.dart'; +import 'package:gecko/globals.dart'; + +Future goKey(WidgetTester tester, Key buttonKey, + {Finder? customFinder, int duration = 100}) async { + await tester.pumpAndSettle(Duration(milliseconds: duration)); + final Finder finder = customFinder ?? find.byKey(buttonKey); + log.d('INTEGRATION TEST: Tap on ${finder.description}}'); + await tester.tap(finder); + // await tester.pumpAndSettle(Duration(milliseconds: duration)); +} + +Future goBack(WidgetTester tester) async { + final NavigatorState navigator = tester.state(find.byType(Navigator)); + log.d('INTEGRATION TEST: Go back'); + navigator.pop(); + await tester.pump(); +} + +Future enterText(WidgetTester tester, Key fieldKey, String textIn, + [int duration = 200]) async { + await tester.pumpAndSettle(Duration(milliseconds: duration)); + log.d('INTEGRATION TEST: Enter text: $textIn'); + await tester.enterText(find.byKey(fieldKey), textIn); +} + +Future waitFor( + WidgetTester tester, + String text, { + Duration timeout = const Duration(seconds: 5), +}) async { + final end = DateTime.now().add(timeout); + + Finder finder = find.textContaining(text); + log.d('INTEGRATION TEST: Wait for: $text'); + + do { + if (DateTime.now().isAfter(end)) { + throw Exception('Timed out waiting for text $text'); + } + + await tester.pumpAndSettle(); + await Future.delayed(const Duration(milliseconds: 100)); + } while (finder.evaluate().isEmpty); +} + +extension Truncate on String { + String truncate({required int max, String suffix = ''}) { + return length < max + ? this + : '${substring(0, substring(0, max - suffix.length).lastIndexOf(" "))}$suffix'; + } +} diff --git a/lib/models/widgets_keys.dart b/lib/models/widgets_keys.dart index c2bbccf..e83e29d 100644 --- a/lib/models/widgets_keys.dart +++ b/lib/models/widgets_keys.dart @@ -1,3 +1,74 @@ import 'package:flutter/material.dart'; -final keyPinForm = GlobalKey(); +// General +const keyInfoPopup = Key('keyInfoPopup'); +const keyGoNext = Key('keyGoNext'); +const keyCancel = Key('keyCancel'); +const keyConfirm = Key('keyConfirm'); + +// Home +const keyParameters = Key('keyParameters'); +const keyContacts = Key('keyContacts'); +const keyDrawerMenu = Key('keyDrawerMenu'); +const keyManageWallets = Key('keyManageWallets'); +const keyRestoreChest = Key('keyRestoreChest'); + +// Wallets home +const keyImportG1v1 = Key('keyImportG1v1'); +const keyChangeChest = Key('keyChangeChest'); +const keyListWallets = Key('keyListWallets'); +const keyAddDerivation = Key('keyAddDerivation'); + +// Wallet options +const keyCopyAddress = Key('keyCopyAddress'); +const keyOpenActivity = Key('keyOpenActivity'); +const keyManageMembership = Key('keyManageMembership'); +const keySetDefaultWallet = Key('keySetDefaultWallet'); +const keyDeleteWallet = Key('keyDeleteWallet'); +const keyWalletName = Key('keyWalletName'); +const keyRenameWallet = Key('keyRenameWallet'); + +// Chest options +const keyShowSeed = Key('keyShowSeed'); +const keyChangePin = Key('keyChangePin'); +const keycreateRootDerivation = Key('keycreateRootDerivation'); +const keyDeleteChest = Key('keyDeleteChest'); + +// Manage membership +const keyMigrateIdentity = Key('keyMigrateIdentity'); +const keyRevokeIdty = Key('keyRevokeIdty'); + +// Choose chest +const keyCreateNewChest = Key('keyCreateNewChest'); +const keyImportChest = Key('keyImportChest'); + +// Profile view +const keyViewActivity = Key('keyViewActivity'); +const keyCertify = Key('keyCertify'); +const keyPay = Key('keyPay'); + +// Activity view +const keyListTransactions = Key('keyListTransactions'); + +// Unlock wallet +const keyPinForm = Key('keyPinForm'); +const keyPopButton = Key('keyPopButton'); +const keyCachePassword = Key('keyCachePassword'); + +// Settings +const keyDeleteAllWallets = Key('keyDeleteAllWallets'); + +// Onboarding +const keyPastMnemonic = Key('keyPastMnemonic'); +const keyBubbleSpeak = Key('keyBubbleSpeak'); +const keyGenerateMnemonic = Key('keyGenerateMnemonic'); +const keyAskedWord = Key('keyAskedWord'); +const keyInputWord = Key('keyInputWord'); +const keyGeneratedPin = Key('keyGeneratedPin'); +const keyGoWalletsHome = Key('keyGoWalletsHome'); + +// Unit keys +Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word'); +Key keyIndexerResult(int keyId) => Key('keyIndexerResult$keyId'); +Key keyTransaction(int keyId) => Key('keyTransaction$keyId'); +Key keySearchResult(int keyId) => Key('keySearchResult$keyId'); diff --git a/lib/providers/chest_provider.dart b/lib/providers/chest_provider.dart index 0134e26..ce788b9 100644 --- a/lib/providers/chest_provider.dart +++ b/lib/providers/chest_provider.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:provider/provider.dart'; @@ -59,13 +60,13 @@ class ChestProvider with ChangeNotifier { title: Text('areYouSureToDeleteWallet'.tr(args: [walletName!])), actions: [ TextButton( - child: Text("no".tr(), key: const Key('cancelDeleting')), + child: Text("no".tr(), key: keyCancel), onPressed: () { Navigator.pop(context, false); }, ), TextButton( - child: Text("yes".tr(), key: const Key('confirmDeleting')), + child: Text("yes".tr(), key: keyConfirm), onPressed: () { Navigator.pop(context, true); }, diff --git a/lib/providers/duniter_indexer.dart b/lib/providers/duniter_indexer.dart index 65a96c3..a4570fb 100644 --- a/lib/providers/duniter_indexer.dart +++ b/lib/providers/duniter_indexer.dart @@ -8,6 +8,7 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/models/queries_indexer.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; @@ -301,7 +302,7 @@ class DuniterIndexer with ChangeNotifier { Padding( padding: const EdgeInsets.symmetric(horizontal: 5), child: ListTile( - key: Key('searchResult${keyID++}'), + key: keyIndexerResult(keyID++), horizontalTitleGap: 40, contentPadding: const EdgeInsets.all(5), leading: cesiumPlusProvider.defaultAvatar(avatarSize), diff --git a/lib/providers/wallet_options.dart b/lib/providers/wallet_options.dart index c1a2821..1fcac90 100644 --- a/lib/providers/wallet_options.dart +++ b/lib/providers/wallet_options.dart @@ -6,6 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/models/wallet_data.dart'; @@ -258,7 +259,7 @@ class WalletOptionsProvider with ChangeNotifier { Consumer( builder: (context, wOptions, _) { return TextButton( - key: const Key('infoPopup'), + key: keyInfoPopup, child: Text( "validate".tr(), style: TextStyle( @@ -354,7 +355,7 @@ class WalletOptionsProvider with ChangeNotifier { Consumer( builder: (context, wOptions, _) { return TextButton( - key: const Key('infoPopup'), + key: keyInfoPopup, child: Text( "validate".tr(), style: TextStyle( @@ -381,7 +382,7 @@ class WalletOptionsProvider with ChangeNotifier { mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( - key: const Key('cancel'), + key: keyCancel, child: Text( "cancel".tr(), style: TextStyle( @@ -457,7 +458,7 @@ class WalletOptionsProvider with ChangeNotifier { width: 260, child: Stack(children: [ TextField( - key: const Key('walletName'), + key: keyWalletName, autofocus: false, focusNode: walletNameFocus, enabled: isEditing, @@ -481,7 +482,7 @@ class WalletOptionsProvider with ChangeNotifier { Positioned( right: 0, child: InkWell( - key: const Key('renameWallet'), + key: keyRenameWallet, onTap: () async { // _isNewNameValid = // walletProvider.editWalletName(wallet.id(), isCesium: false); diff --git a/lib/providers/wallets_profiles.dart b/lib/providers/wallets_profiles.dart index ce181c5..3dba88a 100644 --- a/lib/providers/wallets_profiles.dart +++ b/lib/providers/wallets_profiles.dart @@ -4,6 +4,7 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/g1_wallets_list.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; @@ -166,7 +167,7 @@ class WalletsProfilesProvider with ChangeNotifier { ), Row(children: [ GestureDetector( - key: const Key('copyPubkey'), + key: keyCopyAddress, onTap: () { Clipboard.setData(ClipboardData(text: address)); snackCopyKey(context); diff --git a/lib/screens/activity.dart b/lib/screens/activity.dart index ebb0aed..5635c49 100644 --- a/lib/screens/activity.dart +++ b/lib/screens/activity.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/queries_indexer.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/home.dart'; @@ -132,7 +133,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier { child: Builder( builder: (context) => Expanded( child: ListView( - key: const Key('listTransactions'), + key: keyListTransactions, controller: scrollController, children: [historyView(context, result)], ), @@ -286,7 +287,7 @@ class ActivityScreen extends StatelessWidget with ChangeNotifier { child: // Row(children: [Column(children: [],)],) ListTile( - key: Key('transaction${keyID++}'), + key: keyTransaction(keyID++), contentPadding: const EdgeInsets.only( left: 20, right: 30, top: 15, bottom: 15), leading: ClipOval( diff --git a/lib/screens/common_elements.dart b/lib/screens/common_elements.dart index 1f75f43..d077384 100644 --- a/lib/screens/common_elements.dart +++ b/lib/screens/common_elements.dart @@ -3,6 +3,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter_markdown/flutter_markdown.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:provider/provider.dart'; @@ -62,7 +63,7 @@ class CommonElements { width: 380 * ratio, height: 60 * ratio, child: ElevatedButton( - key: const Key('goNext'), + key: keyGoNext, style: ElevatedButton.styleFrom( elevation: 4, primary: orangeC, // background @@ -248,7 +249,7 @@ Future confirmPopup(BuildContext context, String title) async { mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( - key: const Key('confirmPopop'), + key: keyConfirm, child: Text( "yes".tr(), style: const TextStyle( @@ -296,7 +297,7 @@ Future infoPopup(BuildContext context, String title) async { mainAxisAlignment: MainAxisAlignment.center, children: [ TextButton( - key: const Key('infoPopup'), + key: keyInfoPopup, child: const Text( "D'accord", style: TextStyle( diff --git a/lib/screens/home.dart b/lib/screens/home.dart index 6f093d2..ddff84c 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -5,6 +5,7 @@ import 'package:connectivity_plus/connectivity_plus.dart'; import 'package:easy_localization/easy_localization.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/stateful_wrapper.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/chest_provider.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/home.dart'; @@ -64,7 +65,7 @@ class HomeScreen extends StatelessWidget { ]), ), ListTile( - key: const Key('parameters'), + key: keyParameters, title: Text('parameters'.tr()), onTap: () { Navigator.pop(context); @@ -77,7 +78,7 @@ class HomeScreen extends StatelessWidget { }, ), ListTile( - key: const Key('contacts'), + key: keyContacts, title: Text('contactsManagement'.tr()), onTap: () { Navigator.pop(context); @@ -89,26 +90,6 @@ class HomeScreen extends StatelessWidget { ); }, ), - - // ListTile( - // key: const Key('substrateSandbox'), - // title: const Text('Substrate debug'), - // onTap: () { - // Navigator.pop(context); - // Navigator.push( - // context, - // MaterialPageRoute(builder: (context) { - // return const SubstrateSandBox(); - // }), - // ); - // }, - // ), - - // ListTile( - // title: const Text('A propos'), - // onTap: () { - // }, - // ), ])), Align( alignment: FractionalOffset.bottomCenter, @@ -220,7 +201,7 @@ Widget geckHome(context) { left: 15, child: Builder( builder: (context) => IconButton( - key: const Key('drawerMenu'), + key: keyDrawerMenu, icon: const Icon( Icons.menu, color: Colors.white, @@ -343,7 +324,7 @@ Widget geckHome(context) { ], ), child: ClipOval( - key: const Key('manageWallets'), + key: keyManageWallets, child: Material( color: orangeC, // button color child: InkWell( @@ -466,7 +447,7 @@ Widget welcomeHome(context) { left: 15, child: Builder( builder: (context) => IconButton( - key: const Key('drawerMenu'), + key: keyDrawerMenu, icon: const Icon( Icons.menu, color: Colors.white, @@ -581,7 +562,7 @@ Widget welcomeHome(context) { width: 410, height: 70, child: OutlinedButton( - key: const Key('restoreChest'), + key: keyRestoreChest, style: OutlinedButton.styleFrom( side: BorderSide(width: 4, color: orangeC)), onPressed: () { diff --git a/lib/screens/myWallets/chest_options.dart b/lib/screens/myWallets/chest_options.dart index 221aeda..7b5e59c 100644 --- a/lib/screens/myWallets/chest_options.dart +++ b/lib/screens/myWallets/chest_options.dart @@ -6,6 +6,7 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; import 'package:flutter/services.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/chest_provider.dart'; import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/my_wallets.dart'; @@ -58,7 +59,7 @@ class ChestOptions extends StatelessWidget { child: Column(children: [ SizedBox(height: 30 * ratio), InkWell( - key: const Key('showSeed'), + key: keyShowSeed, onTap: () async { MyWalletsProvider myWalletProvider = Provider.of(context, listen: false); @@ -108,7 +109,7 @@ class ChestOptions extends StatelessWidget { SizedBox(height: 10 * ratio), Consumer(builder: (context, sub, _) { return InkWell( - key: const Key('changePin'), + key: keyChangePin, onTap: sub.nodeConnected ? () async { // await _chestProvider.changePin(context, cesiumWallet); @@ -152,7 +153,7 @@ class ChestOptions extends StatelessWidget { SizedBox(height: 10 * ratio), Consumer(builder: (context, sub, _) { return InkWell( - key: const Key('createRootDerivation'), + key: keycreateRootDerivation, onTap: sub.nodeConnected ? () async { await Navigator.push( @@ -188,7 +189,7 @@ class ChestOptions extends StatelessWidget { }), SizedBox(height: 10 * ratio), InkWell( - key: const Key('deleteChest'), + key: keyDeleteChest, onTap: () async { await chestProvider.deleteChest(context, currentChest); }, diff --git a/lib/screens/myWallets/choose_chest.dart b/lib/screens/myWallets/choose_chest.dart index a3d4bf9..4974f2c 100644 --- a/lib/screens/myWallets/choose_chest.dart +++ b/lib/screens/myWallets/choose_chest.dart @@ -3,6 +3,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/models/wallet_data.dart'; import 'package:flutter/material.dart'; @@ -156,7 +157,7 @@ class _ChooseChestState extends State { child: Align( alignment: Alignment.bottomCenter, child: InkWell( - key: const Key('createNewChest'), + key: keyCreateNewChest, onTap: () { Navigator.push( context, @@ -179,7 +180,7 @@ class _ChooseChestState extends State { ), ), InkWell( - key: const Key('importChest'), + key: keyImportChest, onTap: () { Navigator.push( context, diff --git a/lib/screens/myWallets/choose_wallet.dart b/lib/screens/myWallets/choose_wallet.dart index e4823a8..eb38197 100644 --- a/lib/screens/myWallets/choose_wallet.dart +++ b/lib/screens/myWallets/choose_wallet.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; @@ -112,7 +113,7 @@ class ChooseWalletScreen extends StatelessWidget { return CustomScrollView(slivers: [ const SliverToBoxAdapter(child: SizedBox(height: 20)), SliverGrid.count( - key: const Key('listWallets'), + key: keyListWallets, crossAxisCount: nTule, childAspectRatio: 1, crossAxisSpacing: 0, diff --git a/lib/screens/myWallets/import_g1_v1.dart b/lib/screens/myWallets/import_g1_v1.dart index 6448c8b..5b8b332 100644 --- a/lib/screens/myWallets/import_g1_v1.dart +++ b/lib/screens/myWallets/import_g1_v1.dart @@ -7,6 +7,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/providers/wallet_options.dart'; @@ -173,7 +174,7 @@ class ImportG1v1 extends StatelessWidget { ), const SizedBox(height: 20), GestureDetector( - key: const Key('copyPubkey'), + key: keyCopyAddress, onTap: () { Clipboard.setData( ClipboardData(text: sub.g1V1NewAddress)); diff --git a/lib/screens/myWallets/manage_membership.dart b/lib/screens/myWallets/manage_membership.dart index 4a05ec0..99feb0b 100644 --- a/lib/screens/myWallets/manage_membership.dart +++ b/lib/screens/myWallets/manage_membership.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/screens/myWallets/migrate_identity.dart'; // import 'package:gecko/models/wallet_data.dart'; // import 'package:gecko/providers/my_wallets.dart'; @@ -41,7 +42,7 @@ class ManageMembership extends StatelessWidget { Widget migrateIdentity(BuildContext context) { return InkWell( - key: const Key('migrateIdentity'), + key: keyMigrateIdentity, onTap: () async { Navigator.push( context, @@ -64,7 +65,7 @@ class ManageMembership extends StatelessWidget { Widget revokeMyIdentity(BuildContext context) { return InkWell( - key: const Key('revokeIdty'), + key: keyRevokeIdty, onTap: () async { // TODOO: Generate revoke document, and understand extrinsic identity.revokeIdentity options // final _answer = await confirmPopup(context, diff --git a/lib/screens/myWallets/restore_chest.dart b/lib/screens/myWallets/restore_chest.dart index c1b9404..4ec6d68 100644 --- a/lib/screens/myWallets/restore_chest.dart +++ b/lib/screens/myWallets/restore_chest.dart @@ -3,6 +3,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/screens/common_elements.dart'; @@ -91,7 +92,7 @@ class RestoreChest extends StatelessWidget { width: 410, height: 70, child: ElevatedButton( - key: const Key('goNext'), + key: keyGoNext, style: ElevatedButton.styleFrom( elevation: 4, primary: orangeC, // background @@ -131,7 +132,7 @@ class RestoreChest extends StatelessWidget { width: 190, height: 60, child: ElevatedButton( - key: const Key('pasteMnemonic'), + key: keyPastMnemonic, style: ElevatedButton.styleFrom( elevation: 4, primary: yellowC, // background @@ -175,7 +176,7 @@ class RestoreChest extends StatelessWidget { color: Colors.white, child: Text( text, - key: const Key('importText'), + key: keyBubbleSpeak, textAlign: TextAlign.justify, style: const TextStyle( color: Colors.black, fontSize: 19, fontWeight: FontWeight.w400), diff --git a/lib/screens/myWallets/show_seed.dart b/lib/screens/myWallets/show_seed.dart index b30b463..002bed1 100644 --- a/lib/screens/myWallets/show_seed.dart +++ b/lib/screens/myWallets/show_seed.dart @@ -4,6 +4,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/wallet_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/substrate_sdk.dart'; import 'package:gecko/screens/common_elements.dart'; @@ -206,7 +207,7 @@ class ShowSeed extends StatelessWidget { ), Text( dataWord, - key: Key('word$dataWord'), + key: keyMnemonicWord(dataWord), style: TextStyle(fontSize: 17 * ratio, color: Colors.black), ), ]), diff --git a/lib/screens/myWallets/unlocking_wallet.dart b/lib/screens/myWallets/unlocking_wallet.dart index 2dc1407..3011588 100644 --- a/lib/screens/myWallets/unlocking_wallet.dart +++ b/lib/screens/myWallets/unlocking_wallet.dart @@ -53,7 +53,7 @@ class UnlockingWallet extends StatelessWidget { left: 15, child: Builder( builder: (context) => IconButton( - key: const Key('popButton'), + key: keyPopButton, icon: const Icon( Icons.arrow_back, color: Colors.black, @@ -104,6 +104,7 @@ class UnlockingWallet extends StatelessWidget { SizedBox(height: 3 * ratio), if (canUnlock) InkWell( + key: keyCachePassword, onTap: () { walletOptions.changePinCacheChoice(); }, @@ -128,7 +129,7 @@ class UnlockingWallet extends StatelessWidget { const SizedBox(height: 10), // if (canUnlock) InkWell( - key: const Key('chooseChest'), + key: keyChangeChest, onTap: () { Navigator.push( context, diff --git a/lib/screens/myWallets/wallet_options.dart b/lib/screens/myWallets/wallet_options.dart index 58f58ee..a202abd 100644 --- a/lib/screens/myWallets/wallet_options.dart +++ b/lib/screens/myWallets/wallet_options.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/my_wallets.dart'; @@ -213,7 +214,7 @@ class WalletOptions extends StatelessWidget { else const SizedBox(), if (isMember.data!) - manageMemberStatus(context) + manageMembership(context) ]); }), ]); @@ -334,7 +335,7 @@ class WalletOptions extends StatelessWidget { Widget pubkeyWidget(WalletOptionsProvider walletProvider, BuildContext ctx) { final String shortPubkey = getShortPubkey(walletProvider.address.text); return GestureDetector( - key: const Key('copyPubkey'), + key: keyCopyAddress, onTap: () { Clipboard.setData(ClipboardData(text: walletProvider.address.text)); snackCopyKey(ctx); @@ -394,7 +395,7 @@ class WalletOptions extends StatelessWidget { WalletsProfilesProvider historyProvider, WalletOptionsProvider walletProvider) { return InkWell( - key: const Key('displayActivity'), + key: keyOpenActivity, onTap: () { // _historyProvider.nPage = 1; Navigator.push( @@ -431,11 +432,11 @@ class WalletOptions extends StatelessWidget { ); } - Widget manageMemberStatus(BuildContext context) { + Widget manageMembership(BuildContext context) { WalletOptionsProvider walletOptions = Provider.of(context, listen: false); return InkWell( - key: const Key('manageStatus'), + key: keyManageMembership, onTap: () { Navigator.push( context, @@ -471,7 +472,7 @@ class WalletOptions extends StatelessWidget { WalletData defaultWallet = myWalletProvider.getDefaultWallet(); walletOptions.isDefaultWallet = (defaultWallet.number == wallet.id()[1]); return InkWell( - key: const Key('setDefaultWallet'), + key: keySetDefaultWallet, onTap: !walletProvider.isDefaultWallet ? () async { await setDefaultWallet(context, currentChest); @@ -544,7 +545,7 @@ class WalletOptions extends StatelessWidget { !hasConsumers.data! && (balance > 2 || balance == 0); return InkWell( - key: const Key('deleteWallet'), + key: keyDeleteWallet, onTap: canDelete ? () async { await walletProvider.deleteWallet(context, wallet); diff --git a/lib/screens/myWallets/wallets_home.dart b/lib/screens/myWallets/wallets_home.dart index 19a324c..03ba5e1 100644 --- a/lib/screens/myWallets/wallets_home.dart +++ b/lib/screens/myWallets/wallets_home.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/chest_data.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/my_wallets.dart'; @@ -59,7 +60,6 @@ class WalletsHome extends StatelessWidget { ); }), title: Text(currentChest.name!, - key: const Key('myWallets'), style: TextStyle(color: Colors.grey[850])), backgroundColor: const Color(0xffFFD58D), ), @@ -108,7 +108,7 @@ class WalletsHome extends StatelessWidget { )), const SizedBox(height: 30), InkWell( - key: const Key('importG1v1'), + key: keyImportG1v1, onTap: () { Navigator.push( context, @@ -130,7 +130,7 @@ class WalletsHome extends StatelessWidget { ), const SizedBox(height: 5), InkWell( - key: const Key('changeChest'), + key: keyChangeChest, onTap: () { Navigator.push( context, @@ -190,7 +190,7 @@ class WalletsHome extends StatelessWidget { return CustomScrollView(slivers: [ const SliverToBoxAdapter(child: SizedBox(height: 20)), SliverGrid.count( - key: const Key('listWallets'), + key: keyListWallets, crossAxisCount: nTule, childAspectRatio: 1, crossAxisSpacing: 0, @@ -366,7 +366,7 @@ class WalletsHome extends StatelessWidget { child: Column(children: [ Expanded( child: InkWell( - key: const Key('addDerivation'), + key: keyAddDerivation, onTap: () async { if (!myWalletProvider.isNewDerivationLoading) { WalletData? defaultWallet = diff --git a/lib/screens/my_contacts.dart b/lib/screens/my_contacts.dart index 31ab42c..abe9fc0 100644 --- a/lib/screens/my_contacts.dart +++ b/lib/screens/my_contacts.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/providers/duniter_indexer.dart'; @@ -71,7 +72,7 @@ class ContactsScreen extends StatelessWidget { Padding( padding: const EdgeInsets.symmetric(horizontal: 5), child: ListTile( - key: Key('searchResult${keyID++}'), + key: keySearchResult(keyID++), horizontalTitleGap: 40, contentPadding: const EdgeInsets.all(5), leading: cesiumPlusProvider diff --git a/lib/screens/onBoarding/10.dart b/lib/screens/onBoarding/10.dart index 03643bf..82df70c 100644 --- a/lib/screens/onBoarding/10.dart +++ b/lib/screens/onBoarding/10.dart @@ -102,7 +102,7 @@ class OnboardingStepTen extends StatelessWidget { Consumer(builder: (context, sub, _) { return sub.nodeConnected ? InkWell( - key: const Key('cachePassword'), + key: keyCachePassword, onTap: () { walletOptions.changePinCacheChoice(); }, diff --git a/lib/screens/onBoarding/11_congratulations.dart b/lib/screens/onBoarding/11_congratulations.dart index c461a3b..11f6b29 100644 --- a/lib/screens/onBoarding/11_congratulations.dart +++ b/lib/screens/onBoarding/11_congratulations.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/myWallets/wallets_home.dart'; @@ -54,7 +55,7 @@ Widget finishButton(BuildContext context) { width: 380 * ratio, height: 60 * ratio, child: ElevatedButton( - key: const Key('goWalletHome'), + key: keyGoWalletsHome, style: ElevatedButton.styleFrom( elevation: 4, primary: orangeC, diff --git a/lib/screens/onBoarding/5.dart b/lib/screens/onBoarding/5.dart index 6b9426f..55e2466 100644 --- a/lib/screens/onBoarding/5.dart +++ b/lib/screens/onBoarding/5.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/screens/common_elements.dart'; @@ -80,7 +81,7 @@ class _ChooseChestState extends State { width: 380 * ratio, height: 60 * ratio, child: ElevatedButton( - key: const Key('generateMnemonic'), + key: keyGenerateMnemonic, style: ElevatedButton.styleFrom( elevation: 4, primary: const Color(0xffFFD58D), @@ -174,7 +175,7 @@ Widget arrayCell(dataWord) { ), Text( dataWord.split(':')[1], - key: Key('word${dataWord.split(':')[0]}'), + key: keyMnemonicWord(dataWord.split(':')[0]), style: TextStyle(fontSize: 17 * ratio, color: Colors.black), ), ]), diff --git a/lib/screens/onBoarding/6.dart b/lib/screens/onBoarding/6.dart index 5a58006..309ae29 100644 --- a/lib/screens/onBoarding/6.dart +++ b/lib/screens/onBoarding/6.dart @@ -4,6 +4,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/onBoarding/7.dart'; @@ -66,7 +67,7 @@ class OnboardingStepSix extends StatelessWidget { true), SizedBox(height: isTall ? 70 : 20), Text('${generateWalletProvider.nbrWord + 1}', - key: const Key('askedWord'), + key: keyAskedWord, style: TextStyle( fontSize: isTall ? 17 : 15, color: orangeC, @@ -81,7 +82,7 @@ class OnboardingStepSix extends StatelessWidget { )), width: 430, child: TextFormField( - key: const Key('inputWord'), + key: keyInputWord, autofocus: true, enabled: !generateWalletProvider.isAskedWordValid, controller: wordController, @@ -206,7 +207,7 @@ Widget arrayCell(dataWord) { ), Text( dataWord.split(':')[1], - key: Key('word${dataWord.split(':')[0]}'), + key: keyMnemonicWord(dataWord.split(':')[0]), style: const TextStyle(fontSize: 20, color: Colors.black), ), ]), diff --git a/lib/screens/onBoarding/9.dart b/lib/screens/onBoarding/9.dart index ed29fce..a2b83ea 100644 --- a/lib/screens/onBoarding/9.dart +++ b/lib/screens/onBoarding/9.dart @@ -3,6 +3,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/generate_wallets.dart'; import 'package:gecko/screens/common_elements.dart'; import 'package:gecko/screens/onBoarding/10.dart'; @@ -52,7 +53,7 @@ class OnboardingStepNine extends StatelessWidget { alignment: Alignment.centerRight, children: [ TextField( - key: const Key('generatedPin'), + key: keyGeneratedPin, enabled: false, controller: generateWalletProvider.pin, maxLines: 1, @@ -79,7 +80,7 @@ class OnboardingStepNine extends StatelessWidget { width: 380 * ratio, height: 60 * ratio, child: ElevatedButton( - key: const Key('changeSecretCode'), + key: keyChangePin, style: ElevatedButton.styleFrom( elevation: 4, primary: const Color(0xffFFD58D), diff --git a/lib/screens/search_result.dart b/lib/screens/search_result.dart index a563873..89ccc05 100644 --- a/lib/screens/search_result.dart +++ b/lib/screens/search_result.dart @@ -2,6 +2,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/models/g1_wallets_list.dart'; import 'package:gecko/providers/duniter_indexer.dart'; @@ -94,7 +95,7 @@ class SearchResultScreen extends StatelessWidget { padding: const EdgeInsets.symmetric(horizontal: 5), child: ListTile( - key: Key('searchResult${keyID++}'), + key: keySearchResult(keyID++), horizontalTitleGap: 40, contentPadding: const EdgeInsets.all(5), leading: cesiumPlusProvider diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 5918adc..f219eea 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -1,6 +1,7 @@ import 'package:easy_localization/easy_localization.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/duniter_indexer.dart'; import 'package:gecko/providers/my_wallets.dart'; import 'package:gecko/providers/settings_provider.dart'; @@ -45,7 +46,7 @@ class SettingsScreen extends StatelessWidget { width: buttonWidth, child: Center( child: InkWell( - key: const Key('deleteAllWallets'), + key: keyDeleteAllWallets, onTap: () async { log.i('Oublier tous mes coffres'); await _myWallets.deleteAllWallet(context); diff --git a/lib/screens/wallet_view.dart b/lib/screens/wallet_view.dart index bbe47d7..c606cc9 100644 --- a/lib/screens/wallet_view.dart +++ b/lib/screens/wallet_view.dart @@ -5,6 +5,7 @@ import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/g1_wallets_list.dart'; +import 'package:gecko/models/widgets_keys.dart'; import 'package:gecko/providers/cesium_plus.dart'; import 'package:gecko/providers/home.dart'; import 'package:gecko/providers/substrate_sdk.dart'; @@ -116,7 +117,7 @@ class WalletViewScreen extends StatelessWidget { child: Material( color: yellowC, //const Color(0xffFFD58D), // button color child: InkWell( - key: const Key('viewHistory'), + key: keyViewActivity, splashColor: orangeC, // inkwell color child: const Padding( padding: EdgeInsets.all(13), @@ -206,7 +207,7 @@ class WalletViewScreen extends StatelessWidget { color: const Color(0xffFFD58D), // button color child: InkWell( - key: const Key('certify'), + key: keyCertify, splashColor: orangeC, // inkwell color child: const Padding( padding: EdgeInsets.only(bottom: 0), @@ -290,7 +291,7 @@ class WalletViewScreen extends StatelessWidget { child: Material( color: const Color(0xffFFD58D), // button color child: InkWell( - key: const Key('copyKey'), + key: keyCopyAddress, splashColor: orangeC, // inkwell color child: const Padding( padding: EdgeInsets.all(20), @@ -331,7 +332,7 @@ class WalletViewScreen extends StatelessWidget { child: Material( color: orangeC, // button color child: InkWell( - key: const Key('pay'), + key: keyPay, splashColor: yellowC, onTap: sub.nodeConnected ? () {