From d0e1bbbab6eaaee1ee25e39051c155901ba661e5 Mon Sep 17 00:00:00 2001 From: poka Date: Wed, 10 Mar 2021 15:41:56 +0100 Subject: [PATCH 1/9] Start to transform list view of wallet to Tiles --- lib/screens/myWallets/walletsHome.dart | 60 +++++++- lib/screens/myWallets/walletsHome_old.dart | 157 +++++++++++++++++++++ 2 files changed, 216 insertions(+), 1 deletion(-) create mode 100644 lib/screens/myWallets/walletsHome_old.dart diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index 9f6dace..370cc13 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -57,7 +57,65 @@ class WalletsHome extends StatelessWidget { body: SafeArea( child: !isWalletsExists ? NoKeyChainScreen() - : myWalletsList(context))); + : myWalletsTiles(context))); + } + + Widget myWalletsTiles(BuildContext context) { + MyWalletsProvider _myWalletProvider = + Provider.of(context); + + final bool isWalletsExists = _myWalletProvider.checkIfWalletExist(); + + if (!isWalletsExists) { + return Text(''); + } + + if (_myWalletProvider.listWallets == '') { + return Expanded( + child: Center( + child: Text( + 'Veuillez générer votre premier portefeuille', + style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), + ))); + } + + List _listWallets = _myWalletProvider.listWallets.split('\n'); + // final int nbrOfWallets = _listWallets.length; + print(_listWallets); + + return GridView.count( + crossAxisCount: 2, + childAspectRatio: 1, + crossAxisSpacing: 0, + mainAxisSpacing: 0, + children: [ + for (String _repository in _listWallets) + Padding( + padding: EdgeInsets.all(16), + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(12)), + child: ListTile( + // contentPadding: const EdgeInsets.only(left: 7.0), + tileColor: Colors.green[100], + // leading: Text('IMAGE'), + + // subtitle: Text(_repository.split(':')[3], + // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), + title: Center( + child: Text(_repository.split(':')[1], + style: TextStyle(fontSize: 16.0))), + // dense: true, + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: int.parse(_repository.split(':')[0]), + walletName: _repository.split(':')[1], + derivation: int.parse(_repository.split(':')[2])); + })); + }, + ))) + ]); } Widget myWalletsList(BuildContext context) { diff --git a/lib/screens/myWallets/walletsHome_old.dart b/lib/screens/myWallets/walletsHome_old.dart new file mode 100644 index 0000000..9f6dace --- /dev/null +++ b/lib/screens/myWallets/walletsHome_old.dart @@ -0,0 +1,157 @@ +import 'package:flutter/services.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/onBoarding/0_noKeychainFound.dart'; +import 'package:provider/provider.dart'; + +// ignore: must_be_immutable +class WalletsHome extends StatelessWidget { + final _derivationKey = GlobalKey(); + int firstWalletDerivation; + + @override + Widget build(BuildContext context) { + SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); + MyWalletsProvider myWalletProvider = + Provider.of(context); + WalletOptionsProvider _walletOptions = + Provider.of(context); + _walletOptions.isWalletUnlock = false; + myWalletProvider.listWallets = myWalletProvider.getAllWalletsNames(); + final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); + + if (myWalletProvider.listWallets != '') { + firstWalletDerivation = + int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[2]); + } + + 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() + : myWalletsList(context))); + } + + Widget myWalletsList(BuildContext context) { + MyWalletsProvider _myWalletProvider = + Provider.of(context); + + final bool isWalletsExists = _myWalletProvider.checkIfWalletExist(); + + if (!isWalletsExists) { + return Text(''); + } + + if (_myWalletProvider.listWallets == '') { + return Expanded( + child: Center( + child: Text( + 'Veuillez générer votre premier portefeuille', + style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), + ))); + } + + List _listWallets = _myWalletProvider.listWallets.split('\n'); + + return Expanded( + child: ListView(children: [ + SizedBox(height: 8), + for (String _repository in _listWallets) + ListTile( + contentPadding: const EdgeInsets.only(left: 7.0), + leading: Padding( + padding: const EdgeInsets.all(6.0), + child: Text("0 Ğ1", style: TextStyle(fontSize: 14.0))), + // subtitle: Text(_repository.split(':')[3], + // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), + title: + Text(_repository.split(':')[1], style: TextStyle(fontSize: 16.0)), + dense: true, + onTap: () { + Navigator.push(context, MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: int.parse(_repository.split(':')[0]), + walletName: _repository.split(':')[1], + derivation: int.parse(_repository.split(':')[2])); + })); + }, + ) + ])); + } + + Widget addNewDerivation(context, int _walletNbr) { + final TextEditingController _newDerivationName = TextEditingController(); + MyWalletsProvider _myWalletProvider = + Provider.of(context); + + return AlertDialog( + content: Stack( + clipBehavior: Clip.hardEdge, + children: [ + Form( + key: _derivationKey, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text('Nom du portefeuille:'), + Padding( + padding: EdgeInsets.all(8.0), + child: TextFormField( + controller: _newDerivationName, + textAlign: TextAlign.center, + autofocus: true, + ), + ), + SizedBox(height: 20), + Padding( + padding: const EdgeInsets.all(8.0), + child: ElevatedButton( + style: ElevatedButton.styleFrom( + elevation: 1, + primary: Color(0xffFFD68E), // background + onPrimary: Colors.black, // foreground + ), + onPressed: () async { + await _myWalletProvider + .generateNewDerivation( + context, _newDerivationName.text, _walletNbr) + .then((_) => _newDerivationName.text == ''); + }, + child: Text("Créer")), + ) + ], + ), + ), + ], + ), + ); + } +} From f39cafd309201bb1d39fb1980efa054eab47394e Mon Sep 17 00:00:00 2001 From: poka Date: Thu, 11 Mar 2021 07:08:45 +0100 Subject: [PATCH 2/9] Big improve on Wallets Tiles; Review of wallets index format --- assets/chopp-gecko.svg | 9 ++ assets/chopp-gecko2.png | Bin 0 -> 9520 bytes lib/globals.dart | 2 + lib/main.dart | 2 + lib/models/generateWallets.dart | 62 +++++-------- lib/models/myWallets.dart | 27 ++++-- .../myWallets/confirmWalletStorage.dart | 5 +- lib/screens/myWallets/walletsHome.dart | 82 +++++++++++++----- lib/screens/myWallets/walletsHome_old.dart | 2 +- lib/screens/onBoarding/12.dart | 5 +- pubspec.yaml | 2 +- 11 files changed, 122 insertions(+), 76 deletions(-) create mode 100755 assets/chopp-gecko.svg create mode 100755 assets/chopp-gecko2.png diff --git a/assets/chopp-gecko.svg b/assets/chopp-gecko.svg new file mode 100755 index 0000000..39b6a7b --- /dev/null +++ b/assets/chopp-gecko.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/chopp-gecko2.png b/assets/chopp-gecko2.png new file mode 100755 index 0000000000000000000000000000000000000000..6e97b0b626fad33362a517736bacdb3d013b71cd GIT binary patch literal 9520 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 O0000 main() async { WidgetsFlutterBinding.ensureInitialized(); HomeProvider _homeProvider = HomeProvider(); + MyWalletsProvider _walletsProvider = MyWalletsProvider(); await _homeProvider.getAppPath(); await _homeProvider.createDefaultAvatar(); + await _walletsProvider.getDefaultWallet(); appVersion = await _homeProvider.getAppVersion(); prefs = await SharedPreferences.getInstance(); final HiveStore _store = diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index a7bc55d..88b85c2 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -39,50 +39,30 @@ class GenerateWalletsProvider with ChangeNotifier { bool canImport = false; bool isPinChanged = false; - Future storeWallet(NewWallet wallet, String _name, BuildContext context, - {bool isHD = false}) async { - int nbrWallet; - if (isHD) { - nbrWallet = 0; - } else { - nbrWallet = 1; - } + Future storeHDWallet( + NewWallet _wallet, String _name, BuildContext context) async { + // Directory walletDirectory; - Directory walletNbrDirectory; - do { - nbrWallet++; - walletNbrDirectory = Directory('${walletsDirectory.path}/$nbrWallet'); - } while (await walletNbrDirectory.exists()); + final Directory hdDirectory = Directory('${walletsDirectory.path}/0'); + await hdDirectory.create(); - final walletFile = File('${walletNbrDirectory.path}/wallet.dewif'); + final configFile = File('${hdDirectory.path}/config.txt'); + final dewifFile = File('${hdDirectory.path}/wallet.dewif'); - await walletNbrDirectory.create(); - await walletFile.writeAsString(wallet.dewif); + // List _lastConfig = []; + // _lastConfig = await masterConfigFile.readAsLines(); + // final int _lastDerivation = int.parse(_lastConfig.last.split(':')[2]); + // final int _derivationNbr = _lastDerivation + 3; - final configFile = File('${walletNbrDirectory.path}/config.txt'); + final int _derivationNbr = 3; + List _pubkeysTmp = await DubpRust.getBip32DewifAccountsPublicKeys( + dewif: _wallet.dewif, + secretCode: _wallet.pin, + accountsIndex: [_derivationNbr]); + String _pubkey = _pubkeysTmp[0]; - if (isHD) { - final int _derivationNbr = 3; - List _pubkeysTmp = await DubpRust.getBip32DewifAccountsPublicKeys( - dewif: wallet.dewif, - secretCode: wallet.pin, - accountsIndex: [_derivationNbr]); - String _pubkey = _pubkeysTmp[0]; - - await configFile - .writeAsString('$nbrWallet:$_name:$_derivationNbr:$_pubkey'); - // Navigator.pop(context, true); - } else { - final int _derivationNbr = -1; - String _pubkey = await DubpRust.getDewifPublicKey( - dewif: wallet.dewif, - pin: wallet.pin, - ); - await configFile - .writeAsString('$nbrWallet:$_name:$_derivationNbr:$_pubkey'); - } - - // Navigator.pop(context, true); + await configFile.writeAsString('0:$_name:$_derivationNbr:$_pubkey'); + await dewifFile.writeAsString(_wallet.dewif); return _name; } @@ -263,8 +243,8 @@ class GenerateWalletsProvider with ChangeNotifier { salt: _cesiumID, password: _cesiumPWD); String shortPubkey = truncate(_walletPubkey, 9, omission: "...", position: TruncatePosition.end); - await storeWallet( - actualWallet, 'Portefeuille Cesium - $shortPubkey', context); + // await storeWallet( + // actualWallet, 'Portefeuille Cesium - $shortPubkey', context); cesiumID.text = ''; cesiumPWD.text = ''; cesiumPubkey.text = ''; diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index 4473f87..b0b61ba 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -13,6 +13,8 @@ class MyWalletsProvider with ChangeNotifier { return false; } + print(walletsDirectory.listSync()); + List contents = walletsDirectory.listSync(); if (contents.length == 0) { print('No wallets detected'); @@ -54,6 +56,23 @@ class MyWalletsProvider with ChangeNotifier { return listWallets; } + Future getDefaultWallet() async { + defaultWalletFile = File('${appPath.path}/defaultWallet'); + + bool isdefaultWalletFile = await defaultWalletFile.exists(); + + if (!isdefaultWalletFile) { + await File(defaultWalletFile.path).create(); + } + + try { + defaultWallet = await defaultWalletFile.readAsString(); + } catch (e) { + defaultWallet = '0:3'; + } + if (defaultWallet == '') defaultWallet = '0:3'; + } + Future deleteAllWallet(context) async { try { print('DELETE THAT ?: $walletsDirectory'); @@ -107,11 +126,9 @@ class MyWalletsProvider with ChangeNotifier { ); } - Future generateNewDerivation( - context, String _name, int _walletNbr) async { + Future generateNewDerivation(context, String _name) async { int _newDerivationNbr; - final _walletConfig = - File('${walletsDirectory.path}/$_walletNbr/config.txt'); + final _walletConfig = File('${walletsDirectory.path}/0/config.txt'); if (await _walletConfig.readAsString() == '') { _newDerivationNbr = 3; @@ -122,7 +139,7 @@ class MyWalletsProvider with ChangeNotifier { _newDerivationNbr = _lastDerivation + 3; } - await _walletConfig.writeAsString('\n$_walletNbr:$_name:$_newDerivationNbr', + await _walletConfig.writeAsString('\n0:$_name:$_newDerivationNbr', mode: FileMode.append); print(await _walletConfig.readAsString()); diff --git a/lib/screens/myWallets/confirmWalletStorage.dart b/lib/screens/myWallets/confirmWalletStorage.dart index 3b6385f..db1566a 100644 --- a/lib/screens/myWallets/confirmWalletStorage.dart +++ b/lib/screens/myWallets/confirmWalletStorage.dart @@ -126,11 +126,10 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { .isAskedWordValid && this.walletName.text != '') ? () async { - await _generateWalletProvider.storeWallet( + await _generateWalletProvider.storeHDWallet( generatedWallet, walletName.text, - context, - isHD: true); + context); _generateWalletProvider.isAskedWordValid = false; _generateWalletProvider.askedWordColor = diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index 370cc13..1ab1650 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -1,4 +1,5 @@ import 'package:flutter/services.dart'; +import 'package:gecko/globals.dart'; import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/walletOptions.dart'; import 'package:flutter/material.dart'; @@ -81,7 +82,9 @@ class WalletsHome extends StatelessWidget { List _listWallets = _myWalletProvider.listWallets.split('\n'); // final int nbrOfWallets = _listWallets.length; - print(_listWallets); + // print(_listWallets); + // print("${_listWallets[0].split(':')[0]}:${_listWallets[0].split(':')[2]}"); + // print(defaultWallet); return GridView.count( crossAxisCount: 2, @@ -94,27 +97,62 @@ class WalletsHome extends StatelessWidget { padding: EdgeInsets.all(16), child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(12)), - child: ListTile( - // contentPadding: const EdgeInsets.only(left: 7.0), - tileColor: Colors.green[100], - // leading: Text('IMAGE'), + child: Column(children: [ + Expanded( + child: Container( + width: double.infinity, + height: double.infinity, + decoration: BoxDecoration( + gradient: RadialGradient( + radius: 1, + colors: [ + Colors.green[100], + Colors.green[500], + ], + )), + child: + // SvgPicture.asset('assets/chopp-gecko2.png', + // semanticsLabel: 'Gecko', height: 48), + Image.asset( + 'assets/chopp-gecko2.png', + ), + )), + ListTile( + // contentPadding: const EdgeInsets.only(left: 7.0), + tileColor: + "${_repository.split(':')[0]}:${_repository.split(':')[2]}" == + defaultWallet + ? Color(0xffD28928) + : Color(0xffFFD58D), + // leading: Text('IMAGE'), - // subtitle: Text(_repository.split(':')[3], - // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), - title: Center( - child: Text(_repository.split(':')[1], - style: TextStyle(fontSize: 16.0))), - // dense: true, - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[0]), - walletName: _repository.split(':')[1], - derivation: int.parse(_repository.split(':')[2])); - })); - }, - ))) + // subtitle: Text(_repository.split(':')[3], + // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), + title: Center( + child: Padding( + padding: EdgeInsets.symmetric(horizontal: 5), + child: Text(_repository.split(':')[1], + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.0, + color: + "${_repository.split(':')[0]}:${_repository.split(':')[2]}" == + defaultWallet + ? Color(0xffF9F9F1) + : Colors.black)))), + // dense: true, + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: int.parse(_repository.split(':')[0]), + walletName: _repository.split(':')[1], + derivation: + int.parse(_repository.split(':')[2])); + })); + }, + ) + ]))) ]); } @@ -200,7 +238,7 @@ class WalletsHome extends StatelessWidget { onPressed: () async { await _myWalletProvider .generateNewDerivation( - context, _newDerivationName.text, _walletNbr) + context, _newDerivationName.text) .then((_) => _newDerivationName.text == ''); }, child: Text("Créer")), diff --git a/lib/screens/myWallets/walletsHome_old.dart b/lib/screens/myWallets/walletsHome_old.dart index 9f6dace..7a5f99e 100644 --- a/lib/screens/myWallets/walletsHome_old.dart +++ b/lib/screens/myWallets/walletsHome_old.dart @@ -142,7 +142,7 @@ class WalletsHome extends StatelessWidget { onPressed: () async { await _myWalletProvider .generateNewDerivation( - context, _newDerivationName.text, _walletNbr) + context, _newDerivationName.text) .then((_) => _newDerivationName.text == ''); }, child: Text("Créer")), diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index 73f44ee..d9e8e61 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -116,9 +116,8 @@ class OnboardingStepFourteen extends StatelessWidget { if (resultWallet) { pinColor = Colors.green[500]; print(generatedWallet.pin); - await _generateWalletProvider.storeWallet( - generatedWallet, 'Mon portefeuille courant', context, - isHD: true); + await _generateWalletProvider.storeHDWallet( + generatedWallet, 'Mon portefeuille courant', context); _myWalletProvider.getAllWalletsNames(); _walletOptions.reloadBuild(); _myWalletProvider.rebuildWidget(); diff --git a/pubspec.yaml b/pubspec.yaml index 7179ea6..8cdb9aa 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+20 +version: 0.0.1+21 environment: sdk: ">=2.7.0 <3.0.0" From ed8b343af4dbae36931ab1fee312579c59faa85f Mon Sep 17 00:00:00 2001 From: poka Date: Fri, 19 Mar 2021 06:33:48 +0100 Subject: [PATCH 3/9] Change wallet list store format; Start to implement figma wallet options screen --- assets/walletOptions/QR_icon.png | Bin 0 -> 1622 bytes assets/walletOptions/android-checkmark.png | Bin 0 -> 264 bytes assets/walletOptions/camera.png | Bin 0 -> 585 bytes assets/walletOptions/clock.png | Bin 0 -> 1048 bytes assets/walletOptions/copy-white.png | Bin 0 -> 482 bytes assets/walletOptions/edit.png | Bin 0 -> 284 bytes assets/walletOptions/icon_oeuil.png | Bin 0 -> 719 bytes assets/walletOptions/key.png | Bin 0 -> 492 bytes assets/walletOptions/trash.png | Bin 0 -> 2275 bytes lib/globals.dart | 3 + lib/main.dart | 2 +- lib/models/cesiumPlus.dart | 4 +- lib/models/generateWallets.dart | 16 +- lib/models/history.dart | 3 +- lib/models/myWallets.dart | 85 ++++--- lib/models/queries.dart | 2 +- lib/models/walletOptions.dart | 44 ++-- lib/screens/history.dart | 2 +- .../myWallets/confirmWalletStorage.dart | 6 +- lib/screens/myWallets/walletOptions-old.dart | 164 +++++++++++++ lib/screens/myWallets/walletOptions.dart | 220 ++++++++++-------- lib/screens/myWallets/walletsHome.dart | 181 ++++++-------- lib/screens/myWallets/walletsHome_old.dart | 157 ------------- lib/screens/onBoarding/12.dart | 6 +- pubspec.yaml | 1 + 25 files changed, 476 insertions(+), 420 deletions(-) create mode 100755 assets/walletOptions/QR_icon.png create mode 100755 assets/walletOptions/android-checkmark.png create mode 100755 assets/walletOptions/camera.png create mode 100755 assets/walletOptions/clock.png create mode 100755 assets/walletOptions/copy-white.png create mode 100755 assets/walletOptions/edit.png create mode 100755 assets/walletOptions/icon_oeuil.png create mode 100755 assets/walletOptions/key.png create mode 100755 assets/walletOptions/trash.png create mode 100644 lib/screens/myWallets/walletOptions-old.dart delete mode 100644 lib/screens/myWallets/walletsHome_old.dart diff --git a/assets/walletOptions/QR_icon.png b/assets/walletOptions/QR_icon.png new file mode 100755 index 0000000000000000000000000000000000000000..6b6a887d727560ae6bfe018fd8f4eff3cb85858d GIT binary patch literal 1622 zcmeAS@N?(olHy`uVBq!ia0y~yV2l7^4mO~OSk4m%AjMhW5n0T@z%2~Ij105pNB{*H zi-X*q7}lMWc?smOq&xaLGB9lH=l+w(%D}+-+SA1`q=ND7UB|q~ZUPP$iyl-*nhVz& zzfKX>{8rSE^P_p?2ipbT&W62iey}VZXaG)7_c&K-`|}!}=$dms^EN-{v6=VT^!aZ7 z=#X@Uk5&=;&&<-ilm2h=*7=6tGjl5Igy%NyXKQFVz~sUrrl7QeL9mgvgG0x`C4o_i ziCaK0qM?HrsfpijF5Sgi-hKUO&hePrSI-|XJga+P_Mcg*dk#`&FvvMMyT5EGs6Kam z&ihy5mqXtb?>k<+@7b+4*$xT&A6K3E$+E5R%+Ef-8_DO&&m8@JRh@}AC*$?#-+gmF z=+0QZdHrsY{a2sI%)u81d=AdU1lEb)Z;Iw;?>;LBiktM^yxBS2ZwzxjcD**7^VUph zcbh*8nPHFcNW#qPya)C-HJVZ*)c5#4{x+xI^8WKV@6FCearZy3Im@?ww{{LWd? zOirRi1PmxCSI&>^v%H@y1x%lB)6I6+K2JXP-ST<$-0R8f-p=?OD%)`6^|W)3zMWsa zzI5{G_p7Pkk7+CQtc}m+1ljzrm8!p#|EGQywIb%<98hB4dbjRb&QVK{S8hC-@wxWz z8MgkLo3FhIySe)Imi5CP~n{@JxJ^V@n^ekWk}&dp7Y_d&`$UHx3vIVCg!06H}sA^-pY literal 0 HcmV?d00001 diff --git a/assets/walletOptions/android-checkmark.png b/assets/walletOptions/android-checkmark.png new file mode 100755 index 0000000000000000000000000000000000000000..578859d6b12b932c7fc9668e0a5163c485ab242d GIT binary patch literal 264 zcmeAS@N?(olHy`uVBq!ia0vp^;y^6M!3HF?%h*|g6lZ})WHAE+w=f7ZGR&GI0Tg5` z4sv&5Sa(k5C6L3C?&#~tz_78O`%fZB$6QYr$B+ufw-X=oIv5DJ?SIAOX3!MalfbMj zagf8!ut~5dfn^=%r3=pMpYrSP6v(`v&Gn;lMvUgwi^i@gJrzr4X8fAL7;SU2ktK0Y zk!X8x@$7eV4rwlXue&=wJND9|#yI1J66udh4aGl*3%5Rg_l+MFWMIsB4RqC6VWRyNx>c(Iuy+fh|7qUL@%NbjM0=al#dyoaxoTE zzO-mjG#xNjwJ_x6U34Y-3b@}C^$}spHWQ{ZU_=7(iD-$x*6VCqSQL7@_4w+xlW96Vh zS5p_-(5h%ll=Y0UBsI}3RGIby=5tk6!XEBoie~Oa>!O{2arTHQ$qiJ$lwrX%>|q9S zP#KD%3T5mXme`tNIa*LXF(}I%=f-Ik!Prchy<{e4JTuBg(SrrHrc8W4X8b1{urg21jM4BpRF*bjiT~(QLiF!}@I(0Z z&rr*~qo4DpP1Z!0I_^L;i^2TKyz7oWFFMjMH@_7xG|de(2M1hD5pyKwCfbI|SXLX# zUS$Hva<^Y2hYUfdrxHqNq(~ zR%o^82SG-Qav>B*+WELM-1DyYJ!kHFY70O3c=P7YnK?6e?)e3*pg35C!ciiu5$+YP zQT;!JQ^IFhCR7NUgoDE0!nr)05e^75!mU^WR0`XLzZOs|7pH|C!fjY2G$ts=|GmN% z;VI#1(|=BQOxP^!6Mm1$O$r-OMDW#i#TFSAUNFxz0`t5&)?X^D6Ml%z(=FV90#RiY z(kC}A9Lh015DsI$@)rHV3E>wt=LqI+${F0@OEuY;QDVROe*%8U7`feMo^fQqnF^#p zx0>XMuv|UkT{{3j>=L%B|5WO!TB8%5Xi&oANV!V~aN}cYt!u7=G!K(Th<7J|J2JvH zVZDb;ApC~t&R4n!bs*Z=1pJg7HgdxrGQ8vZe%@I~fF5Dm45qp0H|EqHp?qYdf@C9#3W z%`Z*PUo0&cF+DWxqfokOC2NIcru`htgAwz~kgvveY9%)&4E8~Q$PyfcpH;AUr`mgL zLo2ySwKtnZe2n;GM2b=F0o+kxWVJq9k_KilKmPOi0OnGX=t<~rvlEx)Sn!PSE&T8r z>K+L`Biy(PXfJOI4+-y^zG?eVEBQyYXA!zYSJ0LI6n+%$MChp)0Dp3npEBH``o@z6 z^0M2bZh@bIv}=L+za8n(qI9TD8o*0yld4|0AwYO<0~7~+h?2LQ7=)w$#QYO16!dU5 z7aGVnunEy|Uo?I6t?>XiKyglxF+sg)Ush{p@(F4GIf}>^H>)vgg^y626Kpl}GupCA z8o%lV^YeCON99Kn#;iv1z?|oWTJx@p5F=xIn*0s0xCjv1RGW`G7Y-Vcoh6oIalnl9 zjaus}Jkg2lY*Byhx8NQKTQE(~i59QSkXoY)DL|!kVSx8DKvbouhaYSS<}kuyz$-O3 z^ZV45j4EUo2ppX9=Q?MEZf;-fO0-L1KuEkS~0LitW^}@5r zelxZpP}H2B1%t`hBJ>b+Wj7I~9_LN}NrX;-&fy-Ct8vbS0AJ8N(2h+bUF=BZm{&U$ z015>?LI$CaomoIJ1}*gQOjA?6+G5nq35Hd?yZeOe5XOeQ3hxnqD6?3>e}I1g{7)|d S!Wq>70000cmINY=ou;=Wr=uT7)8uM^V($ zhB=y?C%9#TR7`=U4%5ut*b__83^?M3HcZB6O+T9qj?(PIDI9q+G#MPTzK?A7QdhB{ znCvp?F%ws&I>U^Lc@e)F*0afUO)tngvM@y%gMMrHoguqr8`Ax*dXnoMnw!7viTQ&0w8@NP>@x{UllfA< zB{V~hT%oDRKjI`|hAbSSSrAW#Y) Y0~AMBz@5c-@&Et;07*qoM6N<$f<&Rt761SM literal 0 HcmV?d00001 diff --git a/assets/walletOptions/edit.png b/assets/walletOptions/edit.png new file mode 100755 index 0000000000000000000000000000000000000000..a45788da6b98ff24811ebacd61d02ba9716887d4 GIT binary patch literal 284 zcmeAS@N?(olHy`uVBq!ia0vp^f7# z@qDEU#{35l^v?CkIpkl^p7QUeb!qnb33dEJ70wH5b(j8qpscC5Ur1n77mvSo7b+;fBV-p8gfADkXE73X0db2RGh* zxUDuiBuvaZ$ d{BEBewQ^r1i}oWsX`tg7JYD@<);T3K0RYKjXvqKo literal 0 HcmV?d00001 diff --git a/assets/walletOptions/icon_oeuil.png b/assets/walletOptions/icon_oeuil.png new file mode 100755 index 0000000000000000000000000000000000000000..f707647c214f59072e8349f8bbf994aa3770b676 GIT binary patch literal 719 zcmV;=0xl!r}Z_5XBfl1btA%pXaNJPew$9xCKN77hEHPCT^K5W?xBi z4s|-yxy)qdAy45Jd`#cl-Bs1+R`r-=me~SWQs%m)V6&(OOSE?yOoA?u1Ks5~OG?b` z1odDKSZ1ZI7kmV-!2kIi7cvHG0yTQ(iE@H-E26by3b4UkkzjAYV=E9mDe!z2oYHs{ zyacbo8gLa1f%l+a?~a(ueHW|-XTW;-W57G0qgc=ia6>1dwSuP#T&uZ<=F&~4l4X(& z;3jAX2f=x;O7qQ1el}3BMsP^uN1(;LNNCs1<$4Y(!D(>9T+&YP-CXixQibn6fjX_{ zLE6BeNfsI_@}$P!z_TcswQ~LWIu#lZM8Rl%;Fsp9N>8+Ro#j>R2nmFsl%`eVr_IlNGft$ zffMb!r+KyxRqBpT))Xb!92~~g`_o+WZD5yqKmOAkWjhCco2$a2dT0Lqc?IqT7tE{v zuX(>-Gr!3wF$?Nzp`gsBO&QY30kB1x^F42y%W}ws*uN|wwht@w33zMXvscWeW{cbc zAEG!#ufgr$64 ztJtD)|JrD53rfbzqDp&NKrE)5f{a^cnPs*pYzCmQin{_rTmk?9002ovPDHLkV1jJ` BM1=qV literal 0 HcmV?d00001 diff --git a/assets/walletOptions/key.png b/assets/walletOptions/key.png new file mode 100755 index 0000000000000000000000000000000000000000..45c0e85ae5630256f68c58881ae717c3bd1d7049 GIT binary patch literal 492 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 main() async { MyWalletsProvider _walletsProvider = MyWalletsProvider(); await _homeProvider.getAppPath(); await _homeProvider.createDefaultAvatar(); - await _walletsProvider.getDefaultWallet(); + await _walletsProvider.initWalletFolder(); appVersion = await _homeProvider.getAppVersion(); prefs = await SharedPreferences.getInstance(); final HiveStore _store = diff --git a/lib/models/cesiumPlus.dart b/lib/models/cesiumPlus.dart index bf59c6c..7cbe5e4 100644 --- a/lib/models/cesiumPlus.dart +++ b/lib/models/cesiumPlus.dart @@ -67,7 +67,7 @@ class CesiumPlusProvider with ChangeNotifier { String _name; List queryOptions = await _buildQuery(_pubkey); - final response = await http.post(queryOptions[0], + 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); @@ -87,7 +87,7 @@ class CesiumPlusProvider with ChangeNotifier { Future getAvatar(String _pubkey) async { List queryOptions = await _buildQuery(_pubkey); - final response = await http.post(queryOptions[0], + 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); diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index 88b85c2..dfcd9e9 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -39,14 +39,16 @@ class GenerateWalletsProvider with ChangeNotifier { bool canImport = false; bool isPinChanged = false; - Future storeHDWallet( + Future storeHDWChest( NewWallet _wallet, String _name, BuildContext context) async { // Directory walletDirectory; final Directory hdDirectory = Directory('${walletsDirectory.path}/0'); await hdDirectory.create(); - final configFile = File('${hdDirectory.path}/config.txt'); + final configFile = File('${hdDirectory.path}/list.conf'); + File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf'); + final dewifFile = File('${hdDirectory.path}/wallet.dewif'); // List _lastConfig = []; @@ -61,8 +63,14 @@ class GenerateWalletsProvider with ChangeNotifier { accountsIndex: [_derivationNbr]); String _pubkey = _pubkeysTmp[0]; - await configFile.writeAsString('0:$_name:$_derivationNbr:$_pubkey'); + await configFile.writeAsString('0:0:$_name:$_derivationNbr:$_pubkey'); await dewifFile.writeAsString(_wallet.dewif); + bool isCurrentChestExist = _currentChestFile.existsSync(); + if (isCurrentChestExist) { + await _currentChestFile.delete(); + } + await _currentChestFile.create(); + await _currentChestFile.writeAsString('0'); return _name; } @@ -147,11 +155,9 @@ class GenerateWalletsProvider with ChangeNotifier { generatedMnemonic = await DubpRust.genMnemonic(language: Language.french); this.actualWallet = await generateWallet(this.generatedMnemonic); walletIsGenerated = true; - // notifyListeners(); } catch (e) { print(e); } - // await checkIfWalletExist(); return generatedMnemonic; } diff --git a/lib/models/history.dart b/lib/models/history.dart index d8da067..facb32b 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -101,7 +101,6 @@ class HistoryProvider with ChangeNotifier { // Lion simone: 78jhpprYkMNF6i5kQPXfkAVBpd2aqcpieNsXTSW4c21f List parseHistory(txs, _pubkey) { - // print(txs); var transBC = []; int i = 0; @@ -135,7 +134,7 @@ class HistoryProvider with ChangeNotifier { transBC[i].add(date); // print( // "DEBUG date et comment: ${date.toString()} -- ${transaction['comment'].toString()}"); - int amountBrut = int.parse(output.split(':')[0]); + final int amountBrut = int.parse(output.split(':')[0]); final base = int.parse(output.split(':')[1]); final int applyBase = base - currentBase; final num amount = diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index b0b61ba..350a227 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -8,15 +8,50 @@ import 'package:provider/provider.dart'; class MyWalletsProvider with ChangeNotifier { String listWallets; + Future initWalletFolder() async { + await getDefaultWallet(); + + final bool isWalletFolderExist = await walletsDirectory.exists(); + if (!isWalletFolderExist) { + await Directory(walletsDirectory.path).create(); + } + + File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf'); + + await _currentChestFile.create(); + await _currentChestFile.writeAsString('0'); + + final bool isChestsExist = + await Directory('${walletsDirectory.path}/0').exists(); + if (!isChestsExist) { + await Directory('${walletsDirectory.path}/0').create(); + await Directory('${walletsDirectory.path}/1').create(); + await File('${walletsDirectory.path}/0/list.conf').create(); + await File('${walletsDirectory.path}/0/order.conf').create(); + await File('${walletsDirectory.path}/1/list.conf').create(); + await File('${walletsDirectory.path}/1/order.conf').create(); + } + } + + int getCurrentChest() { + File _currentChestFile = File('${walletsDirectory.path}/currentChest.conf'); + + bool isCurrentChestExist = _currentChestFile.existsSync(); + if (!isCurrentChestExist) { + _currentChestFile.createSync(); + _currentChestFile.writeAsString('0'); + } + return int.parse(_currentChestFile.readAsStringSync()); + } + bool checkIfWalletExist() { if (appPath == null) { return false; } - print(walletsDirectory.listSync()); + final String _walletList = getAllWalletsNames(0); - List contents = walletsDirectory.listSync(); - if (contents.length == 0) { + if (_walletList == '') { print('No wallets detected'); return false; } else { @@ -25,12 +60,7 @@ class MyWalletsProvider with ChangeNotifier { } } - String getAllWalletsNames() { - final bool _isWalletsExists = checkIfWalletExist(); - if (!_isWalletsExists) { - return ''; - } - + String getAllWalletsNames(int _chest) { if (listWallets != null && listWallets.isNotEmpty) { listWallets = ''; } @@ -39,17 +69,13 @@ class MyWalletsProvider with ChangeNotifier { } // int i = 0; - walletsDirectory - .listSync(recursive: false, followLinks: false) - .forEach((_wallet) { - File _walletConfig = File('${_wallet.path}/config.txt'); - _walletConfig.readAsLinesSync().forEach((element) { - if (listWallets != '') { - listWallets += '\n'; - } - listWallets += element; - // listWallets += "${element.split(':')[0]}:${element.split(':')[1]}:${element.split(':')[2]}" - }); + File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf'); + _walletConfig.readAsLinesSync().forEach((element) { + if (listWallets != '') { + listWallets += '\n'; + } + listWallets += element; + // listWallets += "${element.split(':')[0]}:${element.split(':')[1]}:${element.split(':')[2]}" }); print(listWallets); @@ -68,9 +94,9 @@ class MyWalletsProvider with ChangeNotifier { try { defaultWallet = await defaultWalletFile.readAsString(); } catch (e) { - defaultWallet = '0:3'; + defaultWallet = '0:0'; } - if (defaultWallet == '') defaultWallet = '0:3'; + if (defaultWallet == '') defaultWallet = '0:0'; } Future deleteAllWallet(context) async { @@ -82,6 +108,7 @@ class MyWalletsProvider with ChangeNotifier { if (_answer) { await walletsDirectory.delete(recursive: true); await walletsDirectory.create(); + await initWalletFolder(); notifyListeners(); Navigator.pop(context); } @@ -114,7 +141,7 @@ class MyWalletsProvider with ChangeNotifier { onPressed: () { WidgetsBinding.instance.addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider.getAllWalletsNames(); + _myWalletProvider.getAllWalletsNames(getCurrentChest()); _myWalletProvider.rebuildWidget(); }); Navigator.pop(context, true); @@ -128,18 +155,24 @@ class MyWalletsProvider with ChangeNotifier { Future generateNewDerivation(context, String _name) async { int _newDerivationNbr; - final _walletConfig = File('${walletsDirectory.path}/0/config.txt'); + int _newWalletNbr; + final _walletConfig = File('${walletsDirectory.path}/0/list.conf'); if (await _walletConfig.readAsString() == '') { _newDerivationNbr = 3; + _newWalletNbr = 0; } else { String _lastWallet = await _walletConfig.readAsLines().then((value) => value.last); - int _lastDerivation = int.parse(_lastWallet.split(':')[2]); + int _lastDerivation = int.parse(_lastWallet.split(':')[3]); _newDerivationNbr = _lastDerivation + 3; + + int _lastWalletNbr = int.parse(_lastWallet.split(':')[1]); + _newWalletNbr = _lastWalletNbr + 1; } - await _walletConfig.writeAsString('\n0:$_name:$_newDerivationNbr', + await _walletConfig.writeAsString( + '\n0:$_newWalletNbr:$_name:$_newDerivationNbr', mode: FileMode.append); print(await _walletConfig.readAsString()); diff --git a/lib/models/queries.dart b/lib/models/queries.dart index 52754ab..fda9345 100644 --- a/lib/models/queries.dart +++ b/lib/models/queries.dart @@ -1,7 +1,7 @@ const String getHistory = r''' query ($pubkey: String!, $number: Int!, $cursor: String) { txsHistoryBc( - pubkeyOrScript: $pubkey + script: $pubkey pagination: { pageSize: $number, ord: DESC, cursor: $cursor } ) { both { diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 034f9a5..2c238a7 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -1,9 +1,12 @@ import 'dart:io'; +import 'package:crypto/crypto.dart'; import 'package:dubp/dubp.dart'; +import 'package:fast_base58/fast_base58.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; +import 'package:truncate/truncate.dart'; class WalletOptionsProvider with ChangeNotifier { TextEditingController pubkey = TextEditingController(); @@ -65,8 +68,7 @@ class WalletOptionsProvider with ChangeNotifier { int _walletNbr, String _pin, int _pinLenght, int derivation) async { isWalletUnlock = false; try { - File _walletFile = - File('${walletsDirectory.path}/$_walletNbr/wallet.dewif'); + File _walletFile = File('${walletsDirectory.path}/0/wallet.dewif'); String _localDewif = await _walletFile.readAsString(); String _localPubkey; @@ -107,8 +109,7 @@ class WalletOptionsProvider with ChangeNotifier { int getPinLenght(_walletNbr) { String _localDewif; if (_walletNbr is int) { - File _walletFile = - File('${walletsDirectory.path}/$_walletNbr/wallet.dewif'); + File _walletFile = File('${walletsDirectory.path}/0/wallet.dewif'); _localDewif = _walletFile.readAsStringSync(); } else { _localDewif = _walletNbr; @@ -121,21 +122,21 @@ class WalletOptionsProvider with ChangeNotifier { } Future _renameWallet(_walletName, _newName, _walletNbr, _derivation) async { - final _walletConfig = - File('${walletsDirectory.path}/$_walletNbr/config.txt'); + final _walletConfig = File('${walletsDirectory.path}/0/list.conf'); String newConfig = await _walletConfig.readAsLines().then((List lines) { int nbrLines = lines.length; - int _index = lines.indexOf('$_walletNbr:$_walletName:$_derivation'); + print(lines); print(nbrLines); + int _index = lines.indexOf('0:$_walletNbr:$_walletName:$_derivation'); if (nbrLines != 1) { lines.removeWhere((element) => - element.contains('$_walletNbr:$_walletName:$_derivation')); - lines.insert(_index, '$_walletNbr:$_newName:$_derivation'); + element.contains('0:$_walletNbr:$_walletName:$_derivation')); + lines.insert(_index, '0:$_walletNbr:$_newName:$_derivation'); return lines.join('\n'); } else { - return '$_walletNbr:$_newName:$_derivation'; + return '0:$_walletNbr:$_newName:$_derivation'; } }); @@ -189,14 +190,13 @@ class WalletOptionsProvider with ChangeNotifier { final bool _answer = await _confirmDeletingWallet(context, _name); if (_answer) { - final _walletConfig = - File('${walletsDirectory.path}/$_walletNbr/config.txt'); + final _walletConfig = File('${walletsDirectory.path}/0/list.conf'); if (_derivation != -1) { String newConfig = await _walletConfig.readAsLines().then((List lines) { - lines.removeWhere( - (element) => element.contains('$_walletNbr:$_name:$_derivation')); + lines.removeWhere((element) => + element.contains('0:$_walletNbr:$_name:$_derivation')); return lines.join('\n'); }); @@ -289,6 +289,22 @@ class WalletOptionsProvider with ChangeNotifier { ScaffoldMessenger.of(context).showSnackBar(snackBar); } + String getShortPubkey(String pubkey) { + List pubkeyByte = Base58Decode(pubkey); + Digest pubkeyS256 = sha256.convert(sha256.convert(pubkeyByte).bytes); + String pubkeyCheksum = Base58Encode(pubkeyS256.bytes); + String pubkeyChecksumShort = truncate(pubkeyCheksum, 3, + omission: "", position: TruncatePosition.end); + + String pubkeyShort = truncate(pubkey, 5, + omission: String.fromCharCode(0x2026), + position: TruncatePosition.end) + + truncate(pubkey, 4, omission: "", position: TruncatePosition.start) + + ':$pubkeyChecksumShort'; + + return pubkeyShort; + } + void reloadBuild() { notifyListeners(); } diff --git a/lib/screens/history.dart b/lib/screens/history.dart index a8b4cb1..6f26752 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -254,7 +254,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { initialData: '...', builder: (context, snapshot) { return Text( - snapshot.data != '' + snapshot.data != null ? snapshot.data : '-', style: diff --git a/lib/screens/myWallets/confirmWalletStorage.dart b/lib/screens/myWallets/confirmWalletStorage.dart index db1566a..4aa0130 100644 --- a/lib/screens/myWallets/confirmWalletStorage.dart +++ b/lib/screens/myWallets/confirmWalletStorage.dart @@ -28,6 +28,8 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); + final int _currentChest = _myWalletProvider.getCurrentChest(); + this._mnemonicController.text = generatedMnemonic; return WillPopScope( @@ -126,7 +128,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { .isAskedWordValid && this.walletName.text != '') ? () async { - await _generateWalletProvider.storeHDWallet( + await _generateWalletProvider.storeHDWChest( generatedWallet, walletName.text, context); @@ -138,7 +140,7 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { .addPostFrameCallback((_) { _myWalletProvider.listWallets = _myWalletProvider - .getAllWalletsNames(); + .getAllWalletsNames(_currentChest); _myWalletProvider.rebuildWidget(); }); } diff --git a/lib/screens/myWallets/walletOptions-old.dart b/lib/screens/myWallets/walletOptions-old.dart new file mode 100644 index 0000000..7713274 --- /dev/null +++ b/lib/screens/myWallets/walletOptions-old.dart @@ -0,0 +1,164 @@ +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'; + +// 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]); + print("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( + 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 + .getAllWalletsNames(_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, + walletNbr, walletName, derivation); + WidgetsBinding.instance + .addPostFrameCallback((_) { + _myWalletProvider.listWallets = + _myWalletProvider.getAllWalletsNames(_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) + ])), + ]), + )), + )); + } +} diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index 221e9e1..8ed09d4 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -27,12 +27,12 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { MyWalletsProvider _myWalletProvider = Provider.of(context); - // _walletOptions.isWalletUnlock = false; - print("Is unlock ? ${_walletOptions.isWalletUnlock}"); + final int _currentChest = _myWalletProvider.getCurrentChest(); + final String shortPubkey = + _walletOptions.getShortPubkey(_walletOptions.pubkey.text); return WillPopScope( onWillPop: () { - _walletOptions.isWalletUnlock = false; Navigator.popUntil( context, ModalRoute.withName('/mywallets'), @@ -45,7 +45,6 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { leading: IconButton( icon: Icon(Icons.arrow_back, color: Colors.black), onPressed: () { - _walletOptions.isWalletUnlock = false; Navigator.popUntil( context, ModalRoute.withName('/mywallets'), @@ -57,105 +56,124 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { )), 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 - .getAllWalletsNames(); - _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 + child: Expanded( + child: Column(children: [ + SizedBox(height: 25), + Row(children: [ + SizedBox(width: 25), + Image.asset( + 'assets/chopp-gecko2.png', + ), + Image.asset( + 'assets/walletOptions/camera.png', + ), + // SizedBox(width: 20), + Column(children: [ + Row(children: [ + Column(children: [ + SizedBox( + width: 250, + child: Text( + walletName, + textAlign: TextAlign.center, + style: TextStyle(fontSize: 27), + )), + SizedBox(height: 5), + Text( + '500 DU', + style: TextStyle( + fontSize: 20, color: Colors.black), ), - onPressed: () async { - await _walletOptions.deleteWallet(context, - walletNbr, walletName, derivation); - 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: 5), + Image.asset( + 'assets/walletOptions/icon_oeuil.png', + ), + ]), + SizedBox(width: 0), + Column(children: [ + Image.asset( + 'assets/walletOptions/edit.png', + ), + SizedBox( + height: 60, + ) + ]) + ]), + ]), + ]), + Image.asset( + 'assets/walletOptions/QR_icon.png', ), - SizedBox(height: 10) - ])), - ]), + SizedBox(height: 15), + Row(children: [ + SizedBox(width: 30), + Image.asset( + 'assets/walletOptions/key.png', + ), + SizedBox(width: 10), + Text("${shortPubkey.split(':')[0]}:", + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w800, + fontFamily: 'Monospace', + color: Colors.black)), + Text(shortPubkey.split(':')[1], + style: TextStyle( + fontSize: 22, + fontWeight: FontWeight.w800, + fontFamily: 'Monospace')), + SizedBox(width: 15), + ElevatedButton( + style: ElevatedButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: new BorderRadius.circular(8), + ), + elevation: 1, + primary: Color(0xffD28928), // background + onPrimary: Colors.black, // foreground + ), + onPressed: () { + print('COPY PUBKEY'); + }, + child: Text('Copier', + style: TextStyle( + fontSize: 15, color: Colors.grey[50]))), + ]), + SizedBox(height: 10), + Row(children: [ + SizedBox(width: 30), + Image.asset( + 'assets/walletOptions/clock.png', + ), + SizedBox(width: 10), + Text('Historique des transactions', + style: + TextStyle(fontSize: 20, color: Colors.black)), + ]), + SizedBox(height: 15), + Row(children: [ + SizedBox(width: 35), + Image.asset( + 'assets/walletOptions/android-checkmark.png', + ), + SizedBox(width: 10), + Text('Portefeuille par defaut', + style: + TextStyle(fontSize: 20, color: Colors.black)), + ]), + SizedBox(height: 15), + Row(children: [ + SizedBox(width: 30), + Image.asset( + 'assets/walletOptions/trash.png', + ), + SizedBox(width: 10), + Text('Supprimer ce portefeuille', + style: TextStyle( + fontSize: 20, color: Color(0xffD80000))), + ]), + ]), + ), )), )); } diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index 1ab1650..a4aca34 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -20,12 +20,16 @@ class WalletsHome extends StatelessWidget { WalletOptionsProvider _walletOptions = Provider.of(context); _walletOptions.isWalletUnlock = false; - myWalletProvider.listWallets = myWalletProvider.getAllWalletsNames(); + + final int _currentChest = myWalletProvider.getCurrentChest(); + + myWalletProvider.listWallets = + myWalletProvider.getAllWalletsNames(_currentChest); final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); if (myWalletProvider.listWallets != '') { firstWalletDerivation = - int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[2]); + int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[3]); } return Scaffold( @@ -95,114 +99,79 @@ class WalletsHome extends StatelessWidget { for (String _repository in _listWallets) Padding( padding: EdgeInsets.all(16), - child: ClipRRect( - borderRadius: BorderRadius.all(Radius.circular(12)), - child: Column(children: [ - Expanded( - child: Container( - width: double.infinity, - height: double.infinity, - decoration: BoxDecoration( - gradient: RadialGradient( - radius: 1, - colors: [ - Colors.green[100], - Colors.green[500], - ], - )), - child: - // SvgPicture.asset('assets/chopp-gecko2.png', - // semanticsLabel: 'Gecko', height: 48), - Image.asset( - 'assets/chopp-gecko2.png', - ), - )), - ListTile( - // contentPadding: const EdgeInsets.only(left: 7.0), - tileColor: - "${_repository.split(':')[0]}:${_repository.split(':')[2]}" == - defaultWallet - ? Color(0xffD28928) - : Color(0xffFFD58D), - // leading: Text('IMAGE'), + child: GestureDetector( + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: int.parse(_repository.split(':')[1]), + walletName: _repository.split(':')[2], + derivation: int.parse(_repository.split(':')[3])); + })); + }, + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(12)), + child: Column(children: [ + Expanded( + child: Container( + width: double.infinity, + height: double.infinity, + decoration: BoxDecoration( + gradient: RadialGradient( + radius: 1, + colors: [ + Colors.green[100], + Colors.green[500], + ], + )), + child: + // SvgPicture.asset('assets/chopp-gecko2.png', + // semanticsLabel: 'Gecko', height: 48), + Image.asset( + 'assets/chopp-gecko2.png', + ), + )), + ListTile( + // contentPadding: const EdgeInsets.only(left: 7.0), + tileColor: + "${_repository.split(':')[0]}:${_repository.split(':')[1]}" == + defaultWallet + ? Color(0xffD28928) + : Color(0xffFFD58D), + // leading: Text('IMAGE'), - // subtitle: Text(_repository.split(':')[3], - // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), - title: Center( - child: Padding( - padding: EdgeInsets.symmetric(horizontal: 5), - child: Text(_repository.split(':')[1], - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 16.0, - color: - "${_repository.split(':')[0]}:${_repository.split(':')[2]}" == - defaultWallet - ? Color(0xffF9F9F1) - : Colors.black)))), - // dense: true, - onTap: () { - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[0]), - walletName: _repository.split(':')[1], - derivation: - int.parse(_repository.split(':')[2])); - })); - }, - ) - ]))) + // subtitle: Text(_repository.split(':')[3], + // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), + title: Center( + child: Padding( + padding: + EdgeInsets.symmetric(horizontal: 5), + child: Text(_repository.split(':')[2], + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.0, + color: + "${_repository.split(':')[0]}:${_repository.split(':')[1]}" == + defaultWallet + ? Color(0xffF9F9F1) + : Colors.black)))), + // dense: true, + onTap: () { + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return UnlockingWallet( + walletNbr: + int.parse(_repository.split(':')[1]), + walletName: _repository.split(':')[2], + derivation: + int.parse(_repository.split(':')[3])); + })); + }, + ) + ])))) ]); } - Widget myWalletsList(BuildContext context) { - MyWalletsProvider _myWalletProvider = - Provider.of(context); - - final bool isWalletsExists = _myWalletProvider.checkIfWalletExist(); - - if (!isWalletsExists) { - return Text(''); - } - - if (_myWalletProvider.listWallets == '') { - return Expanded( - child: Center( - child: Text( - 'Veuillez générer votre premier portefeuille', - style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), - ))); - } - - List _listWallets = _myWalletProvider.listWallets.split('\n'); - - return Expanded( - child: ListView(children: [ - SizedBox(height: 8), - for (String _repository in _listWallets) - ListTile( - contentPadding: const EdgeInsets.only(left: 7.0), - leading: Padding( - padding: const EdgeInsets.all(6.0), - child: Text("0 Ğ1", style: TextStyle(fontSize: 14.0))), - // subtitle: Text(_repository.split(':')[3], - // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), - title: - Text(_repository.split(':')[1], style: TextStyle(fontSize: 16.0)), - dense: true, - onTap: () { - Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[0]), - walletName: _repository.split(':')[1], - derivation: int.parse(_repository.split(':')[2])); - })); - }, - ) - ])); - } - Widget addNewDerivation(context, int _walletNbr) { final TextEditingController _newDerivationName = TextEditingController(); MyWalletsProvider _myWalletProvider = diff --git a/lib/screens/myWallets/walletsHome_old.dart b/lib/screens/myWallets/walletsHome_old.dart deleted file mode 100644 index 7a5f99e..0000000 --- a/lib/screens/myWallets/walletsHome_old.dart +++ /dev/null @@ -1,157 +0,0 @@ -import 'package:flutter/services.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/onBoarding/0_noKeychainFound.dart'; -import 'package:provider/provider.dart'; - -// ignore: must_be_immutable -class WalletsHome extends StatelessWidget { - final _derivationKey = GlobalKey(); - int firstWalletDerivation; - - @override - Widget build(BuildContext context) { - SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]); - MyWalletsProvider myWalletProvider = - Provider.of(context); - WalletOptionsProvider _walletOptions = - Provider.of(context); - _walletOptions.isWalletUnlock = false; - myWalletProvider.listWallets = myWalletProvider.getAllWalletsNames(); - final bool isWalletsExists = myWalletProvider.checkIfWalletExist(); - - if (myWalletProvider.listWallets != '') { - firstWalletDerivation = - int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[2]); - } - - 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() - : myWalletsList(context))); - } - - Widget myWalletsList(BuildContext context) { - MyWalletsProvider _myWalletProvider = - Provider.of(context); - - final bool isWalletsExists = _myWalletProvider.checkIfWalletExist(); - - if (!isWalletsExists) { - return Text(''); - } - - if (_myWalletProvider.listWallets == '') { - return Expanded( - child: Center( - child: Text( - 'Veuillez générer votre premier portefeuille', - style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), - ))); - } - - List _listWallets = _myWalletProvider.listWallets.split('\n'); - - return Expanded( - child: ListView(children: [ - SizedBox(height: 8), - for (String _repository in _listWallets) - ListTile( - contentPadding: const EdgeInsets.only(left: 7.0), - leading: Padding( - padding: const EdgeInsets.all(6.0), - child: Text("0 Ğ1", style: TextStyle(fontSize: 14.0))), - // subtitle: Text(_repository.split(':')[3], - // style: TextStyle(fontSize: 12.0, fontFamily: 'Monospace')), - title: - Text(_repository.split(':')[1], style: TextStyle(fontSize: 16.0)), - dense: true, - onTap: () { - Navigator.push(context, MaterialPageRoute(builder: (context) { - return UnlockingWallet( - walletNbr: int.parse(_repository.split(':')[0]), - walletName: _repository.split(':')[1], - derivation: int.parse(_repository.split(':')[2])); - })); - }, - ) - ])); - } - - Widget addNewDerivation(context, int _walletNbr) { - final TextEditingController _newDerivationName = TextEditingController(); - MyWalletsProvider _myWalletProvider = - Provider.of(context); - - return AlertDialog( - content: Stack( - clipBehavior: Clip.hardEdge, - children: [ - Form( - key: _derivationKey, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text('Nom du portefeuille:'), - Padding( - padding: EdgeInsets.all(8.0), - child: TextFormField( - controller: _newDerivationName, - textAlign: TextAlign.center, - autofocus: true, - ), - ), - SizedBox(height: 20), - Padding( - padding: const EdgeInsets.all(8.0), - child: ElevatedButton( - style: ElevatedButton.styleFrom( - elevation: 1, - primary: Color(0xffFFD68E), // background - onPrimary: Colors.black, // foreground - ), - onPressed: () async { - await _myWalletProvider - .generateNewDerivation( - context, _newDerivationName.text) - .then((_) => _newDerivationName.text == ''); - }, - child: Text("Créer")), - ) - ], - ), - ), - ], - ), - ); - } -} diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index d9e8e61..fd01ff4 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -61,6 +61,8 @@ class OnboardingStepFourteen extends StatelessWidget { GenerateWalletsProvider _generateWalletProvider = Provider.of(context); + final int _currentChest = _myWalletProvider.getCurrentChest(); + return Form( key: formKey, child: Padding( @@ -116,9 +118,9 @@ class OnboardingStepFourteen extends StatelessWidget { if (resultWallet) { pinColor = Colors.green[500]; print(generatedWallet.pin); - await _generateWalletProvider.storeHDWallet( + await _generateWalletProvider.storeHDWChest( generatedWallet, 'Mon portefeuille courant', context); - _myWalletProvider.getAllWalletsNames(); + _myWalletProvider.getAllWalletsNames(_currentChest); _walletOptions.reloadBuild(); _myWalletProvider.rebuildWidget(); Navigator.push( diff --git a/pubspec.yaml b/pubspec.yaml index 8cdb9aa..73c0f3f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -67,3 +67,4 @@ flutter: - assets/icon/ - assets/onBoarding/ - assets/onBoarding/progress_bar/ + - assets/walletOptions/ From 00a27768e6d149184e0512047c76fac1e3aa9bae Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 21 Mar 2021 00:35:32 +0100 Subject: [PATCH 4/9] Almost all elements on Wallet options screen works --- lib/models/history.dart | 20 +- lib/models/myWallets.dart | 2 + lib/models/queries.dart | 11 +- lib/models/walletOptions.dart | 70 ++++- lib/screens/history.dart | 32 ++- lib/screens/myWallets/walletOptions.dart | 348 +++++++++++++++++------ lib/screens/myWallets/walletsHome.dart | 12 +- pubspec.lock | 7 + pubspec.yaml | 3 +- 9 files changed, 396 insertions(+), 109 deletions(-) diff --git a/lib/models/history.dart b/lib/models/history.dart index facb32b..13768bf 100644 --- a/lib/models/history.dart +++ b/lib/models/history.dart @@ -4,6 +4,7 @@ import 'package:gecko/globals.dart'; import 'package:gecko/models/home.dart'; import 'package:gecko/screens/history.dart'; import 'package:graphql_flutter/graphql_flutter.dart'; +import 'package:jdenticon_dart/jdenticon_dart.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; import 'package:qrscan/qrscan.dart' as scanner; @@ -24,6 +25,7 @@ class HistoryProvider with ChangeNotifier { Map pageInfo; bool isHistoryScreen = false; String historySwitchButtun = "Voir l'historique"; + String rawSvg; Future scan(context) async { await Permission.camera.request(); @@ -43,7 +45,7 @@ class HistoryProvider with ChangeNotifier { return barcode; } - String isPubkey(context, pubkey) { + String isPubkey(context, pubkey, {bool goHistory}) { HomeProvider _homeProvider = Provider.of(context, listen: false); final RegExp regExp = new RegExp( @@ -62,8 +64,16 @@ class HistoryProvider with ChangeNotifier { this.outputPubkey.text = pubkey; - isHistoryScreen = false; - historySwitchButtun = "Voir l'historique"; + if (goHistory == null) goHistory = false; + + if (goHistory) { + isHistoryScreen = true; + historySwitchButtun = "Payer"; + } else { + isHistoryScreen = false; + historySwitchButtun = "Voir l'historique"; + } + _homeProvider.handleSearchEnd(); Navigator.push( context, @@ -241,6 +251,10 @@ class HistoryProvider with ChangeNotifier { notifyListeners(); } + String generateIdenticon(String _pubkey) { + return Jdenticon.toSvg(_pubkey); + } + // num getBalance(_pubkey) { // getBalance(_pubkey); // } diff --git a/lib/models/myWallets.dart b/lib/models/myWallets.dart index 350a227..ed89498 100644 --- a/lib/models/myWallets.dart +++ b/lib/models/myWallets.dart @@ -68,6 +68,8 @@ class MyWalletsProvider with ChangeNotifier { listWallets = ''; } + print(walletsDirectory.path); + // int i = 0; File _walletConfig = File('${walletsDirectory.path}/$_chest/list.conf'); _walletConfig.readAsLinesSync().forEach((element) { diff --git a/lib/models/queries.dart b/lib/models/queries.dart index fda9345..72ba0e9 100644 --- a/lib/models/queries.dart +++ b/lib/models/queries.dart @@ -52,8 +52,13 @@ const String getHistory = r''' const String getBalance = r''' query ($pubkey: String!) { - balance(script: $pubkey) { - amount - base + balance(script: $pubkey) { + amount + base + } + currentUd { + amount + base + } } '''; diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 2c238a7..12cb177 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:typed_data'; import 'package:crypto/crypto.dart'; import 'package:dubp/dubp.dart'; import 'package:fast_base58/fast_base58.dart'; @@ -7,6 +8,7 @@ import 'package:flutter/material.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; import 'package:truncate/truncate.dart'; +import 'package:qrscan/qrscan.dart' as scanner; class WalletOptionsProvider with ChangeNotifier { TextEditingController pubkey = TextEditingController(); @@ -14,6 +16,11 @@ class WalletOptionsProvider with ChangeNotifier { bool isWalletUnlock = false; bool ischangedPin = false; TextEditingController newPin = new TextEditingController(); + bool isEditing = false; + bool isBalanceBlur = true; + FocusNode walletNameFocus = FocusNode(); + TextEditingController nameController = TextEditingController(); + String walletID; Future get badWallet => null; @@ -121,22 +128,36 @@ class WalletOptionsProvider with ChangeNotifier { return _pinLenght; } - Future _renameWallet(_walletName, _newName, _walletNbr, _derivation) async { + Future _renameWallet(_walletID, _newName) async { final _walletConfig = File('${walletsDirectory.path}/0/list.conf'); String newConfig = await _walletConfig.readAsLines().then((List lines) { int nbrLines = lines.length; - print(lines); - print(nbrLines); - int _index = lines.indexOf('0:$_walletNbr:$_walletName:$_derivation'); + // print(lines); + // print(nbrLines); + // int _index = lines.indexOf('0:$_walletNbr:$_walletName:$_derivation'); if (nbrLines != 1) { - lines.removeWhere((element) => - element.contains('0:$_walletNbr:$_walletName:$_derivation')); - lines.insert(_index, '0:$_walletNbr:$_newName:$_derivation'); + 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 '0:$_walletNbr:$_newName:$_derivation'; + return 'true'; } }); @@ -173,8 +194,8 @@ class WalletOptionsProvider with ChangeNotifier { child: Text("Valider"), onPressed: () { WidgetsBinding.instance.addPostFrameCallback((_) async { - await _renameWallet(_walletName, this._newWalletName.text, - _walletNbr, _derivation); + // await _renameWallet(_walletName, this._newWalletName.text, + // _walletNbr, _derivation); }); // notifyListeners(); Navigator.pop(context, true); @@ -186,6 +207,26 @@ class WalletOptionsProvider with ChangeNotifier { ); } + Future editWalletName(_wID) async { + bool nameState; + if (isEditing) { + if (!nameController.text.contains(':') && + nameController.text.length <= 45) { + await _renameWallet(_wID, nameController.text); + nameState = true; + } else { + nameState = false; + } + } else { + walletNameFocus.requestFocus(); + nameState = true; + } + + isEditing ? isEditing = false : isEditing = true; + notifyListeners(); + return nameState; + } + Future deleteWallet(context, _walletNbr, _name, _derivation) async { final bool _answer = await _confirmDeletingWallet(context, _name); @@ -305,6 +346,15 @@ class WalletOptionsProvider with ChangeNotifier { return pubkeyShort; } + void bluringBalance() { + isBalanceBlur = !isBalanceBlur; + notifyListeners(); + } + + Future generateQRcode(String _pubkey) async { + return await scanner.generateBarCode(_pubkey); + } + void reloadBuild() { notifyListeners(); } diff --git a/lib/screens/history.dart b/lib/screens/history.dart index 6f26752..966c79d 100644 --- a/lib/screens/history.dart +++ b/lib/screens/history.dart @@ -1,5 +1,4 @@ import 'dart:io'; - import 'package:flutter/services.dart'; import 'package:gecko/globals.dart'; import 'package:gecko/models/cesiumPlus.dart'; @@ -11,6 +10,7 @@ import 'package:flutter/foundation.dart'; import 'dart:ui'; import 'package:graphql_flutter/graphql_flutter.dart'; import 'package:provider/provider.dart'; +import 'package:flutter_svg/flutter_svg.dart'; // ignore: must_be_immutable class HistoryScreen extends StatelessWidget with ChangeNotifier { @@ -25,6 +25,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { FetchMore fetchMore; FetchMoreOptions opts; + final GlobalKey _scaffoldKey = GlobalKey(); @override Widget build(BuildContext context) { @@ -37,6 +38,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { WidgetsBinding.instance.addPostFrameCallback((_) {}); return Scaffold( + key: _scaffoldKey, appBar: AppBar( title: _homeProvider.appBarExplorer, actions: [ @@ -153,8 +155,14 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { return const Text('Aucune donnée à afficher.'); } - final num balance = _historyProvider - .removeDecimalZero(result.data['balance']['amount'] / 100); + num balance; + + if (result.data['balance'] == null) { + balance = 0.0; + } else { + balance = _historyProvider + .removeDecimalZero(result.data['balance']['amount'] / 100); + } opts = _historyProvider.checkQueryResult( result, opts, _outputPubkey.text); @@ -179,7 +187,7 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { if (_isFirstExec) Container( padding: const EdgeInsets.fromLTRB( - 12, 0, 5, 0), + 20, 0, 30, 0), child: FutureBuilder( future: _cesiumPlusProvider.getAvatar( @@ -235,7 +243,21 @@ class HistoryScreen extends StatelessWidget with ChangeNotifier { Container( padding: const EdgeInsets.fromLTRB( 30, 0, 5, 0), // .only(right: 15), - child: Text('TODO')), + child: Card( + child: Column( + children: [ + SvgPicture.string( + _historyProvider + .generateIdenticon( + _historyProvider + .pubkey), + fit: BoxFit.contain, + height: 64, + width: 64, + ), + ], + ), + )), SizedBox(width: 0) ]), if (_isFirstExec) diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index 8ed09d4..a97dae2 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -1,7 +1,11 @@ +import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/models/history.dart'; 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'; @@ -17,6 +21,8 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { int walletNbr; String walletName; int derivation; + int _nbrLinesName = 1; + bool _isNewNameValid = false; @override Widget build(BuildContext context) { @@ -26,25 +32,45 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { Provider.of(context); MyWalletsProvider _myWalletProvider = Provider.of(context); + HistoryProvider _historyProvider = Provider.of(context); final int _currentChest = _myWalletProvider.getCurrentChest(); final String shortPubkey = _walletOptions.getShortPubkey(_walletOptions.pubkey.text); + if (_walletOptions.nameController.text == null || + _isNewNameValid == false) { + _walletOptions.nameController.text = walletName; + } else { + walletName = _walletOptions.nameController.text; + } + _walletOptions.walletID = '0:$walletNbr'; + + _walletOptions.nameController.text.length >= 15 + ? _nbrLinesName = 2 + : _nbrLinesName = 1; + if (_walletOptions.nameController.text.length >= 30) _nbrLinesName = 3; + + // print(_walletOptions.generateQRcode(_walletOptions.pubkey.text)); + return WillPopScope( - onWillPop: () { - Navigator.popUntil( - context, - ModalRoute.withName('/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( icon: Icon(Icons.arrow_back, color: Colors.black), onPressed: () { + _walletOptions.isEditing = false; + _walletOptions.isBalanceBlur = true; Navigator.popUntil( context, ModalRoute.withName('/mywallets'), @@ -52,60 +78,196 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { }), title: SizedBox( height: 22, - child: Text(walletName), + child: Text(_walletOptions.nameController.text), )), body: Builder( - builder: (ctx) => SafeArea( - child: Expanded( - child: Column(children: [ - SizedBox(height: 25), - Row(children: [ - SizedBox(width: 25), - Image.asset( - 'assets/chopp-gecko2.png', - ), - Image.asset( - 'assets/walletOptions/camera.png', - ), - // SizedBox(width: 20), - Column(children: [ - Row(children: [ - Column(children: [ - SizedBox( - width: 250, - child: Text( - walletName, - textAlign: TextAlign.center, - style: TextStyle(fontSize: 27), - )), - SizedBox(height: 5), - Text( - '500 DU', - style: TextStyle( - fontSize: 20, color: Colors.black), - ), - SizedBox(height: 5), - Image.asset( - 'assets/walletOptions/icon_oeuil.png', - ), - ]), - SizedBox(width: 0), - Column(children: [ - Image.asset( - 'assets/walletOptions/edit.png', - ), - SizedBox( - height: 60, - ) - ]) - ]), - ]), - ]), - Image.asset( - 'assets/walletOptions/QR_icon.png', + builder: (ctx) => SafeArea( + child: Column(children: [ + SizedBox(height: 25), + Row(children: [ + SizedBox(width: 25), + Image.asset( + 'assets/chopp-gecko2.png', + ), + Image.asset( + 'assets/walletOptions/camera.png', + ), + // SizedBox(width: 20), + Column(children: [ + Row(children: [ + Column(children: [ + SizedBox( + width: 250, + child: TextField( + // autofocus: true, + focusNode: _walletOptions.walletNameFocus, + enabled: _walletOptions.isEditing, + controller: _walletOptions.nameController, + maxLines: _nbrLinesName, + textAlign: TextAlign.center, + decoration: InputDecoration( + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + disabledBorder: InputBorder.none, + contentPadding: EdgeInsets.all(15.0), + ), + style: TextStyle( + fontSize: 27, + color: Colors.black, + fontWeight: FontWeight.w400)), ), - SizedBox(height: 15), - Row(children: [ + SizedBox(height: 5), + // Query( + // options: QueryOptions( + // document: gql(getBalance), + // variables: { + // 'pubkey': _walletOptions.pubkey.text, + // }, + // ), + // builder: (QueryResult result, + // {fetchMore, refetch}) { + // return Text( + // '$result DU', + // style: TextStyle( + // fontSize: 20, color: Colors.black), + // ); + // }), + Query( + options: QueryOptions( + document: gql( + getBalance), // this is the query string you just created + variables: { + 'pubkey': _walletOptions.pubkey.text, + }, + pollInterval: Duration(seconds: 1), + ), + builder: (QueryResult result, + {VoidCallback refetch, FetchMore fetchMore}) { + if (result.hasException) { + return Text(result.exception.toString()); + } + + if (result.isLoading) { + return Text('Loading'); + } + // List repositories = result.data['viewer']['repositories']['nodes']; + String wBalanceUD; + if (result.data['balance'] == null) { + wBalanceUD = '0.0'; + } else { + int wBalanceG1 = result.data['balance']['amount']; + int currentUD = + result.data['currentUd']['amount']; + double wBalanceUDBrut = + wBalanceG1 / currentUD; // .toString(); + wBalanceUD = double.parse( + (wBalanceUDBrut).toStringAsFixed(2)) + .toString(); + } + return Row(children: [ + ImageFiltered( + imageFilter: ImageFilter.blur( + sigmaX: + _walletOptions.isBalanceBlur ? 6 : 0, + sigmaY: + _walletOptions.isBalanceBlur ? 5 : 0), + child: Text('$wBalanceUD', + style: TextStyle( + fontSize: 20, color: Colors.black)), + ), + Text(' DU', + style: TextStyle( + fontSize: 20, color: Colors.black)) + ]); + + // Text( + // '$wBalanceUD DU', + // style: TextStyle( + // fontSize: 20, color: Colors.black), + // ); + }, + ), + SizedBox(height: 5), + InkWell( + onTap: () { + _walletOptions.bluringBalance(); + }, + child: Image.asset( + 'assets/walletOptions/icon_oeuil.png', + )), + ]), + SizedBox(width: 0), + Column(children: [ + InkWell( + onTap: () async { + // _walletOptions.isEditing = true; + // _walletOptions.reloadBuild(); + // _walletOptions.walletNameFocus + // .requestFocus(); + _isNewNameValid = await _walletOptions + .editWalletName(_walletOptions.walletID); + // .then((_) { + // _walletOptions.walletNameFocus + // .requestFocus(); + // _walletOptions.reloadBuild(); + // }); + + // .then( + // (_result) { + // if (_result == true) { + // WidgetsBinding.instance + // .addPostFrameCallback((_) { + // _myWalletProvider.listWallets = + // _myWalletProvider + // .getAllWalletsNames( + // _currentChest); + // _myWalletProvider.rebuildWidget(); + // }); + // Navigator.popUntil( + // context, + // ModalRoute.withName('/mywallets'), + // ); + // } + // }, + // ); + }, + child: ClipRRect( + child: Image.asset( + _walletOptions.isEditing + ? 'assets/walletOptions/android-checkmark.png' + : 'assets/walletOptions/edit.png', + width: 20, + height: 20), + )), + // Image.asset( + // 'assets/walletOptions/edit.png', + // ), + SizedBox( + height: 60, + ) + ]) + ]), + ]), + ]), + FutureBuilder( + future: _walletOptions + .generateQRcode(_walletOptions.pubkey.text), + builder: (context, snapshot) { + return snapshot.data != null + ? Image.memory(snapshot.data, height: 300) + : Text('-', style: TextStyle(fontSize: 20)); + }), + SizedBox(height: 15), + GestureDetector( + onTap: () { + Clipboard.setData( + ClipboardData(text: _walletOptions.pubkey.text)); + _walletOptions.snackCopyKey(ctx); + }, + child: SizedBox( + height: 50, + child: Row(children: [ SizedBox(width: 30), Image.asset( 'assets/walletOptions/key.png', @@ -133,14 +295,22 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { onPrimary: Colors.black, // foreground ), onPressed: () { - print('COPY PUBKEY'); + ClipboardData(text: _walletOptions.pubkey.text); + _walletOptions.snackCopyKey(ctx); }, child: Text('Copier', style: TextStyle( fontSize: 15, color: Colors.grey[50]))), - ]), - SizedBox(height: 10), - Row(children: [ + ]))), + SizedBox(height: 10), + InkWell( + onTap: () { + _historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, + goHistory: true); + }, + child: SizedBox( + height: 50, + child: Row(children: [ SizedBox(width: 30), Image.asset( 'assets/walletOptions/clock.png', @@ -149,9 +319,13 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { Text('Historique des transactions', style: TextStyle(fontSize: 20, color: Colors.black)), - ]), - SizedBox(height: 15), - Row(children: [ + ]))), + SizedBox(height: 15), + InkWell( + onTap: () {}, + child: SizedBox( + height: 50, + child: Row(children: [ SizedBox(width: 35), Image.asset( 'assets/walletOptions/android-checkmark.png', @@ -160,21 +334,31 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { Text('Portefeuille par defaut', style: TextStyle(fontSize: 20, color: Colors.black)), - ]), - SizedBox(height: 15), - Row(children: [ - SizedBox(width: 30), - Image.asset( - 'assets/walletOptions/trash.png', - ), - SizedBox(width: 10), - Text('Supprimer ce portefeuille', - style: TextStyle( - fontSize: 20, color: Color(0xffD80000))), - ]), - ]), - ), - )), - )); + ]))), + SizedBox(height: 15), + InkWell( + onTap: () async { + await _walletOptions.deleteWallet( + context, walletNbr, walletName, derivation); + WidgetsBinding.instance.addPostFrameCallback((_) { + _myWalletProvider.listWallets = + _myWalletProvider.getAllWalletsNames(_currentChest); + _myWalletProvider.rebuildWidget(); + }); + }, + child: Row(children: [ + SizedBox(width: 30), + Image.asset( + 'assets/walletOptions/trash.png', + ), + SizedBox(width: 10), + Text('Supprimer ce portefeuille', + style: TextStyle( + fontSize: 20, color: Color(0xffD80000))), + ])), + ]), + ), + )), + ); } } diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index a4aca34..df8c72e 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -77,11 +77,13 @@ class WalletsHome extends StatelessWidget { if (_myWalletProvider.listWallets == '') { return Expanded( - child: Center( - child: Text( - 'Veuillez générer votre premier portefeuille', - style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), - ))); + child: Column(children: [ + Center( + child: Text( + 'Veuillez générer votre premier portefeuille', + style: TextStyle(fontSize: 17, fontWeight: FontWeight.w500), + )), + ])); } List _listWallets = _myWalletProvider.listWallets.split('\n'); diff --git a/pubspec.lock b/pubspec.lock index e89bf23..c010da5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -317,6 +317,13 @@ packages: url: "https://pub.dartlang.org" source: hosted version: "2.0.3" + jdenticon_dart: + dependency: "direct main" + description: + name: jdenticon_dart + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" js: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 73c0f3f..1f683a3 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+21 +version: 0.0.1+22 environment: sdk: ">=2.7.0 <3.0.0" @@ -45,6 +45,7 @@ dependencies: flutter_svg: ^0.20.0-nullsafety responsive_framework: ^0.0.14 responsive_builder: ^0.3.0 + jdenticon_dart: ^2.0.0 flutter_icons: android: "ic_launcher" From 30b5d1d91a933bbdc5b908088b267772a5105f0c Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 21 Mar 2021 01:22:52 +0100 Subject: [PATCH 5/9] Improve UI --- lib/screens/myWallets/walletOptions.dart | 370 ++++++++++++----------- 1 file changed, 192 insertions(+), 178 deletions(-) diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index a97dae2..ce5bce6 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -83,173 +83,176 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { body: Builder( builder: (ctx) => SafeArea( child: Column(children: [ - SizedBox(height: 25), - Row(children: [ - SizedBox(width: 25), - Image.asset( - 'assets/chopp-gecko2.png', - ), - Image.asset( - 'assets/walletOptions/camera.png', - ), - // SizedBox(width: 20), - Column(children: [ - Row(children: [ + Container( + height: 15, + color: Color(0xffFFD68E), + ), + Container( + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topCenter, + end: Alignment.bottomCenter, + colors: [ + Color(0xffFFD68E), + Color(0xFFFFFCF7), + ], + )), + child: Row(children: [ + SizedBox(width: 25), + Image.asset( + 'assets/chopp-gecko2.png', + ), Column(children: [ - SizedBox( - width: 250, - child: TextField( - // autofocus: true, - focusNode: _walletOptions.walletNameFocus, - enabled: _walletOptions.isEditing, - controller: _walletOptions.nameController, - maxLines: _nbrLinesName, - textAlign: TextAlign.center, - decoration: InputDecoration( - border: InputBorder.none, - focusedBorder: InputBorder.none, - enabledBorder: InputBorder.none, - disabledBorder: InputBorder.none, - contentPadding: EdgeInsets.all(15.0), - ), - style: TextStyle( - fontSize: 27, - color: Colors.black, - fontWeight: FontWeight.w400)), + Image.asset( + 'assets/walletOptions/camera.png', ), - SizedBox(height: 5), - // Query( - // options: QueryOptions( - // document: gql(getBalance), - // variables: { - // 'pubkey': _walletOptions.pubkey.text, - // }, - // ), - // builder: (QueryResult result, - // {fetchMore, refetch}) { - // return Text( - // '$result DU', - // style: TextStyle( - // fontSize: 20, color: Colors.black), - // ); - // }), - Query( - options: QueryOptions( - document: gql( - getBalance), // this is the query string you just created - variables: { - 'pubkey': _walletOptions.pubkey.text, - }, - pollInterval: Duration(seconds: 1), - ), - builder: (QueryResult result, - {VoidCallback refetch, FetchMore fetchMore}) { - if (result.hasException) { - return Text(result.exception.toString()); - } - - if (result.isLoading) { - return Text('Loading'); - } - // List repositories = result.data['viewer']['repositories']['nodes']; - String wBalanceUD; - if (result.data['balance'] == null) { - wBalanceUD = '0.0'; - } else { - int wBalanceG1 = result.data['balance']['amount']; - int currentUD = - result.data['currentUd']['amount']; - double wBalanceUDBrut = - wBalanceG1 / currentUD; // .toString(); - wBalanceUD = double.parse( - (wBalanceUDBrut).toStringAsFixed(2)) - .toString(); - } - return Row(children: [ - ImageFiltered( - imageFilter: ImageFilter.blur( - sigmaX: - _walletOptions.isBalanceBlur ? 6 : 0, - sigmaY: - _walletOptions.isBalanceBlur ? 5 : 0), - child: Text('$wBalanceUD', - style: TextStyle( - fontSize: 20, color: Colors.black)), - ), - Text(' DU', - style: TextStyle( - fontSize: 20, color: Colors.black)) - ]); - - // Text( - // '$wBalanceUD DU', - // style: TextStyle( - // fontSize: 20, color: Colors.black), - // ); - }, - ), - SizedBox(height: 5), - InkWell( - onTap: () { - _walletOptions.bluringBalance(); - }, - child: Image.asset( - 'assets/walletOptions/icon_oeuil.png', - )), + SizedBox(height: 100) ]), - SizedBox(width: 0), + // SizedBox(width: 20), Column(children: [ - InkWell( - onTap: () async { - // _walletOptions.isEditing = true; - // _walletOptions.reloadBuild(); - // _walletOptions.walletNameFocus - // .requestFocus(); - _isNewNameValid = await _walletOptions - .editWalletName(_walletOptions.walletID); - // .then((_) { - // _walletOptions.walletNameFocus - // .requestFocus(); - // _walletOptions.reloadBuild(); - // }); + Row(children: [ + Column(children: [ + SizedBox( + width: 250, + child: TextField( + // autofocus: true, + focusNode: _walletOptions.walletNameFocus, + enabled: _walletOptions.isEditing, + controller: _walletOptions.nameController, + maxLines: _nbrLinesName, + textAlign: TextAlign.center, + decoration: InputDecoration( + border: InputBorder.none, + focusedBorder: InputBorder.none, + enabledBorder: InputBorder.none, + disabledBorder: InputBorder.none, + contentPadding: EdgeInsets.all(15.0), + ), + style: TextStyle( + fontSize: 27, + color: Colors.black, + fontWeight: FontWeight.w400)), + ), + SizedBox(height: 5), + Query( + options: QueryOptions( + document: gql(getBalance), + variables: { + 'pubkey': _walletOptions.pubkey.text, + }, + pollInterval: Duration(seconds: 1), + ), + builder: (QueryResult result, + {VoidCallback refetch, FetchMore fetchMore}) { + if (result.hasException) { + return Text(result.exception.toString()); + } - // .then( - // (_result) { - // if (_result == true) { - // WidgetsBinding.instance - // .addPostFrameCallback((_) { - // _myWalletProvider.listWallets = - // _myWalletProvider - // .getAllWalletsNames( - // _currentChest); - // _myWalletProvider.rebuildWidget(); - // }); - // Navigator.popUntil( - // context, - // ModalRoute.withName('/mywallets'), - // ); - // } - // }, - // ); - }, - child: ClipRRect( - child: Image.asset( - _walletOptions.isEditing - ? 'assets/walletOptions/android-checkmark.png' - : 'assets/walletOptions/edit.png', - width: 20, - height: 20), - )), - // Image.asset( - // 'assets/walletOptions/edit.png', - // ), - SizedBox( - height: 60, - ) - ]) - ]), - ]), - ]), + if (result.isLoading) { + return Text('Loading'); + } + // List repositories = result.data['viewer']['repositories']['nodes']; + String wBalanceUD; + if (result.data['balance'] == null) { + wBalanceUD = '0.0'; + } else { + int wBalanceG1 = + result.data['balance']['amount']; + int currentUD = + result.data['currentUd']['amount']; + double wBalanceUDBrut = + wBalanceG1 / currentUD; // .toString(); + wBalanceUD = double.parse( + (wBalanceUDBrut).toStringAsFixed(2)) + .toString(); + } + return Row(children: [ + ImageFiltered( + imageFilter: ImageFilter.blur( + sigmaX: _walletOptions.isBalanceBlur + ? 6 + : 0, + sigmaY: _walletOptions.isBalanceBlur + ? 5 + : 0), + child: Text('$wBalanceUD', + style: TextStyle( + fontSize: 20, color: Colors.black)), + ), + Text(' DU', + style: TextStyle( + fontSize: 20, color: Colors.black)) + ]); + + // Text( + // '$wBalanceUD DU', + // style: TextStyle( + // fontSize: 20, color: Colors.black), + // ); + }, + ), + SizedBox(height: 5), + InkWell( + onTap: () { + _walletOptions.bluringBalance(); + }, + child: Image.asset( + 'assets/walletOptions/icon_oeuil.png', + )), + ]), + SizedBox(width: 0), + Column(children: [ + InkWell( + onTap: () async { + // _walletOptions.isEditing = true; + // _walletOptions.reloadBuild(); + // _walletOptions.walletNameFocus + // .requestFocus(); + _isNewNameValid = await _walletOptions + .editWalletName(_walletOptions.walletID); + // .then((_) { + // _walletOptions.walletNameFocus + // .requestFocus(); + // _walletOptions.reloadBuild(); + // }); + + // .then( + // (_result) { + // if (_result == true) { + // WidgetsBinding.instance + // .addPostFrameCallback((_) { + // _myWalletProvider.listWallets = + // _myWalletProvider + // .getAllWalletsNames( + // _currentChest); + // _myWalletProvider.rebuildWidget(); + // }); + // Navigator.popUntil( + // context, + // ModalRoute.withName('/mywallets'), + // ); + // } + // }, + // ); + }, + child: ClipRRect( + child: Image.asset( + _walletOptions.isEditing + ? 'assets/walletOptions/android-checkmark.png' + : 'assets/walletOptions/edit.png', + width: 20, + height: 20), + )), + // Image.asset( + // 'assets/walletOptions/edit.png', + // ), + SizedBox( + height: 60, + ) + ]) + ]), + ]), + ])), FutureBuilder( future: _walletOptions .generateQRcode(_walletOptions.pubkey.text), @@ -285,22 +288,33 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { fontWeight: FontWeight.w800, fontFamily: 'Monospace')), SizedBox(width: 15), - ElevatedButton( - style: ElevatedButton.styleFrom( - shape: RoundedRectangleBorder( - borderRadius: new BorderRadius.circular(8), - ), - elevation: 1, - primary: Color(0xffD28928), // background - onPrimary: Colors.black, // foreground - ), - onPressed: () { - ClipboardData(text: _walletOptions.pubkey.text); - _walletOptions.snackCopyKey(ctx); - }, - child: Text('Copier', - style: TextStyle( - fontSize: 15, color: Colors.grey[50]))), + SizedBox( + height: 40, + child: ElevatedButton( + style: ElevatedButton.styleFrom( + shape: RoundedRectangleBorder( + borderRadius: + new BorderRadius.circular(8), + ), + elevation: 1, + primary: Color(0xffD28928), // background + onPrimary: Colors.black, // foreground + ), + onPressed: () { + ClipboardData( + text: _walletOptions.pubkey.text); + _walletOptions.snackCopyKey(ctx); + }, + child: Row(children: [ + Image.asset( + 'assets/walletOptions/copy-white.png', + ), + SizedBox(width: 7), + Text('Copier', + style: TextStyle( + fontSize: 15, + color: Colors.grey[50])) + ]))), ]))), SizedBox(height: 10), InkWell( From 6be4a92f20c5e8a36f144a064f89b9d0d4e1941d Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 21 Mar 2021 01:42:29 +0100 Subject: [PATCH 6/9] Fix Copy button; Improve wallet name font (monospace) --- lib/models/walletOptions.dart | 2 +- lib/screens/myWallets/walletOptions.dart | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 12cb177..3eac888 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -211,7 +211,7 @@ class WalletOptionsProvider with ChangeNotifier { bool nameState; if (isEditing) { if (!nameController.text.contains(':') && - nameController.text.length <= 45) { + nameController.text.length <= 39) { await _renameWallet(_wID, nameController.text); nameState = true; } else { diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index ce5bce6..f9b4a82 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -49,7 +49,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { _walletOptions.nameController.text.length >= 15 ? _nbrLinesName = 2 : _nbrLinesName = 1; - if (_walletOptions.nameController.text.length >= 30) _nbrLinesName = 3; + if (_walletOptions.nameController.text.length >= 26) _nbrLinesName = 3; // print(_walletOptions.generateQRcode(_walletOptions.pubkey.text)); @@ -94,7 +94,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { end: Alignment.bottomCenter, colors: [ Color(0xffFFD68E), - Color(0xFFFFFCF7), + Color(0xfffafafa), ], )), child: Row(children: [ @@ -113,7 +113,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { Row(children: [ Column(children: [ SizedBox( - width: 250, + width: 260, child: TextField( // autofocus: true, focusNode: _walletOptions.walletNameFocus, @@ -131,7 +131,8 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { style: TextStyle( fontSize: 27, color: Colors.black, - fontWeight: FontWeight.w400)), + fontWeight: FontWeight.w400, + fontFamily: 'Monospace')), ), SizedBox(height: 5), Query( @@ -301,8 +302,8 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { onPrimary: Colors.black, // foreground ), onPressed: () { - ClipboardData( - text: _walletOptions.pubkey.text); + Clipboard.setData(ClipboardData( + text: _walletOptions.pubkey.text)); _walletOptions.snackCopyKey(ctx); }, child: Row(children: [ From 44fe648f0be41a6a29aec38b7aac78b65523baf3 Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 21 Mar 2021 23:04:11 +0100 Subject: [PATCH 7/9] Responsive wallet options screen --- assets/walletOptions/ellipse1.png | Bin 0 -> 1761 bytes assets/walletOptions/icon_oeuil_close.png | Bin 0 -> 4020 bytes lib/main.dart | 13 ++- lib/models/walletOptions.dart | 23 +++++ lib/screens/myWallets/walletOptions.dart | 114 +++++++++++++++------- lib/screens/myWallets/walletsHome.dart | 2 + pubspec.lock | 9 +- pubspec.yaml | 2 +- 8 files changed, 119 insertions(+), 44 deletions(-) create mode 100755 assets/walletOptions/ellipse1.png create mode 100644 assets/walletOptions/icon_oeuil_close.png diff --git a/assets/walletOptions/ellipse1.png b/assets/walletOptions/ellipse1.png new file mode 100755 index 0000000000000000000000000000000000000000..e3ff279bc09fb77afc7254897a936d551e2b07a5 GIT binary patch literal 1761 zcmV<71|Io|P)NtPuh zYRr~3*?vst5BCqO8Czo#}cl`lJsR9qW1Q7W?*2TFc=ITj6@u2NstT z(!~aKK5Qy{1~#bjEol8Nxm^Awq(OeAq?xg?F+*u->F4*o?)t|iyA*1%6!w-^;3&u} zR;zWpUaudAdGgC*C8Sx8$8!M0;+`8*_f-A%DR|m=QKN-dN_2CgQ23ZkCi@geHHxE} z((24|4{K>@VR866gDi9Y{OHiC5GM57ZE$|{S5<&vP6Yyi4kXNwJEppSIZHE0_^4k5 zZAQ~?;0Oj_wL$K(e?uimW3l5oIXUgv6-jnqD$pc=+M5i)EmhT;dC@A;> zyTVKFN#-6Dd)LRZvp>o-VS*#*2YRnmsW>@2JZyj@hD~N^DJ~MGD^~Nm)$-w$fF|d* zV%<*|%eUj{BFincbk@ww%-awAzBMIGpvh_Vd$&3qj#lE8crB4MSzVl$m-pc}fBykO zK%ebCD3!_&E?l@!2nk-1NSeXCVEw9Hj=TrluxJ8CbqQk+fK?R=+v) z@Bs)3WNoQbx}&VDj9i4XHb1{3gEtm^+2r^Kgaop7EQ_scYinC@5sviu_&8Hp zS=lh{^MDX>7Y*6m+`J3oe7Qe^gM%zOd_8@Y5MlSaX+my|y9h^GR8&-yg;+Q36{e-l zm{DT9t}>g=G#N!4X-vr3?Cfm)oIs++QjoB~BuWMG2*SC??CdOqiM=jSaR>>-3yrFS zdD0B8)gD`~Wf%HO}J%~ER-&~i?O zY}Pz`TdURXaJ${J*cIYaQ&PQtbdf8KT0IB}HHAfhg`#hfFs*!?I_JX$MGz5&6x+T% zE&D7UmqZ9lx>_QIrV_oiyuADfMmLIgA?jZc0ga7~VWZJFZ8Dio3&q-d4HYmlGIAOt zn-@=me1GEdO~*Od3Q758`V|qTHg6fJ&uu z_4M?-U#HQz)@p?$x2V%-U0q#WZ{aCbI)jjqZX`>Th-qGbfB(Vto2rj<1)B_Je?*un zO!rNHc2`$de}-KYF&2?dR$(G%cQ!OMd}W`ooS_F~%Hlj>`-J&SZEfut?BXZiqNFYv z=_sau===WJii(O)rp6}DW`a0Rcxr6?Y)wr~54|4+w;z(!t5fFDq|h&3yh!VM{+&B_ z-Yws_@tvRTlZw@toHXgkhlg(eaixMaTPl__kDRw>gJd|fk2ak0gJ$&fUq3?+>hF>r0!IUpp(M|w1 zDK;fGbzfiK8|ZI`&3;eG(8C!pIUYf}AhHd(7U*TUF0726-Mo1-m2@32A1RW$M7pH; z`^4DDT@;uV=3)Y~r>d%Ir%0aj0;zb)SEjsPn8Q--(%mg7n}tM`pusGXatXi7J&2b4 zv7@8o(&fvS$=}Eos1&d$N-Rev9k6loviJwcTU%SpcJJO@YcLqL;C_h~EBGZ?#wy`| zfD>v86L>c+Sf+`IiGdR*PW*7~+O-)}*FL=F(dl$v+~Om$EB3d?+DD9&&%z3;1UEjV zxRFF3Lg9sqDOorYoLI(dWVI-s)5cGTVVD3W^E3?9h$w}#aGLLbVinHB8}||MM%607 zG?$lh)FSalB%|@;|J{0nRU)12SxZY2iF@KtMfv{=$B@-kZsje200000NkvXXu0mjf D)ZIHd literal 0 HcmV?d00001 diff --git a/assets/walletOptions/icon_oeuil_close.png b/assets/walletOptions/icon_oeuil_close.png new file mode 100644 index 0000000000000000000000000000000000000000..4a13e67ea0a5d9bae6eaf7f3e67d4ac6c5131406 GIT binary patch literal 4020 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 aEBpaETh{49x;K0P0000 main() async { await _walletsProvider.initWalletFolder(); appVersion = await _homeProvider.getAppVersion(); prefs = await SharedPreferences.getInstance(); - final HiveStore _store = - await HiveStore.open(path: '${appPath.path}/gqlCache'); + // final HiveStore _store = + // await HiveStore.open(path: '${appPath.path}/gqlCache'); // Get a valid GVA endpoint endPointGVA = await _homeProvider.getValidEndpoint(); @@ -51,7 +51,7 @@ Future main() async { await SentryFlutter.init((options) { options.dsn = 'https://c09587b46eaa42e8b9fda28d838ed180@o496840.ingest.sentry.io/5572110'; - }, appRunner: () => runApp(Gecko(endPointGVA, _store))); + }, appRunner: () => runApp(Gecko(endPointGVA))); // runZoned>( // () async { @@ -68,14 +68,13 @@ Future main() async { } else { print('Debug mode enabled: No sentry alerte'); - runApp(Gecko(endPointGVA, _store)); + runApp(Gecko(endPointGVA)); } } class Gecko extends StatelessWidget { - Gecko(this.randomEndpoint, this._store); + Gecko(this.randomEndpoint); final String randomEndpoint; - final HiveStore _store; @override Widget build(BuildContext context) { @@ -86,7 +85,7 @@ class Gecko extends StatelessWidget { final _client = ValueNotifier( GraphQLClient( - cache: GraphQLCache(store: _store), + cache: GraphQLCache(), link: _httpLink, ), ); diff --git a/lib/models/walletOptions.dart b/lib/models/walletOptions.dart index 3eac888..31dfb81 100644 --- a/lib/models/walletOptions.dart +++ b/lib/models/walletOptions.dart @@ -7,6 +7,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:gecko/globals.dart'; +import 'package:image_picker/image_picker.dart'; import 'package:truncate/truncate.dart'; import 'package:qrscan/qrscan.dart' as scanner; @@ -355,6 +356,28 @@ class WalletOptionsProvider with ChangeNotifier { return await scanner.generateBarCode(_pubkey); } + Future defAsDefaultWallet(String _id) async { + await defaultWalletFile.delete(); + await defaultWalletFile.create(); + await defaultWalletFile + .writeAsString(_id) + .then((value) => notifyListeners()); + } + + Future changeAvatar() async { + File _image; + final picker = ImagePicker(); + + final pickedFile = await picker.getImage(source: ImageSource.gallery); + + if (pickedFile != null) { + _image = File(pickedFile.path); + return _image; + } else { + print('No image selected.'); + } + } + void reloadBuild() { notifyListeners(); } diff --git a/lib/screens/myWallets/walletOptions.dart b/lib/screens/myWallets/walletOptions.dart index f9b4a82..82d96f2 100644 --- a/lib/screens/myWallets/walletOptions.dart +++ b/lib/screens/myWallets/walletOptions.dart @@ -1,6 +1,7 @@ import 'dart:ui'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; +import 'package:gecko/globals.dart'; import 'package:gecko/models/history.dart'; import 'package:gecko/models/myWallets.dart'; import 'package:gecko/models/queries.dart'; @@ -23,6 +24,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { int derivation; int _nbrLinesName = 1; bool _isNewNameValid = false; + bool isDefaultWallet; @override Widget build(BuildContext context) { @@ -49,7 +51,12 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { _walletOptions.nameController.text.length >= 15 ? _nbrLinesName = 2 : _nbrLinesName = 1; - if (_walletOptions.nameController.text.length >= 26) _nbrLinesName = 3; + if (_walletOptions.nameController.text.length >= 26 && isTall) + _nbrLinesName = 3; + + defaultWallet == _walletOptions.walletID + ? isDefaultWallet = true + : isDefaultWallet = false; // print(_walletOptions.generateQRcode(_walletOptions.pubkey.text)); @@ -59,8 +66,9 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { _walletOptions.isBalanceBlur = true; Navigator.popUntil( context, - ModalRoute.withName('/mywallets'), + ModalRoute.withName('/'), ); + Navigator.pushNamed(context, '/mywallets'); return Future.value(true); }, child: Scaffold( @@ -73,8 +81,9 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { _walletOptions.isBalanceBlur = true; Navigator.popUntil( context, - ModalRoute.withName('/mywallets'), + ModalRoute.withName('/'), ); + Navigator.pushNamed(context, '/mywallets'); }), title: SizedBox( height: 22, @@ -84,7 +93,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { builder: (ctx) => SafeArea( child: Column(children: [ Container( - height: 15, + height: isTall ? 15 : 0, color: Color(0xffFFD68E), ), Container( @@ -99,15 +108,25 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { )), child: Row(children: [ SizedBox(width: 25), - Image.asset( - 'assets/chopp-gecko2.png', - ), - Column(children: [ - Image.asset( - 'assets/walletOptions/camera.png', - ), - SizedBox(height: 100) - ]), + InkWell( + onTap: () async { + await _walletOptions.changeAvatar(); + print('CHANGE AVATAR'); + }, + child: Image.asset( + 'assets/chopp-gecko2.png', + )), + InkWell( + onTap: () async { + await _walletOptions.changeAvatar(); + print('CHANGE AVATAR'); + }, + child: Column(children: [ + Image.asset( + 'assets/walletOptions/camera.png', + ), + SizedBox(height: 100) + ])), // SizedBox(width: 20), Column(children: [ Row(children: [ @@ -129,12 +148,12 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { contentPadding: EdgeInsets.all(15.0), ), style: TextStyle( - fontSize: 27, + fontSize: isTall ? 27 : 23, color: Colors.black, fontWeight: FontWeight.w400, fontFamily: 'Monospace')), ), - SizedBox(height: 5), + SizedBox(height: isTall ? 5 : 0), Query( options: QueryOptions( document: gql(getBalance), @@ -178,11 +197,13 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { : 0), child: Text('$wBalanceUD', style: TextStyle( - fontSize: 20, color: Colors.black)), + fontSize: isTall ? 20 : 18, + color: Colors.black)), ), Text(' DU', style: TextStyle( - fontSize: 20, color: Colors.black)) + fontSize: isTall ? 20 : 18, + color: Colors.black)) ]); // Text( @@ -198,7 +219,9 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { _walletOptions.bluringBalance(); }, child: Image.asset( - 'assets/walletOptions/icon_oeuil.png', + _walletOptions.isBalanceBlur + ? 'assets/walletOptions/icon_oeuil.png' + : 'assets/walletOptions/icon_oeuil_close.png', )), ]), SizedBox(width: 0), @@ -254,15 +277,17 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { ]), ]), ])), + SizedBox(height: 4 * ratio), FutureBuilder( future: _walletOptions .generateQRcode(_walletOptions.pubkey.text), builder: (context, snapshot) { return snapshot.data != null - ? Image.memory(snapshot.data, height: 300) + ? Image.memory(snapshot.data, + height: isTall ? 300 : 270) : Text('-', style: TextStyle(fontSize: 20)); }), - SizedBox(height: 15), + SizedBox(height: 15 * ratio), GestureDetector( onTap: () { Clipboard.setData( @@ -317,7 +342,7 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { color: Colors.grey[50])) ]))), ]))), - SizedBox(height: 10), + SizedBox(height: 10 * ratio), InkWell( onTap: () { _historyProvider.isPubkey(ctx, _walletOptions.pubkey.text, @@ -330,27 +355,46 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { Image.asset( 'assets/walletOptions/clock.png', ), - SizedBox(width: 10), + SizedBox(width: 12), Text('Historique des transactions', style: TextStyle(fontSize: 20, color: Colors.black)), ]))), - SizedBox(height: 15), + SizedBox(height: 12 * ratio), InkWell( - onTap: () {}, + onTap: !isDefaultWallet + ? () async { + await _walletOptions + .defAsDefaultWallet(_walletOptions.walletID) + .then((value) => { + _myWalletProvider + .getAllWalletsNames(_currentChest), + _myWalletProvider.rebuildWidget() + }); + } + : null, child: SizedBox( height: 50, child: Row(children: [ - SizedBox(width: 35), - Image.asset( - 'assets/walletOptions/android-checkmark.png', - ), - SizedBox(width: 10), - Text('Portefeuille par defaut', - style: - TextStyle(fontSize: 20, color: Colors.black)), + SizedBox(width: 31), + CircleAvatar( + backgroundColor: + Colors.grey[isDefaultWallet ? 300 : 500], + child: Image.asset( + 'assets/walletOptions/android-checkmark.png', + )), + SizedBox(width: 12), + Text( + isDefaultWallet + ? 'Ce portefeuille est celui par defaut' + : 'Définir comme portefeuille par défaut', + style: TextStyle( + fontSize: 20, + color: isDefaultWallet + ? Colors.grey[500] + : Colors.black)), ]))), - SizedBox(height: 15), + SizedBox(height: 17 * ratio), InkWell( onTap: () async { await _walletOptions.deleteWallet( @@ -362,11 +406,11 @@ class WalletOptions extends StatelessWidget with ChangeNotifier { }); }, child: Row(children: [ - SizedBox(width: 30), + SizedBox(width: 33), Image.asset( 'assets/walletOptions/trash.png', ), - SizedBox(width: 10), + SizedBox(width: 14), Text('Supprimer ce portefeuille', style: TextStyle( fontSize: 20, color: Color(0xffD80000))), diff --git a/lib/screens/myWallets/walletsHome.dart b/lib/screens/myWallets/walletsHome.dart index df8c72e..ff9f033 100644 --- a/lib/screens/myWallets/walletsHome.dart +++ b/lib/screens/myWallets/walletsHome.dart @@ -30,6 +30,8 @@ class WalletsHome extends StatelessWidget { if (myWalletProvider.listWallets != '') { firstWalletDerivation = int.parse(myWalletProvider.listWallets.split('\n')[0].split(':')[3]); + + myWalletProvider.getDefaultWallet(); } return Scaffold( diff --git a/pubspec.lock b/pubspec.lock index c010da5..c5f9205 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -295,7 +295,14 @@ packages: name: image_picker url: "https://pub.dartlang.org" source: hosted - version: "0.7.2" + version: "0.7.3" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" image_picker_platform_interface: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 1f683a3..1d2d785 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -19,7 +19,7 @@ dependencies: qrscan: ^0.2.22 permission_handler: ^6.0.1 image_gallery_saver: ^1.6.8 - image_picker: ^0.7.2 + image_picker: ^0.7.3 # graphql_flutter: ^4.0.1 #^3.1.0 graphql_flutter: ^5.0.0-nullsafety.1 provider: ^4.3.2+3 From 125a731656ea3ca712e921db83c26949a45f56d6 Mon Sep 17 00:00:00 2001 From: poka Date: Tue, 23 Mar 2021 16:01:07 +0100 Subject: [PATCH 8/9] fix format --- lib/screens/myWallets/confirmWalletStorage.dart | 5 ++--- lib/screens/myWallets/walletOptions-old.dart | 6 ++++-- lib/screens/onBoarding/12.dart | 2 +- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/screens/myWallets/confirmWalletStorage.dart b/lib/screens/myWallets/confirmWalletStorage.dart index 4aa0130..9c6069c 100644 --- a/lib/screens/myWallets/confirmWalletStorage.dart +++ b/lib/screens/myWallets/confirmWalletStorage.dart @@ -30,7 +30,6 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { Provider.of(context); final int _currentChest = _myWalletProvider.getCurrentChest(); - this._mnemonicController.text = generatedMnemonic; return WillPopScope( onWillPop: () { @@ -139,8 +138,8 @@ class ConfirmStoreWallet extends StatelessWidget with ChangeNotifier { WidgetsBinding.instance .addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider - .getAllWalletsNames(_currentChest); + _myWalletProvider.getAllWalletsNames( + _currentChest); _myWalletProvider.rebuildWidget(); }); } diff --git a/lib/screens/myWallets/walletOptions-old.dart b/lib/screens/myWallets/walletOptions-old.dart index 7713274..621335c 100644 --- a/lib/screens/myWallets/walletOptions-old.dart +++ b/lib/screens/myWallets/walletOptions-old.dart @@ -111,7 +111,8 @@ class WalletOptionsOld extends StatelessWidget with ChangeNotifier { _myWalletProvider .listWallets = _myWalletProvider - .getAllWalletsNames(_currentChest); + .getAllWalletsNames( + _currentChest); _myWalletProvider .rebuildWidget(); }); @@ -141,7 +142,8 @@ class WalletOptionsOld extends StatelessWidget with ChangeNotifier { WidgetsBinding.instance .addPostFrameCallback((_) { _myWalletProvider.listWallets = - _myWalletProvider.getAllWalletsNames(_currentChest); + _myWalletProvider + .getAllWalletsNames(_currentChest); _myWalletProvider.rebuildWidget(); }); }, diff --git a/lib/screens/onBoarding/12.dart b/lib/screens/onBoarding/12.dart index fd01ff4..2caee89 100644 --- a/lib/screens/onBoarding/12.dart +++ b/lib/screens/onBoarding/12.dart @@ -62,7 +62,7 @@ class OnboardingStepFourteen extends StatelessWidget { Provider.of(context); final int _currentChest = _myWalletProvider.getCurrentChest(); - + return Form( key: formKey, child: Padding( From de478e93e962090f0e84a43e91aa399a35c37bd3 Mon Sep 17 00:00:00 2001 From: poka Date: Tue, 23 Mar 2021 17:36:38 +0100 Subject: [PATCH 9/9] comment warning --- lib/models/generateWallets.dart | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/lib/models/generateWallets.dart b/lib/models/generateWallets.dart index dfcd9e9..d065556 100644 --- a/lib/models/generateWallets.dart +++ b/lib/models/generateWallets.dart @@ -10,7 +10,6 @@ import 'package:gecko/globals.dart'; import 'package:pdf/pdf.dart'; import 'package:pdf/widgets.dart' as pw; import 'package:printing/printing.dart'; -import 'package:truncate/truncate.dart'; class GenerateWalletsProvider with ChangeNotifier { GenerateWalletsProvider(); @@ -245,10 +244,10 @@ class GenerateWalletsProvider with ChangeNotifier { } Future importWallet(context, _cesiumID, _cesiumPWD) async { - String _walletPubkey = await DubpRust.getLegacyPublicKey( - salt: _cesiumID, password: _cesiumPWD); - String shortPubkey = truncate(_walletPubkey, 9, - omission: "...", position: TruncatePosition.end); + // String _walletPubkey = await DubpRust.getLegacyPublicKey( + // salt: _cesiumID, password: _cesiumPWD); + // String shortPubkey = truncate(_walletPubkey, 9, + // omission: "...", position: TruncatePosition.end); // await storeWallet( // actualWallet, 'Portefeuille Cesium - $shortPubkey', context); cesiumID.text = '';