From 44fe648f0be41a6a29aec38b7aac78b65523baf3 Mon Sep 17 00:00:00 2001 From: poka Date: Sun, 21 Mar 2021 23:04:11 +0100 Subject: [PATCH] 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