import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:dubp/dubp.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/walletOptions.dart'; import 'package:gecko/screens/myWallets/changePin.dart'; import 'dart:async'; import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; // ignore: must_be_immutable class WalletOptions extends StatelessWidget with ChangeNotifier { WalletOptions({Key keyMyWallets, @required this.walletName}) : super(key: keyMyWallets); String walletName; StreamController errorController; TextEditingController _enterPin = TextEditingController(); final formKey = GlobalKey(); bool hasError = false; var pinColor = Color(0xffF9F9F1); var walletPin = ''; int _pinLenght; Future get badWallet => null; @override Widget build(BuildContext context) { print("Build walletOptions"); WalletOptionsProvider _walletOptions = Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); errorController = StreamController(); // _walletOptions.isWalletUnlock = false; if (ramSys <= 3000) { _pinLenght = 6; } else { _pinLenght = 5; } return WillPopScope( onWillPop: () { _walletOptions.isWalletUnlock = false; return Future.value(true); }, child: Scaffold( resizeToAvoidBottomInset: false, appBar: AppBar( leading: IconButton( icon: Icon(Icons.arrow_back, color: Colors.black), onPressed: () { _walletOptions.isWalletUnlock = false; Navigator.of(context).pop(); }), title: SizedBox( height: 22, child: Text(walletName), )), body: Builder( builder: (ctx) => SafeArea( child: Column(children: [ Visibility( visible: _walletOptions.isWalletUnlock, child: Expanded( child: Column(children: [ SizedBox(height: 15), Text( 'Clé publique:', style: TextStyle( fontSize: 15.0, color: Colors.grey[600], fontWeight: FontWeight.w400), ), SizedBox(height: 15), GestureDetector( onTap: () { Clipboard.setData(ClipboardData( text: _walletOptions.pubkey.text)); _walletOptions.snackCopyKey(ctx); }, child: Text( _walletOptions.pubkey.text, style: TextStyle( fontSize: 14.0, color: Colors.black, fontWeight: FontWeight.bold, fontFamily: 'Monospace'), )), Expanded( child: Align( alignment: Alignment.bottomCenter, child: SizedBox( height: 50, width: 300, child: ElevatedButton( style: ElevatedButton.styleFrom( elevation: 5, primary: Color( 0xffFFD68E), //Color(0xffFFD68E), // background onPrimary: Colors.black, // foreground ), onPressed: () => _walletOptions .renameWalletAlerte( context, walletName) .then((_result) { if (_result == true) { WidgetsBinding.instance .addPostFrameCallback( (_) { _myWalletProvider .listWallets = _myWalletProvider .getAllWalletsNames(); _myWalletProvider .rebuildWidget(); }); } }), child: Text( 'Renommer ce portefeuille', style: TextStyle( fontSize: 20)))))), SizedBox(height: 30), SizedBox( height: 50, width: 300, child: ElevatedButton( style: ElevatedButton.styleFrom( elevation: 5, primary: Color( 0xffFFD68E), //Color(0xffFFD68E), // background onPrimary: Colors.black, // foreground ), onPressed: () { // changePin(widget.walletName, this.walletPin); Navigator.push( context, MaterialPageRoute(builder: (context) { return ChangePinScreen( walletName: walletName, oldPin: this.walletPin); }), ); }, child: Text('Changer mon code secret', style: TextStyle(fontSize: 20)))), SizedBox(height: 30), SizedBox( height: 50, width: 300, child: ElevatedButton( style: ElevatedButton.styleFrom( elevation: 6, primary: Colors .redAccent, //Color(0xffFFD68E), // background onPrimary: Colors.black, // foreground ), onPressed: () async { await _walletOptions.deleteWallet( context, walletName); WidgetsBinding.instance .addPostFrameCallback((_) { _myWalletProvider.listWallets = _myWalletProvider .getAllWalletsNames(); _myWalletProvider.rebuildWidget(); }); }, child: Text('Supprimer ce portefeuille', style: TextStyle(fontSize: 20)))), SizedBox(height: 50), Text( 'Portefeuille déverrouillé', style: TextStyle( color: Colors.green, fontWeight: FontWeight.w700, fontSize: 15), ), SizedBox(height: 10) ]))), Visibility( visible: !_walletOptions.isWalletUnlock, child: Expanded( child: Column(children: [ SizedBox(height: 80), Text( 'Veuillez tapper votre code secret pour dévérouiller votre portefeuille.', textAlign: TextAlign.center, style: TextStyle( fontSize: 15.0, color: Colors.black, fontWeight: FontWeight.w400), ), SizedBox(height: 50), 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( shape: PinCodeFieldShape.box, borderRadius: BorderRadius.circular(5), fieldHeight: 60, fieldWidth: 50, activeFillColor: hasError ? Colors.orange : Colors.white, ), cursorColor: Colors.black, animationDuration: Duration(milliseconds: 300), textStyle: TextStyle(fontSize: 20, height: 1.6), backgroundColor: pinColor, 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( this.walletName, _pin.toUpperCase(), _pinLenght); if (resultWallet == 'bad') { errorController.add(ErrorAnimationType .shake); // Triggering error shake animation hasError = true; pinColor = Colors.red[200]; notifyListeners(); } else { pinColor = Colors.green[200]; // setState(() {}); // await Future.delayed(Duration(milliseconds: 50)); this.walletPin = _pin.toUpperCase(); // isWalletUnlock = true; notifyListeners(); } }, onChanged: (value) { if (pinColor != Color(0xffF9F9F1)) { pinColor = Color(0xffF9F9F1); } print(value); }, )), ) ]))), ]))))); } }