From c08f2c1667ac4ad2556edd250a67c5feedfedcae Mon Sep 17 00:00:00 2001 From: Serhii Date: Tue, 3 May 2022 13:44:13 +0300 Subject: [PATCH] Cw 55 allow saving templateswith fiat amount (#343) * added xhv logo * Added prefix icon widget * Added sending fiat template * template for sending selected fiat currency * fix issues --- assets/images/xhv_logo.png | Bin 0 -> 20464 bytes lib/di.dart | 3 +- lib/entities/template.dart | 14 +++- .../exchange/widgets/currency_utils.dart | 2 + lib/src/screens/send/send_page.dart | 24 +++++-- lib/src/screens/send/send_template_page.dart | 65 ++++++++++-------- .../widgets/prefix_currency_icon_widget.dart | 32 +++++++++ lib/store/templates/send_template_store.dart | 6 +- .../send/send_template_view_model.dart | 28 +++++++- 9 files changed, 135 insertions(+), 39 deletions(-) create mode 100644 assets/images/xhv_logo.png create mode 100644 lib/src/screens/send/widgets/prefix_currency_icon_widget.dart diff --git a/assets/images/xhv_logo.png b/assets/images/xhv_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..118c920fdc4494b0f3c7b53dc493d39634fb9d7e GIT binary patch literal 20464 zcmXV2Wmp_dvt68^ArPEk!GgQHh2R$4Ex5ar5Zv7%xVtP)a9P|Pg1fui;r;H9g=c4{ zr@O1Gt4^KMyCDj4lBh`dNFWdhRqCsl67b*e?S%*r{OuMn7zX}9IVwqtfGS1__klOC zX2P<7luwwyyhFZHnYfw@gjlxa?bm`9ekpT-IiLvwk zlCvl4nx*wGD8SH=jBT0`O;A=V`|6WdD-Lb#yZ3*;G&N_%Y_72>`q4pez5mwn-v5XZ zC%gkYiz}wvx6kPOD@<^31S$*uS3c|(LupwOtdk!3O-uJ#aRnwNk*I$-O?dnRXnKMV z$_=`DBU#tDe0`ulnhhv)^c>D`P??>x^KffTk%IY%Cg3#B?| zx7&+&^PBzIKT<+U_Z2iFyEe521;4snYX?Z9f>yjeq4vI5T~BD|8$zU5lYe8Gn4E0a zOxepKTdgcoeP(hB1yw=Q3Z`4Ceo;zOV3}s5o3tA6{DJQGiRh=JeKP{0)iU3=+#K^e z5p>6dP%LU$PV=EGCztlFV)#yI{_*i^t~$#B)h{kWH0h-J2meMu7;QDmB+be5Vn_Pz zsgORL;AmO>sk&rEViQCO?=PzghsKMSr-Y|d3kiR+B-fGod zkOCGVov5x27AmN&5zi-sIchoDB*4#M-!VCDDB2R1gV9eAjCy}TmZ-ziT1L9ACjIFQ z85x~pYv)KzBM~D&8~#jkyLOQ1Yo1lTFIBan*OfH(`)RIX{53mWWWq`QN; zkN_KW*Ui|=h4glqiXH8Lv20%6Ui$i3nb|WxzOi59zXh`l>0b}zqfk~}#?*-7Cyuj>yiU$VpAEj^zT8oo?! zGx3{zO3D+Z!NTwtP`6WhMOIq~6cuIXXd5=YtJ+JomE2C$=X)Z29c(T`CYl3>=8ApNb@hTehPaj78g9w@Gd4& z9JuHY(>SKgJM+m_R2&M@1;~1L&+pG*40UI+g@1x7ia!kIf}9u~C$6J* z4eP7ek+__$aIF^Ge@aj8ue1>?6D@^H&kpb-QB%_exJxJ6OYzXBvIn-mi?ScYmz0D` z5QaF(ZP-49XxD{&hS9fy3&OWbiKSESZ$Ke&K8ANQm{ehqGLssj!yPY0NGgk20*&gm z!a{fj{!;8$4e1G-(lcm~7eayH$PupuXhcP6bo_*Z?}@zPX>GGNt>z^(kivSDKB}05 ztX2eW9@)M28>mDUL!8y%I8goIe13@3f{Qi{^hXj=BJdZ|%W8r9TCiVY@av8G(>nW> zz81c#N%_-}4;4(n4y9ZD^-CtwM}4oA=5kB>YUsurkmjY`<}m@gC1?-sAb$D_(O@r< ziUr8Zx4lVRtCu$WS0q@KPN5j8svD0f;H>8Po*gH#33+z*+t#0t33wm_D#x>$&?F%t z{o1CFJ8)lc{oE*{f{2IzC}9vn>XFO|)kqapxZO-hyGd;o zK%G^0JafyzDeLN@5f_yEhhu7JlSgECYBHS&js;{@TFPfRzx(C#JCewj;Q(w7Iy%yE zdJX0AnNg&UH0pS^Cw4lxgl*-b$E!&C%A2K_J0bMikE#E917Ug*>=t@oMwpi*MD}xZ zd$}L3lp&ke_v(k-vk!bGKK~~VG$MFORu=Fq2iH+x!);waqIjsClx$4tmay>`TXTk^falE|vF!}T_%{O|JqwJ-C@Iy{s99$ZH{K!P% zh%hxA2@1~A6dg|e_r5EaJhP^TMYkrx@1$LFZuIQmETjJ7FMHfGxC=8Y$J{yubeViU5Z9w)AvuwR2IZ*_%0RFKW|N`L^Hm^(btgm6s9L1yfZa4 zgG$2fTDz2KB(GW@tT@$XobjS#a%^DS8M=^WOYzHFv~1 ze$sf3HNoB*D^%>7E+RJ=tgXe~CG5|1kdni61NL2VcAMI--PP|)cdxR4L@PwuKQYHZ zsO)&CnO~C*tiOZo^BNqa*>*1=?&g_?vwS?xfDU`#om2>uXMf)2=LVpRB?I z^Sh8pt*~o@`fp-1Ori!*(`m}Oz;12;CT;NV7FEv%M{91obU~Yz_{GPE$?8nV>3U3h zl!B?kcvt9R8LsN#Qr2ew@)fP2%lQYWn&2$#1mYY@%ECujAWs;iBaS`+^L4whTXH>N zOT+H$OtB&c-85R~lgInj?OoQdu)t-Gy~De@)Byz z^~8{qd{!S(|F-#edzi`bgtyA{pQ-&<8cxVbxc^q(yYc%jgr))ubuB&oGU&i_ijZ~MTt^M)hF;Jn(3lS zSApsm!N-Bm#Ci!l*SgI^d*d9R zc4RzJ|BB>Wi+o|n)t?Ae9dEugs`{XnvTUyD@|n=_`mxbA;FAuI^vUmetef>1qnz9E zjch^tSWD~N2}Jdc6@B7%>`Nd2dK-7QAmr=?XbQU&>Cm6zmvo9#q&ZPddvWDY37Clm zM1I{eiCx2KeLLWX-9PL?USece5uJ*v2!;mXvRB-2M-II;HJo%l?} zE1ZY8QsBI^h)4@87Bqdi4d~O4Vdl>l`m2mb>Fh^^k;<}O-JW+h17hH$lfptMJcIk^ z>dczw_mcys0#cB0s;FOK!9S~DG13P1=UFk@UwoqG`-h}fim2@`5tb0_W zS?~4;Gx3;*;)c2L#V4Ax|E0(oS8#)ZyB(8unCI@2{_aiYnVJZv!x)K+hS0tU8^Yf# zo!KJjxVuBA;<&aWK4us_u7^;ToVE!om|$WL{F)k+R=oFxI&w#HntdEUWs8S5a$R>qp^~wN zhGnaK4mo}-9or|j*1X;9-B7BOQ?)VUnl=~44X5)Jac=SV@vT;q z6>E7zs7FFw$(zS&*a=qot03!AHHQeZ0G&SqT9r6vGj8t(;-_mHTfc3o@7V8MU)i+) zcZTHN;7T7Yp3#g*XIiMaD8#&P4oiAr17!!$H7e33EVp_kGtq0veD-csd+-r-(Hy7& zTY0|*87?joFe%q0ynzv*hQx%^>=dsgb3XR?v69bAC$B|*@)`%7CaAv)TMetY2D^Xw zn1J4|qhyy%)mP&uEDkDs{w`6QqRJYx`0aD{cr*pUur3XiSU3PJhQ36jL0o2Rp7r+{Hc|Nzc{wFjjAh(&@Ye6r6 zc@c)>t#*x9V&o;O-SKmFZ63f`{b!gz&*n!f8L2Ia?2!=mv3JTyc#Q zPnu{vZ52gati7uMUSvbuQ_ZA zN_Oheei%v36i-Q+YZ_uGslQRg!JNZc`-}g?>axQ1;r%-L^&f55Z_k0!NxhE0kNoLj z%z`AO_!*0utBlN!1iA=e99V@q{wP1lY8!FRyf}3++Z#i|-&XK`3Zl9$&A#eQ zj5n~ixn(X07XjV^&EC?(N%<2=x+8fc)$QpsZ__t%GWB~sC1S@`R$v`HQO;b4E-JM9*O^cy5hbo* ziN<%o@-~<5D1|ckvcP-hhI4aMXz#LV;}-|9nXkeJJk&fsU%F=PUA#w`(H5vQnKIx5^+7D^Z8oip%?eaIP6P$-}SXFSOXx zde|BL^jQdbb5JrHdHTxS8d4)3C`^t~rR z1uxQeQu-twPk!XISe!52wZJj~aSBJhFGKzI8MbeOpcR3A$SX^=n`4IX?@*Q+V&8S+ z;-6!=_?O<;=stU^Iwq8e9Abgr_H8vecBqFwM1D6vhaycBKV(kT7#evy1GT3R+YiJ# z)^_Lp+kqBX54gu$qWQ(SP|51&V>X8T&6J9IBT4IVaQY(~><0x8+>R^L3OODF6P(SY zLNf%$wBoA#BH?2gUw;27<+JJb8Keelh#ib!$Zx)1CygKBV<7&qyod_EBw`O4bqQTc z)j~G<;;(YlEvCIstnA2Zu&|a_R*!tIG*P{@DA`JehEIPU|%rFW+W zgrBKd$h0${{K9A~OtC4VQTy(_4{$-F>rOo8y=HpjZA8uEVYcn!gEUmrc>K(Ld#@Gk zq1f_iGE;r+a_9D{Gk73sx`dR#(FKv$u7M^V)E--NxEWZ`cGNL%ka}XIAsqhe5OSTx3tjW2>AmIHG|=`#Op2)sw$eu2l7YS%l^-i1pVzP7g0CzqGtK1X zOLz44qceE?gG&hi(Va81V~LZLRsv-(IKwpVsDo>r&#=(n?47q$2$Y)_iEo zHTa@*eNSkbKXZJ~fC8=2YX8<{izeT+m^BGkRg?uu$C0mBa#$BU5}yc*W_gFa2so){ zOsF0I!e_fYX5OjYEIpV}R0W;kq~x$jtJVtP5R>v+MNDJ(@>&IRf3dNb$CNRGrj`vHm<)rji3sPNCiSDpH!&W!w3W?U(yGhpC9Y&s zTbWE*u_+ua*P85;Pn+zi7N<+@7 z3@k@_pVKhv+|(}e&UlX^qhi8P!kgzg1AQUGI~ZT{)CXhuly*5Z9L-D7x7;$j8b2Ja z3#-l~XgqH#z@~ncy6^}557pX^cQ&3=Zb`85896SrHWn9PkJmSaf zc=2CBX~WtTdJWOd4Yr~t!|{q{SDy=0BC>dXo>;8-?=Wf!FL1m0BL~1MFQisN!z}3c z!3E8N);(XX-4MJR^f@9tJU;7a=5(UZF5caRu{*h@$z44i8bO@@LIpqqYp$WkqTOMf zK_H*+mEUDG`K(#!Q+Yxv%9OQKudfeht*8G;%O9}VQ6DeXs;NQ+D0VGqDv+>_etiv6 z0i}ZLMBqHG2Qdm8#iv*NMT7RLaddMEfS{wcX5Hs#i0JV}>(ZMr-IgTid$~pi#+2tL zI6sLk$Bh%B#fj$pOLL*93an4q1*3a3hg(vqe2!@BHY*_o5FP!KOgIorhz55`b%}eT z7YsNY()67O+7Es3zULysoIApNd3bDMJAt+s*lm{~YHtC+{FRCS{@@3X!%;F145$z* zzWRQxreWdz07&3_t|nodpbtuUGJAwg(~X7d%-qdN$aL|VzQtUN;B&QiPziLWJJP_s z7fgzy2no#HS1Yi?)mAjr)l6vbmHyOgtO3^5m!MCPguHTNkv?%J7Bl_=TDKILm@wL6 z!gyLj@|_im2%vR}oE*~Wm##;1NUS@XgTCN#7UuBo-&00)nTRE)ymwQko7~JoIony) zyKoL}US8sTdn_}sejj4TLbe@}hS##bowmQE-VEyu?e^$dFUml8T?-Ay+QbmhJ}H@j zvYCwghRReSQ=`PBEri!I7@+uQFDc8vmW(N3o&#;6&TH8AV_8zuo_Ak8vZWax_5tp| z6F{E(xEbp$4_NgvKH<%`sI(XjA8`~hOAP1xN|-ffZa6n35d zz2ue?4-jz9cw*{zPa?d&lhnQ^7bb!hg4#m7%am{p#W+XUX$W@sRmO_fDy>%WM}mH7 zs?=6C`wE4R3jQp}k@faShy$gK*bC||+DlHm@jEmml__yY)+g;nxiNBfDtW7XFY9$) z#M(nZq%A0dt&nZwrtWso@-tsqnFZ9-;qnOoqX7Doj#?^Tgn)K#1h9}H~@!S}Tv6X)eHy|&2w!?k8X z0j&_XehBK1nN|(9mjs+5CGoa3XD6`s)qd*rbd`yx$H_Hwyw~P09+=h7m1z=czze~%ZIeP?OB0)W-ufGJ{7@((#VYySCt6hJ z=F4W-swkA7Vf0k;V*L*}0s(C+m$GKSB1uV-Q#%aVODDFnajRLf8dUNntn0EDy#nBj zo!=kBAm|P($xxxe#YgNJXvQrNpFjYEAYFW~TgJBEUQS`#hA67Em8^C^Uwpq>tnA2< zDCZdu#?fP6%Y#3Sn}eXv=~}nzkpQ-F>D_<9${si(ZJ2tj&O|c~I$k5|1eZ13d(8|p zvg$S88=pKnUB2oRK09s_wcIK+c6AqvuKCxQ^vm&4-C*FgV@kHk5Rat@bLzTA+{~fI z3m`o6;tCKA*bww1;*C0P&D%R-K8Vu_D1K}UOrVz*^|;LjaG!GHjdiiik0PGj!uV+w zk8?=lUgiz@MCe#Mldam%+d*^b?oa!&mWd;|qvgcYFU|g)_NF($@OC)t*5KsgmQLDu z4`G_GU%s;$y^tMei4Mh#w7Ih9IZNXtBYUY(>*@ZNvDtj@kuJH2dUc!AU4pdg0!g_3u^&#u<~q5gQYz6} z0_`@Jvf#-R9T<8*3tL>y>zZ<@N{oM2#I2|5n)JO$C^ySH_B$lY+9s^1rA_Lwcy7GE z*m+EHuYb*_-_ek`*vnkp<1)}}Z_2%PuVTptKtoyF8EvntH9NmB9HMz{#ssfMURT+6 zONS<^TZu|o@6*+7f|_jhy$+W0YZqo0Lh9H&j3%*~TV$y;F9r+$gJ*u6gS$N!9x+ku zTi3ad&M+Qate&rJCbB60gvQ2aqnb@Ut^EA<4>HG%D{*6w_^S?><>{PLgd5tr;8>nq zDsJe+B{B}1l^9(>>mAm42yV5(U-K#DCQEcx*+RtY)Egbql_ycFAf&7qM7+ce2w2{b zjBNVNcL`0z=OqTInx5IL%}K243)XH|aL^>_KP5HQQA^)>2dUn&M; z;~+e9>t8@)VVk^b{fSU54t;()A+QzT+*kOf3n;w7UO5yEQ}I(6+jU~@D+A`C>XfST z|Meho;sEpzwX7h-aA5DcB**5lX?zSU;I22PjxQ0t=PSSCf(Upsaa7Jaj2h?0&E^VM zT80%_?4lWb-S?V{ZYImFwpgMBt^wBK-lyyLDaX_^`ZW{IN%dc&LVcGnKl%Nwj1Y~H zS+Yb0rZXNQ-6lVbkybVxv7}z~QEPJFdN*(XJ_JCUuhp9HvBz!U=rh7pgHDU;$5#4^ zq3s=)RANY`jZgAa#*@wo&kx-CquDf{hi7zExQvV;{V{sWZXpt_fh=F5Y$$m?X<1(9 ze2C!lpJy*saM)-tl=psG!f??F3I5C_JC-NAg6ka4O5Vr5@c zQp%F~fzQh4!u0H<{>Z{NR30UuCu`HFl>xN^^urn*f|*IGC8Q|- z?<;p?$5o_S>j}C3ndRg3UR->SA48}e>TxyQedn^Brgqm*pgQW;uV2Ya<`uepbIWqd zx3|bOjt)Jimq9zH*U5v*=jrpID)64rDe85*w0mC#s9ub(H7zC^Slifk=pU%K#etCF zwMvylug&KCL6-RTH+R02nZxH=n}3bdbw+BA#&nVc>)ya(oCvB-#_q=fF&(o+4M=^T zPt&bl?r}V_EgA9ewrcBaU-b@9)T5|=LfX3jd^qT!LHj*yG%kIMcDz^l6M^3GuvV!T z>FTc2=Stx)(J=3y0^qQVwMn|49vklc-!&F^OET=7_hi3J7tg@#WPDtqAi7J_B@m2B z^m;13q22B34aqc+(cGNv9}$YIP_&J`b6XhWgVBu1g{F170?>6%W(M#0nWTrZ4EM9` z{6Gs9AcV+G38?FX+wx#Sv{!4!x-<4B+WCvMRpLtyqy=13pI!)4xkO(RF0&E2veKK) zv|g3Tw^BB|0thdZkhu9M19 zXn7v>79}O^4vv?5|7I-r>KiEyO&Ul(|5mB(K?J9n{YqD`&B3*-XB`9G`4cV-M_#4m z{45&GXiOt28{Kl;v~7Ql(fxGG@q9LH+r)oN4j8&d&ib-BhIq@#*HKfKO7OM4*UR&v zRCetjWIwwXC!f;B@)VDBuIRS9X*?~>8AKe{h`r5La6+`CVJJxiUfv!y>YJ*O7wo;R;i+R+Tb|5VHj!=Dt6J}lI`8w2#v~pQkXoue_W3w)Jr|6g83ADh34FlE z7s=4#{~;${tkB*HSji@A&wZ5>Iqcyv8f7hLsez^Y4#*y=Ginm1*lmKo7!fH?neM1i zc5;?eH&$(rDkQ!X(DyEvD1J$UOW_eVZ7G>}9P`T|QVq_OyRM8{_ju2?e?L27U@vFh zpmsC8h4>t^Ak-Y7@SS*RW=@jQY01>}wj?{2S^jwlFNc}*caALj^bFQPq|Fw$T5E(A zq)Wy-jz6_tm~s+oyx<=OL@f^DSdX=^pN|B!fVDYTQCdv1h|-9yE9rebZ?FHH8ZF zO{o2PvDsbO!{+Y&vFmholt}^u5U{tmb|%XL zrT4B~S9{TP?d;QElbg+!P&2h=*$-a-;_4V>f~eu$(-cqg$ba4y99GV}xM!JhPdZ-> zH8n!qa{zxKxZsIdA{%nwO;%RVmpvBKO1l`6r?|8xGBQ#zpJsDrRhl_>$8?c$jeRe(Lb2#E^<2Fa~t}^CM zY`G!@KPsID@l0gvu8e?to29v9zWpm4&ECJn)(1;dCptpoHJ0U^ZCUqX-?A~QNl$uH zQA!D%rZL;*fSvQT%b>hObvfxzTl$y3DYtu9^4_Z(t=4?paWtfhL!z*srMGOIh6^O+ zoi06`%f}%mmUCTp%B9G>Ex)%Q=jZhZ2h(C^-roOimD_r{1U{B%WN#9FJd}tX&J$og zKz(pN714m6jyW4?gQ<#>B4?#`lX8iJ+o|3ZoysU~prd`u#pIyp2?MOjGzfa(TbKb}C<(w^ID(e@ zGFA*wW<^@G{+R?EzfRgpbKcDHy2I~6bd}@v37P-( zfot(L}!0)2U|ECH2+Q^8>xkJx!t%T*tbZO$TmUBc8LjdJis;KhrNdJwCz~?N?M&C1^%VzK<%X5;H?C=0nVaMPx8$e3k;poMuHkG%% zg-+iBu04xc(jNm$6As|vq))^WoZ6oCZ_)cyt8O!HYKbhscHmHg!Ih?vS;sfw$N%dA>8oZ`|+})(Dg7sD~6=UyhslcZJm|2tr;T>2d zXF1F5`66)Vgr~Wqj$+O0n0HgkVj>^M`eh$S70xz{UM({76VE`ajV7mMNy$U3?V{k# zU)t$9QJl+s!HmJ@KfHBT!g@YU!He~sr9wPB30)SyWRj!J?MX>VfvVOrX|yl~=Fz-E zvN|1y$MizQV!4_8jZUVUTqg(k3R9{Mn+0h6iH^z}Pb@QI(+N+<9mVd%WAnvjIL%58 z20@wO7A@k@^lx#J9TqmTP#!=BrX*ora@SsPr7<0K7qgq2=5gkW^K%fb8J@VyknPrS zN^9OUN73r9KW)+ug6`G|92hYomI zyLQ>8@r~W(b>-)MkZu0w-%w|9>``7xkOq-}q%Mo=RjM1duY6LLd$p$B&;wBGrBYHD zc{II{OEx5ptzZntM~IPMK>M-Hbo;VBWXfzpr<`Xp{64IzDJW{-aL3>CRk{=h0>IQ* z+rtAH0URISF2l>_6eep*lijT%R*&WqU7gg|6WG-28}$-Za$VJ~Z*nG8?&z#^6({v* zLH^epY!tTQbET?rnFIpAQkUI%@qT--3n>E(`K-?~YTMn8R-N^nO?a@km@cP7n>pU! z2-^;^w|R9OkRM#yQ61|c#ZIklE!{M7 z*op&$u*s^`S;+-!(1ERyY z*SYD?5ja^Mcx*n&J=ecC4$60oPxyb7@OJQ_*r=fGoj$LlKyz!P(|6YPW-xSWdghP7 zW4WBO|CL$tYiq_m)lzhK5nii}Z_u~Z(bcgxPgK$_u1{^tC6#sUljtR7N4d8d<7xVU ziIUdso+U$E$>XQq3pgII!zvE4Ad{NVl(z&d*2;ecFgH0Y%U$nk-t+Xo35@B2UGl3- zVl6w*MM-0`*T2Czb*AV4u}GF{3&ZHvFqv+NC%#Qo*2_;nXMrScG*Pn9wxg7HQH@!^ z3|GlodppAE$0P=o^^H5mqMe&Q>(;yJz|k=tWtHlu8UsG*ZjK<3dTtou^39AV)8bZh z;bpbPTTO^91fOLq{2B~r*;3DE(^T3HK9(Q}A35E;cn+tshDUc%y`k2h6vO*B2#ezY zT~Mbh$Q3=96aZ{r2NMo(nc=oHZ3(b%hVvL+uN(o5hp6pg7WSL;+#@><05pHi>9QoX zw3c_FmLPSVj2u1RCf0BCWje2`0^B_0Rxnjr5uX2=kci9eD?mcTEs@E&8)4CB2=r>V zXz!ZK0JM!)JZWM3H6c&H%~ML=vr$BgO-mq9bLv;52W>NK$e5X)?hA2f%bYfnlVpDe z>Vby{uT)K!Q_;2OJIqYX$FE{;T>Q*M9o*<`KnX_kS?qMTM>3MAaAT}P2EyaaiW5{l zWE8RZj{Pld6=8RF{6~4D?>Zc-1%Y}glUlq0uHcfJxk3Dj2n-5emb*-oPn^K~`Doc8 zQ=+}{G`qkLgB-e<|*7K!>n5AJ#cK#gfGBNMD&eY3O# zSMzw%KCC_eFM;Y)F4FdJX-TH>nOs_npN;Lr@6{A$wI>n1&xmMXzv&Fa_%>U1%dak+R!Pssk#i!-;!Ve`Yp9%QeSt9*huaa2Y%6EsB|-C^pvwhchBb7wfGQ z(*#N}Babp);!wo7NAB}Cb_ozeoTbQpQYnwBVG(IUP5bleP1g}@$9ugM^RG)7E)=L6g z0l@^KTNm%(P?bUHr?wSW4=5`;t8J3pg+EK)fdWagF!cbk>^~jY?GV-RTihEz@1aMLRF0x=Y5Jtowm!_6nsosR)BFERRH{wT2#`V~~$!xmy_1Wn=pL@*EAQNB09Up9pwXDkHD ztK2Uf!WmtwV*|_5$qiKc&GjFC-1OK3K6Pz52PiQB1g->xcJ{+*2qB)4mKf-jn%d|R zbu0b3<<@>P`4~OBM@({Rn4FkZZNb9jR%cO=D$y~x1>HS-@yhELKmmSiEQERzGc6ra zpW%}hZbLFlZ&&LF2}=V?1CW=W&wBgWs?5}$8^!rzzKyjB{I)S)jTLzCVh69-0Fuv> zu!&`RmLKC8bC$u4AS^vMw2jjtZfAz=DSr|E=X{r8VXS68l)S%c6py zNY9t~qsN^5%?2FYMmm&(K#AnG;%jaz>~#(&k5?y$m5Kn#|Hfe5lK-c8=ZX_JW^G=D zzbRqR{sYs<0!Z!pBrV`aOJ_uVnk3ccc*@qBSg>UEGPdF_KqY^#Yo%Ce-X))Q?TNeE z)kCQ3;HO`+L8!uyDb_3Q_R?XBPDx|9gMgY3X29h906UuS4psFdKR^fnddr6^YxzN7 z`adUt_*7T(R(NIw@fIWbIcw7?GvW^HKe`-!Fgg+~d8dzuj~*-wOz>RUY@8mVIf)>h zXek&WwVKm(Tk*SYqg(vy$tX(69g;*2#}zf8#H!4=9^h|fNSJHv2O`xQ*F0aqaoYWP zycfvXHvxnWX9+#E*r5g_~YL+TkROmXpWZclb|XbB6i^L_+Pl1C9ozDlpnhFLUr6H{4;82 zFXQ*tYx%Dt?id>z(;c2Tm&f}6qeYemDHsL8#)z2y$bnwyy)bSzBGm>F-&1i1W)eLY z+^647u^)~s0R>Wv$%=QsHQ+-s9>>M~#Ul3?2Pi`08(%~jOBDRm!LFx@qx+n|%ot;a zbw+{Ec4D;*nci|@TFS}!xw!=CeY&yB5Q-`U`O6loF}Hoz_hM1d zSpe#qb-`KlYVk*OSGM82bN3-Ufc_lq z80^XSfLnhuk@P=JU>l%|oi7XO40;XU3PbP{1;`DHf)|+x@GDmvY@<^nAh?RhJCG#+ zG+O}o7u|*n);Fy?kguYxMu6Vylqi+QlufnePbi?oQ~vLakm3mqn9D{B25X_%8iSzT zLLSf$0+p1MXYjmrlmrqb1Rp;Gf=S#-^D#i{!4CutjfhlkDd(+`HHO(O;b$WPbO;a& z#DVI84LEF&(aOJ)YsC9tv+dw0Sx{AD0?4~uYKpA2U;Wc#QXjePCq1?BK!OiW#~%M_ z7}CB`PRBAvdLC#~$sh&^Ji@5()%rjcnn=({SoV+A7P- z>o$~WmtzO63Vm4kVQS2bMH?*}zEesLG>!fi9np)nrQ+H^7;EOK30x6o)G{%u#`68u z>T3IC_epsM8U#YLFr^H&Qh|`s`j8-x9H$nd0S^n%lwz$G^G|OcyMAZ?Ao=$EfVcq> zR!r$^F@Kr(WYKV@Z}1?$byL%vfu0Z41|-96x+|x^sTh!7_ErQPojr*eQ0xUdzNA?I zUBG@!@n=C+t)2fyIPifp91l1L10pGMqlIbvFc80=PWuwcJqQB5x2jQvPfS*W=6+s} z^zDiE4*9PwT#7dfjB2e|E2{{$Tc%|V4=gZdq}36DN;rpymki*%X-6p~&~N_WNZdkU zD#cE{&<)dnqa)c^8M(9|Da_x3Y^P7EVgiPbHJ%+DQI@SdJ3+k9${-8p#zq3B7KW)| zW}12HcAv&5soali;%XZ zoe=pCzQu2Yo;5BQv;xL+sX>D59=?oA0R!@*D3TeztZN-h@|P*zr%~>eM5?4~Mg@Ts zEW{F1Qg%cIP>p#UJ}W6|Ozxc~YNiD#;3g*6fIaJpOWsG9UzFI!!z~2ylUV-;n;yy~Uz+;s9 zd@qcZ_o?fJu$M>q=8S;zj-YInVi^Zd%@?&)f0-01-i|FX+BXwss|?V^rsSpO|51U_ z*p%D-y2&U1whf-7jiXb<^UJ1TxSz)|c)5)P*33QtV-aNeX^dTLT1*4@#bm6bE|wnJ ze_PJSQQbtL7&%yo0|$AdLa9Rs7+_cLNT!lH>}NrLjQ<9>W4F0h^5zcmgCj8uxvBXK z`p_EdquRG5=e_xhKm&olI+-IejOqx#g^-Mg7CZi#k$wLnod^XIVls&1OTpxV{sP!> zE8UE1*Z058pf(sDqmi2mMZONb;MFy(|5FtiSme@?@ORNT;883$f4aPr)n*y5fP3|~ zNwtcYhK=CPpis+rqjH&)%tRnp<7wgMBB};>wZ1GXPw#HXm2C48d$*@@*t`hWU(MCo zlUo2_4Y*j@&hEeJW)^C(Zws8AySmD~;KyCle1*8a5nMBqYu2bX*#N_?NWbO|z*CQ> z{5cim(Ozzot>$Gl(^oLRR08z3PWT!u)!bE*zWJq+clT#%B%d2sj*WiSd>**N#LAFkZn#}uD5#ROE>`Mj~PIT(I7*U zwzlm3i+CkeaOKVG!rYgs_T~X(F?eLPV(c*AI}vK)n>`QJ&oOpA|9cu?43X*YA3|Y5 z*xELYhX!(d()EC47`~eRUfMn)L#tPh)kqTJu+?c9O+Dm%1B^cWfn=k=RStGE_+4_}t=WD?&Q@As@)*K$p$yje6X z*1PTKQg!MB-NykXO~X-=(R<4OuE%({9v!MqvC!cRh=p*wgDYm!<6MRdpg^60gY7yu z=QWjT6vI{eB%ZS^J926So5o;bT#(TC2k+*iC1>rzW+pnk0VR*g$W!fb_#$B2{E)lZ zud!8=9j>+_k;V(rDhy-9LK9j+ zWqQl?p2j?i-BpW(UO|S>T+kYb5v4li;oS`yPqb<(6mRkI>4!^Zsj%GSsGw@sB%SZ@ z1J*r^^DdYeE2}}S1c(-})C+3E|JSpX$3wk#@gIgPV;N%^U1gB$vXqQ0V=dcQhg>9P z(9ISjah!T^*2-!v?#$I&aqA->i#+98AmG|fU)hf7(g1Fen7+2L{%|)=Pgxt^0~UGq+>(yuZyiL7V>Xy) z;tf#3gRGWY4OjUd6bs>1PtAQ14e(dXk+*IvKh(^PIk20m3ngFW%`OJ9qdfP8@!^Z$ zI_b+W4fIKA3cM(*A*f((RDzdkp%oN{ zOI%O#OS}o&;Ep8h6mBR%u-rhr`J-FZB@0-$bTTYbJ}=z&+|oA$ZuroR;J%&W`#!>C zl5~^c5kDD&*%%)8O1Y;hZh_k*f9U&Nvc zK@(S5M&kw`X9j;z|MFDTTxd^-!roPA=WoWFKMVd;B>!7I+C3DcZOp&I7N1lZGo9&F zz$ytA+1C{5lCCNGpxnuwL=MNE0a=`ab$2y&c~l=Q%P^8u5rNc7r#M|wG)H+RZWuo! zwuk^?8Y~4;a*FnCZ2eP+*zrpeFkfn^AA%rLQwt*PGIo?5X+ma%b6ke+i<=|kJn_S0 zjR^UMxf#w{B||3?GC4r23(3qZzp_c8XGoWZpc934xGU-vYVzHJe-ZH z@3k5GK~+o0MP}Yo(wA3LJBe@OpW6o!hYp^9RYqo|gFKLsLXRdRUfmWLtK>BF7IPsajL4-c#BXkvU4dc^W@;UC(m@AZ>;^o2NB zFe1jlH5tb9)$tlTEHYj`^Sgf<-TjVA<7V#54rxGw=^Zi9_r&fO;hVufQL!|!1+m_v zsg>?6`gP-FX-;ie(6#moq&HtN9z$EEF)MCLA0XVGzSdFZg>NZ;RBLy4V15swD8{ncg2=}yEiimD^^7E5nSp}cs=U=+yTCq>ajpxAOs8%S!GG+dN_-4&dsGY&q z{5R%5yL}_5xaeOqstGF}{_=9V_`vY}MXjd>;U!|~&Rf31oi`)b>xD!Hr zG#G))bmnpiGeXHx05~1}`0-}nr-^exM4ZN&pIK8ts2{5D;Ag(YKdu%7W3r@=!c4^N zNr3UyC`0dPZVqK!pR+nqfR)tXS7amQJ@)+dai$g5H3jMHQi^yBP$)v4q9(xlW5>{25$CK z8b{~2#H>;@^DnX#dy$#lE>hNB)BmAt!z0Bn8qoje6&(F(m$gVq@ko-R;~+Ch3HbGoK>IRg~1G6qTs&} z+n4y(WI*Z`^(JdV234XbqI}#nfIpHSZ{T?2`(o}`NPrx?)!H<~n`_!Ql867FZuLWnX$m(cBR3FS3Ic3N4v(XSIV z-|0BXib#0a$2v*^TB#pRXI9}pp0V)5UTZ~_n=P6EO^W%q^y@zlby`s}o!UNv#h2%| zlp-@6931m(&!^*Qy6wE+c?Mu&9$8^Fhc@xgt7CooXEfL2c4%d z{I&ETJOmM)63?*4{pGFJ@t6u-bd7xG+m`;%>7>+%sFN$VElK&+?pRLiJ)MR!c6c)pmv-u>|Lm39f>MfTp9vn+Ob$DCEP0g0gZ1O%a31c?j2Yp zQ?JDZ%}4LFzmSPiIN!*T%dhn| zcar8gbBxKM!*&MTK|z6bK1%$su-GuqdU@R?{K{;OKKW#<-Ja`w^n1Gr&R(L5&iP@k zpL_|>(o-fThGX+rY{Cj;&zzOYEp;g5T9aQ9FZo)JZHp58Sv6+pXc4R z#z5wZlt*xiA+OU7N+fFi3@cQlRF)(7n!=kPm;n7dB_l&5CV2u^*HWN^ap>x8zH7*H z&15hm!n(p6g9|8o_#G8?{+@_fZ?U3c?bYQ1l9-nsCaM}??5i03#8vD$%U|MW#li;@ z0*B#VwmQ{pGh##qw&Kxz%Sk;w9@CJ7t(J35ViY7|MhyeWQO-VuAEg-v8#kG?uR`eRF{Hi#QJcx3fbd z@69E-mp`25zkd4k<7NGs*Ic;D29?<{(Gc%1Hl)yK!sqVSl-H*SB1<-I96&>$P#jXE zhV}0Z@jGj{lwQCLNAqA5o)f!X)Hw+d|^evu7JE4(0 zDN{T;sdVQu`-L+KV)S{-4W*i3<^@J7=k$#%#E;`*zHFh3Z&HshG%hVse7hE6GK>O# zbHyW*(0nRr%hE(aqfhQdsEfvbj4r0WdeM{Ot9m&ML)(PnRAEE{8#7o!Vnq;REzkebE{JbjAYmE0Ed!nQoX&avFFKl6RGYAc?lRNKyo zrnCo2%9QXA6^Yt|2|@O2YG=u_Tmy~YrfIm}XL0mj80o3ich{GPQ0>1vPC|jnd!Q}C z+3LyJ0-7Fgrw0+%)~LX<{iDzrROGmSS9Jht@P?<(jL0mr12OBTfb6tvt>m{#-mR+F z)B3zSe;-lU&+Ck-+F6#Enw7dUsM$89Y62K^MLgLhD0dx+*BJDaQhcJ+rfhffz{c6s z?7sTwoId6nbw6=;1RfUX*f)rZAc-97cR45khX>%i;qJl#SEGxCe~S0@!vV?vKZ^br D6CZ;d literal 0 HcmV?d00001 diff --git a/lib/di.dart b/lib/di.dart index dc6ec367d..c066b6cf1 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -343,7 +343,8 @@ Future setup( _transactionDescriptionBox)); getIt.registerFactory( - () => SendPage(sendViewModel: getIt.get())); + () => SendPage(sendViewModel: getIt.get(), + settingsViewModel: getIt.get())); getIt.registerFactory(() => SendTemplatePage( sendTemplateViewModel: getIt.get())); diff --git a/lib/entities/template.dart b/lib/entities/template.dart index b64910699..c37197e91 100644 --- a/lib/entities/template.dart +++ b/lib/entities/template.dart @@ -4,7 +4,7 @@ part 'template.g.dart'; @HiveType(typeId: Template.typeId) class Template extends HiveObject { - Template({this.name, this.address, this.cryptoCurrency, this.amount}); + Template({this.name,this.isCurrencySelected, this.address, this.cryptoCurrency, this.amount, this.fiatCurrency, this.amountFiat}); static const typeId = 6; static const boxName = 'Template'; @@ -20,4 +20,14 @@ class Template extends HiveObject { @HiveField(3) String amount; -} \ No newline at end of file + + @HiveField(4) + String fiatCurrency; + + @HiveField(5) + bool isCurrencySelected; + + @HiveField(6) + String amountFiat; +} + diff --git a/lib/src/screens/exchange/widgets/currency_utils.dart b/lib/src/screens/exchange/widgets/currency_utils.dart index aaf9ea57c..83c6d0af9 100644 --- a/lib/src/screens/exchange/widgets/currency_utils.dart +++ b/lib/src/screens/exchange/widgets/currency_utils.dart @@ -48,6 +48,8 @@ class CurrencyUtils { return 'assets/images/xlm_icon.png'; case CryptoCurrency.xrp: return 'assets/images/xrp_icon.png'; + case CryptoCurrency.xhv: + return 'assets/images/xhv_logo.png'; default: return null; } diff --git a/lib/src/screens/send/send_page.dart b/lib/src/screens/send/send_page.dart index 070e452f1..791548f3d 100644 --- a/lib/src/screens/send/send_page.dart +++ b/lib/src/screens/send/send_page.dart @@ -1,10 +1,12 @@ import 'dart:ui'; +import 'package:cake_wallet/entities/fiat_currency.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator_icon.dart'; import 'package:cake_wallet/src/screens/send/widgets/send_card.dart'; import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/widgets/template_tile.dart'; import 'package:cake_wallet/view_model/send/output.dart'; +import 'package:cake_wallet/view_model/settings/settings_view_model.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_mobx/flutter_mobx.dart'; @@ -26,11 +28,13 @@ import 'package:smooth_page_indicator/smooth_page_indicator.dart'; import 'package:cw_core/crypto_currency.dart'; class SendPage extends BasePage { - SendPage({@required this.sendViewModel}) : _formKey = GlobalKey(); + SendPage({@required this.sendViewModel,@required this.settingsViewModel }) : _formKey = GlobalKey(),fiatFromSettings = settingsViewModel.fiatCurrency; final SendViewModel sendViewModel; + final SettingsViewModel settingsViewModel; final GlobalKey _formKey; final controller = PageController(initialPage: 0); + final FiatCurrency fiatFromSettings ; bool _effectsInstalled = false; @@ -49,6 +53,12 @@ class SendPage extends BasePage { @override AppBarStyle get appBarStyle => AppBarStyle.transparent; + @override + void onClose(BuildContext context) { + settingsViewModel.setFiatCurrency(fiatFromSettings); + Navigator.of(context).pop(); + } + @override Widget middle(BuildContext context) => Row( mainAxisAlignment: MainAxisAlignment.center, @@ -212,12 +222,18 @@ class SendPage extends BasePage { return TemplateTile( key: UniqueKey(), to: template.name, - amount: template.amount, - from: template.cryptoCurrency, + amount: template.isCurrencySelected ? template.amount : template.amountFiat, + from: template.isCurrencySelected ? template.cryptoCurrency : template.fiatCurrency, onTap: () async { + final fiatFromTemplate = FiatCurrency.all.singleWhere((element) => element.title == template.fiatCurrency); final output = _defineCurrentOutput(); output.address = template.address; - output.setCryptoAmount(template.amount); + if(template.isCurrencySelected){ + output.setCryptoAmount(template.amount); + }else{ + settingsViewModel.setFiatCurrency(fiatFromTemplate); + output.setFiatAmount(template.amountFiat); + } output.resetParsedAddress(); await output.fetchParsedAddress(context); }, diff --git a/lib/src/screens/send/send_template_page.dart b/lib/src/screens/send/send_template_page.dart index a3e0b8928..9170bccfe 100644 --- a/lib/src/screens/send/send_template_page.dart +++ b/lib/src/screens/send/send_template_page.dart @@ -1,4 +1,5 @@ import 'package:cake_wallet/utils/payment_request.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:mobx/mobx.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -12,6 +13,7 @@ import 'package:cake_wallet/src/widgets/base_text_form_field.dart'; import 'package:cake_wallet/src/widgets/keyboard_done_button.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/widgets/scollable_with_bottom_section.dart'; +import 'package:cake_wallet/src/screens/send/widgets/prefix_currency_icon_widget.dart'; class SendTemplatePage extends BasePage { SendTemplatePage({@required this.sendTemplateViewModel}) { @@ -142,7 +144,13 @@ class SendTemplatePage extends BasePage { ), Padding( padding: const EdgeInsets.only(top: 20), - child: BaseTextFormField( + child: Focus( + onFocusChange: (hasFocus) { + if (hasFocus) { + sendTemplateViewModel.selectCurrency(); + } + }, + child: BaseTextFormField( focusNode: _cryptoAmountFocus, controller: _cryptoAmountController, keyboardType: TextInputType.numberWithOptions( @@ -151,17 +159,14 @@ class SendTemplatePage extends BasePage { FilteringTextInputFormatter.deny( RegExp('[\\-|\\ ]')) ], - prefixIcon: Padding( - padding: EdgeInsets.only(top: 9), - child: Text( - sendTemplateViewModel.currency.title + - ':', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - )), - ), + prefixIcon: Observer( + builder: (_) => PrefixCurrencyIcon( + title: sendTemplateViewModel + .currency.title, + isSelected: + sendTemplateViewModel + .isCurrencySelected, + )), hintText: '0.0000', borderColor: Theme.of(context) .primaryTextTheme @@ -179,10 +184,16 @@ class SendTemplatePage extends BasePage { fontWeight: FontWeight.w500, fontSize: 14), validator: - sendTemplateViewModel.amountValidator)), + sendTemplateViewModel.amountValidator))), Padding( padding: const EdgeInsets.only(top: 20), - child: BaseTextFormField( + child: Focus( + onFocusChange: (hasFocus) { + if (hasFocus) { + sendTemplateViewModel.selectFiat(); + } + }, + child: BaseTextFormField( focusNode: _fiatAmountFocus, controller: _fiatAmountController, keyboardType: TextInputType.numberWithOptions( @@ -191,16 +202,13 @@ class SendTemplatePage extends BasePage { FilteringTextInputFormatter.deny( RegExp('[\\-|\\ ]')) ], - prefixIcon: Padding( - padding: EdgeInsets.only(top: 9), - child: Text( - sendTemplateViewModel.fiat.title + ':', - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: Colors.white, - )), - ), + prefixIcon: Observer( + builder: (_) => PrefixCurrencyIcon( + title: sendTemplateViewModel + .fiat.title, + isSelected: sendTemplateViewModel + .isFiatSelected, + )), hintText: '0.00', borderColor: Theme.of(context) .primaryTextTheme @@ -217,7 +225,7 @@ class SendTemplatePage extends BasePage { .decorationColor, fontWeight: FontWeight.w500, fontSize: 14), - )), + ))), ], ), ) @@ -231,10 +239,13 @@ class SendTemplatePage extends BasePage { onPressed: () { if (_formKey.currentState.validate()) { sendTemplateViewModel.addTemplate( + isCurrencySelected: sendTemplateViewModel.isCurrencySelected, name: _nameController.text, address: _addressController.text, - cryptoCurrency: sendTemplateViewModel.currency.title, - amount: _cryptoAmountController.text); + cryptoCurrency:sendTemplateViewModel.currency.title, + fiatCurrency: sendTemplateViewModel.fiat.title, + amount: _cryptoAmountController.text, + amountFiat: _fiatAmountController.text); Navigator.of(context).pop(); } }, diff --git a/lib/src/screens/send/widgets/prefix_currency_icon_widget.dart b/lib/src/screens/send/widgets/prefix_currency_icon_widget.dart new file mode 100644 index 000000000..030c1e652 --- /dev/null +++ b/lib/src/screens/send/widgets/prefix_currency_icon_widget.dart @@ -0,0 +1,32 @@ +import 'package:flutter/material.dart'; + +class PrefixCurrencyIcon extends StatelessWidget { + PrefixCurrencyIcon({ + @required this.isSelected, + @required this.title, + }); + + final bool isSelected; + final String title; + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.fromLTRB(0, 6.0, 8.0, 0), + child: Column(children: [ + Container( + padding: EdgeInsets.symmetric(vertical: 4, horizontal: 8), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(26), + color: isSelected ? Colors.green : Colors.transparent, + ), + child: Text(title + ':', + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w600, + color: Colors.white, + )), + ) + ])); + } +} diff --git a/lib/store/templates/send_template_store.dart b/lib/store/templates/send_template_store.dart index b65362a1c..46d0dc451 100644 --- a/lib/store/templates/send_template_store.dart +++ b/lib/store/templates/send_template_store.dart @@ -23,9 +23,9 @@ abstract class SendTemplateBase with Store { templates.replaceRange(0, templates.length, templateSource.values.toList()); @action - Future addTemplate({String name, String address, String cryptoCurrency, String amount}) async { - final template = Template(name: name, address: address, - cryptoCurrency: cryptoCurrency, amount: amount); + Future addTemplate({String name,bool isCurrencySelected, String address, String cryptoCurrency, String fiatCurrency, String amount,String amountFiat}) async { + final template = Template(name: name,isCurrencySelected: isCurrencySelected, address: address, + cryptoCurrency: cryptoCurrency, fiatCurrency: fiatCurrency, amount: amount, amountFiat: amountFiat); await templateSource.add(template); } diff --git a/lib/view_model/send/send_template_view_model.dart b/lib/view_model/send/send_template_view_model.dart index e52022f8d..7ca2f39b4 100644 --- a/lib/view_model/send/send_template_view_model.dart +++ b/lib/view_model/send/send_template_view_model.dart @@ -36,6 +36,24 @@ abstract class SendTemplateViewModelBase with Store { FiatCurrency get fiat => _settingsStore.fiatCurrency; + @observable + bool isCurrencySelected = true; + + @observable + bool isFiatSelected = false; + + @action + void selectCurrency () { + isCurrencySelected = true; + isFiatSelected = false; + } + + @action + void selectFiat () { + isFiatSelected = true; + isCurrencySelected = false; + } + @computed ObservableList