From 8f7397626c5a4e11105d2c3c6839b94a2e36984d Mon Sep 17 00:00:00 2001 From: poka Date: Mon, 29 Mar 2021 22:12:38 +0200 Subject: [PATCH 1/9] Start to implement transactions --- lib/models/history.dart | 18 ++++++++++++++++++ lib/screens/history.dart | 14 +++++++++----- pubspec.yaml | 2 +- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/lib/models/history.dart b/lib/models/history.dart index 13768bf..679e83e 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -1,8 +1,12 @@ +import 'dart:io'; + +import 'package:dubp/dubp.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/home.dart'; import 'package:gecko/screens/history.dart'; +import 'package:gecko/screens/myWallets/unlockingWallet.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:jdenticon_dart/jdenticon_dart.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -45,6 +49,20 @@ class HistoryProvider with ChangeNotifier { return barcode; } + void pay(amount, comment) { + UnlockingWallet(); + + String dewif = File(walletsDirectory.path + + '${defaultWallet.split(':')[0]}/wallet.dewif') + .readAsLinesSync()[0]; + DubpRust.simplePaymentFromTransparentAccount( + accountIndex: 0, + amount: 1, + dewif: dewif, + gvaEndpoint: endPointGVA, + recipient: pubkey); + } + String isPubkey(context, pubkey, {bool goHistory}) { HomeProvider _homeProvider = Provider.of(context, listen: false); diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 966c79d..14c47bc 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -7,6 +7,7 @@ import 'package:gecko/models/queries.dart'; import 'package:gecko/models/history.dart'; import 'package:flutter/material.dart'; import 'package:flutter/foundation.dart'; +import 'package:gecko/screens/myWallets/unlockingWallet.dart'; import 'dart:ui'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; @@ -315,7 +316,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { // ), _historyProvider.isHistoryScreen ? historyView(context, result) - : payView(context), + : payView(context, _historyProvider), ], ))), onNotification: (t) { @@ -332,7 +333,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { )); } - Widget payView(context) { + Widget payView(context, HistoryProvider _historyProvider) { + TextEditingController payAmount = new TextEditingController(); TextEditingController payComment = new TextEditingController(); return Stack( @@ -361,6 +363,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Padding( padding: EdgeInsets.all(8.0), child: TextFormField( + controller: payAmount, textAlign: TextAlign.center, maxLines: 1, keyboardType: TextInputType.number, @@ -375,9 +378,10 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { style: OutlinedButton.styleFrom( side: BorderSide(width: 2, color: Color(0xffD28928))), onPressed: () { - if (_formKey.currentState.validate()) { - _formKey.currentState.save(); - } + // if (_formKey.currentState.validate()) { + // _formKey.currentState.save(); + // } + _historyProvider.pay(payAmount.text, payComment.text); }, child: Padding( padding: const EdgeInsets.all(12), diff --git a/pubspec.yaml b/pubspec.yaml index 1d2d785..77e65b5 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -5,7 +5,7 @@ description: Pay with G1. # pub.dev using `pub publish`. This is preferred for private packages. publish_to: 'none' # Remove this line if you wish to publish to pub.dev -version: 0.0.1+22 +version: 0.0.1+23 environment: sdk: ">=2.7.0 <3.0.0" From d96b184e0aeee85f59030b217d8ef84792f67d20 Mon Sep 17 00:00:00 2001 From: poka Date: Tue, 30 Mar 2021 02:00:46 +0200 Subject: [PATCH 2/9] WIP: Simple wallet Unlocking --- lib/models/history.dart | 5 +---- lib/models/myWallets.dart | 16 ++++++++++++++++ lib/screens/history.dart | 7 ++++++- lib/screens/myWallets/unlockingWallet.dart | 15 +++++---------- lib/screens/myWallets/walletOptions.dart | 6 +----- lib/screens/myWallets/walletsHome.dart | 9 ++------- 6 files changed, 31 insertions(+), 27 deletions(-) diff --git a/lib/models/history.dart b/lib/models/history.dart index 679e83e..8249b6c 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -6,7 +6,6 @@ import 'package:flutter/material.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/home.dart'; import 'package:gecko/screens/history.dart'; -import 'package:gecko/screens/myWallets/unlockingWallet.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:jdenticon_dart/jdenticon_dart.dart'; import 'package:permission_handler/permission_handler.dart'; @@ -49,9 +48,7 @@ class HistoryProvider with ChangeNotifier { return barcode; } - void pay(amount, comment) { - UnlockingWallet(); - + void pay(context, amount, comment) { String dewif = File(walletsDirectory.path + '${defaultWallet.split(':')[0]}/wallet.dewif') .readAsLinesSync()[0]; diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index 832c917..2d556e3 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -84,6 +84,22 @@ class MyWalletsProvider with ChangeNotifier { return listWallets; } + int getDerivationNbr(String _id) { + int chest = int.parse(_id.split(':')[0]); + // int nbr = int.parse(_id.split(':')[1]); + final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf'); + + int derivation; + + _walletConfig.readAsLinesSync().forEach((element) { + if ("${element.split(':')[0]}:${element.split(':')[1]}" == _id) { + derivation = int.parse(element.split(':')[3]); + } + }); + + return derivation; + } + void getDefaultWallet() { defaultWalletFile = File('${appPath.path}/defaultWallet'); diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 14c47bc..df948e8 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -381,7 +381,12 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { // if (_formKey.currentState.validate()) { // _formKey.currentState.save(); // } - _historyProvider.pay(payAmount.text, payComment.text); + // _historyProvider.pay(payAmount.text, payComment.text); + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: int.parse(defaultWallet)); + })); }, child: Padding( padding: const EdgeInsets.all(12), diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index c52fe45..f01372b 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -13,12 +13,10 @@ import 'package:provider/provider.dart'; // ignore: must_be_immutable class UnlockingWallet extends StatelessWidget { - UnlockingWallet( - {Key keyUnlockWallet, - @required this.walletNbr, - @required this.walletName, - @required this.derivation}) - : super(key: keyUnlockWallet); + UnlockingWallet({ + Key keyUnlockWallet, + @required this.walletNbr, + }) : super(key: keyUnlockWallet); int walletNbr; String walletName; int derivation; @@ -146,10 +144,7 @@ class UnlockingWallet extends StatelessWidget { Navigator.push( formKey.currentContext, SmoothTransition( - page: WalletOptions( - walletNbr: walletNbr, - walletName: walletName, - derivation: derivation))); + page: WalletOptions(walletNbr: walletNbr))); } }, onChanged: (value) { diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index 88d731d..868e4a2 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -13,11 +13,7 @@ import 'package:flutter/services.dart'; // ignore: must_be_immutable class WalletOptions extends StatelessWidget { - WalletOptions( - {Key keyMyWallets, - @required this.walletNbr, - @required this.walletName, - @required this.derivation}) + WalletOptions({Key keyMyWallets, @required this.walletNbr}) : super(key: keyMyWallets); int walletNbr; String walletName; diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index ff9f033..4c77571 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -108,9 +108,7 @@ class WalletsHome extends StatelessWidget { Navigator.push(context, MaterialPageRoute(builder: (context) { return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[1]), - walletName: _repository.split(':')[2], - derivation: int.parse(_repository.split(':')[3])); + walletNbr: int.parse(_repository.split(':')[1])); })); }, child: ClipRRect( @@ -165,10 +163,7 @@ class WalletsHome extends StatelessWidget { MaterialPageRoute(builder: (context) { return UnlockingWallet( walletNbr: - int.parse(_repository.split(':')[1]), - walletName: _repository.split(':')[2], - derivation: - int.parse(_repository.split(':')[3])); + int.parse(_repository.split(':')[1])); })); }, ) From e6ff487b3d182e524e88aac74a9d4e8732cc9f77 Mon Sep 17 00:00:00 2001 From: poka Date: Wed, 31 Mar 2021 02:38:44 +0200 Subject: [PATCH 3/9] WIP: refactor wallet format --- lib/globals.dart | 3 +- lib/models/history.dart | 6 +- lib/models/myWallets.dart | 89 ++++++++++++------- lib/models/walletOptions.dart | 31 +++---- lib/screens/history.dart | 3 +- .../myWallets/confirmWalletStorage.dart | 4 +- lib/screens/myWallets/unlockingWallet.dart | 20 ++--- lib/screens/myWallets/walletOptions-old.dart | 10 ++- lib/screens/myWallets/walletOptions.dart | 36 ++++---- lib/screens/myWallets/walletsHome.dart | 38 ++++---- lib/screens/onBoarding/12.dart | 2 +- 11 files changed, 126 insertions(+), 116 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index 0976305..4770d16 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'package:gecko/models/myWallets.dart'; import 'package:shared_preferences/shared_preferences.dart'; // Files paths @@ -7,7 +8,7 @@ Directory walletsDirectory; File defaultWalletFile; File currentChestFile; -String defaultWallet; +WalletData defaultWallet; String appVersion; SharedPreferences prefs; String endPointGVA; diff --git a/lib/models/history.dart b/lib/models/history.dart index 8249b6c..92dee4b 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -49,9 +49,9 @@ class HistoryProvider with ChangeNotifier { } void pay(context, amount, comment) { - String dewif = File(walletsDirectory.path + - '${defaultWallet.split(':')[0]}/wallet.dewif') - .readAsLinesSync()[0]; + String dewif = + File(walletsDirectory.path + '${defaultWallet.chest}/wallet.dewif') + .readAsLinesSync()[0]; DubpRust.simplePaymentFromTransparentAccount( accountIndex: 0, amount: 1, diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index 2d556e3..b052c0e 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -6,8 +6,7 @@ import 'package:gecko/globals.dart'; import 'package:provider/provider.dart'; class MyWalletsProvider with ChangeNotifier { - String listWallets; - + List listWallets = []; Future initWalletFolder() async { getDefaultWallet(); @@ -49,9 +48,9 @@ class MyWalletsProvider with ChangeNotifier { return false; } - final String _walletList = getAllWalletsNames(0); + final List _walletList = readAllWallets(0); - if (_walletList == '') { + if (_walletList.isEmpty) { print('No wallets detected'); return false; } else { @@ -60,61 +59,55 @@ class MyWalletsProvider with ChangeNotifier { } } - String getAllWalletsNames(int _chest) { - if (listWallets != null && listWallets.isNotEmpty) { - listWallets = ''; - } - if (listWallets == null) { - listWallets = ''; - } - + List readAllWallets(int _chest) { print(walletsDirectory.path); + listWallets = []; + // int i = 0; File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf'); _walletConfig.readAsLinesSync().forEach((element) { - if (listWallets != '') { - listWallets += '\n'; - } - listWallets += element; + print(element); + listWallets.add(WalletData(element)); // listWallets += "${element.split(':')[0]}:${element.split(':')[1]}:${element.split(':')[2]}" }); - print(listWallets); + // listWallets.forEach((e) { + // print(e.name); + // }); + // print(listWallets); return listWallets; } - int getDerivationNbr(String _id) { + WalletData getWalletData(String _id) { int chest = int.parse(_id.split(':')[0]); // int nbr = int.parse(_id.split(':')[1]); final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf'); - int derivation; - _walletConfig.readAsLinesSync().forEach((element) { - if ("${element.split(':')[0]}:${element.split(':')[1]}" == _id) { - derivation = int.parse(element.split(':')[3]); + WalletData wallet = WalletData(element); + if (_id == "${wallet.chest}:${wallet.number}") { + return wallet; } }); - - return derivation; + return WalletData("0:0:Null:0"); } void getDefaultWallet() { defaultWalletFile = File('${appPath.path}/defaultWallet'); - bool isdefaultWalletFile = defaultWalletFile.existsSync(); - - if (!isdefaultWalletFile) { + if (!defaultWalletFile.existsSync()) { File(defaultWalletFile.path).createSync(); } try { - defaultWallet = defaultWalletFile.readAsStringSync(); + //////////////////////////////////////////////////////////// + defaultWallet = getWalletData(defaultWalletFile.readAsStringSync()); + print("found default wallet $defaultWallet"); } catch (e) { - defaultWallet = '0:0'; + print("ERROR $e"); + defaultWallet = WalletData('0:0:null:0'); } - if (defaultWallet == '') defaultWallet = '0:0'; } Future deleteAllWallet(context) async { @@ -159,7 +152,7 @@ class MyWalletsProvider with ChangeNotifier { onPressed: () { WidgetsBinding.instance.addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider.getAllWalletsNames(getCurrentChest()); + _myWalletProvider.readAllWallets(getCurrentChest()); _myWalletProvider.rebuildWidget(); }); Navigator.pop(context, true); @@ -203,3 +196,37 @@ class MyWalletsProvider with ChangeNotifier { notifyListeners(); } } + +// wallet data contains elements identifying wallet +class WalletData { + int chest; + int number; + String name; + int derivation; + + // constructor from ':'-separated string + WalletData(String element) { + List parts = element.split(':'); + + this.chest = int.parse(parts[0]); + this.number = int.parse(parts[1]); + this.name = parts[2]; + this.derivation = int.parse(parts[3]); + } + + // representation of WalletData when debugging + @override + String toString() { + return this.name; + } + + // creates the ':'-separated string from the WalletData + String inLine() { + return "${this.chest}:${this.number}:${this.name}:${this.derivation}"; + } + + // returns only the id part of the ':'-separated string + String id() { + return "${this.chest}:${this.number}"; + } +} diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 6c4a1b2..d84b4ae 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -1,3 +1,4 @@ +// import 'dart:ffi'; import 'dart:io'; import 'dart:typed_data'; import 'package:crypto/crypto.dart'; @@ -7,6 +8,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; +import 'package:gecko/models/myWallets.dart'; import 'package:image_picker/image_picker.dart'; import 'package:truncate/truncate.dart'; import 'package:qrscan/qrscan.dart' as scanner; @@ -74,15 +76,16 @@ class WalletOptionsProvider with ChangeNotifier { } Future readLocalWallet( - int _walletNbr, String _pin, int _pinLenght, int derivation) async { + context, WalletData _wallet, String _pin, int _pinLenght) async { isWalletUnlock = false; + // MyWalletsProvider _myWalletProvider = MyWalletsProvider(); try { File _walletFile = File('${walletsDirectory.path}/0/wallet.dewif'); String _localDewif = await _walletFile.readAsString(); String _localPubkey; if ((_localPubkey = await _getPubkeyFromDewif( - _localDewif, _pin, _pinLenght, derivation)) != + _localDewif, _pin, _pinLenght, _wallet.derivation)) != 'false') { this.pubkey.text = _localPubkey; isWalletUnlock = true; @@ -136,27 +139,15 @@ class WalletOptionsProvider with ChangeNotifier { String newConfig = await _walletConfig.readAsLines().then((List lines) { int nbrLines = lines.length; - // print(lines); - // print(nbrLines); - // int _index = lines.indexOf('0:$_walletNbr:$_walletName:$_derivation'); if (nbrLines != 1) { for (String wLine in lines) { String wID = "${wLine.split(':')[0]}:${wLine.split(':')[1]}"; - print( - "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"); - print(wLine); String deri = wLine.split(':')[3]; - print("($wID == $_walletID ???"); if (wID == _walletID) { lines.remove(wLine); lines.add('$_walletID:$_newName:$deri'); - // return '$_walletID:$_newName:$deri'; - print('OOUUUUUUUIIIIIIIIIIIIIIIIIII'); } } - // lines.removeWhere((element) => - // '${element.split(':')[0]}:${element.split(':')[1]}' == _walletID); - // lines.add('$_walletID:$_newName:$deri'); return lines.join('\n'); } else { return 'true'; @@ -229,17 +220,16 @@ class WalletOptionsProvider with ChangeNotifier { return nameState; } - Future deleteWallet(context, _walletNbr, _name, _derivation) async { - final bool _answer = await _confirmDeletingWallet(context, _name); + Future deleteWallet(context, wallet) async { + final bool _answer = await _confirmDeletingWallet(context, wallet.name); if (_answer) { final _walletConfig = File('${walletsDirectory.path}/0/list.conf'); - if (_derivation != -1) { + if (wallet.derivation != -1) { String newConfig = await _walletConfig.readAsLines().then((List lines) { - lines.removeWhere((element) => - element.contains('0:$_walletNbr:$_name:$_derivation')); + lines.removeWhere((element) => element.contains(wallet.inLine())); return lines.join('\n'); }); @@ -247,7 +237,8 @@ class WalletOptionsProvider with ChangeNotifier { await _walletConfig.delete(); await _walletConfig.writeAsString(newConfig); } else { - final _walletFile = Directory('${walletsDirectory.path}/$_walletNbr'); + final _walletFile = + Directory('${walletsDirectory.path}/${wallet.number}'); await _walletFile.delete(recursive: true); } Navigator.popUntil( diff --git a/lib/screens/history.dart b/lib/screens/history.dart index df948e8..f2f2082 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -384,8 +384,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { // _historyProvider.pay(payAmount.text, payComment.text); Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(defaultWallet)); + return UnlockingWallet(wallet: defaultWallet); })); }, child: Padding( diff --git a/lib/screens/myWallets/confirmWalletStorage.dart b/lib/screens/myWallets/confirmWalletStorage.dart index 9c6069c..f8e817e 100644 --- a/lib/screens/myWallets/confirmWalletStorage.dart +++ b/lib/screens/myWallets/confirmWalletStorage.dart @@ -138,8 +138,8 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { WidgetsBinding.instance .addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider.getAllWalletsNames( - _currentChest); + _myWalletProvider + .readAllWallets(_currentChest); _myWalletProvider.rebuildWidget(); }); } diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index f01372b..16f6fb3 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -2,6 +2,7 @@ import 'dart:async'; import 'package:dubp/dubp.dart'; import 'package:flutter/services.dart'; +import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/walletOptions.dart'; import 'package:gecko/screens/commonElements.dart'; import 'package:flutter/material.dart'; @@ -15,11 +16,9 @@ import 'package:provider/provider.dart'; class UnlockingWallet extends StatelessWidget { UnlockingWallet({ Key keyUnlockWallet, - @required this.walletNbr, + @required this.wallet, }) : super(key: keyUnlockWallet); - int walletNbr; - String walletName; - int derivation; + WalletData wallet; // ignore: close_sinks StreamController errorController; @@ -35,7 +34,7 @@ class UnlockingWallet extends StatelessWidget { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); WalletOptionsProvider _walletOptions = Provider.of(context); - final int _pinLenght = _walletOptions.getPinLenght(this.walletNbr); + final int _pinLenght = _walletOptions.getPinLenght(this.wallet.number); errorController = StreamController(); return Scaffold( @@ -55,7 +54,7 @@ class UnlockingWallet extends StatelessWidget { fontWeight: FontWeight.w400), ), SizedBox(height: 50), - pinForm(context, _pinLenght, walletNbr, derivation), + pinForm(context, _pinLenght, wallet.number, wallet.derivation), ]), ), GestureDetector( @@ -128,10 +127,7 @@ class UnlockingWallet extends StatelessWidget { onCompleted: (_pin) async { print("Completed"); final resultWallet = await _walletOptions.readLocalWallet( - this.walletNbr, - _pin.toUpperCase(), - _pinLenght, - this.derivation); + context, this.wallet, _pin.toUpperCase(), _pinLenght); if (resultWallet == 'bad') { errorController.add(ErrorAnimationType .shake); // Triggering error shake animation @@ -144,7 +140,9 @@ class UnlockingWallet extends StatelessWidget { Navigator.push( formKey.currentContext, SmoothTransition( - page: WalletOptions(walletNbr: walletNbr))); + page: WalletOptions( + wallet: wallet, + ))); } }, onChanged: (value) { diff --git a/lib/screens/myWallets/walletOptions-old.dart b/lib/screens/myWallets/walletOptions-old.dart index 621335c..6945077 100644 --- a/lib/screens/myWallets/walletOptions-old.dart +++ b/lib/screens/myWallets/walletOptions-old.dart @@ -111,7 +111,7 @@ class WalletOptionsOld extends StatelessWidget with ChangeNotifier { _myWalletProvider .listWallets = _myWalletProvider - .getAllWalletsNames( + .readAllWallets( _currentChest); _myWalletProvider .rebuildWidget(); @@ -137,13 +137,15 @@ class WalletOptionsOld extends StatelessWidget with ChangeNotifier { onPrimary: Colors.black, // foreground ), onPressed: () async { - await _walletOptions.deleteWallet(context, - walletNbr, walletName, derivation); + await _walletOptions.deleteWallet( + context, + _myWalletProvider.getWalletData( + _walletOptions.walletID)); WidgetsBinding.instance .addPostFrameCallback((_) { _myWalletProvider.listWallets = _myWalletProvider - .getAllWalletsNames(_currentChest); + .readAllWallets(_currentChest); _myWalletProvider.rebuildWidget(); }); }, diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index 868e4a2..af52547 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -13,11 +13,9 @@ import 'package:flutter/services.dart'; // ignore: must_be_immutable class WalletOptions extends StatelessWidget { - WalletOptions({Key keyMyWallets, @required this.walletNbr}) + WalletOptions({Key keyMyWallets, @required this.wallet}) : super(key: keyMyWallets); - int walletNbr; - String walletName; - int derivation; + WalletData wallet; int _nbrLinesName = 1; bool _isNewNameValid = false; @@ -37,9 +35,9 @@ class WalletOptions extends StatelessWidget { if (_walletOptions.nameController.text == null || _isNewNameValid == false) { - _walletOptions.nameController.text = walletName; + _walletOptions.nameController.text = wallet.name; } else { - walletName = _walletOptions.nameController.text; + wallet.name = _walletOptions.nameController.text; } _walletOptions.nameController.text.length >= 15 @@ -48,13 +46,17 @@ class WalletOptions extends StatelessWidget { if (_walletOptions.nameController.text.length >= 26 && isTall) _nbrLinesName = 3; - _walletOptions.walletID = '0:$walletNbr'; + _walletOptions.walletID = '0:${wallet.number}'; _myWalletProvider.getDefaultWallet(); - defaultWallet == _walletOptions.walletID - ? _walletOptions.isDefaultWallet = true - : _walletOptions.isDefaultWallet = false; + _walletOptions.isDefaultWallet = + (defaultWallet.id() == _walletOptions.walletID); + + int currentChest = _myWalletProvider.getCurrentChest(); + + print('roooooooooooooo'); + print("$currentChest:${wallet.number}"); // print(_walletOptions.generateQRcode(_walletOptions.pubkey.text)); @@ -248,7 +250,7 @@ class WalletOptions extends StatelessWidget { // .addPostFrameCallback((_) { // _myWalletProvider.listWallets = // _myWalletProvider - // .getAllWalletsNames( + // .readAllWallets( // _currentChest); // _myWalletProvider.rebuildWidget(); // }); @@ -365,10 +367,9 @@ class WalletOptions extends StatelessWidget { InkWell( onTap: !_walletOptions.isDefaultWallet ? () { - defaultWallet = '0:$walletNbr'; - _walletOptions - .defAsDefaultWallet(_walletOptions.walletID); - _myWalletProvider.getAllWalletsNames(_currentChest); + defaultWallet = wallet; + _walletOptions.defAsDefaultWallet(wallet.id()); + _myWalletProvider.readAllWallets(_currentChest); } : null, child: SizedBox( @@ -395,11 +396,10 @@ class WalletOptions extends StatelessWidget { SizedBox(height: 17 * ratio), InkWell( onTap: () async { - await _walletOptions.deleteWallet( - context, walletNbr, walletName, derivation); + await _walletOptions.deleteWallet(context, wallet); WidgetsBinding.instance.addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider.getAllWalletsNames(_currentChest); + _myWalletProvider.readAllWallets(_currentChest); _myWalletProvider.rebuildWidget(); }); }, diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index 4c77571..d9b5262 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -24,12 +24,11 @@ class WalletsHome extends StatelessWidget { final int _currentChest = myWalletProvider.getCurrentChest(); myWalletProvider.listWallets = - myWalletProvider.getAllWalletsNames(_currentChest); + myWalletProvider.readAllWallets(_currentChest); final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); - if (myWalletProvider.listWallets != '') { - firstWalletDerivation = - int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[3]); + if (myWalletProvider.listWallets.isEmpty) { + firstWalletDerivation = myWalletProvider.listWallets[0].derivation; myWalletProvider.getDefaultWallet(); } @@ -77,7 +76,7 @@ class WalletsHome extends StatelessWidget { return Text(''); } - if (_myWalletProvider.listWallets == '') { + if (_myWalletProvider.listWallets.isEmpty) { return Expanded( child: Column(children: [ Center( @@ -88,7 +87,7 @@ class WalletsHome extends StatelessWidget { ])); } - List _listWallets = _myWalletProvider.listWallets.split('\n'); + List _listWallets = _myWalletProvider.listWallets; // final int nbrOfWallets = _listWallets.length; // print(_listWallets); // print("${_listWallets[0].split(':')[0]}:${_listWallets[0].split(':')[2]}"); @@ -100,15 +99,14 @@ class WalletsHome extends StatelessWidget { crossAxisSpacing: 0, mainAxisSpacing: 0, children: [ - for (String _repository in _listWallets) + for (WalletData _repository in _listWallets) Padding( padding: EdgeInsets.all(16), child: GestureDetector( onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[1])); + return UnlockingWallet(wallet: _repository); })); }, child: ClipRRect( @@ -135,11 +133,9 @@ class WalletsHome extends StatelessWidget { )), ListTile( // contentPadding: const EdgeInsets.only(left: 7.0), - tileColor: - "${_repository.split(':')[0]}:${_repository.split(':')[1]}" == - defaultWallet - ? Color(0xffD28928) - : Color(0xffFFD58D), + tileColor: _repository == defaultWallet + ? Color(0xffD28928) + : Color(0xffFFD58D), // leading: Text('IMAGE'), // subtitle: Text(_repository.split(':')[3], @@ -148,22 +144,18 @@ class WalletsHome extends StatelessWidget { child: Padding( padding: EdgeInsets.symmetric(horizontal: 5), - child: Text(_repository.split(':')[2], + child: Text(_repository.name, textAlign: TextAlign.center, style: TextStyle( fontSize: 16.0, - color: - "${_repository.split(':')[0]}:${_repository.split(':')[1]}" == - defaultWallet - ? Color(0xffF9F9F1) - : Colors.black)))), + color: _repository == defaultWallet + ? Color(0xffF9F9F1) + : Colors.black)))), // dense: true, onTap: () { Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: - int.parse(_repository.split(':')[1])); + return UnlockingWallet(wallet: _repository); })); }, ) diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index 2caee89..e11b8e7 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -120,7 +120,7 @@ class OnboardingStepFourteen extends StatelessWidget { print(generatedWallet.pin); await _generateWalletProvider.storeHDWChest( generatedWallet, 'Mon portefeuille courant', context); - _myWalletProvider.getAllWalletsNames(_currentChest); + _myWalletProvider.readAllWallets(_currentChest); _walletOptions.reloadBuild(); _myWalletProvider.rebuildWidget(); Navigator.push( From 794d24e2359dbd78a71a1eba929d841fb502808d Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 2 Apr 2021 11:45:59 +0200 Subject: [PATCH 4/9] Fix defaultWallet checking --- lib/globals.dart | 4 ++++ lib/models/myWallets.dart | 20 +++++--------------- lib/screens/myWallets/walletsHome.dart | 5 +++-- pubspec.lock | 2 +- pubspec.yaml | 2 +- 5 files changed, 14 insertions(+), 19 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index 4770d16..c221974 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -1,5 +1,6 @@ import 'dart:io'; import 'package:gecko/models/myWallets.dart'; +import 'package:logger/logger.dart'; import 'package:shared_preferences/shared_preferences.dart'; // Files paths @@ -19,3 +20,6 @@ String cesiumPod = "https://g1.data.le-sou.org"; // Responsive ratios bool isTall; double ratio; + +// Logger +var logger = Logger(); diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index b052c0e..e5a9b36 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -84,13 +84,9 @@ class MyWalletsProvider with ChangeNotifier { // int nbr = int.parse(_id.split(':')[1]); final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf'); - _walletConfig.readAsLinesSync().forEach((element) { - WalletData wallet = WalletData(element); - if (_id == "${wallet.chest}:${wallet.number}") { - return wallet; - } - }); - return WalletData("0:0:Null:0"); + return WalletData(_walletConfig + .readAsLinesSync() + .firstWhere((element) => element.startsWith(_id))); } void getDefaultWallet() { @@ -100,14 +96,8 @@ class MyWalletsProvider with ChangeNotifier { File(defaultWalletFile.path).createSync(); } - try { - //////////////////////////////////////////////////////////// - defaultWallet = getWalletData(defaultWalletFile.readAsStringSync()); - print("found default wallet $defaultWallet"); - } catch (e) { - print("ERROR $e"); - defaultWallet = WalletData('0:0:null:0'); - } + defaultWallet = getWalletData(defaultWalletFile.readAsStringSync()); + print("found default wallet $defaultWallet"); } Future deleteAllWallet(context) async { diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index d9b5262..d5ac097 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -133,7 +133,7 @@ class WalletsHome extends StatelessWidget { )), ListTile( // contentPadding: const EdgeInsets.only(left: 7.0), - tileColor: _repository == defaultWallet + tileColor: _repository.id() == defaultWallet.id() ? Color(0xffD28928) : Color(0xffFFD58D), // leading: Text('IMAGE'), @@ -148,7 +148,8 @@ class WalletsHome extends StatelessWidget { textAlign: TextAlign.center, style: TextStyle( fontSize: 16.0, - color: _repository == defaultWallet + color: _repository.id() == + defaultWallet.id() ? Color(0xffF9F9F1) : Colors.black)))), // dense: true, diff --git a/pubspec.lock b/pubspec.lock index c5f9205..cd5e128 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -344,7 +344,7 @@ packages: name: logger url: "https://pub.dartlang.org" source: hosted - version: "0.9.4" + version: "1.0.0" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 77e65b5..82bb194 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,7 +37,7 @@ dependencies: sync_http: ^0.2.0 crypto: ^3.0.0 fast_base58: - logger: ^0.9.4 + logger: ^1.0.0 flutter_logs: ^2.1.3 sentry: ^4.0.4 sentry_flutter: ^4.0.4 From b6703f48e6bb842704f83671a9a9d417e4a81804 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 2 Apr 2021 12:05:37 +0200 Subject: [PATCH 5/9] Replace prints by debugs logs --- lib/globals.dart | 2 +- lib/models/cesiumPlus.dart | 14 -------------- lib/models/changePin.dart | 3 +-- lib/models/generateWallets.dart | 19 +++++-------------- lib/models/history.dart | 13 ++++--------- lib/models/home.dart | 14 +++++++------- lib/models/myWallets.dart | 19 +++++-------------- lib/models/walletOptions.dart | 17 ++++++----------- lib/screens/history.dart | 12 +++--------- lib/screens/home.dart | 2 +- lib/screens/myWallets/generateWallets.dart | 3 --- lib/screens/myWallets/importWallet.dart | 2 -- lib/screens/myWallets/unlockingWallet.dart | 6 ++---- lib/screens/myWallets/walletOptions-old.dart | 6 ++---- lib/screens/myWallets/walletOptions.dart | 13 ++----------- lib/screens/myWallets/walletsHome.dart | 4 ---- lib/screens/onBoarding/12.dart | 5 ----- lib/screens/settings.dart | 3 ++- 18 files changed, 41 insertions(+), 116 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index c221974..dbd9ce4 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -22,4 +22,4 @@ bool isTall; double ratio; // Logger -var logger = Logger(); +var log = Logger(); diff --git a/lib/models/cesiumPlus.dart b/lib/models/cesiumPlus.dart index d0ebf05..47ebef1 100644 --- a/lib/models/cesiumPlus.dart +++ b/lib/models/cesiumPlus.dart @@ -68,7 +68,6 @@ class CesiumPlusProvider with ChangeNotifier { List queryOptions = await _buildQuery(_pubkey); final response = await http.post((Uri.parse(queryOptions[0])), body: queryOptions[1], headers: queryOptions[2]); - // print('RESULT CESIUM QUERY: ${response.body}'); //For debug final responseJson = json.decode(response.body); if (responseJson['hits']['hits'].toString() == '[]') { return ''; @@ -79,7 +78,6 @@ class CesiumPlusProvider with ChangeNotifier { return ''; } _name = responseJson['hits']['hits'][0]['_source']['title']; - print(_name); return _name; } @@ -88,7 +86,6 @@ class CesiumPlusProvider with ChangeNotifier { List queryOptions = await _buildQuery(_pubkey); final response = await http.post((Uri.parse(queryOptions[0])), body: queryOptions[1], headers: queryOptions[2]); - // print('RESULT CESIUM QUERY: ${response.body}'); //For debug final responseJson = json.decode(response.body); if (responseJson['hits']['hits'].toString() == '[]') { return [File(appPath.path + '/default_avatar.png')]; @@ -103,21 +100,10 @@ class CesiumPlusProvider with ChangeNotifier { var avatarFile = File('${(await getTemporaryDirectory()).path}/avatar$iAvatar.png'); - // final bool _isAvatarExist = await avatarFile.exists(); - // if (_isAvatarExist) { - // await avatarFile.delete(); - // } await avatarFile.writeAsBytes(base64.decode(_avatar)); iAvatar++; isComplete = true; return [avatarFile]; } - - // isNameComplete() { - // while (isComplete == false) { - // print(isComplete); - // Duration(milliseconds: 50); - // } - // } } diff --git a/lib/models/changePin.dart b/lib/models/changePin.dart index 87bd694..06fd9b5 100644 --- a/lib/models/changePin.dart +++ b/lib/models/changePin.dart @@ -27,7 +27,7 @@ class ChangePinProvider with ChangeNotifier { notifyListeners(); return newWalletFile; } catch (e) { - print('Impossible de changer le code PIN.'); + log.e('Impossible de changer le code PIN.'); return badWallet; } } @@ -36,7 +36,6 @@ class ChangePinProvider with ChangeNotifier { final Directory walletNameDirectory = Directory('${walletsDirectory.path}/$_name'); final walletFile = File('${walletNameDirectory.path}/wallet.dewif'); - print(_newWalletFile); walletFile.writeAsString('${_newWalletFile.dewif}'); Navigator.pop(context); diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index d065556..3a42498 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -79,8 +79,6 @@ class GenerateWalletsProvider with ChangeNotifier { final runesAsked = _mnemo.split(' ')[nbrWord].runes; List runesAskedUnaccent = []; - print(runesAsked); - print(value.runes); for (int i in runesAsked) { if (i == 768 || i == 769 || i == 770 || i == 771) { continue; @@ -92,11 +90,11 @@ class GenerateWalletsProvider with ChangeNotifier { utf8.decode(runesAskedUnaccent).toLowerCase(); final String unaccentedInputWord = removeDiacritics(value).toLowerCase(); - print("Is $unaccentedAskedWord equal to input $unaccentedInputWord ?"); + log.i("Is $unaccentedAskedWord equal to input $unaccentedInputWord ?"); if (unaccentedAskedWord == unaccentedInputWord || value == 'triche' || value == '3.14') { - print('Word is OK'); + log.d('Word is OK'); isAskedWordValid = true; askedWordColor = Colors.green[600]; // walletNameFocus.nextFocus(); @@ -155,7 +153,7 @@ class GenerateWalletsProvider with ChangeNotifier { this.actualWallet = await generateWallet(this.generatedMnemonic); walletIsGenerated = true; } catch (e) { - print(e); + log.e(e); } return generatedMnemonic; } @@ -168,7 +166,7 @@ class GenerateWalletsProvider with ChangeNotifier { secretCodeType: SecretCodeType.letters, ); } catch (e) { - print(e); + log.e(e); } mnemonicController.text = generatedMnemonic; @@ -240,7 +238,7 @@ class GenerateWalletsProvider with ChangeNotifier { cesiumPubkey.text = _walletPubkey; pin.text = actualWallet.pin; isPinChanged = true; - print(_walletPubkey); + log.d(_walletPubkey); } Future importWallet(context, _cesiumID, _cesiumPWD) async { @@ -291,20 +289,13 @@ class GenerateWalletsProvider with ChangeNotifier { int _nbr = 1; for (word in _sentance.split(' ')) { - // print(word); _wordsList.add("$_nbr:$word"); _nbr++; } - // notifyListeners(); return _wordsList; } - // void makeError() { - // var tata = File(appPath.path + '/ddfhjftjfg'); - // tata.readAsLinesSync(); - // } - void reloadBuild() { notifyListeners(); } diff --git a/lib/models/history.dart b/lib/models/history.dart index 92dee4b..b987415 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -36,7 +36,7 @@ class HistoryProvider with ChangeNotifier { try { barcode = await scanner.scan(); } catch (e) { - print(e); + log.e(e); return 'false'; } if (barcode != null) { @@ -72,7 +72,7 @@ class HistoryProvider with ChangeNotifier { if (regExp.hasMatch(pubkey) == true && pubkey.length > 42 && pubkey.length < 45) { - print("C'est une pubkey !!!"); + log.d("C'est une pubkey !!!"); this.pubkey = pubkey; getShortPubkey(pubkey); @@ -157,8 +157,6 @@ class HistoryProvider with ChangeNotifier { final date = formatter.format(dateBrut); transBC[i].add(transaction['writtenTime']); transBC[i].add(date); - // print( - // "DEBUG date et comment: ${date.toString()} -- ${transaction['comment'].toString()}"); final int amountBrut = int.parse(output.split(':')[0]); final base = int.parse(output.split(':')[1]); final int applyBase = base - currentBase; @@ -191,9 +189,6 @@ class HistoryProvider with ChangeNotifier { pageInfo = result.data['txsHistoryBc']['both']['pageInfo']; fetchMoreCursor = pageInfo['endCursor']; - print('hasPreviousPage: ' + pageInfo['hasPreviousPage'].toString()); - print('hasNextPage: ' + pageInfo['hasNextPage'].toString()); - if (fetchMoreCursor != null) { opts = FetchMoreOptions( variables: {'cursor': fetchMoreCursor}, @@ -211,12 +206,12 @@ class HistoryProvider with ChangeNotifier { ); } - print( + log.d( "###### DEBUG H Parse blockchainTX list. Cursor: $fetchMoreCursor ######"); if (fetchMoreCursor != null) { transBC = parseHistory(blockchainTX, _pubkey); } else { - print("###### DEBUG H - Début de l'historique"); + log.i("###### DEBUG H - Début de l'historique"); } return opts; diff --git a/lib/models/home.dart b/lib/models/home.dart index afacee6..5b90dca 100644 --- a/lib/models/home.dart +++ b/lib/models/home.dart @@ -53,10 +53,10 @@ class HomeProvider with ChangeNotifier { do { i++; - print(i.toString() + ' ème essai de recherche de endpoint GVA.'); - print('Try GVA endpoint: ${_listEndpoints[i]}'); + log.d(i.toString() + ' ème essai de recherche de endpoint GVA.'); + log.d('Try GVA endpoint: ${_listEndpoints[i]}'); if (i > 2) { - print('NO VALID GVA ENDPOINT FOUND'); + log.e('NO VALID GVA ENDPOINT FOUND'); _endpoint = 'HS'; break; } @@ -71,21 +71,21 @@ class HomeProvider with ChangeNotifier { _endpoint = _listEndpoints[i]; _statusCode = response.statusCode; } on TimeoutException catch (_) { - print('This endpoint is timeout, next'); + log.e('This endpoint is timeout, next'); _statusCode = 50; continue; } on SocketException catch (_) { - print('This endpoint is a bad endpoint, next'); + log.e('This endpoint is a bad endpoint, next'); _statusCode = 70; continue; } on Exception { - print('Unknown error'); + log.e('Unknown error'); _statusCode = 60; continue; } } while (_statusCode != 400); - print('ENDPOINT: ' + _endpoint); + log.i('ENDPOINT: ' + _endpoint); return _endpoint; } diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index e5a9b36..701c338 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -51,37 +51,30 @@ class MyWalletsProvider with ChangeNotifier { final List _walletList = readAllWallets(0); if (_walletList.isEmpty) { - print('No wallets detected'); + log.i('No wallets detected'); return false; } else { - print('Some wallets have been detected.'); + log.i('Some wallets have been detected.'); return true; } } List readAllWallets(int _chest) { - print(walletsDirectory.path); + log.d(walletsDirectory.path); listWallets = []; - // int i = 0; File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf'); _walletConfig.readAsLinesSync().forEach((element) { - print(element); + log.i(element); listWallets.add(WalletData(element)); - // listWallets += "${element.split(':')[0]}:${element.split(':')[1]}:${element.split(':')[2]}" }); - // listWallets.forEach((e) { - // print(e.name); - // }); - // print(listWallets); return listWallets; } WalletData getWalletData(String _id) { int chest = int.parse(_id.split(':')[0]); - // int nbr = int.parse(_id.split(':')[1]); final _walletConfig = File('${walletsDirectory.path}/$chest/list.conf'); return WalletData(_walletConfig @@ -97,12 +90,11 @@ class MyWalletsProvider with ChangeNotifier { } defaultWallet = getWalletData(defaultWalletFile.readAsStringSync()); - print("found default wallet $defaultWallet"); } Future deleteAllWallet(context) async { try { - print('DELETE THAT ?: $walletsDirectory'); + log.w('DELETE THAT ?: $walletsDirectory'); final bool _answer = await _confirmDeletingAllWallets(context); @@ -176,7 +168,6 @@ class MyWalletsProvider with ChangeNotifier { '\n0:$_newWalletNbr:$_name:$_newDerivationNbr', mode: FileMode.append); - print(await _walletConfig.readAsString()); notifyListeners(); Navigator.pop(context); diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index d84b4ae..43ea41e 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -38,9 +38,7 @@ class WalletOptionsProvider with ChangeNotifier { ); if (regExp.hasMatch(_pin) == true && _pin.length == _pinLenght) { - print("Le format du code PIN est correct."); } else { - print('Format de code PIN invalide'); return 'false'; } if (derivation != -1) { @@ -53,8 +51,7 @@ class WalletOptionsProvider with ChangeNotifier { return _pubkey; } catch (e) { - print('Bad PIN code !'); - print(e); + log.w('Bad PIN code !\n' + e); notifyListeners(); return 'false'; @@ -66,8 +63,7 @@ class WalletOptionsProvider with ChangeNotifier { notifyListeners(); return _pubkey; } catch (e) { - print('Bad PIN code !'); - print(e); + log.w('Bad PIN code !\n' + e); notifyListeners(); return 'false'; @@ -96,7 +92,7 @@ class WalletOptionsProvider with ChangeNotifier { throw 'Bad pubkey'; } } catch (e) { - print('ERROR READING FILE: $e'); + log.e('ERROR READING FILE: $e'); this.pubkey.clear(); // notifyListeners(); return 'bad'; @@ -113,7 +109,7 @@ class WalletOptionsProvider with ChangeNotifier { throw false; } } catch (e) { - print('ERROR READING FILE: $e'); + log.e('ERROR READING FILE: $e'); return false; } } @@ -299,7 +295,7 @@ class WalletOptionsProvider with ChangeNotifier { // notifyListeners(); return newWalletFile; } catch (e) { - print('Impossible de changer le code PIN.'); + log.e('Impossible de changer le code PIN.'); return badWallet; } } @@ -308,7 +304,6 @@ class WalletOptionsProvider with ChangeNotifier { final Directory walletNameDirectory = Directory('${walletsDirectory.path}/$_name'); final walletFile = File('${walletNameDirectory.path}/wallet.dewif'); - print(_newWalletFile); walletFile.writeAsString('${_newWalletFile.dewif}'); Navigator.pop(context); @@ -365,7 +360,7 @@ class WalletOptionsProvider with ChangeNotifier { _image = File(pickedFile.path); return _image; } else { - print('No image selected.'); + log.w('No image selected.'); } } diff --git a/lib/screens/history.dart b/lib/screens/history.dart index f2f2082..a002fad 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -34,8 +34,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { HistoryProvider _historyProvider = Provider.of(context); HomeProvider _homeProvider = Provider.of(context); this._outputPubkey.text = _historyProvider.pubkey; - print('Build pubkey : ' + _historyProvider.pubkey); - // _historyProvider.snackNode(context); + log.i('Build pubkey : ' + _historyProvider.pubkey); WidgetsBinding.instance.addPostFrameCallback((_) {}); return Scaffold( @@ -58,7 +57,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { autofocus: true, controller: _homeProvider.searchQuery, onChanged: (text) { - print("Clé tappé: $text"); + log.d("Clé tappé: $text"); final String searchResult = _historyProvider.isPubkey(context, text); if (searchResult != '') { @@ -114,7 +113,6 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { // HistoryProvider _historyProvider = Provider.of(context); CesiumPlusProvider _cesiumPlusProvider = Provider.of(context); - print("I'M HERE 1"); bool _isFirstExec = true; return Expanded( child: Column( @@ -131,18 +129,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { }, ), builder: (QueryResult result, {fetchMore, refetch}) { - print("I'M HERE 2 ! $_isFirstExec"); - // print(result.source.isEager); - if (result.isLoading && result.data == null) { - print("I'M HERE 3 !"); return const Center( child: CircularProgressIndicator(), ); } if (result.hasException) { - print('Error GVA: ' + result.exception.toString()); + log.e('Error GVA: ' + result.exception.toString()); return Column(children: [ SizedBox(height: 50), Text( diff --git a/lib/screens/home.dart b/lib/screens/home.dart index b16b8ac..f5b523c 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -97,7 +97,7 @@ class HomeScreen extends StatelessWidget { autofocus: true, controller: _homeProvider.searchQuery, onChanged: (text) { - print("Clé tappé: $text"); + log.d("Clé tappé: $text"); final String searchResult = _historyProvider.isPubkey(context, text); if (searchResult != '') { diff --git a/lib/screens/myWallets/generateWallets.dart b/lib/screens/myWallets/generateWallets.dart index 8165ccf..0388245 100644 --- a/lib/screens/myWallets/generateWallets.dart +++ b/lib/screens/myWallets/generateWallets.dart @@ -24,9 +24,6 @@ class GenerateWalletsScreen extends StatelessWidget { Provider.of(context); _generateWalletProvider.generateMnemonic(); - // _generateWalletProvider.makeError(); - print('IS GENERATED ? : ' + - _generateWalletProvider.walletIsGenerated.toString()); return Scaffold( appBar: AppBar( title: SizedBox( diff --git a/lib/screens/myWallets/importWallet.dart b/lib/screens/myWallets/importWallet.dart index ece2e5a..a054762 100644 --- a/lib/screens/myWallets/importWallet.dart +++ b/lib/screens/myWallets/importWallet.dart @@ -48,7 +48,6 @@ class ImportWalletScreen extends StatelessWidget { _debounce.cancel(); _debounce = Timer(const Duration(milliseconds: 200), () { - print("ID Cesium tappé: $text"); _generateWalletProvider .generateCesiumWalletPubkey(text, _generateWalletProvider.cesiumPWD.text) @@ -86,7 +85,6 @@ class ImportWalletScreen extends StatelessWidget { _debounce.cancel(); _debounce = Timer(const Duration(milliseconds: 200), () { - print("ID Cesium tappé: $text"); _generateWalletProvider .generateCesiumWalletPubkey( _generateWalletProvider.cesiumID.text, diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index 16f6fb3..ead410e 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -9,8 +9,7 @@ import 'package:flutter/material.dart'; import 'package:gecko/screens/myWallets/walletOptions.dart'; import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:provider/provider.dart'; -// import 'package:gecko/models/home.dart'; -// import 'package:provider/provider.dart'; +import 'package:gecko/globals.dart'; // ignore: must_be_immutable class UnlockingWallet extends StatelessWidget { @@ -125,7 +124,7 @@ class UnlockingWallet extends StatelessWidget { ) ], onCompleted: (_pin) async { - print("Completed"); + log.d("Completed"); final resultWallet = await _walletOptions.readLocalWallet( context, this.wallet, _pin.toUpperCase(), _pinLenght); if (resultWallet == 'bad') { @@ -149,7 +148,6 @@ class UnlockingWallet extends StatelessWidget { if (pinColor != Color(0xFFA4B600)) { pinColor = Color(0xFFA4B600); } - print(value); }, )), ); diff --git a/lib/screens/myWallets/walletOptions-old.dart b/lib/screens/myWallets/walletOptions-old.dart index 6945077..f2ea7b2 100644 --- a/lib/screens/myWallets/walletOptions-old.dart +++ b/lib/screens/myWallets/walletOptions-old.dart @@ -5,6 +5,7 @@ import 'package:gecko/models/walletOptions.dart'; import 'dart:async'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; +import 'package:gecko/globals.dart'; // ignore: must_be_immutable class WalletOptionsOld extends StatelessWidget with ChangeNotifier { @@ -21,15 +22,12 @@ class WalletOptionsOld extends StatelessWidget with ChangeNotifier { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - print("Build walletOptions"); + log.d("Build walletOptions"); WalletOptionsProvider _walletOptions = Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); - // _walletOptions.isWalletUnlock = false; - print("Is unlock ? ${_walletOptions.isWalletUnlock}"); - final int _currentChest = _myWalletProvider.getCurrentChest(); return WillPopScope( diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index af52547..44387bc 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -22,7 +22,7 @@ class WalletOptions extends StatelessWidget { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - print("Build walletOptions"); + log.d("Build walletOptions"); WalletOptionsProvider _walletOptions = Provider.of(context); MyWalletsProvider _myWalletProvider = @@ -55,10 +55,7 @@ class WalletOptions extends StatelessWidget { int currentChest = _myWalletProvider.getCurrentChest(); - print('roooooooooooooo'); - print("$currentChest:${wallet.number}"); - - // print(_walletOptions.generateQRcode(_walletOptions.pubkey.text)); + log.d("$currentChest:${wallet.number}"); return WillPopScope( onWillPop: () { @@ -111,7 +108,6 @@ class WalletOptions extends StatelessWidget { InkWell( onTap: () async { await _walletOptions.changeAvatar(); - print('CHANGE AVATAR'); }, child: Image.asset( 'assets/chopp-gecko2.png', @@ -119,7 +115,6 @@ class WalletOptions extends StatelessWidget { InkWell( onTap: () async { await _walletOptions.changeAvatar(); - print('CHANGE AVATAR'); }, child: Column(children: [ Image.asset( @@ -127,14 +122,12 @@ class WalletOptions extends StatelessWidget { ), SizedBox(height: 100) ])), - // SizedBox(width: 20), Column(children: [ Row(children: [ Column(children: [ SizedBox( width: 260, child: TextField( - // autofocus: true, focusNode: _walletOptions.walletNameFocus, enabled: _walletOptions.isEditing, controller: _walletOptions.nameController, @@ -172,8 +165,6 @@ class WalletOptions extends StatelessWidget { return Text('Loading'); } - print(result); - // List repositories = result.data['viewer']['repositories']['nodes']; String wBalanceUD; if (result.data['balance'] == null) { diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index d5ac097..55c8503 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -88,10 +88,6 @@ class WalletsHome extends StatelessWidget { } List _listWallets = _myWalletProvider.listWallets; - // final int nbrOfWallets = _listWallets.length; - // print(_listWallets); - // print("${_listWallets[0].split(':')[0]}:${_listWallets[0].split(':')[2]}"); - // print(defaultWallet); return GridView.count( crossAxisCount: 2, diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index e11b8e7..45904b9 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -110,14 +110,10 @@ class OnboardingStepFourteen extends StatelessWidget { ) ], onCompleted: (_pin) async { - print("Completed"); - // final resultWallet = await _walletOptions.readLocalWallet( - // _walletNbr, _pin.toUpperCase(), _pinLenght, _derivation); final bool resultWallet = await _walletOptions.checkPinOK( generatedWallet.dewif, _pin.toUpperCase(), _pinLenght); if (resultWallet) { pinColor = Colors.green[500]; - print(generatedWallet.pin); await _generateWalletProvider.storeHDWChest( generatedWallet, 'Mon portefeuille courant', context); _myWalletProvider.readAllWallets(_currentChest); @@ -140,7 +136,6 @@ class OnboardingStepFourteen extends StatelessWidget { if (pinColor != Color(0xFFA4B600)) { pinColor = Color(0xFFA4B600); } - print(value); }, )), ); diff --git a/lib/screens/settings.dart b/lib/screens/settings.dart index 672cd3f..7912f80 100644 --- a/lib/screens/settings.dart +++ b/lib/screens/settings.dart @@ -5,6 +5,7 @@ import 'package:gecko/models/myWallets.dart'; import 'package:gecko/screens/myWallets/generateWallets.dart'; import 'dart:io'; import 'package:gecko/screens/myWallets/importWallet.dart'; +import 'package:gecko/globals.dart'; // ignore: must_be_immutable class SettingsScreen extends StatelessWidget { @@ -85,7 +86,7 @@ class SettingsScreen extends StatelessWidget { onPrimary: Colors.black, // foreground ), onPressed: () async => { - print('Suppression de tous les wallets'), + log.i('Suppression de tous les wallets'), await _myWallets.deleteAllWallet(context) }, child: Text( From c5e902ba88bc6a71b163d86a0d1a74c5ef14e178 Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 2 Apr 2021 13:11:45 +0200 Subject: [PATCH 6/9] better logs prints --- lib/models/myWallets.dart | 5 ++--- lib/screens/myWallets/walletOptions.dart | 3 +-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index 701c338..c7c796a 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -54,22 +54,21 @@ class MyWalletsProvider with ChangeNotifier { log.i('No wallets detected'); return false; } else { - log.i('Some wallets have been detected.'); return true; } } List readAllWallets(int _chest) { - log.d(walletsDirectory.path); + // log.d(walletsDirectory.path); listWallets = []; File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf'); _walletConfig.readAsLinesSync().forEach((element) { - log.i(element); listWallets.add(WalletData(element)); }); + log.i(listWallets.toString()); return listWallets; } diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index 44387bc..e02ff73 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -22,7 +22,6 @@ class WalletOptions extends StatelessWidget { @override Widget build(BuildContext context) { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - log.d("Build walletOptions"); WalletOptionsProvider _walletOptions = Provider.of(context); MyWalletsProvider _myWalletProvider = @@ -55,7 +54,7 @@ class WalletOptions extends StatelessWidget { int currentChest = _myWalletProvider.getCurrentChest(); - log.d("$currentChest:${wallet.number}"); + log.d("Wallet options: $currentChest:${wallet.number}"); return WillPopScope( onWillPop: () { From 0f88f55e04b0ddf76656441130f873836990aee3 Mon Sep 17 00:00:00 2001 From: poka Date: Sat, 3 Apr 2021 00:07:03 +0200 Subject: [PATCH 7/9] HELLO PAYMENTS !!! --- lib/globals.dart | 3 +- lib/models/history.dart | 33 ++++-- lib/models/myWallets.dart | 3 + lib/screens/history.dart | 10 +- lib/screens/home.dart | 14 ++- lib/screens/myWallets/unlockingWallet.dart | 29 +++--- lib/screens/myWallets/walletOptions.dart | 29 +++--- lib/screens/myWallets/walletsHome.dart | 115 +++++++++++++-------- 8 files changed, 150 insertions(+), 86 deletions(-) diff --git a/lib/globals.dart b/lib/globals.dart index dbd9ce4..5110f28 100644 --- a/lib/globals.dart +++ b/lib/globals.dart @@ -15,7 +15,8 @@ SharedPreferences prefs; String endPointGVA; int ramSys; -String cesiumPod = "https://g1.data.le-sou.org"; +// String cesiumPod = "https://g1.data.le-sou.org"; +String cesiumPod = "https://g1.data.e-is.pro"; // Responsive ratios bool isTall; diff --git a/lib/models/history.dart b/lib/models/history.dart index b987415..0200822 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -29,6 +29,8 @@ class HistoryProvider with ChangeNotifier { bool isHistoryScreen = false; String historySwitchButtun = "Voir l'historique"; String rawSvg; + TextEditingController payAmount = TextEditingController(); + TextEditingController payComment = TextEditingController(); Future scan(context) async { await Permission.camera.request(); @@ -48,16 +50,31 @@ class HistoryProvider with ChangeNotifier { return barcode; } - void pay(context, amount, comment) { + void pay(BuildContext context, String pinCode) { + // MyWalletsProvider _myWalletProvider = MyWalletsProvider(); String dewif = - File(walletsDirectory.path + '${defaultWallet.chest}/wallet.dewif') + File(walletsDirectory.path + '/${defaultWallet.chest}/wallet.dewif') .readAsLinesSync()[0]; - DubpRust.simplePaymentFromTransparentAccount( - accountIndex: 0, - amount: 1, - dewif: dewif, - gvaEndpoint: endPointGVA, - recipient: pubkey); + try { + print(defaultWallet.derivation); + print(payAmount.text); + print(payComment.text); + print(dewif); + print(endPointGVA); + print(pinCode); + print(pubkey); + DubpRust.simplePaymentFromTransparentAccount( + accountIndex: defaultWallet.derivation, + amount: double.parse(payAmount.text), + txComment: payComment.text, + dewif: dewif, + gvaEndpoint: endPointGVA, + secretCode: pinCode, + recipient: pubkey); + } catch (e) { + log.e("ERROR DUBP PAYMENTS"); + log.e(e); + } } String isPubkey(context, pubkey, {bool goHistory}) { diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index c7c796a..ed26c7e 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -7,6 +7,9 @@ import 'package:provider/provider.dart'; class MyWalletsProvider with ChangeNotifier { List listWallets = []; + String pinCode; + int pinLenght; + Future initWalletFolder() async { getDefaultWallet(); diff --git a/lib/screens/history.dart b/lib/screens/history.dart index a002fad..4fbe61b 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -328,9 +328,6 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { } Widget payView(context, HistoryProvider _historyProvider) { - TextEditingController payAmount = new TextEditingController(); - TextEditingController payComment = new TextEditingController(); - return Stack( clipBehavior: Clip.hardEdge, children: [ @@ -344,7 +341,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Padding( padding: EdgeInsets.all(8.0), child: TextField( - controller: payComment, + controller: _historyProvider.payComment, maxLines: 2, textAlign: TextAlign.center, decoration: InputDecoration(), @@ -357,7 +354,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Padding( padding: EdgeInsets.all(8.0), child: TextFormField( - controller: payAmount, + controller: _historyProvider.payAmount, textAlign: TextAlign.center, maxLines: 1, keyboardType: TextInputType.number, @@ -378,7 +375,8 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { // _historyProvider.pay(payAmount.text, payComment.text); Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet(wallet: defaultWallet); + return UnlockingWallet( + wallet: defaultWallet, action: "pay"); })); }, child: Padding( diff --git a/lib/screens/home.dart b/lib/screens/home.dart index f5b523c..08e83d5 100644 --- a/lib/screens/home.dart +++ b/lib/screens/home.dart @@ -4,6 +4,7 @@ import 'package:gecko/models/history.dart'; import 'package:gecko/models/home.dart'; import 'package:flutter/material.dart'; import 'package:gecko/models/myWallets.dart'; +import 'package:gecko/screens/myWallets/unlockingWallet.dart'; import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart'; import 'dart:ui'; import 'package:gecko/screens/settings.dart'; @@ -270,8 +271,17 @@ class HomeScreen extends StatelessWidget { height: 57)), onTap: () { isWalletsExists - ? Navigator.pushNamed( - context, '/mywallets') + ? Navigator.push(context, + MaterialPageRoute( + builder: (context) { + return UnlockingWallet( + wallet: defaultWallet, + action: "mywallets", + ); + })) + + // Navigator.pushNamed( + // context, '/mywallets') : Navigator.push(context, MaterialPageRoute( builder: (context) { diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index ead410e..d84f983 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -2,22 +2,21 @@ import 'dart:async'; import 'package:dubp/dubp.dart'; import 'package:flutter/services.dart'; +import 'package:gecko/models/history.dart'; import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/walletOptions.dart'; -import 'package:gecko/screens/commonElements.dart'; import 'package:flutter/material.dart'; -import 'package:gecko/screens/myWallets/walletOptions.dart'; import 'package:pin_code_fields/pin_code_fields.dart'; import 'package:provider/provider.dart'; import 'package:gecko/globals.dart'; // ignore: must_be_immutable class UnlockingWallet extends StatelessWidget { - UnlockingWallet({ - Key keyUnlockWallet, - @required this.wallet, - }) : super(key: keyUnlockWallet); + UnlockingWallet( + {Key keyUnlockWallet, @required this.wallet, @required this.action}) + : super(key: keyUnlockWallet); WalletData wallet; + String action; // ignore: close_sinks StreamController errorController; @@ -76,6 +75,9 @@ class UnlockingWallet extends StatelessWidget { TextEditingController _enterPin = TextEditingController(); WalletOptionsProvider _walletOptions = Provider.of(context); + MyWalletsProvider _myWalletProvider = + Provider.of(context); + HistoryProvider _historyProvider = Provider.of(context); return Form( key: formKey, @@ -127,6 +129,9 @@ class UnlockingWallet extends StatelessWidget { log.d("Completed"); final resultWallet = await _walletOptions.readLocalWallet( context, this.wallet, _pin.toUpperCase(), _pinLenght); + // _myWalletProvider.pinCode = _pin.toUpperCase(); + _myWalletProvider.pinLenght = _pinLenght; + if (resultWallet == 'bad') { errorController.add(ErrorAnimationType .shake); // Triggering error shake animation @@ -136,12 +141,12 @@ class UnlockingWallet extends StatelessWidget { } else { pinColor = Colors.green[400]; // await Future.delayed(Duration(milliseconds: 50)); - Navigator.push( - formKey.currentContext, - SmoothTransition( - page: WalletOptions( - wallet: wallet, - ))); + if (action == "mywallets") { + Navigator.pushNamed(formKey.currentContext, '/mywallets'); + } else if (action == "pay") { + print("Go payments"); + _historyProvider.pay(context, _pin.toUpperCase()); + } } }, onChanged: (value) { diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index e02ff73..24a63e6 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -7,7 +7,6 @@ import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/queries.dart'; import 'package:gecko/models/walletOptions.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; -import 'dart:async'; import 'package:provider/provider.dart'; import 'package:flutter/services.dart'; @@ -57,17 +56,16 @@ class WalletOptions extends StatelessWidget { log.d("Wallet options: $currentChest:${wallet.number}"); return WillPopScope( - onWillPop: () { - _walletOptions.isEditing = false; - _walletOptions.isBalanceBlur = true; - Navigator.popUntil( - context, - ModalRoute.withName('/'), - ); - Navigator.pushNamed(context, '/mywallets'); - return Future.value(true); - }, - child: Scaffold( + onWillPop: () { + _walletOptions.isEditing = false; + _walletOptions.isBalanceBlur = true; + Navigator.popUntil( + context, + ModalRoute.withName('/mywallets'), + ); + return Future.value(true); + }, + child: Scaffold( resizeToAvoidBottomInset: false, appBar: AppBar( leading: IconButton( @@ -77,9 +75,8 @@ class WalletOptions extends StatelessWidget { _walletOptions.isBalanceBlur = true; Navigator.popUntil( context, - ModalRoute.withName('/'), + ModalRoute.withName('/mywallets'), ); - Navigator.pushNamed(context, '/mywallets'); }), title: SizedBox( height: 22, @@ -405,7 +402,7 @@ class WalletOptions extends StatelessWidget { ])), ]), ), - )), - ); + ), + )); } } diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index 55c8503..ef02103 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -3,7 +3,8 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/walletOptions.dart'; import 'package:flutter/material.dart'; -import 'package:gecko/screens/myWallets/unlockingWallet.dart'; +import 'package:gecko/screens/commonElements.dart'; +import 'package:gecko/screens/myWallets/walletOptions.dart'; import 'package:gecko/screens/onBoarding/0_noKeychainFound.dart'; import 'package:provider/provider.dart'; @@ -33,42 +34,60 @@ class WalletsHome extends StatelessWidget { myWalletProvider.getDefaultWallet(); } - return Scaffold( - appBar: AppBar( - title: Text('Mes portefeuilles', - style: TextStyle(color: Colors.grey[850])), - backgroundColor: Color(0xffFFD58D), - ), - floatingActionButton: Visibility( - visible: (isWalletsExists && firstWalletDerivation != -1), - child: Container( - height: 80.0, - width: 80.0, - child: FittedBox( - child: FloatingActionButton( - heroTag: "buttonGenerateWallet", - onPressed: () { - showDialog( - context: context, - builder: (BuildContext context) { - return addNewDerivation(context, 1); - }); - }, - child: Container( - height: 40, - width: 40, - child: Icon(Icons.person_add_alt_1_rounded, - color: Colors.grey[850])), - backgroundColor: Color(0xffEFEFBF))))), - body: SafeArea( - child: !isWalletsExists - ? NoKeyChainScreen() - : myWalletsTiles(context))); + return WillPopScope( + onWillPop: () { + Navigator.popUntil( + context, + ModalRoute.withName('/'), + ); + return Future.value(true); + }, + child: Scaffold( + appBar: AppBar( + leading: IconButton( + icon: Icon(Icons.arrow_back, color: Colors.black), + onPressed: () { + Navigator.popUntil( + context, + ModalRoute.withName('/'), + ); + }), + title: Text('Mes portefeuilles', + style: TextStyle(color: Colors.grey[850])), + backgroundColor: Color(0xffFFD58D), + ), + floatingActionButton: Visibility( + visible: (isWalletsExists && firstWalletDerivation != -1), + child: Container( + height: 80.0, + width: 80.0, + child: FittedBox( + child: FloatingActionButton( + heroTag: "buttonGenerateWallet", + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) { + return addNewDerivation(context, 1); + }); + }, + child: Container( + height: 40, + width: 40, + child: Icon(Icons.person_add_alt_1_rounded, + color: Colors.grey[850])), + backgroundColor: Color(0xffEFEFBF))))), + body: SafeArea( + child: !isWalletsExists + ? NoKeyChainScreen() + : myWalletsTiles(context)))); } Widget myWalletsTiles(BuildContext context) { MyWalletsProvider _myWalletProvider = Provider.of(context); + WalletOptionsProvider _walletOptions = + Provider.of(context); final bool isWalletsExists = _myWalletProvider.checkIfWalletExist(); @@ -99,11 +118,23 @@ class WalletsHome extends StatelessWidget { Padding( padding: EdgeInsets.all(16), child: GestureDetector( - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return UnlockingWallet(wallet: _repository); - })); + onTap: () async { + await _walletOptions.readLocalWallet( + context, + _repository, + _myWalletProvider.pinCode, + _myWalletProvider.pinLenght); + Navigator.push( + context, + SmoothTransition( + page: WalletOptions( + wallet: _repository, + ))); + + // Navigator.push(context, + // MaterialPageRoute(builder: (context) { + // return UnlockingWallet(wallet: _repository); + // })); }, child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(12)), @@ -150,10 +181,12 @@ class WalletsHome extends StatelessWidget { : Colors.black)))), // dense: true, onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return UnlockingWallet(wallet: _repository); - })); + Navigator.push( + context, + SmoothTransition( + page: WalletOptions( + wallet: _repository, + ))); }, ) ])))) From c68e152040094287b398544132e5b5620eda8dc0 Mon Sep 17 00:00:00 2001 From: poka Date: Sat, 3 Apr 2021 02:39:09 +0200 Subject: [PATCH 8/9] Fix buggies stuff --- lib/main.dart | 1 + lib/models/myWallets.dart | 6 +- lib/models/walletOptions.dart | 3 +- lib/screens/history.dart | 13 +- lib/screens/myWallets/unlockingWallet.dart | 5 +- lib/screens/myWallets/walletOptions-old.dart | 166 ------------------- 6 files changed, 22 insertions(+), 172 deletions(-) delete mode 100644 lib/screens/myWallets/walletOptions-old.dart diff --git a/lib/main.dart b/lib/main.dart index 8d8cc68..8597171 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -44,6 +44,7 @@ Future main() async { await _homeProvider.getAppPath(); await _homeProvider.createDefaultAvatar(); await _walletsProvider.initWalletFolder(); + _walletsProvider.getDefaultWallet(); appVersion = await _homeProvider.getAppVersion(); prefs = await SharedPreferences.getInstance(); // final HiveStore _store = diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index ed26c7e..1329598 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -11,7 +11,7 @@ class MyWalletsProvider with ChangeNotifier { int pinLenght; Future initWalletFolder() async { - getDefaultWallet(); + // getDefaultWallet(); final bool isWalletFolderExist = await walletsDirectory.exists(); if (!isWalletFolderExist) { @@ -32,6 +32,7 @@ class MyWalletsProvider with ChangeNotifier { await File('${walletsDirectory.path}/0/order.conf').create(); await File('${walletsDirectory.path}/1/list.conf').create(); await File('${walletsDirectory.path}/1/order.conf').create(); + getDefaultWallet(); } } @@ -89,6 +90,7 @@ class MyWalletsProvider with ChangeNotifier { if (!defaultWalletFile.existsSync()) { File(defaultWalletFile.path).createSync(); + defaultWalletFile.writeAsStringSync("0:0"); } defaultWallet = getWalletData(defaultWalletFile.readAsStringSync()); @@ -102,7 +104,9 @@ class MyWalletsProvider with ChangeNotifier { if (_answer) { await walletsDirectory.delete(recursive: true); + await defaultWalletFile.delete(); await walletsDirectory.create(); + await defaultWalletFile.create(); await initWalletFolder(); notifyListeners(); Navigator.pop(context); diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 43ea41e..3ee1d97 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -74,11 +74,12 @@ class WalletOptionsProvider with ChangeNotifier { Future readLocalWallet( context, WalletData _wallet, String _pin, int _pinLenght) async { isWalletUnlock = false; - // MyWalletsProvider _myWalletProvider = MyWalletsProvider(); try { File _walletFile = File('${walletsDirectory.path}/0/wallet.dewif'); String _localDewif = await _walletFile.readAsString(); String _localPubkey; + // log.d("_wallet:"); + log.d(_pin); if ((_localPubkey = await _getPubkeyFromDewif( _localDewif, _pin, _pinLenght, _wallet.derivation)) != diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 4fbe61b..3b877ab 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -337,7 +337,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { mainAxisSize: MainAxisSize.min, children: [ SizedBox(height: 20), - Text('Commentaire:'), + Text('Commentaire:', style: TextStyle(fontSize: 20.0)), Padding( padding: EdgeInsets.all(8.0), child: TextField( @@ -346,18 +346,25 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { textAlign: TextAlign.center, decoration: InputDecoration(), style: TextStyle( - fontSize: 14.0, + fontSize: 22, color: Colors.black, fontWeight: FontWeight.bold))), SizedBox(height: 20), - Text('Montant (Ğ1):'), + Text('Montant (DU/Ğ1):', style: TextStyle(fontSize: 20.0)), Padding( padding: EdgeInsets.all(8.0), child: TextFormField( + style: TextStyle(fontSize: 22), controller: _historyProvider.payAmount, textAlign: TextAlign.center, maxLines: 1, keyboardType: TextInputType.number, + decoration: InputDecoration( + contentPadding: + EdgeInsets.symmetric(vertical: 25.0, horizontal: 10.0), + border: OutlineInputBorder( + borderRadius: BorderRadius.circular(10.0)), + ), inputFormatters: [ FilteringTextInputFormatter.allow(RegExp(r'(^\d*\.?\d*)')) ], diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index d84f983..735d09f 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -32,7 +32,9 @@ class UnlockingWallet extends StatelessWidget { SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); WalletOptionsProvider _walletOptions = Provider.of(context); - final int _pinLenght = _walletOptions.getPinLenght(this.wallet.number); + + log.d("defaultWallet: " + defaultWallet.toString()); + final int _pinLenght = _walletOptions.getPinLenght(wallet.number); errorController = StreamController(); return Scaffold( @@ -127,6 +129,7 @@ class UnlockingWallet extends StatelessWidget { ], onCompleted: (_pin) async { log.d("Completed"); + _myWalletProvider.pinCode = _pin; final resultWallet = await _walletOptions.readLocalWallet( context, this.wallet, _pin.toUpperCase(), _pinLenght); // _myWalletProvider.pinCode = _pin.toUpperCase(); diff --git a/lib/screens/myWallets/walletOptions-old.dart b/lib/screens/myWallets/walletOptions-old.dart deleted file mode 100644 index f2ea7b2..0000000 --- a/lib/screens/myWallets/walletOptions-old.dart +++ /dev/null @@ -1,166 +0,0 @@ -import 'package:flutter/foundation.dart'; -import 'package:flutter/material.dart'; -import 'package:gecko/models/myWallets.dart'; -import 'package:gecko/models/walletOptions.dart'; -import 'dart:async'; -import 'package:provider/provider.dart'; -import 'package:flutter/services.dart'; -import 'package:gecko/globals.dart'; - -// ignore: must_be_immutable -class WalletOptionsOld extends StatelessWidget with ChangeNotifier { - WalletOptionsOld( - {Key keyMyWallets, - @required this.walletNbr, - @required this.walletName, - @required this.derivation}) - : super(key: keyMyWallets); - int walletNbr; - String walletName; - int derivation; - - @override - Widget build(BuildContext context) { - SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - log.d("Build walletOptions"); - WalletOptionsProvider _walletOptions = - Provider.of(context); - MyWalletsProvider _myWalletProvider = - Provider.of(context); - - final int _currentChest = _myWalletProvider.getCurrentChest(); - - return WillPopScope( - onWillPop: () { - _walletOptions.isWalletUnlock = false; - Navigator.popUntil( - context, - ModalRoute.withName('/mywallets'), - ); - 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.popUntil( - context, - ModalRoute.withName('/mywallets'), - ); - }), - title: SizedBox( - height: 22, - child: Text(walletName), - )), - body: Builder( - builder: (ctx) => SafeArea( - child: Column(children: [ - 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, - walletNbr, - derivation) - .then((_result) { - if (_result == true) { - WidgetsBinding.instance - .addPostFrameCallback((_) { - _myWalletProvider - .listWallets = - _myWalletProvider - .readAllWallets( - _currentChest); - _myWalletProvider - .rebuildWidget(); - }); - Navigator.popUntil( - context, - ModalRoute.withName( - '/mywallets'), - ); - } - }), - child: Text('Renommer ce portefeuille', - 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, - _myWalletProvider.getWalletData( - _walletOptions.walletID)); - WidgetsBinding.instance - .addPostFrameCallback((_) { - _myWalletProvider.listWallets = - _myWalletProvider - .readAllWallets(_currentChest); - _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) - ])), - ]), - )), - )); - } -} From 5504cb0b170ebf24564e23ae837cbc2dfa252017 Mon Sep 17 00:00:00 2001 From: poka Date: Sat, 3 Apr 2021 12:50:34 +0200 Subject: [PATCH 9/9] Add pop to inform if payment is ok or not --- lib/models/history.dart | 21 +++++++-------- lib/screens/myWallets/unlockingWallet.dart | 31 +++++++++++++++++++++- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/lib/models/history.dart b/lib/models/history.dart index 0200822..ff5dd77 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -50,20 +50,14 @@ class HistoryProvider with ChangeNotifier { return barcode; } - void pay(BuildContext context, String pinCode) { + Future pay(BuildContext context, String pinCode) async { // MyWalletsProvider _myWalletProvider = MyWalletsProvider(); - String dewif = - File(walletsDirectory.path + '/${defaultWallet.chest}/wallet.dewif') - .readAsLinesSync()[0]; + List dewifList = await File( + walletsDirectory.path + '/${defaultWallet.chest}/wallet.dewif') + .readAsLines(); + String dewif = dewifList[0]; try { - print(defaultWallet.derivation); - print(payAmount.text); - print(payComment.text); - print(dewif); - print(endPointGVA); - print(pinCode); - print(pubkey); - DubpRust.simplePaymentFromTransparentAccount( + await DubpRust.simplePaymentFromTransparentAccount( accountIndex: defaultWallet.derivation, amount: double.parse(payAmount.text), txComment: payComment.text, @@ -71,9 +65,11 @@ class HistoryProvider with ChangeNotifier { gvaEndpoint: endPointGVA, secretCode: pinCode, recipient: pubkey); + return "Success"; } catch (e) { log.e("ERROR DUBP PAYMENTS"); log.e(e); + return "Payments errors: $e"; } } @@ -137,6 +133,7 @@ class HistoryProvider with ChangeNotifier { return pubkeyShort; } +// poka: Do99s6wQR2JLfhirPdpAERSjNbmjjECzGxHNJMiNKT3P // Pi: D2meevcAHFTS2gQMvmRW5Hzi25jDdikk4nC4u1FkwRaU // For debug // Boris: JE6mkuzSpT3ePciCPRTpuMT9fqPUVVLJz2618d33p7tn // Matograine portefeuille: 9p5nHsES6xujFR7pw2yGy4PLKKHgWsMvsDHaHF64Uj25. diff --git a/lib/screens/myWallets/unlockingWallet.dart b/lib/screens/myWallets/unlockingWallet.dart index 735d09f..615b526 100644 --- a/lib/screens/myWallets/unlockingWallet.dart +++ b/lib/screens/myWallets/unlockingWallet.dart @@ -24,6 +24,7 @@ class UnlockingWallet extends StatelessWidget { bool hasError = false; var pinColor = Color(0xffF9F9F1); var walletPin = ''; + String resultPay; Future get badWallet => null; @@ -148,7 +149,9 @@ class UnlockingWallet extends StatelessWidget { Navigator.pushNamed(formKey.currentContext, '/mywallets'); } else if (action == "pay") { print("Go payments"); - _historyProvider.pay(context, _pin.toUpperCase()); + resultPay = + await _historyProvider.pay(context, _pin.toUpperCase()); + await _paymentsResult(context); } } }, @@ -160,4 +163,30 @@ class UnlockingWallet extends StatelessWidget { )), ); } + + Future _paymentsResult(context) { + return showDialog( + context: context, + barrierDismissible: true, // user must tap button! + builder: (BuildContext context) { + return AlertDialog( + title: Text(resultPay == "Success" + ? 'Paiement effecuté avec succès !' + : "Une erreur s'est produite lors du paiement"), + content: SingleChildScrollView(child: Text('')), + actions: [ + TextButton( + child: Text("OK"), + onPressed: () { + Navigator.popUntil( + context, + ModalRoute.withName('/'), + ); + }, + ), + ], + ); + }, + ); + } }