From ae6291179e6b4f8ec45be2b9f8fe8809be8f64f9 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Thu, 1 Oct 2020 20:29:06 +0300 Subject: [PATCH 01/12] CAKE-97 | created date_picker for Android and iOS; applied date picker to blockchain_height_widget --- lib/src/widgets/blockchain_height_widget.dart | 3 +- lib/utils/date_picker.dart | 54 +++++++++++++++++++ lib/utils/show_pop_up.dart | 4 +- pubspec.lock | 6 +-- 4 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 lib/utils/date_picker.dart diff --git a/lib/src/widgets/blockchain_height_widget.dart b/lib/src/widgets/blockchain_height_widget.dart index 87d64b222..de242d451 100644 --- a/lib/src/widgets/blockchain_height_widget.dart +++ b/lib/src/widgets/blockchain_height_widget.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/utils/date_picker.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:cake_wallet/generated/i18n.dart'; @@ -88,7 +89,7 @@ class BlockchainHeightState extends State { Future _selectDate(BuildContext context) async { final now = DateTime.now(); - final date = await showDatePicker( + final date = await getDate( context: context, initialDate: now.subtract(Duration(days: 1)), firstDate: DateTime(2014, DateTime.april), diff --git a/lib/utils/date_picker.dart b/lib/utils/date_picker.dart new file mode 100644 index 000000000..78e49666d --- /dev/null +++ b/lib/utils/date_picker.dart @@ -0,0 +1,54 @@ +import 'dart:io'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +Future getDate({ + @required BuildContext context, + @required DateTime initialDate, + @required DateTime firstDate, + @required DateTime lastDate}) { + + if (Platform.isIOS) { + return _buildCupertinoDataPicker(context, initialDate, firstDate, lastDate); + } + + return _buildMaterialDataPicker(context, initialDate, firstDate, lastDate); +} + +Future _buildMaterialDataPicker( + BuildContext context, + DateTime initialDate, + DateTime firstDate, + DateTime lastDate) async { + return await showDatePicker( + context: context, + initialDate: initialDate, + firstDate: firstDate, + lastDate: lastDate, + helpText: ''); +} + +Future _buildCupertinoDataPicker( + BuildContext context, + DateTime initialDate, + DateTime firstDate, + DateTime lastDate) async { + DateTime date; + await showModalBottomSheet( + context: context, + builder: (_) { + return Container( + height: MediaQuery.of(context).size.height / 3, + child: CupertinoDatePicker( + mode: CupertinoDatePickerMode.date, + onDateTimeChanged: (picked) => date = picked, + initialDateTime: initialDate, + minimumDate: firstDate, + maximumDate: lastDate, + backgroundColor: Colors.white, + ), + ); + } + ); + return date; +} \ No newline at end of file diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 280bcff3c..a97fb3762 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -14,8 +14,8 @@ Future showPopUp({ context: context, builder: builder, barrierDismissible: barrierDismissible, - //barrierColor: barrierColor, - //useSafeArea: useSafeArea, + barrierColor: barrierColor, + useSafeArea: useSafeArea, useRootNavigator: useRootNavigator, routeSettings: routeSettings, child: child); diff --git a/pubspec.lock b/pubspec.lock index 9b56163ba..4bfc5f790 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -589,7 +589,7 @@ packages: name: mobx_codegen url: "https://pub.dartlang.org" source: hosted - version: "1.1.0+1" + version: "1.1.0+2" node_interop: dependency: transitive description: @@ -708,7 +708,7 @@ packages: name: plugin_platform_interface url: "https://pub.dartlang.org" source: hosted - version: "1.0.2" + version: "1.0.3" pointycastle: dependency: transitive description: @@ -1030,5 +1030,5 @@ packages: source: hosted version: "2.2.1" sdks: - dart: ">=2.7.0 <3.0.0" + dart: ">=2.7.2 <3.0.0" flutter: ">=1.12.13+hotfix.5 <2.0.0" From 0b0b5016b920f3b42de73093031e43bc067d2203 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Thu, 1 Oct 2020 20:51:30 +0300 Subject: [PATCH 02/12] CAKE-101 | changed buttons position on confirm sending alert; added poppins font to confirm sending alert --- lib/src/screens/send/send_page.dart | 8 ++++---- lib/src/screens/send/widgets/confirm_sending_alert.dart | 4 ++++ lib/utils/show_pop_up.dart | 4 ++-- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 7a856cb43..dc9cc8f5c 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -556,9 +556,9 @@ class SendPage extends BasePage { sendViewModel.pendingTransaction.amountFormatted, fee: S.of(context).send_fee, feeValue: sendViewModel.pendingTransaction.feeFormatted, - leftButtonText: S.of(context).ok, - rightButtonText: S.of(context).cancel, - actionLeftButton: () { + rightButtonText: S.of(context).ok, + leftButtonText: S.of(context).cancel, + actionRightButton: () { Navigator.of(context).pop(); sendViewModel.commitTransaction(); showPopUp( @@ -655,7 +655,7 @@ class SendPage extends BasePage { }); }); }, - actionRightButton: () => Navigator.of(context).pop()); + actionLeftButton: () => Navigator.of(context).pop()); }); }); } diff --git a/lib/src/screens/send/widgets/confirm_sending_alert.dart b/lib/src/screens/send/widgets/confirm_sending_alert.dart index 663de3a16..fa5a97148 100644 --- a/lib/src/screens/send/widgets/confirm_sending_alert.dart +++ b/lib/src/screens/send/widgets/confirm_sending_alert.dart @@ -55,6 +55,7 @@ class ConfirmSendingAlert extends BaseAlertDialog { style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, + fontFamily: 'Poppins', color: Theme.of(context).primaryTextTheme.title.color, decoration: TextDecoration.none, ), @@ -64,6 +65,7 @@ class ConfirmSendingAlert extends BaseAlertDialog { style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, + fontFamily: 'Poppins', color: Theme.of(context).primaryTextTheme.title.color, decoration: TextDecoration.none, ), @@ -79,6 +81,7 @@ class ConfirmSendingAlert extends BaseAlertDialog { style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, + fontFamily: 'Poppins', color: Theme.of(context).primaryTextTheme.title.color, decoration: TextDecoration.none, ), @@ -88,6 +91,7 @@ class ConfirmSendingAlert extends BaseAlertDialog { style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, + fontFamily: 'Poppins', color: Theme.of(context).primaryTextTheme.title.color, decoration: TextDecoration.none, ), diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 280bcff3c..a97fb3762 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -14,8 +14,8 @@ Future showPopUp({ context: context, builder: builder, barrierDismissible: barrierDismissible, - //barrierColor: barrierColor, - //useSafeArea: useSafeArea, + barrierColor: barrierColor, + useSafeArea: useSafeArea, useRootNavigator: useRootNavigator, routeSettings: routeSettings, child: child); From 468ad82b37d868bb358ee1d271f051943525542f Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 2 Oct 2020 18:49:45 +0300 Subject: [PATCH 03/12] CAKE-103 | added hasRefundAddress parameter to exchange card; applied refund address to deposit card on the exchange page --- lib/src/screens/exchange/exchange_page.dart | 1 + .../exchange/widgets/exchange_card.dart | 26 ++++++++++--------- lib/utils/show_pop_up.dart | 4 +-- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index 694f74129..ab154a98d 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -173,6 +173,7 @@ class ExchangePage extends BasePage { initialIsAddressEditable: exchangeViewModel.isDepositAddressEnabled, isAmountEstimated: false, + hasRefundAddress: true, currencies: CryptoCurrency.all, onCurrencySelected: (currency) => exchangeViewModel.changeDepositCurrency( diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart index 7706e7271..f21c88082 100644 --- a/lib/src/screens/exchange/widgets/exchange_card.dart +++ b/lib/src/screens/exchange/widgets/exchange_card.dart @@ -18,6 +18,7 @@ class ExchangeCard extends StatefulWidget { this.initialIsAmountEditable, this.initialIsAddressEditable, this.isAmountEstimated, + this.hasRefundAddress = false, this.currencies, this.onCurrencySelected, this.imageArrow, @@ -38,6 +39,7 @@ class ExchangeCard extends StatefulWidget { final bool initialIsAmountEditable; final bool initialIsAddressEditable; final bool isAmountEstimated; + final bool hasRefundAddress; final Image imageArrow; final Color currencyButtonColor; final Color addressButtonsColor; @@ -228,18 +230,18 @@ class ExchangeCardState extends State { : Offstage(), ]), ), - _isAddressEditable - ? Offstage() - : Padding( - padding: EdgeInsets.only(top: 20), - child: Text( - S.of(context).refund_address, - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w500, - color: - Theme.of(context).textTheme.subhead.decorationColor), - )), + !_isAddressEditable && widget.hasRefundAddress + ? Padding( + padding: EdgeInsets.only(top: 20), + child: Text( + S.of(context).refund_address, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: + Theme.of(context).textTheme.subhead.decorationColor), + )) + : Offstage(), _isAddressEditable ? Padding( padding: EdgeInsets.only(top: 20), diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 280bcff3c..a97fb3762 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -14,8 +14,8 @@ Future showPopUp({ context: context, builder: builder, barrierDismissible: barrierDismissible, - //barrierColor: barrierColor, - //useSafeArea: useSafeArea, + barrierColor: barrierColor, + useSafeArea: useSafeArea, useRootNavigator: useRootNavigator, routeSettings: routeSettings, child: child); From 738d719fecceb7c36b5967d4f7f24eda66354d8a Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 2 Oct 2020 19:30:13 +0300 Subject: [PATCH 04/12] CAKE-104 | added description parameter to the picker; applied description text in the present provider picker --- .../widgets/present_provider_picker.dart | 3 +++ lib/src/widgets/picker.dart | 22 +++++++++++++++++++ 2 files changed, 25 insertions(+) diff --git a/lib/src/screens/exchange/widgets/present_provider_picker.dart b/lib/src/screens/exchange/widgets/present_provider_picker.dart index f4cc7abf1..714bc0bc3 100644 --- a/lib/src/screens/exchange/widgets/present_provider_picker.dart +++ b/lib/src/screens/exchange/widgets/present_provider_picker.dart @@ -58,11 +58,13 @@ class PresentProviderPicker extends StatelessWidget { final items = exchangeViewModel.providersForCurrentPair(); final selectedItem = items.indexOf(exchangeViewModel.provider); final images = []; + String description; for (var provider in items) { switch (provider.description) { case ExchangeProviderDescription.xmrto: images.add(Image.asset('assets/images/xmr_btc.png')); + description = 'To choose ChangeNOW or MorphToken, please change your trading pair first'; break; case ExchangeProviderDescription.changeNow: images.add(Image.asset('assets/images/change_now.png')); @@ -79,6 +81,7 @@ class PresentProviderPicker extends StatelessWidget { images: images, selectedAtIndex: selectedItem, title: S.of(context).change_exchange_provider, + description: description, onItemSelected: (ExchangeProvider provider) => exchangeViewModel.changeProvider(provider: provider)), context: context); diff --git a/lib/src/widgets/picker.dart b/lib/src/widgets/picker.dart index 935237573..17db6e82e 100644 --- a/lib/src/widgets/picker.dart +++ b/lib/src/widgets/picker.dart @@ -12,6 +12,7 @@ class Picker extends StatefulWidget { @required this.items, this.images, @required this.title, + this.description, @required this.onItemSelected, this.mainAxisAlignment = MainAxisAlignment.start, this.isAlwaysShowScrollThumb = false @@ -21,6 +22,7 @@ class Picker extends StatefulWidget { final List items; final List images; final String title; + final String description; final Function(Item) onItemSelected; final MainAxisAlignment mainAxisAlignment; final bool isAlwaysShowScrollThumb; @@ -145,6 +147,26 @@ class PickerState extends State { ); }, ), + ((widget.description != null) + &&(widget.description.isNotEmpty)) + ? Positioned( + bottom: 24, + left: 24, + right: 24, + child: Text( + widget.description, + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + fontFamily: 'Poppins', + decoration: TextDecoration.none, + color: Theme.of(context).primaryTextTheme + .title.color + ), + ) + ) + : Offstage(), widget.isAlwaysShowScrollThumb ? CakeScrollbar( backgroundHeight: backgroundHeight, From 33e29a71323f6740ef48f8daf546d86dc641f6af Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 2 Oct 2020 20:28:34 +0300 Subject: [PATCH 05/12] CAKE-99 | added paste_ios.png and removed duplicate.png; applied ios paste icon to address_text_field --- assets/images/2.0x/duplicate.png | Bin 549 -> 0 bytes assets/images/2.0x/paste_ios.png | Bin 0 -> 903 bytes assets/images/3.0x/duplicate.png | Bin 603 -> 0 bytes assets/images/3.0x/paste_ios.png | Bin 0 -> 903 bytes assets/images/duplicate.png | Bin 403 -> 0 bytes assets/images/paste_ios.png | Bin 0 -> 903 bytes lib/src/widgets/address_text_field.dart | 2 +- lib/utils/show_pop_up.dart | 4 ++-- 8 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 assets/images/2.0x/duplicate.png create mode 100644 assets/images/2.0x/paste_ios.png delete mode 100644 assets/images/3.0x/duplicate.png create mode 100644 assets/images/3.0x/paste_ios.png delete mode 100644 assets/images/duplicate.png create mode 100644 assets/images/paste_ios.png diff --git a/assets/images/2.0x/duplicate.png b/assets/images/2.0x/duplicate.png deleted file mode 100644 index b377d0a9d367d50efd833cb035215cee8ed56cd5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 549 zcmV+=0^0qFP)Ie0@CNnIy-aaQl)Q1d!03Ius8-vTnYL^Ym%DDmom|yF4JI=-k z8KQ$k4x|A@lZfmjreOfe`R&!&6QqEb>B2(B>?F1f3dS)219HM>w!A#GEnq zSXcmey_O^Y)bBu#Ks6;<1?|EDkV2(Sh_>R#VYEj{NMtG{11W%WUKd1(Y{LLlQlL(Z zzapt~KLBa!$*eRXBOrnMb8RiedxdkyzyCa4m=(jQLqsg3=N-M9ZgUR%42-+!%WKXb z6c?M#V0eA*LJD}DEjvQzTWlwkHL5-^EZ?wHszFLnN(l6O|IaXzGu&26M)SEIsav%x zd;4$CsBFLQwLHbg(}fL;ohmL%-U3~!$%m0VvrtBD#f0N8%c({?`iCwx&v(jsC)jp~ n^oiIbVAbje=@(=HxpR|mDRG&hWD`;k00000NkvXXu0mjfQ}N`T diff --git a/assets/images/2.0x/paste_ios.png b/assets/images/2.0x/paste_ios.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5d76d50b58080efc5fbdb5d4902acf6e2cec4f GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lNlJ8Z9H8Z zLn`LHoqIk@I8fwReOJN(``6nNGFPt;n6fMDw?NZ-1>Lp$$+0`W@Ul2A_P&_6#!0)D z!7(~qa-pb+UK*3)nYk%O-|rcl|Ew!8b1pt#e%{=?c+$Ny4FXOaiY*!H;SIVESPQuR z=sntEu`N?Q_gf_MJ;uL=7g@u4P0s0jZ!|t8UN4Y-U{~iQ$&}Wrqw+`i6K*=ZKl5?c zFCbf+d9U$NtII$Y{EJqbrAb%t&0&x{%N-#men4(R#F4r}9hY@$W}IfMWWN^mj`2Nb zaLdIT`X~RJ1ijNM*zP#D>4SiUx*y}OC+UARx&=SaXO<2QKW)7Ffd3=keenxbm$k(| zS$%JgUZMIuG3H-S@^>!F5w5?KYqX&M_k z#QkS!GEX?~q7S{FHZNM^y>ijJnQ`Lsk9Y4{BV2Fv`f_nc)Cx;KE;b#DV=sORMQ#m= z-Jup(t`q;bMb3W3xy*Hphm?&D%*ejR2|cOePhK;J zU&>&WP-gC#h$_cp;Kl|OUXtO^UNilR;?Mk}Ys^|w54b06zaY|k;kM_h2)2D;85_Fv zUH+u@O=Xn575OJoc+nabZRT%UMcY-&n$Om8XfyL^1KD<0=T3QgZpW^a1HA_`$bLg{f2hw2_I5uZ n$q$Sbhh*mb1SM^Ox}W@F-*xI;mVB)S<}3zJS3j3^P6o{sH9+5DWz-$`>?z0j-26jG!>n8BwJh>V*0SHe!sV2+DDG;3Rzsa(-0o52cggza-+02ZEEDiEP zLrMZv7P7Sg)mQ~oV---%(lkm_R9WOIp-4DCrqB@bl3WMM>m*upu}0?w=6R!tG3_CI z$u5YPlcIaj1%$zG#lhv_i7dOkR63oG$3AT}ZG&Ry%|MK|bf@Qf`xUys~^@U6Z z)lW-(Y!XVVgw$?6cUmM`q_&9XtqJgVAIGngs72~PmvUX pI9ZTM0lu}>r@sN{!H9-t`vWLp$$+0`W@Ul2A_P&_6#!0)D z!7(~qa-pb+UK*3)nYk%O-|rcl|Ew!8b1pt#e%{=?c+$Ny4FXOaiY*!H;SIVESPQuR z=sntEu`N?Q_gf_MJ;uL=7g@u4P0s0jZ!|t8UN4Y-U{~iQ$&}Wrqw+`i6K*=ZKl5?c zFCbf+d9U$NtII$Y{EJqbrAb%t&0&x{%N-#men4(R#F4r}9hY@$W}IfMWWN^mj`2Nb zaLdIT`X~RJ1ijNM*zP#D>4SiUx*y}OC+UARx&=SaXO<2QKW)7Ffd3=keenxbm$k(| zS$%JgUZMIuG3H-S@^>!F5w5?KYqX&M_k z#QkS!GEX?~q7S{FHZNM^y>ijJnQ`Lsk9Y4{BV2Fv`f_nc)Cx;KE;b#DV=sORMQ#m= z-Jup(t`q;bMb3W3xy*Hphm?&D%*ejR2|cOePhK;J zU&>&WP-gC#h$_cp;Kl|OUXtO^UNilR;?Mk}Ys^|w54b06zaY|k;kM_h2)2D;85_Fv zUH+u@O=Xn575OJoc+nabZRT%UMcY-&n$Om8XfyL^1KD<0=T3QgZpW^a1HA_`$bLg{f2hw2_I5uZ n$q$Sbhh*mb1SM^Ox}W@F-*xI;mVB)S<}3zJS3j3^P6P)q3eva|7EOWL?Z3=LHIy zhS2_jBtMh?US{5#PfstO-x>sIuxm(^-khJVHm_j~R=s5Aq7z7zIOk@~bch?k*Q5S> z7k)fhq_#0=CD=FaL1q!hap^^H!2E{RtM$5M9|DyqBj<*;OuPu-0*e$T{@kkt#MP(| z*9P7M56>Sxj-s(w3kYIPtc9$uz^SHY&8iFVW2#e29t5RbdBpn_W58vln$z9%D>6QzaFx9GODj(looE1>J77X8pe2Ie~Vq xHrkZUNMvry0jz@Bb)G1<$56uX6=3_>@)y+eYx0aEu*3iW002ovPDHLkV1kZ8rELHJ diff --git a/assets/images/paste_ios.png b/assets/images/paste_ios.png new file mode 100644 index 0000000000000000000000000000000000000000..7b5d76d50b58080efc5fbdb5d4902acf6e2cec4f GIT binary patch literal 903 zcmeAS@N?(olHy`uVBq!ia0vp^2_VeD1|%QND7OGoY)RhkE)4%caKYZ?lNlJ8Z9H8Z zLn`LHoqIk@I8fwReOJN(``6nNGFPt;n6fMDw?NZ-1>Lp$$+0`W@Ul2A_P&_6#!0)D z!7(~qa-pb+UK*3)nYk%O-|rcl|Ew!8b1pt#e%{=?c+$Ny4FXOaiY*!H;SIVESPQuR z=sntEu`N?Q_gf_MJ;uL=7g@u4P0s0jZ!|t8UN4Y-U{~iQ$&}Wrqw+`i6K*=ZKl5?c zFCbf+d9U$NtII$Y{EJqbrAb%t&0&x{%N-#men4(R#F4r}9hY@$W}IfMWWN^mj`2Nb zaLdIT`X~RJ1ijNM*zP#D>4SiUx*y}OC+UARx&=SaXO<2QKW)7Ffd3=keenxbm$k(| zS$%JgUZMIuG3H-S@^>!F5w5?KYqX&M_k z#QkS!GEX?~q7S{FHZNM^y>ijJnQ`Lsk9Y4{BV2Fv`f_nc)Cx;KE;b#DV=sORMQ#m= z-Jup(t`q;bMb3W3xy*Hphm?&D%*ejR2|cOePhK;J zU&>&WP-gC#h$_cp;Kl|OUXtO^UNilR;?Mk}Ys^|w54b06zaY|k;kM_h2)2D;85_Fv zUH+u@O=Xn575OJoc+nabZRT%UMcY-&n$Om8XfyL^1KD<0=T3QgZpW^a1HA_`$bLg{f2hw2_I5uZ n$q$Sbhh*mb1SM^Ox}W@F-*xI;mVB)S<}3zJS3j3^P6 showPopUp({ context: context, builder: builder, barrierDismissible: barrierDismissible, - //barrierColor: barrierColor, - //useSafeArea: useSafeArea, + barrierColor: barrierColor, + useSafeArea: useSafeArea, useRootNavigator: useRootNavigator, routeSettings: routeSettings, child: child); From 1b94de3cfbebff2fb2f52721343a4faf123a098c Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Fri, 2 Oct 2020 20:51:07 +0300 Subject: [PATCH 06/12] CAKE-104 | fixed string resources --- lib/generated/i18n.dart | 23 +++++++++++++++++++ .../widgets/present_provider_picker.dart | 2 +- res/values/strings_de.arb | 4 +++- res/values/strings_en.arb | 4 +++- res/values/strings_es.arb | 4 +++- res/values/strings_hi.arb | 4 +++- res/values/strings_ja.arb | 4 +++- res/values/strings_ko.arb | 4 +++- res/values/strings_nl.arb | 4 +++- res/values/strings_pl.arb | 4 +++- res/values/strings_pt.arb | 4 +++- res/values/strings_ru.arb | 4 +++- res/values/strings_uk.arb | 4 +++- res/values/strings_zh.arb | 4 +++- 14 files changed, 60 insertions(+), 13 deletions(-) diff --git a/lib/generated/i18n.dart b/lib/generated/i18n.dart index 7a86289b7..3cf819d59 100644 --- a/lib/generated/i18n.dart +++ b/lib/generated/i18n.dart @@ -123,6 +123,7 @@ class S implements WidgetsLocalizations { String get paste => "Paste"; String get payment_id => "Payment ID: "; String get pending => " (pending)"; + String get picker_description => "To choose ChangeNOW or MorphToken, please change your trading pair first"; String get pin_is_incorrect => "PIN is incorrect"; String get placeholder_contacts => "Your contacts will be displayed here"; String get placeholder_transactions => "Your transactions will be displayed here"; @@ -711,6 +712,8 @@ class $de extends S { @override String get wallet_list_load_wallet => "Wallet einlegen"; @override + String get picker_description => "Um ChangeNOW oder MorphToken zu wählen, ändern Sie bitte zuerst Ihr Handelspaar"; + @override String get sending => "Senden"; @override String get restore_restore_wallet => "Wallet wiederherstellen"; @@ -1353,6 +1356,8 @@ class $hi extends S { @override String get wallet_list_load_wallet => "वॉलेट लोड करें"; @override + String get picker_description => "ChangeNOW या MorphToken चुनने के लिए, कृपया अपनी ट्रेडिंग जोड़ी को पहले बदलें"; + @override String get sending => "भेजना"; @override String get restore_restore_wallet => "वॉलेट को पुनर्स्थापित करें"; @@ -1995,6 +2000,8 @@ class $ru extends S { @override String get wallet_list_load_wallet => "Загрузка кошелька"; @override + String get picker_description => "Чтобы выбрать ChangeNOW или MorphToken, сначала смените пару для обмена"; + @override String get sending => "Отправка"; @override String get restore_restore_wallet => "Восстановить кошелёк"; @@ -2637,6 +2644,8 @@ class $ko extends S { @override String get wallet_list_load_wallet => "지갑로드"; @override + String get picker_description => "ChangeNOW 또는 MorphToken을 선택하려면 먼저 거래 쌍을 변경하십시오."; + @override String get sending => "배상"; @override String get restore_restore_wallet => "월렛 복원"; @@ -3279,6 +3288,8 @@ class $pt extends S { @override String get wallet_list_load_wallet => "Abrir carteira"; @override + String get picker_description => "Para escolher ChangeNOW ou MorphToken, altere primeiro o seu par de negociação"; + @override String get sending => "Enviando"; @override String get restore_restore_wallet => "Restaurar carteira"; @@ -3921,6 +3932,8 @@ class $uk extends S { @override String get wallet_list_load_wallet => "Завантаження гаманця"; @override + String get picker_description => "Щоб вибрати ChangeNOW або MorphToken, спочатку змініть пару для обміну"; + @override String get sending => "Відправлення"; @override String get restore_restore_wallet => "Відновити гаманець"; @@ -4563,6 +4576,8 @@ class $ja extends S { @override String get wallet_list_load_wallet => "ウォレットをロード"; @override + String get picker_description => "ChangeNOWまたはMorphTokenを選択するには、最初にトレーディングペアを変更してください"; + @override String get sending => "送信"; @override String get restore_restore_wallet => "ウォレットを復元"; @@ -5209,6 +5224,8 @@ class $pl extends S { @override String get wallet_list_load_wallet => "Załaduj portfel"; @override + String get picker_description => "Aby wybrać ChangeNOW lub MorphToken, najpierw zmień swoją parę handlową"; + @override String get sending => "Wysyłanie"; @override String get restore_restore_wallet => "Przywróć portfel"; @@ -5851,6 +5868,8 @@ class $es extends S { @override String get wallet_list_load_wallet => "Billetera de carga"; @override + String get picker_description => "Para elegir ChangeNOW o MorphToken, primero cambie su par comercial"; + @override String get sending => "Enviando"; @override String get restore_restore_wallet => "Recuperar Cartera"; @@ -6493,6 +6512,8 @@ class $nl extends S { @override String get wallet_list_load_wallet => "Portemonnee laden"; @override + String get picker_description => "Om ChangeNOW of MorphToken te kiezen, moet u eerst uw handelspaar wijzigen"; + @override String get sending => "Bezig met verzenden"; @override String get restore_restore_wallet => "Portemonnee herstellen"; @@ -7135,6 +7156,8 @@ class $zh extends S { @override String get wallet_list_load_wallet => "装入钱包"; @override + String get picker_description => "要選擇ChangeNOW或MorphToken,請先更改您的交易對"; + @override String get sending => "正在发送"; @override String get restore_restore_wallet => "恢复钱包"; diff --git a/lib/src/screens/exchange/widgets/present_provider_picker.dart b/lib/src/screens/exchange/widgets/present_provider_picker.dart index 714bc0bc3..664dd90ca 100644 --- a/lib/src/screens/exchange/widgets/present_provider_picker.dart +++ b/lib/src/screens/exchange/widgets/present_provider_picker.dart @@ -64,7 +64,7 @@ class PresentProviderPicker extends StatelessWidget { switch (provider.description) { case ExchangeProviderDescription.xmrto: images.add(Image.asset('assets/images/xmr_btc.png')); - description = 'To choose ChangeNOW or MorphToken, please change your trading pair first'; + description = S.of(context).picker_description; break; case ExchangeProviderDescription.changeNow: images.add(Image.asset('assets/images/change_now.png')); diff --git a/res/values/strings_de.arb b/res/values/strings_de.arb index ae97c7815..36e5732a9 100644 --- a/res/values/strings_de.arb +++ b/res/values/strings_de.arb @@ -389,5 +389,7 @@ "template" : "Vorlage", "confirm_delete_template" : "Diese Aktion löscht diese Vorlage. Möchten Sie fortfahren?", - "confirm_delete_wallet" : "Diese Aktion löscht diese Brieftasche. Möchten Sie fortfahren?" + "confirm_delete_wallet" : "Diese Aktion löscht diese Brieftasche. Möchten Sie fortfahren?", + + "picker_description" : "Um ChangeNOW oder MorphToken zu wählen, ändern Sie bitte zuerst Ihr Handelspaar" } \ No newline at end of file diff --git a/res/values/strings_en.arb b/res/values/strings_en.arb index 41b3eefc5..2ec1150dc 100644 --- a/res/values/strings_en.arb +++ b/res/values/strings_en.arb @@ -389,5 +389,7 @@ "template" : "Template", "confirm_delete_template" : "This action will delete this template. Do you wish to continue?", - "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?" + "confirm_delete_wallet" : "This action will delete this wallet. Do you wish to continue?", + + "picker_description" : "To choose ChangeNOW or MorphToken, please change your trading pair first" } \ No newline at end of file diff --git a/res/values/strings_es.arb b/res/values/strings_es.arb index 3874222d5..d5f8c1a85 100644 --- a/res/values/strings_es.arb +++ b/res/values/strings_es.arb @@ -389,5 +389,7 @@ "template" : "Plantilla", "confirm_delete_template" : "Esta acción eliminará esta plantilla. ¿Desea continuar?", - "confirm_delete_wallet" : "Esta acción eliminará esta billetera. ¿Desea continuar?" + "confirm_delete_wallet" : "Esta acción eliminará esta billetera. ¿Desea continuar?", + + "picker_description" : "Para elegir ChangeNOW o MorphToken, primero cambie su par comercial" } \ No newline at end of file diff --git a/res/values/strings_hi.arb b/res/values/strings_hi.arb index f93963d04..80ea92fe7 100644 --- a/res/values/strings_hi.arb +++ b/res/values/strings_hi.arb @@ -389,5 +389,7 @@ "template" : "खाका", "confirm_delete_template" : "यह क्रिया इस टेम्पलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?", - "confirm_delete_wallet" : "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?" + "confirm_delete_wallet" : "यह क्रिया इस वॉलेट को हटा देगी। क्या आप जारी रखना चाहते हैं?", + + "picker_description" : "ChangeNOW या MorphToken चुनने के लिए, कृपया अपनी ट्रेडिंग जोड़ी को पहले बदलें" } \ No newline at end of file diff --git a/res/values/strings_ja.arb b/res/values/strings_ja.arb index 6ddaaee76..88669d9b3 100644 --- a/res/values/strings_ja.arb +++ b/res/values/strings_ja.arb @@ -389,5 +389,7 @@ "template" : "テンプレート", "confirm_delete_template" : "この操作により、このテンプレートが削除されます。 続行しますか?", - "confirm_delete_wallet" : "このアクションにより、このウォレットが削除されます。 続行しますか?" + "confirm_delete_wallet" : "このアクションにより、このウォレットが削除されます。 続行しますか?", + + "picker_description" : "ChangeNOWまたはMorphTokenを選択するには、最初にトレーディングペアを変更してください" } \ No newline at end of file diff --git a/res/values/strings_ko.arb b/res/values/strings_ko.arb index e6110dd8a..959aab177 100644 --- a/res/values/strings_ko.arb +++ b/res/values/strings_ko.arb @@ -389,5 +389,7 @@ "template" : "주형", "confirm_delete_template" : "이 작업은이 템플릿을 삭제합니다. 계속 하시겠습니까?", - "confirm_delete_wallet" : "이 작업은이 지갑을 삭제합니다. 계속 하시겠습니까?" + "confirm_delete_wallet" : "이 작업은이 지갑을 삭제합니다. 계속 하시겠습니까?", + + "picker_description" : "ChangeNOW 또는 MorphToken을 선택하려면 먼저 거래 쌍을 변경하십시오." } \ No newline at end of file diff --git a/res/values/strings_nl.arb b/res/values/strings_nl.arb index c6e94461b..d4f32511e 100644 --- a/res/values/strings_nl.arb +++ b/res/values/strings_nl.arb @@ -389,5 +389,7 @@ "template" : "Sjabloon", "confirm_delete_template" : "Met deze actie wordt deze sjabloon verwijderd. Wilt u doorgaan?", - "confirm_delete_wallet" : "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?" + "confirm_delete_wallet" : "Met deze actie wordt deze portemonnee verwijderd. Wilt u doorgaan?", + + "picker_description" : "Om ChangeNOW of MorphToken te kiezen, moet u eerst uw handelspaar wijzigen" } \ No newline at end of file diff --git a/res/values/strings_pl.arb b/res/values/strings_pl.arb index d2e5504f1..c55caee4f 100644 --- a/res/values/strings_pl.arb +++ b/res/values/strings_pl.arb @@ -389,5 +389,7 @@ "template" : "Szablon", "confirm_delete_template" : "Ta czynność usunie ten szablon. Czy chcesz kontynuować?", - "confirm_delete_wallet" : "Ta czynność usunie ten portfel. Czy chcesz kontynuować?" + "confirm_delete_wallet" : "Ta czynność usunie ten portfel. Czy chcesz kontynuować?", + + "picker_description" : "Aby wybrać ChangeNOW lub MorphToken, najpierw zmień swoją parę handlową" } \ No newline at end of file diff --git a/res/values/strings_pt.arb b/res/values/strings_pt.arb index 9d39b3f1a..904bdb8b9 100644 --- a/res/values/strings_pt.arb +++ b/res/values/strings_pt.arb @@ -389,5 +389,7 @@ "template" : "Modelo", "confirm_delete_template" : "Esta ação excluirá este modelo. Você deseja continuar?", - "confirm_delete_wallet" : "Esta ação excluirá esta carteira. Você deseja continuar?" + "confirm_delete_wallet" : "Esta ação excluirá esta carteira. Você deseja continuar?", + + "picker_description" : "Para escolher ChangeNOW ou MorphToken, altere primeiro o seu par de negociação" } diff --git a/res/values/strings_ru.arb b/res/values/strings_ru.arb index 891ab6a48..0d153005f 100644 --- a/res/values/strings_ru.arb +++ b/res/values/strings_ru.arb @@ -389,5 +389,7 @@ "template" : "Шаблон", "confirm_delete_template" : "Это действие удалит шаблон. Вы хотите продолжить?", - "confirm_delete_wallet" : "Это действие удалит кошелек. Вы хотите продолжить?" + "confirm_delete_wallet" : "Это действие удалит кошелек. Вы хотите продолжить?", + + "picker_description" : "Чтобы выбрать ChangeNOW или MorphToken, сначала смените пару для обмена" } \ No newline at end of file diff --git a/res/values/strings_uk.arb b/res/values/strings_uk.arb index 2fbfadd18..e507be08d 100644 --- a/res/values/strings_uk.arb +++ b/res/values/strings_uk.arb @@ -389,5 +389,7 @@ "template" : "Шаблон", "confirm_delete_template" : "Ця дія видалить шаблон. Ви хочете продовжити?", - "confirm_delete_wallet" : "Ця дія видалить гаманець. Ви хочете продовжити?" + "confirm_delete_wallet" : "Ця дія видалить гаманець. Ви хочете продовжити?", + + "picker_description" : "Щоб вибрати ChangeNOW або MorphToken, спочатку змініть пару для обміну" } \ No newline at end of file diff --git a/res/values/strings_zh.arb b/res/values/strings_zh.arb index 3bad6c530..f006f6663 100644 --- a/res/values/strings_zh.arb +++ b/res/values/strings_zh.arb @@ -389,5 +389,7 @@ "template" : "模板", "confirm_delete_template" : "此操作將刪除此模板。 你想繼續嗎?", - "confirm_delete_wallet" : "此操作將刪除此錢包。 你想繼續嗎?" + "confirm_delete_wallet" : "此操作將刪除此錢包。 你想繼續嗎?", + + "picker_description" : "要選擇ChangeNOW或MorphToken,請先更改您的交易對" } \ No newline at end of file From 17fa8bcf9289e4a403b81b057f18737998be412d Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 2 Oct 2020 21:00:30 +0300 Subject: [PATCH 07/12] CAKE-104 | fixed show pop up --- lib/utils/show_pop_up.dart | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/utils/show_pop_up.dart b/lib/utils/show_pop_up.dart index 280bcff3c..a97fb3762 100644 --- a/lib/utils/show_pop_up.dart +++ b/lib/utils/show_pop_up.dart @@ -14,8 +14,8 @@ Future showPopUp({ context: context, builder: builder, barrierDismissible: barrierDismissible, - //barrierColor: barrierColor, - //useSafeArea: useSafeArea, + barrierColor: barrierColor, + useSafeArea: useSafeArea, useRootNavigator: useRootNavigator, routeSettings: routeSettings, child: child); From a124cd810a2a43dc4fe6475cebbb948d3e7cf031 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Mon, 5 Oct 2020 20:55:46 +0300 Subject: [PATCH 08/12] CAKE-103 | fixed placeholder of address text field (deposit card) --- lib/src/screens/exchange/widgets/exchange_card.dart | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/src/screens/exchange/widgets/exchange_card.dart b/lib/src/screens/exchange/widgets/exchange_card.dart index f21c88082..d74f7bcca 100644 --- a/lib/src/screens/exchange/widgets/exchange_card.dart +++ b/lib/src/screens/exchange/widgets/exchange_card.dart @@ -247,6 +247,8 @@ class ExchangeCardState extends State { padding: EdgeInsets.only(top: 20), child: AddressTextField( controller: addressController, + placeholder: widget.hasRefundAddress + ? S.of(context).refund_address : null, options: [ AddressTextFieldOption.paste, AddressTextFieldOption.qrCode, From 521d7294a7ad47eb5b443f4cb74faad4e7cd9362 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Wed, 7 Oct 2020 08:58:22 +0300 Subject: [PATCH 09/12] CAKE-92 | fixed templates saving bug on send and exchange pages; added comma for keyboard on templates pages; added fiat amount controller to send page; added crypto amount and fiat amount controllers to send template pages; added send template store to send view model; added updateTemplate(), addTemplate(), removeTemplate() to send view model and exchange view model; fixed remove template alert on send and exchange pages --- lib/di.dart | 10 +- lib/src/screens/exchange/exchange_page.dart | 17 ++- .../exchange/exchange_template_page.dart | 5 +- lib/src/screens/send/send_page.dart | 100 ++++++++++-------- lib/src/screens/send/send_template_page.dart | 32 ++++-- .../exchange/exchange_view_model.dart | 26 ++++- lib/view_model/send/send_view_model.dart | 22 +++- 7 files changed, 136 insertions(+), 76 deletions(-) diff --git a/lib/di.dart b/lib/di.dart index aac1bfa24..f038a5d02 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -222,10 +222,10 @@ Future setup( addressEditOrCreateViewModel: getIt.get(param1: item))); - // getIt.get() getIt.registerFactory(() => SendViewModel( getIt.get().wallet, getIt.get().settingsStore, + getIt.get(), getIt.get())); getIt.registerFactory( @@ -318,10 +318,10 @@ Future setup( () => NodeCreateOrEditPage(getIt.get())); getIt.registerFactory(() => ExchangeViewModel( - wallet: getIt.get().wallet, - exchangeTemplateStore: getIt.get(), - trades: tradesSource, - tradesStore: getIt.get())); + getIt.get().wallet, + tradesSource, + getIt.get(), + getIt.get())); getIt.registerFactory(() => ExchangeTradeViewModel( wallet: getIt.get().wallet, diff --git a/lib/src/screens/exchange/exchange_page.dart b/lib/src/screens/exchange/exchange_page.dart index ab154a98d..bf587776f 100644 --- a/lib/src/screens/exchange/exchange_page.dart +++ b/lib/src/screens/exchange/exchange_page.dart @@ -307,8 +307,7 @@ class ExchangePage extends BasePage { ), Observer(builder: (_) { final templates = exchangeViewModel.templates; - final itemCount = - exchangeViewModel.templates.length; + final itemCount = templates.length; return ListView.builder( scrollDirection: Axis.horizontal, @@ -338,24 +337,22 @@ class ExchangePage extends BasePage { alertContent: S .of(context) .confirm_delete_template, - leftButtonText: - S.of(context).delete, rightButtonText: + S.of(context).delete, + leftButtonText: S.of(context).cancel, - actionLeftButton: () { + actionRightButton: () { Navigator.of( dialogContext) .pop(); exchangeViewModel - .exchangeTemplateStore - .remove( + .removeTemplate( template: template); exchangeViewModel - .exchangeTemplateStore - .update(); + .updateTemplate(); }, - actionRightButton: () => + actionLeftButton: () => Navigator.of( dialogContext) .pop()); diff --git a/lib/src/screens/exchange/exchange_template_page.dart b/lib/src/screens/exchange/exchange_template_page.dart index 85ea1f280..c68efc473 100644 --- a/lib/src/screens/exchange/exchange_template_page.dart +++ b/lib/src/screens/exchange/exchange_template_page.dart @@ -134,6 +134,7 @@ class ExchangeTemplatePage extends BasePage { initialIsAddressEditable: exchangeViewModel .isDepositAddressEnabled, isAmountEstimated: false, + hasRefundAddress: true, currencies: CryptoCurrency.all, onCurrencySelected: (currency) => exchangeViewModel.changeDepositCurrency( @@ -220,7 +221,7 @@ class ExchangeTemplatePage extends BasePage { PrimaryButton( onPressed: () { if (_formKey.currentState.validate()) { - exchangeViewModel.exchangeTemplateStore.addTemplate( + exchangeViewModel.addTemplate( amount: exchangeViewModel.depositAmount, depositCurrency: exchangeViewModel.depositCurrency.toString(), @@ -229,7 +230,7 @@ class ExchangeTemplatePage extends BasePage { provider: exchangeViewModel.provider.toString(), depositAddress: exchangeViewModel.depositAddress, receiveAddress: exchangeViewModel.receiveAddress); - exchangeViewModel.exchangeTemplateStore.update(); + exchangeViewModel.updateTemplate(); Navigator.of(context).pop(); } }, diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index cc0a9d0ba..811d940dd 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -1,7 +1,9 @@ import 'dart:ui'; import 'package:cake_wallet/entities/transaction_priority.dart'; +import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; +import 'package:cake_wallet/src/widgets/template_tile.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; @@ -416,53 +418,53 @@ class SendPage extends BasePage { )), ), ), - // Observer( - // builder: (_) { - // final templates = sendViewModel.templates; - // final itemCount = templates.length; + Observer( + builder: (_) { + final templates = sendViewModel.templates; + final itemCount = templates.length; - // return ListView.builder( - // scrollDirection: Axis.horizontal, - // shrinkWrap: true, - // physics: NeverScrollableScrollPhysics(), - // itemCount: itemCount, - // itemBuilder: (context, index) { - // final template = templates[index]; + return ListView.builder( + scrollDirection: Axis.horizontal, + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + itemCount: itemCount, + itemBuilder: (context, index) { + final template = templates[index]; - // return TemplateTile( - // key: UniqueKey(), - // to: template.name, - // amount: template.amount, - // from: template.cryptoCurrency, - // onTap: () { - // _addressController.text = template.address; - // _cryptoAmountController.text = template.amount; - // getOpenaliasRecord(context); - // }, - // onRemove: () { - // showPopUp( - // context: context, - // builder: (dialogContext) { - // return AlertWithTwoActions( - // alertTitle: S.of(context).template, - // alertContent: S.of(context).confirm_delete_template, - // leftButtonText: S.of(context).delete, - // rightButtonText: S.of(context).cancel, - // actionLeftButton: () { - // Navigator.of(dialogContext).pop(); - // sendViewModel.sendTemplateStore.remove(template: template); - // sendViewModel.sendTemplateStore.update(); - // }, - // actionRightButton: () => Navigator.of(dialogContext).pop() - // ); - // } - // ); - // }, - // ); - // } - // ); - // } - // ) + return TemplateTile( + key: UniqueKey(), + to: template.name, + amount: template.amount, + from: template.cryptoCurrency, + onTap: () { + _addressController.text = template.address; + _cryptoAmountController.text = template.amount; + getOpenaliasRecord(context); + }, + onRemove: () { + showPopUp( + context: context, + builder: (dialogContext) { + return AlertWithTwoActions( + alertTitle: S.of(context).template, + alertContent: S.of(context).confirm_delete_template, + rightButtonText: S.of(context).delete, + leftButtonText: S.of(context).cancel, + actionRightButton: () { + Navigator.of(dialogContext).pop(); + sendViewModel.removeTemplate(template: template); + sendViewModel.updateTemplate(); + }, + actionLeftButton: () => Navigator.of(dialogContext).pop() + ); + } + ); + }, + ); + } + ); + } + ) ], ), ), @@ -507,6 +509,14 @@ class SendPage extends BasePage { } }); + _fiatAmountController.addListener(() { + final amount = _fiatAmountController.text; + + if (amount != sendViewModel.fiatAmount) { + sendViewModel.setFiatAmount(amount); + } + }); + reaction((_) => sendViewModel.sendAll, (bool all) { if (all) { _cryptoAmountController.text = S.current.all; diff --git a/lib/src/screens/send/send_template_page.dart b/lib/src/screens/send/send_template_page.dart index fcda9b7af..37708fcb2 100644 --- a/lib/src/screens/send/send_template_page.dart +++ b/lib/src/screens/send/send_template_page.dart @@ -134,7 +134,7 @@ class SendTemplatePage extends BasePage { signed: false, decimal: true), inputFormatters: [ BlacklistingTextInputFormatter( - RegExp('[\\-|\\ |\\,]')) + RegExp('[\\-|\\ ]')) ], prefixIcon: Padding( padding: EdgeInsets.only(top: 9), @@ -172,7 +172,7 @@ class SendTemplatePage extends BasePage { signed: false, decimal: true), inputFormatters: [ BlacklistingTextInputFormatter( - RegExp('[\\-|\\ |\\,]')) + RegExp('[\\-|\\ ]')) ], prefixIcon: Padding( padding: EdgeInsets.only(top: 9), @@ -210,12 +210,12 @@ class SendTemplatePage extends BasePage { bottomSection: PrimaryButton( onPressed: () { if (_formKey.currentState.validate()) { - // sendViewModel.sendTemplateStore.addTemplate( - // name: _nameController.text, - // address: _addressController.text, - // cryptoCurrency: sendViewModel.currency.title, - // amount: _cryptoAmountController.text); - // sendViewModel.sendTemplateStore.update(); + sendViewModel.addTemplate( + name: _nameController.text, + address: _addressController.text, + cryptoCurrency: sendViewModel.currency.title, + amount: _cryptoAmountController.text); + sendViewModel.updateTemplate(); Navigator.of(context).pop(); } }, @@ -249,6 +249,22 @@ class SendTemplatePage extends BasePage { } }); + _cryptoAmountController.addListener(() { + final amount = _cryptoAmountController.text; + + if (amount != sendViewModel.cryptoAmount) { + sendViewModel.setCryptoAmount(amount); + } + }); + + _fiatAmountController.addListener(() { + final amount = _fiatAmountController.text; + + if (amount != sendViewModel.fiatAmount) { + sendViewModel.setFiatAmount(amount); + } + }); + _addressController.addListener(() { final address = _addressController.text; diff --git a/lib/view_model/exchange/exchange_view_model.dart b/lib/view_model/exchange/exchange_view_model.dart index caca84b83..b6efa310f 100644 --- a/lib/view_model/exchange/exchange_view_model.dart +++ b/lib/view_model/exchange/exchange_view_model.dart @@ -27,10 +27,10 @@ class ExchangeViewModel = ExchangeViewModelBase with _$ExchangeViewModel; abstract class ExchangeViewModelBase with Store { ExchangeViewModelBase( - {this.wallet, + this.wallet, this.trades, - this.exchangeTemplateStore, - this.tradesStore}) { + this._exchangeTemplateStore, + this.tradesStore) { providerList = [ XMRTOExchangeProvider(), ChangeNowExchangeProvider(), @@ -54,7 +54,7 @@ abstract class ExchangeViewModelBase with Store { final WalletBase wallet; final Box trades; - final ExchangeTemplateStore exchangeTemplateStore; + final ExchangeTemplateStore _exchangeTemplateStore; final TradesStore tradesStore; @observable @@ -101,7 +101,7 @@ abstract class ExchangeViewModelBase with Store { @computed ObservableList get templates => - exchangeTemplateStore.templates; + _exchangeTemplateStore.templates; @action void changeProvider({ExchangeProvider provider}) { @@ -267,6 +267,22 @@ abstract class ExchangeViewModelBase with Store { _onPairChange(); } + void updateTemplate() => _exchangeTemplateStore.update(); + + void addTemplate({String amount, String depositCurrency, String receiveCurrency, + String provider, String depositAddress, String receiveAddress}) => + _exchangeTemplateStore.addTemplate( + amount: amount, + depositCurrency: depositCurrency, + receiveCurrency: receiveCurrency, + provider: provider, + depositAddress: depositAddress, + receiveAddress: receiveAddress + ); + + void removeTemplate({ExchangeTemplate template}) => + _exchangeTemplateStore.remove(template: template); + List providersForCurrentPair() { return _providersForPair(from: depositCurrency, to: receiveCurrency); } diff --git a/lib/view_model/send/send_view_model.dart b/lib/view_model/send/send_view_model.dart index eb4ec2f4a..3cdcc7bb2 100644 --- a/lib/view_model/send/send_view_model.dart +++ b/lib/view_model/send/send_view_model.dart @@ -1,4 +1,6 @@ import 'package:cake_wallet/entities/openalias_record.dart'; +import 'package:cake_wallet/entities/template.dart'; +import 'package:cake_wallet/store/templates/send_template_store.dart'; import 'package:intl/intl.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/core/template_validator.dart'; @@ -29,7 +31,8 @@ class SendViewModel = SendViewModelBase with _$SendViewModel; abstract class SendViewModelBase with Store { SendViewModelBase( - this._wallet, this._settingsStore, this._fiatConversationStore) + this._wallet, this._settingsStore, this._sendTemplateStore, + this._fiatConversationStore) : state = InitialExecutionState(), _cryptoNumberFormat = NumberFormat(), sendAll = false { @@ -88,8 +91,12 @@ abstract class SendViewModelBase with Store { @computed bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus; + @computed + ObservableList