add certtification workflow test
This commit is contained in:
parent
fbc8cbd0d9
commit
a03f711539
|
@ -1,105 +0,0 @@
|
||||||
import 'package:flutter/material.dart';
|
|
||||||
import 'package:flutter/services.dart';
|
|
||||||
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
|
||||||
import 'package:gecko/globals.dart';
|
|
||||||
import 'package:gecko/models/widgets_keys.dart';
|
|
||||||
import 'package:integration_test/integration_test.dart';
|
|
||||||
import 'package:gecko/main.dart' as app;
|
|
||||||
import 'tests_utility.dart';
|
|
||||||
|
|
||||||
void main() {
|
|
||||||
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
|
||||||
|
|
||||||
group('Ğecko basics', () {
|
|
||||||
testWidgets('Import chests', (tester) async {
|
|
||||||
app.main();
|
|
||||||
await tester.pumpAndSettle(const Duration(seconds: 1));
|
|
||||||
|
|
||||||
// Change Duniter endpoint to local
|
|
||||||
await changeNode(tester);
|
|
||||||
|
|
||||||
// Delete all existing chests
|
|
||||||
await deleteAllWallets(tester);
|
|
||||||
|
|
||||||
// Restore a chest
|
|
||||||
await restoreChest(tester);
|
|
||||||
|
|
||||||
// Execute a transaction to test2
|
|
||||||
await payTest2(tester);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
Future changeNode(WidgetTester tester) async {
|
|
||||||
final ipAddress = dotenv.env['ip_address'] ?? '127.0.0.1';
|
|
||||||
log.d('ip address: $ipAddress');
|
|
||||||
|
|
||||||
await goKey(tester, keyDrawerMenu);
|
|
||||||
await goKey(tester, keyParameters);
|
|
||||||
await goKey(tester, keySelectDuniterNodeDropDown, duration: 5);
|
|
||||||
await goKey(tester, keySelectDuniterNode('Personnalisé'), selectLast: true);
|
|
||||||
await enterText(tester, keyCustomDuniterEndpoint, 'ws://$ipAddress:9944');
|
|
||||||
// await sleep(tester, 10000);
|
|
||||||
await goKey(tester, keyConnectToEndpoint);
|
|
||||||
await isIconPresent(tester, Icons.add_card_sharp,
|
|
||||||
timeout: const Duration(seconds: 8));
|
|
||||||
await goBack(tester);
|
|
||||||
|
|
||||||
// await waitFor(tester, 'Vous êtes bien connecté');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Customs actions
|
|
||||||
Future deleteAllWallets(WidgetTester tester) async {
|
|
||||||
if (await isPresent(tester, 'Rechercher')) {
|
|
||||||
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, keyRestoreChest);
|
|
||||||
Clipboard.setData(const ClipboardData(
|
|
||||||
text:
|
|
||||||
'pipe paddle ketchup filter life ice feel embody glide quantum ride usage'));
|
|
||||||
await tester.pumpAndSettle();
|
|
||||||
await goKey(tester, keyPastMnemonic);
|
|
||||||
await tester.pumpAndSettle();
|
|
||||||
await goKey(tester, keyGoNext);
|
|
||||||
await goKey(tester, keyGoNext);
|
|
||||||
await goKey(tester, keyGoNext);
|
|
||||||
await goKey(tester, keyGoNext);
|
|
||||||
final isCached = await isIconPresent(tester, Icons.check_box);
|
|
||||||
if (!isCached) await goKey(tester, keyCachePassword);
|
|
||||||
await enterText(tester, keyPinForm, 'AAAAA');
|
|
||||||
await waitFor(tester, 'Accéder à mon coffre');
|
|
||||||
await goKey(tester, keyGoWalletsHome);
|
|
||||||
await waitFor(tester, 'ĞD');
|
|
||||||
await goBack(tester);
|
|
||||||
await waitFor(tester, "y'a pas de lézard");
|
|
||||||
}
|
|
||||||
|
|
||||||
Future payTest2(WidgetTester tester) async {
|
|
||||||
await waitFor(tester, 'Rechercher');
|
|
||||||
await goKey(tester, keyOpenSearch);
|
|
||||||
await enterText(tester, keySearchField,
|
|
||||||
'5E4i8vcNjnrDp21Sbnp32WHm2gz8YP3GGFwmdpfg5bHd8Whb');
|
|
||||||
await goKey(tester, keyConfirmSearch);
|
|
||||||
await waitFor(tester, 'Hd8Whb');
|
|
||||||
await goKey(tester,
|
|
||||||
keySearchResult('5E4i8vcNjnrDp21Sbnp32WHm2gz8YP3GGFwmdpfg5bHd8Whb'));
|
|
||||||
await waitFor(tester, 'Hd8Whb');
|
|
||||||
await waitFor(tester, 'ĞD');
|
|
||||||
await goKey(tester, keyPay);
|
|
||||||
await enterText(tester, keyAmountField, '2.14');
|
|
||||||
await goKey(tester, keyConfirmPayment);
|
|
||||||
await sleep(tester);
|
|
||||||
await spawnBlock(tester, keyCloseTransactionScreen);
|
|
||||||
|
|
||||||
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
|
||||||
await goKey(tester, keyCloseTransactionScreen);
|
|
||||||
await waitFor(tester, 'Hd8Whb');
|
|
||||||
}
|
|
|
@ -2,7 +2,7 @@
|
||||||
"first_ud": 10000,
|
"first_ud": 10000,
|
||||||
"first_ud_reeval": 100,
|
"first_ud_reeval": 100,
|
||||||
"genesis_parameters": {
|
"genesis_parameters": {
|
||||||
"genesis_certs_expire_on": 2102400,
|
"genesis_certs_expire_on": 50,
|
||||||
"genesis_certs_min_received": 3,
|
"genesis_certs_min_received": 3,
|
||||||
"genesis_memberships_expire_on": 1051200,
|
"genesis_memberships_expire_on": 1051200,
|
||||||
"genesis_smith_certs_expire_on": 2102400,
|
"genesis_smith_certs_expire_on": 2102400,
|
||||||
|
|
|
@ -0,0 +1,193 @@
|
||||||
|
import 'package:flutter/material.dart';
|
||||||
|
import 'package:flutter/services.dart';
|
||||||
|
import 'package:flutter_dotenv/flutter_dotenv.dart';
|
||||||
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
|
import 'package:gecko/globals.dart';
|
||||||
|
import 'package:gecko/models/widgets_keys.dart';
|
||||||
|
import 'package:integration_test/integration_test.dart';
|
||||||
|
import 'package:gecko/main.dart' as app;
|
||||||
|
import 'tests_utility.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
|
||||||
|
|
||||||
|
testWidgets('Gecko complete', (tester) async {
|
||||||
|
app.main();
|
||||||
|
await tester.pumpAndSettle(const Duration(seconds: 1));
|
||||||
|
|
||||||
|
// Change Duniter endpoint to local
|
||||||
|
await changeNode(tester);
|
||||||
|
|
||||||
|
// Delete all existing chests
|
||||||
|
await deleteAllWallets(tester);
|
||||||
|
|
||||||
|
// Restore a chest
|
||||||
|
await restoreChest(tester);
|
||||||
|
|
||||||
|
// Execute a transaction to test2
|
||||||
|
await payTest2(tester);
|
||||||
|
|
||||||
|
// Certify test5 account with 3 account to become member
|
||||||
|
await certifyTest5(tester);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
Future changeNode(WidgetTester tester) async {
|
||||||
|
final ipAddress = dotenv.env['ip_address'] ?? '127.0.0.1';
|
||||||
|
log.d('ip address: $ipAddress');
|
||||||
|
|
||||||
|
await goKey(tester, keyDrawerMenu);
|
||||||
|
await goKey(tester, keyParameters);
|
||||||
|
await goKey(tester, keySelectDuniterNodeDropDown, duration: 5);
|
||||||
|
await goKey(tester, keySelectDuniterNode('Personnalisé'), selectLast: true);
|
||||||
|
await enterText(tester, keyCustomDuniterEndpoint, 'ws://$ipAddress:9944');
|
||||||
|
// await sleep(tester, 10000);
|
||||||
|
await goKey(tester, keyConnectToEndpoint);
|
||||||
|
await isIconPresent(tester, Icons.add_card_sharp,
|
||||||
|
timeout: const Duration(seconds: 8));
|
||||||
|
await goBack(tester);
|
||||||
|
|
||||||
|
// await waitFor(tester, 'Vous êtes bien connecté');
|
||||||
|
}
|
||||||
|
|
||||||
|
// Customs actions
|
||||||
|
Future deleteAllWallets(WidgetTester tester) async {
|
||||||
|
if (await isPresent(tester, 'Rechercher')) {
|
||||||
|
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, keyRestoreChest);
|
||||||
|
Clipboard.setData(const ClipboardData(
|
||||||
|
text:
|
||||||
|
'pipe paddle ketchup filter life ice feel embody glide quantum ride usage'));
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
await goKey(tester, keyPastMnemonic);
|
||||||
|
await tester.pumpAndSettle();
|
||||||
|
await goKey(tester, keyGoNext);
|
||||||
|
await goKey(tester, keyGoNext);
|
||||||
|
await goKey(tester, keyGoNext);
|
||||||
|
await goKey(tester, keyGoNext);
|
||||||
|
final isCached = await isIconPresent(tester, Icons.check_box);
|
||||||
|
if (!isCached) await goKey(tester, keyCachePassword);
|
||||||
|
await enterText(tester, keyPinForm, 'AAAAA');
|
||||||
|
await waitFor(tester, 'Accéder à mon coffre');
|
||||||
|
await goKey(tester, keyGoWalletsHome);
|
||||||
|
await waitFor(tester, 'ĞD');
|
||||||
|
|
||||||
|
// Test add a new derivation
|
||||||
|
await addDerivation(tester);
|
||||||
|
await goKey(tester,
|
||||||
|
keyOpenWallet('5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R'));
|
||||||
|
await goKey(tester, keyCopyAddress);
|
||||||
|
await waitFor(tester, 'Cette adresse a été copié');
|
||||||
|
await goBack(tester);
|
||||||
|
await goBack(tester);
|
||||||
|
await waitFor(tester, "y'a pas de lézard");
|
||||||
|
}
|
||||||
|
|
||||||
|
Future payTest2(WidgetTester tester) async {
|
||||||
|
await waitFor(tester, 'Rechercher');
|
||||||
|
await goKey(tester, keyOpenSearch);
|
||||||
|
final addressToSearch = (await Clipboard.getData('text/plain'))!.text;
|
||||||
|
final endAddress = addressToSearch!.substring(addressToSearch.length - 6);
|
||||||
|
expect(addressToSearch, '5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R');
|
||||||
|
await enterText(tester, keySearchField, addressToSearch);
|
||||||
|
await goKey(tester, keyConfirmSearch);
|
||||||
|
await waitFor(tester, endAddress);
|
||||||
|
await goKey(tester, keySearchResult(addressToSearch));
|
||||||
|
await waitFor(tester, endAddress);
|
||||||
|
await waitFor(tester, '0.0 ĞD');
|
||||||
|
await goKey(tester, keyPay);
|
||||||
|
await enterText(tester, keyAmountField, '12.14');
|
||||||
|
await goKey(tester, keyConfirmPayment);
|
||||||
|
// await sleep(tester);
|
||||||
|
await spawnBlock(tester, keyCloseTransactionScreen);
|
||||||
|
|
||||||
|
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
||||||
|
await goKey(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, '12.14');
|
||||||
|
await spawnBlock(tester, keyViewActivity);
|
||||||
|
await waitFor(tester, '9.14');
|
||||||
|
}
|
||||||
|
|
||||||
|
Future addDerivation(WidgetTester tester) async {
|
||||||
|
await goKey(tester, keyAddDerivation);
|
||||||
|
await waitFor(tester, 'Portefeuille 5');
|
||||||
|
}
|
||||||
|
|
||||||
|
Future certifyTest5(WidgetTester tester) async {
|
||||||
|
// Create identity with Test1 account
|
||||||
|
// await spawnBlock(tester, keyViewActivity, 5);
|
||||||
|
// await sleep(tester);
|
||||||
|
await goKey(tester, keyCertify);
|
||||||
|
await goKey(tester, keyConfirm);
|
||||||
|
await spawnBlock(tester, keyViewActivity);
|
||||||
|
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
||||||
|
await goKey(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, 'Identité créée');
|
||||||
|
|
||||||
|
// Confirm Identity Test5
|
||||||
|
await goKey(tester, keyAppBarChest, duration: 300);
|
||||||
|
await goKey(tester,
|
||||||
|
keyOpenWallet('5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R'));
|
||||||
|
await goKey(tester, keyCopyAddress);
|
||||||
|
await goKey(tester, keyConfirmIdentity);
|
||||||
|
await enterText(tester, keyEnterIdentityUsername, 'test5');
|
||||||
|
await goKey(tester, keyConfirm);
|
||||||
|
await spawnBlock(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
||||||
|
await goKey(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, 'Identité confirmée');
|
||||||
|
await goBack(tester);
|
||||||
|
await goKey(tester,
|
||||||
|
keyOpenWallet('5E4i8vcNjnrDp21Sbnp32WHm2gz8YP3GGFwmdpfg5bHd8Whb'));
|
||||||
|
await goKey(tester, keySetDefaultWallet);
|
||||||
|
await waitFor(tester, 'Ce portefeuille est celui par defaut');
|
||||||
|
|
||||||
|
await goKey(tester, keyAppBarSearch);
|
||||||
|
final addressToSearch = (await Clipboard.getData('text/plain'))!.text;
|
||||||
|
final endAddress = addressToSearch!.substring(addressToSearch.length - 6);
|
||||||
|
expect(addressToSearch, '5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R');
|
||||||
|
await enterText(tester, keySearchField, addressToSearch);
|
||||||
|
await goKey(tester, keyConfirmSearch);
|
||||||
|
await waitFor(tester, endAddress);
|
||||||
|
await goKey(tester, keySearchResult(addressToSearch));
|
||||||
|
await waitFor(tester, endAddress);
|
||||||
|
await waitFor(tester, '1');
|
||||||
|
|
||||||
|
// Certify with test2 account
|
||||||
|
await goKey(tester, keyCertify);
|
||||||
|
await goKey(tester, keyConfirm);
|
||||||
|
await spawnBlock(tester, keyViewActivity);
|
||||||
|
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
||||||
|
await goKey(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, '2');
|
||||||
|
|
||||||
|
// Change default wallet to test3
|
||||||
|
await goKey(tester, keyPay);
|
||||||
|
await goKey(tester, keyChangeChest);
|
||||||
|
await goKey(tester,
|
||||||
|
keySelectThisWallet('5FhTLzXLNBPmtXtDBFECmD7fvKmTtTQDtvBTfVr97tachA1p'));
|
||||||
|
await goKey(tester, keyConfirm);
|
||||||
|
await sleep(tester);
|
||||||
|
|
||||||
|
// Certify with test3 account
|
||||||
|
await goKey(tester, keyCertify);
|
||||||
|
await goKey(tester, keyConfirm);
|
||||||
|
await spawnBlock(tester, keyViewActivity);
|
||||||
|
await waitFor(tester, 'validé !', timeout: const Duration(seconds: 1));
|
||||||
|
await goKey(tester, keyCloseTransactionScreen);
|
||||||
|
await waitFor(tester, 'Vous devez attendre');
|
||||||
|
|
||||||
|
// Check if test5 is member
|
||||||
|
await goKey(tester, keyAppBarChest, duration: 300);
|
||||||
|
await goKey(tester,
|
||||||
|
keyOpenWallet('5Dq3giahrBfykJogPetZJ2jjSmhw49Fa7i6qKkseUvRJ2T3R'));
|
||||||
|
await waitFor(tester, 'Membre validé !');
|
||||||
|
}
|
|
@ -4,7 +4,8 @@
|
||||||
# MP="`( cd \"$MP\" && pwd )`"
|
# MP="`( cd \"$MP\" && pwd )`"
|
||||||
# cd $MP
|
# cd $MP
|
||||||
|
|
||||||
args="$@"
|
testName=$1
|
||||||
|
[[ ! $testName ]] && testName='gecko_complete'
|
||||||
|
|
||||||
# Get local IP and set .env
|
# Get local IP and set .env
|
||||||
ip_address=$(hostname -I | awk '{print $1}')
|
ip_address=$(hostname -I | awk '{print $1}')
|
||||||
|
@ -18,7 +19,7 @@ docker-compose up -d
|
||||||
cd ../..
|
cd ../..
|
||||||
|
|
||||||
# Start integration test
|
# Start integration test
|
||||||
flutter test integration_test/app_test.dart
|
flutter test integration_test/$testName.dart
|
||||||
|
|
||||||
# Stop Duniter
|
# Stop Duniter
|
||||||
cd integration_test/duniter
|
cd integration_test/duniter
|
||||||
|
|
|
@ -1,10 +1,11 @@
|
||||||
// CUSTOM METHODES
|
|
||||||
import 'package:flutter/material.dart';
|
import 'package:flutter/material.dart';
|
||||||
import 'package:flutter_test/flutter_test.dart';
|
import 'package:flutter_test/flutter_test.dart';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/providers/substrate_sdk.dart';
|
import 'package:gecko/providers/substrate_sdk.dart';
|
||||||
import 'package:provider/provider.dart';
|
import 'package:provider/provider.dart';
|
||||||
|
|
||||||
|
// CUSTOM METHODS
|
||||||
|
|
||||||
Future sleep(WidgetTester tester, [int time = 1000]) async {
|
Future sleep(WidgetTester tester, [int time = 1000]) async {
|
||||||
await Future.delayed(Duration(milliseconds: time));
|
await Future.delayed(Duration(milliseconds: time));
|
||||||
}
|
}
|
||||||
|
@ -72,17 +73,10 @@ Future<bool> isIconPresent(WidgetTester tester, IconData icon,
|
||||||
return finder.evaluate().isEmpty ? false : true;
|
return finder.evaluate().isEmpty ? false : true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Future spawnBlock(WidgetTester tester, Key customKey) async {
|
Future spawnBlock(WidgetTester tester, Key customKey, [int number = 1]) async {
|
||||||
final BuildContext context =
|
await sleep(tester, 1000);
|
||||||
tester.element(find.byKey(customKey));
|
final BuildContext context = tester.element(find.byKey(customKey));
|
||||||
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
SubstrateSdk sub = Provider.of<SubstrateSdk>(context, listen: false);
|
||||||
await sub.spawnBlock();
|
sub.spawnBlock(number);
|
||||||
}
|
await sleep(tester, 500);
|
||||||
|
|
||||||
extension Truncate on String {
|
|
||||||
String truncate({required int max, String suffix = ''}) {
|
|
||||||
return length < max
|
|
||||||
? this
|
|
||||||
: '${substring(0, substring(0, max - suffix.length).lastIndexOf(" "))}$suffix';
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,7 +110,7 @@ Future<void> main() async {
|
||||||
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')],
|
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')],
|
||||||
path: 'assets/translations',
|
path: 'assets/translations',
|
||||||
fallbackLocale: const Locale('en'),
|
fallbackLocale: const Locale('en'),
|
||||||
child: Gecko(indexerEndpoint),
|
child: const Gecko(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
|
@ -122,15 +122,14 @@ Future<void> main() async {
|
||||||
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')],
|
supportedLocales: const [Locale('en'), Locale('fr'), Locale('es')],
|
||||||
path: 'assets/translations',
|
path: 'assets/translations',
|
||||||
fallbackLocale: const Locale('en'),
|
fallbackLocale: const Locale('en'),
|
||||||
child: Gecko(indexerEndpoint),
|
child: const Gecko(),
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class Gecko extends StatelessWidget {
|
class Gecko extends StatelessWidget {
|
||||||
const Gecko(this.indexerEndpoint, {Key? key}) : super(key: key);
|
const Gecko({Key? key}) : super(key: key);
|
||||||
final String? indexerEndpoint;
|
|
||||||
|
|
||||||
@override
|
@override
|
||||||
Widget build(BuildContext context) {
|
Widget build(BuildContext context) {
|
||||||
|
|
|
@ -5,6 +5,9 @@ const keyInfoPopup = Key('keyInfoPopup');
|
||||||
const keyGoNext = Key('keyGoNext');
|
const keyGoNext = Key('keyGoNext');
|
||||||
const keyCancel = Key('keyCancel');
|
const keyCancel = Key('keyCancel');
|
||||||
const keyConfirm = Key('keyConfirm');
|
const keyConfirm = Key('keyConfirm');
|
||||||
|
const keyAppBarSearch = Key('keyAppBarSearch');
|
||||||
|
const keyAppBarQrcode = Key('keyAppBarQrcode');
|
||||||
|
const keyAppBarChest = Key('keyAppBarChest');
|
||||||
|
|
||||||
// Home
|
// Home
|
||||||
const keyParameters = Key('keyParameters');
|
const keyParameters = Key('keyParameters');
|
||||||
|
@ -28,6 +31,8 @@ const keySetDefaultWallet = Key('keySetDefaultWallet');
|
||||||
const keyDeleteWallet = Key('keyDeleteWallet');
|
const keyDeleteWallet = Key('keyDeleteWallet');
|
||||||
const keyWalletName = Key('keyWalletName');
|
const keyWalletName = Key('keyWalletName');
|
||||||
const keyRenameWallet = Key('keyRenameWallet');
|
const keyRenameWallet = Key('keyRenameWallet');
|
||||||
|
const keyConfirmIdentity = Key('keyConfirmIdentity');
|
||||||
|
const keyEnterIdentityUsername = Key('keyEnterIdentityUsername');
|
||||||
|
|
||||||
// Chest options
|
// Chest options
|
||||||
const keyShowSeed = Key('keyShowSeed');
|
const keyShowSeed = Key('keyShowSeed');
|
||||||
|
@ -79,7 +84,9 @@ const keySearchField = Key('keySearchField');
|
||||||
const keyConfirmSearch = Key('keyConfirmSearch');
|
const keyConfirmSearch = Key('keyConfirmSearch');
|
||||||
|
|
||||||
// Unit keys
|
// Unit keys
|
||||||
Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word');
|
|
||||||
Key keyTransaction(int keyId) => Key('keyTransaction$keyId');
|
Key keyTransaction(int keyId) => Key('keyTransaction$keyId');
|
||||||
|
Key keyMnemonicWord(String word) => Key('keyMnemonicWord$word');
|
||||||
Key keySearchResult(String keyId) => Key('keySearchResult$keyId');
|
Key keySearchResult(String keyId) => Key('keySearchResult$keyId');
|
||||||
Key keySelectDuniterNode(String keyId) => Key('keySelectDuniterNode$keyId');
|
Key keySelectDuniterNode(String keyId) => Key('keySelectDuniterNode$keyId');
|
||||||
|
Key keyOpenWallet(String keyId) => Key('keyOpenWallet$keyId');
|
||||||
|
Key keySelectThisWallet(String keyId) => Key('keySelectThisWallet$keyId');
|
||||||
|
|
|
@ -11,6 +11,7 @@ import 'package:flutter/services.dart';
|
||||||
import 'dart:async';
|
import 'dart:async';
|
||||||
import 'package:gecko/globals.dart';
|
import 'package:gecko/globals.dart';
|
||||||
import 'package:gecko/models/wallet_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/my_wallets.dart';
|
||||||
import 'package:gecko/providers/wallets_profiles.dart';
|
import 'package:gecko/providers/wallets_profiles.dart';
|
||||||
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
import 'package:gecko/screens/myWallets/unlocking_wallet.dart';
|
||||||
|
@ -148,6 +149,7 @@ class HomeProvider with ChangeNotifier {
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
const SizedBox(width: 11),
|
const SizedBox(width: 11),
|
||||||
IconButton(
|
IconButton(
|
||||||
|
key: keyAppBarSearch,
|
||||||
iconSize: 40,
|
iconSize: 40,
|
||||||
icon: const Image(image: AssetImage('assets/loupe-noire.png')),
|
icon: const Image(image: AssetImage('assets/loupe-noire.png')),
|
||||||
onPressed: () {
|
onPressed: () {
|
||||||
|
@ -165,7 +167,7 @@ class HomeProvider with ChangeNotifier {
|
||||||
),
|
),
|
||||||
const SizedBox(width: 22),
|
const SizedBox(width: 22),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
IconButton(
|
IconButton(key: keyAppBarQrcode,
|
||||||
iconSize: 70,
|
iconSize: 70,
|
||||||
icon: const Image(image: AssetImage('assets/qrcode-scan.png')),
|
icon: const Image(image: AssetImage('assets/qrcode-scan.png')),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
@ -178,7 +180,7 @@ class HomeProvider with ChangeNotifier {
|
||||||
),
|
),
|
||||||
const Spacer(),
|
const Spacer(),
|
||||||
const SizedBox(width: 15),
|
const SizedBox(width: 15),
|
||||||
IconButton(
|
IconButton(key: keyAppBarChest,
|
||||||
iconSize: 60,
|
iconSize: 60,
|
||||||
icon: const Image(image: AssetImage('assets/wallet.png')),
|
icon: const Image(image: AssetImage('assets/wallet.png')),
|
||||||
onPressed: () async {
|
onPressed: () async {
|
||||||
|
|
|
@ -941,8 +941,7 @@ newKeySig: $newKeySig""");
|
||||||
|
|
||||||
Future spawnBlock([int number = 1]) async {
|
Future spawnBlock([int number = 1]) async {
|
||||||
for (var i = 1; i <= number; i++) {
|
for (var i = 1; i <= number; i++) {
|
||||||
await sdk.webView!
|
sdk.webView!.evalJavascript('api.rpc.engine.createBlock(true, true)');
|
||||||
.evalJavascript('api.rpc.engine.createBlock(true, true)');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -238,7 +238,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
height: 100,
|
height: 100,
|
||||||
child: Column(children: [
|
child: Column(children: [
|
||||||
const SizedBox(height: 20),
|
const SizedBox(height: 20),
|
||||||
TextField(
|
TextField(key: keyEnterIdentityUsername,
|
||||||
onChanged: (_) => notifyListeners(),
|
onChanged: (_) => notifyListeners(),
|
||||||
inputFormatters: <TextInputFormatter>[
|
inputFormatters: <TextInputFormatter>[
|
||||||
// FilteringTextInputFormatter.allow(RegExp("[0-9a-zA-Z]")),
|
// FilteringTextInputFormatter.allow(RegExp("[0-9a-zA-Z]")),
|
||||||
|
@ -259,7 +259,7 @@ class WalletOptionsProvider with ChangeNotifier {
|
||||||
Consumer<WalletOptionsProvider>(
|
Consumer<WalletOptionsProvider>(
|
||||||
builder: (context, wOptions, _) {
|
builder: (context, wOptions, _) {
|
||||||
return TextButton(
|
return TextButton(
|
||||||
key: keyInfoPopup,
|
key: keyConfirm,
|
||||||
child: Text(
|
child: Text(
|
||||||
"validate".tr(),
|
"validate".tr(),
|
||||||
style: TextStyle(
|
style: TextStyle(
|
||||||
|
|
|
@ -132,22 +132,24 @@ class HomeScreen extends StatelessWidget {
|
||||||
// sub.nodeConnected = false;
|
// sub.nodeConnected = false;
|
||||||
// }
|
// }
|
||||||
|
|
||||||
HomeProvider homeProvider =
|
// TODO: fix random bad network status on startup
|
||||||
Provider.of<HomeProvider>(ctx, listen: false);
|
// HomeProvider homeProvider =
|
||||||
Connectivity()
|
// Provider.of<HomeProvider>(ctx, listen: false);
|
||||||
.onConnectivityChanged
|
// Connectivity()
|
||||||
.listen((ConnectivityResult result) async {
|
// .onConnectivityChanged
|
||||||
log.d('Network changed: $result');
|
// .listen((ConnectivityResult result) async {
|
||||||
if (result == ConnectivityResult.none) {
|
// log.d('Network changed: $result');
|
||||||
sub.nodeConnected = false;
|
// if (result == ConnectivityResult.none) {
|
||||||
await sub.sdk.api.setting.unsubscribeBestNumber();
|
// sub.nodeConnected = false;
|
||||||
homeProvider.changeMessage(
|
// await sub.sdk.api.setting.unsubscribeBestNumber();
|
||||||
"notConnectedToInternet".tr(), 0);
|
// homeProvider.changeMessage(
|
||||||
sub.reload();
|
// "notConnectedToInternet".tr(), 0);
|
||||||
} else {
|
// sub.reload();
|
||||||
await sub.connectNode(ctx);
|
// } else {
|
||||||
}
|
// await sub.connectNode(ctx);
|
||||||
});
|
// }
|
||||||
|
// });
|
||||||
|
await sub.connectNode(ctx);
|
||||||
}
|
}
|
||||||
// _duniterIndexer.checkIndexerEndpointBackground();
|
// _duniterIndexer.checkIndexerEndpointBackground();
|
||||||
});
|
});
|
||||||
|
|
|
@ -47,6 +47,7 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
width: 470,
|
width: 470,
|
||||||
height: 70,
|
height: 70,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(
|
||||||
|
key: keyConfirm,
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
|
@ -123,6 +124,7 @@ class ChooseWalletScreen extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
|
key: keySelectThisWallet(repository.address!),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
selectedWallet = repository;
|
selectedWallet = repository;
|
||||||
myWalletProvider.rebuildWidget();
|
myWalletProvider.rebuildWidget();
|
||||||
|
|
|
@ -292,7 +292,7 @@ class WalletOptions extends StatelessWidget {
|
||||||
SizedBox(
|
SizedBox(
|
||||||
width: 320,
|
width: 320,
|
||||||
height: 60,
|
height: 60,
|
||||||
child: ElevatedButton(
|
child: ElevatedButton(key: keyConfirmIdentity,
|
||||||
style: ElevatedButton.styleFrom(
|
style: ElevatedButton.styleFrom(
|
||||||
elevation: 4,
|
elevation: 4,
|
||||||
primary: orangeC, // background
|
primary: orangeC, // background
|
||||||
|
|
|
@ -200,6 +200,7 @@ class WalletsHome extends StatelessWidget {
|
||||||
Padding(
|
Padding(
|
||||||
padding: const EdgeInsets.all(16),
|
padding: const EdgeInsets.all(16),
|
||||||
child: GestureDetector(
|
child: GestureDetector(
|
||||||
|
key: keyOpenWallet(repository.address!),
|
||||||
onTap: () {
|
onTap: () {
|
||||||
walletOptions.getAddress(
|
walletOptions.getAddress(
|
||||||
currentChestNumber, repository.derivation!);
|
currentChestNumber, repository.derivation!);
|
||||||
|
|
|
@ -481,7 +481,7 @@ class WalletViewScreen extends StatelessWidget {
|
||||||
),
|
),
|
||||||
const SizedBox(height: 10),
|
const SizedBox(height: 10),
|
||||||
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
Consumer<SubstrateSdk>(builder: (context, sub, _) {
|
||||||
return InkWell(
|
return InkWell(key: keyChangeChest,
|
||||||
onTap: () async {
|
onTap: () async {
|
||||||
String? pin;
|
String? pin;
|
||||||
if (myWalletProvider.pinCode == '') {
|
if (myWalletProvider.pinCode == '') {
|
||||||
|
|
Loading…
Reference in New Issue