From 83b9f92ca89f8623ab266f3e2deedb4e57cb3709 Mon Sep 17 00:00:00 2001 From: poka Date: Tue, 2 Mar 2021 08:19:20 +0100 Subject: [PATCH] PIN validation is working but buggy --- lib/models/walletOptions.dart | 8 +- lib/screens/onBoarding/13_stepThirteen.dart | 19 ++-- lib/screens/onBoarding/14_stepFourteen.dart | 103 +++++++++++++++++++- 3 files changed, 117 insertions(+), 13 deletions(-) diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index c9cab0f..2e16e70 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -75,7 +75,7 @@ class WalletOptionsProvider with ChangeNotifier { 'false') { this.pubkey.text = _localPubkey; isWalletUnlock = true; - notifyListeners(); + // notifyListeners(); return _localDewif; } else { @@ -84,7 +84,7 @@ class WalletOptionsProvider with ChangeNotifier { } catch (e) { print('ERROR READING FILE: $e'); this.pubkey.clear(); - notifyListeners(); + // notifyListeners(); return 'bad'; } } @@ -265,4 +265,8 @@ class WalletOptionsProvider with ChangeNotifier { duration: Duration(seconds: 2)); Scaffold.of(context).showSnackBar(snackBar); } + + void reloadBuild() { + notifyListeners(); + } } diff --git a/lib/screens/onBoarding/13_stepThirteen.dart b/lib/screens/onBoarding/13_stepThirteen.dart index c3514cf..2c87494 100644 --- a/lib/screens/onBoarding/13_stepThirteen.dart +++ b/lib/screens/onBoarding/13_stepThirteen.dart @@ -3,14 +3,12 @@ import 'package:dubp/dubp.dart'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/generateWallets.dart'; -import 'package:gecko/models/myWallets.dart'; import 'package:gecko/screens/commonElements.dart'; import 'package:gecko/screens/onBoarding/14_stepFourteen.dart'; import 'package:provider/provider.dart'; // ignore: must_be_immutable class OnboardingStepThirteen extends StatelessWidget { - TextEditingController tplController = TextEditingController(); NewWallet generatedWallet; final int progress = 83; @@ -19,14 +17,23 @@ class OnboardingStepThirteen extends StatelessWidget { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); GenerateWalletsProvider _generateWalletProvider = Provider.of(context); - MyWalletsProvider myWalletProvider = - Provider.of(context); + // MyWalletsProvider myWalletProvider = + // Provider.of(context); CommonElements common = CommonElements(); + _generateWalletProvider.pin.text = ''; + // _generateWalletProvider.changePinCode(reload: false); return Scaffold( extendBodyBehindAppBar: true, body: SafeArea( child: Column(children: [ + FutureBuilder( + future: _generateWalletProvider.changePinCode(reload: false), + // initialData: '...', + builder: (context, snapshot) { + generatedWallet = snapshot.data; + return Visibility(visible: false, child: Text('')); + }), common.onboardingProgressBar('Ma phrase de restauration', progress), common.bubbleSpeakRich([ TextSpan( @@ -100,8 +107,8 @@ class OnboardingStepThirteen extends StatelessWidget { await _generateWalletProvider.storeWallet( generatedWallet, 'Mon portefeuille courant', context, isHD: true); - myWalletProvider.listWallets = - myWalletProvider.getAllWalletsNames(); + // myWalletProvider.listWallets = + // myWalletProvider.getAllWalletsNames(); _generateWalletProvider.isAskedWordValid = false; _generateWalletProvider.askedWordColor = Colors.black; Navigator.push( diff --git a/lib/screens/onBoarding/14_stepFourteen.dart b/lib/screens/onBoarding/14_stepFourteen.dart index 9ddde6f..ae25c9b 100644 --- a/lib/screens/onBoarding/14_stepFourteen.dart +++ b/lib/screens/onBoarding/14_stepFourteen.dart @@ -1,20 +1,27 @@ +import 'dart:async'; import 'dart:ui'; import 'package:flutter/services.dart'; import 'package:flutter/material.dart'; -import 'package:gecko/models/generateWallets.dart'; +import 'package:gecko/models/myWallets.dart'; +import 'package:gecko/models/walletOptions.dart'; import 'package:gecko/screens/commonElements.dart'; +import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:provider/provider.dart'; // ignore: must_be_immutable class OnboardingStepFourteen extends StatelessWidget { - TextEditingController tplController = TextEditingController(); final int progress = 92; + final formKey = GlobalKey(); + var pinColor = Color(0xFFA4B600); + bool hasError = false; @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - GenerateWalletsProvider _generateWalletProvider = - Provider.of(context); + // GenerateWalletsProvider _generateWalletProvider = + // Provider.of(context); + WalletOptionsProvider _walletOptions = + Provider.of(context); CommonElements common = CommonElements(); return Scaffold( @@ -25,8 +32,94 @@ class OnboardingStepFourteen extends StatelessWidget { common.bubbleSpeak( "Avez-vous bien mémorisé votre code secret ?\n\nVérifions ça ensemble !\n\nTapez votre code secret dans le champ ci-dessous (après c’est fini, promis-juré-gecko)."), SizedBox(height: 80), - common.pinForm(context, 5, 1, 3) + pinForm(context, _walletOptions, 5, 1, 3) ]), )); } + + Widget pinForm(context, WalletOptionsProvider _walletOptions, _pinLenght, + int _walletNbr, int _derivation) { + // var _walletPin = ''; +// ignore: close_sinks + StreamController errorController = + StreamController(); + TextEditingController _enterPin = TextEditingController(); + MyWalletsProvider _myWalletProvider = + Provider.of(context); + + return Form( + key: formKey, + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0, horizontal: 30), + child: PinCodeTextField( + autoFocus: true, + appContext: context, + pastedTextStyle: TextStyle( + color: Colors.green.shade600, + fontWeight: FontWeight.bold, + ), + length: _pinLenght, + obscureText: false, + obscuringCharacter: '*', + animationType: AnimationType.fade, + validator: (v) { + if (v.length < _pinLenght) { + return "Votre code PIN fait $_pinLenght caractères"; + } else { + return null; + } + }, + pinTheme: PinTheme( + activeColor: pinColor, + borderWidth: 4, + shape: PinCodeFieldShape.box, + borderRadius: BorderRadius.circular(5), + fieldHeight: 60, + fieldWidth: 50, + activeFillColor: hasError ? Colors.blueAccent : Colors.black, + ), + cursorColor: Colors.black, + animationDuration: Duration(milliseconds: 300), + textStyle: TextStyle(fontSize: 20, height: 1.6), + backgroundColor: Color(0xffF9F9F1), + enableActiveFill: false, + errorAnimationController: errorController, + controller: _enterPin, + keyboardType: TextInputType.text, + boxShadows: [ + BoxShadow( + offset: Offset(0, 1), + color: Colors.black12, + blurRadius: 10, + ) + ], + onCompleted: (_pin) async { + print("Completed"); + final resultWallet = await _walletOptions.readLocalWallet( + _walletNbr, _pin.toUpperCase(), _pinLenght, _derivation); + if (resultWallet == 'bad') { + errorController.add(ErrorAnimationType + .shake); // Triggering error shake animation + hasError = true; + pinColor = Colors.red[600]; + _walletOptions.reloadBuild(); + } else { + pinColor = Colors.green[500]; + _myWalletProvider.getAllWalletsNames(); + _walletOptions.reloadBuild(); + Navigator.popUntil( + context, + ModalRoute.withName('/'), + ); + } + }, + onChanged: (value) { + if (pinColor != Color(0xFFA4B600)) { + pinColor = Color(0xFFA4B600); + } + print(value); + }, + )), + ); + } }