refactoring: Declare keys for all widgets int widgets_keys.dart

This commit is contained in:
poka 2022-08-23 00:25:16 +02:00
parent dcb64c74b6
commit cbbd4eee34
29 changed files with 235 additions and 166 deletions

View File

@ -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<FormState> fieldKey, String textIn,
[int duration = 200]) async {
await tester.pumpAndSettle(Duration(milliseconds: duration));
await tester.enterText(find.byKey(fieldKey), textIn);
}
Future<void> 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';
}
}

View File

@ -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<void> 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';
}
}

View File

@ -1,3 +1,74 @@
import 'package:flutter/material.dart';
final keyPinForm = GlobalKey<FormState>();
// 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');

View File

@ -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: <Widget>[
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);
},

View File

@ -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),

View File

@ -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<WalletOptionsProvider>(
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<WalletOptionsProvider>(
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: <Widget>[
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);

View File

@ -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);

View File

@ -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: <Widget>[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(

View File

@ -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<bool?> 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<void> infoPopup(BuildContext context, String title) async {
mainAxisAlignment: MainAxisAlignment.center,
children: [
TextButton(
key: const Key('infoPopup'),
key: keyInfoPopup,
child: const Text(
"D'accord",
style: TextStyle(

View File

@ -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: () {

View File

@ -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: <Widget>[
SizedBox(height: 30 * ratio),
InkWell(
key: const Key('showSeed'),
key: keyShowSeed,
onTap: () async {
MyWalletsProvider myWalletProvider =
Provider.of<MyWalletsProvider>(context, listen: false);
@ -108,7 +109,7 @@ class ChestOptions extends StatelessWidget {
SizedBox(height: 10 * ratio),
Consumer<SubstrateSdk>(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<SubstrateSdk>(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);
},

View File

@ -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<ChooseChest> {
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<ChooseChest> {
),
),
InkWell(
key: const Key('importChest'),
key: keyImportChest,
onTap: () {
Navigator.push(
context,

View File

@ -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: <Widget>[
const SliverToBoxAdapter(child: SizedBox(height: 20)),
SliverGrid.count(
key: const Key('listWallets'),
key: keyListWallets,
crossAxisCount: nTule,
childAspectRatio: 1,
crossAxisSpacing: 0,

View File

@ -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));

View File

@ -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,

View File

@ -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),

View File

@ -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),
),
]),

View File

@ -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,

View File

@ -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<WalletOptionsProvider>(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);

View File

@ -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: <Widget>[
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: <Widget>[
Expanded(
child: InkWell(
key: const Key('addDerivation'),
key: keyAddDerivation,
onTap: () async {
if (!myWalletProvider.isNewDerivationLoading) {
WalletData? defaultWallet =

View File

@ -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

View File

@ -102,7 +102,7 @@ class OnboardingStepTen extends StatelessWidget {
Consumer<SubstrateSdk>(builder: (context, sub, _) {
return sub.nodeConnected
? InkWell(
key: const Key('cachePassword'),
key: keyCachePassword,
onTap: () {
walletOptions.changePinCacheChoice();
},

View File

@ -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,

View File

@ -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<OnboardingStepFive> {
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),
),
]),

View File

@ -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),
),
]),

View File

@ -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: <Widget>[
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),

View File

@ -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

View File

@ -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);

View File

@ -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
? () {