From 823030403a145fd24010c68efc41d4ea46070f04 Mon Sep 17 00:00:00 2001 From: Oleksandr Sobol Date: Thu, 16 Apr 2020 21:41:04 +0300 Subject: [PATCH] CWA-198 | added transaction history panel to dashboard page; added fiat currency symbol to transaction_info; changed date_section_raw, trade_row and transaction_raw --- assets/images/2.0x/coins.png | Bin 0 -> 971 bytes assets/images/2.0x/down_arrow.png | Bin 0 -> 428 bytes assets/images/2.0x/exchange.png | Bin 0 -> 1079 bytes assets/images/2.0x/filter_button.png | Bin 0 -> 1344 bytes assets/images/2.0x/menu_button.png | Bin 0 -> 226 bytes assets/images/2.0x/send.png | Bin 0 -> 582 bytes assets/images/2.0x/up_arrow.png | Bin 0 -> 429 bytes assets/images/3.0x/coins.png | Bin 0 -> 1409 bytes assets/images/3.0x/down_arrow.png | Bin 0 -> 559 bytes assets/images/3.0x/exchange.png | Bin 0 -> 1528 bytes assets/images/3.0x/filter_button.png | Bin 0 -> 1923 bytes assets/images/3.0x/menu_button.png | Bin 0 -> 293 bytes assets/images/3.0x/send.png | Bin 0 -> 836 bytes assets/images/3.0x/up_arrow.png | Bin 0 -> 479 bytes assets/images/coins.png | Bin 0 -> 600 bytes assets/images/down_arrow.png | Bin 0 -> 287 bytes assets/images/exchange.png | Bin 0 -> 588 bytes assets/images/filter_button.png | Bin 0 -> 693 bytes assets/images/menu_button.png | Bin 0 -> 165 bytes assets/images/send.png | Bin 0 -> 378 bytes assets/images/up_arrow.png | Bin 0 -> 292 bytes lib/palette.dart | 3 + lib/src/domain/common/transaction_info.dart | 2 +- lib/src/screens/dashboard/dashboard_page.dart | 33 +++- .../{ => widgets}/date_section_raw.dart | 6 +- .../widgets/trade_history_panel.dart | 179 ++++++++++++++++++ .../dashboard/{ => widgets}/trade_row.dart | 35 ++-- .../{ => widgets}/transaction_raw.dart | 50 ++--- 28 files changed, 255 insertions(+), 53 deletions(-) create mode 100644 assets/images/2.0x/coins.png create mode 100644 assets/images/2.0x/down_arrow.png create mode 100644 assets/images/2.0x/exchange.png create mode 100644 assets/images/2.0x/filter_button.png create mode 100644 assets/images/2.0x/menu_button.png create mode 100644 assets/images/2.0x/send.png create mode 100644 assets/images/2.0x/up_arrow.png create mode 100644 assets/images/3.0x/coins.png create mode 100644 assets/images/3.0x/down_arrow.png create mode 100644 assets/images/3.0x/exchange.png create mode 100644 assets/images/3.0x/filter_button.png create mode 100644 assets/images/3.0x/menu_button.png create mode 100644 assets/images/3.0x/send.png create mode 100644 assets/images/3.0x/up_arrow.png create mode 100644 assets/images/coins.png create mode 100644 assets/images/down_arrow.png create mode 100644 assets/images/exchange.png create mode 100644 assets/images/filter_button.png create mode 100644 assets/images/menu_button.png create mode 100644 assets/images/send.png create mode 100644 assets/images/up_arrow.png rename lib/src/screens/dashboard/{ => widgets}/date_section_raw.dart (89%) create mode 100644 lib/src/screens/dashboard/widgets/trade_history_panel.dart rename lib/src/screens/dashboard/{ => widgets}/trade_row.dart (71%) rename lib/src/screens/dashboard/{ => widgets}/transaction_raw.dart (60%) diff --git a/assets/images/2.0x/coins.png b/assets/images/2.0x/coins.png new file mode 100644 index 0000000000000000000000000000000000000000..c96e6e48c4ec2fea8f02e1302148928ee807273f GIT binary patch literal 971 zcmV;+12p`JP)Dx9F{3F@*SEo|BokQ+cGL?|q1N&{lmWL2pxO1eN*x*<0pJpo~XO1dFA z0pSJ)HX%)BcrS5UE3%!~p0U(VipCz#jNi|^Z$5`X2ppbWW=w!B;CxL2WEg-&{dDaf zhy6Xtn2nb(}Z&RFBOXozDxfCI8ZTL_|p4ClPOSIFK(ng~Jk`#EH>6)9x~ z+YF<2cB;c*xQ0y(hQaKngy?t`eqa%QsJE$r%McQ{X!%VcTbUZIip2o8A2L`2oxYel zGnYn*`wh-t<7JL5VgN>d|HZ~OT_(X|z7AB;aBAIYJNo#|!n9iq4>F8`g%L^P0%=!d z?Q0>{-{YJKi@^bCgdB~EzBM2?|3ZeH)Z0x=f0JPm7W33@9^6VWBFF0O@nez- zLWq26XR{TX#TEc&x#4>fmkJv-7LtL+0uR#~b$$pC#qJW*@t{#O0E==J4XeqC5St6> z;`J!=gFqRkp!_w>Rb;wTr_UQvS!e{1e^L~5zE|Lp!R_gYJw z+rAFqA@ zG%mv_2=oEPm?Z`S%3d0cpT5K20m0a|A>|sTxwrTHL1^U|g~hzrxtR;I=L)gVTqzL; zQMJ?pAQmc9A$vNYQZ?bL|M&q?V2CbioF?9lO_-n8Qy2#JWxGt~% zqd3Ax_z>WFevo^BfL0Ayd~_Z|{2)&KK`Q}VY1H#XEcO74bIiPIzVy4x^VxeT{La4M;D@!pkoQ4=tfkZ8iYe7T{#nXb&*%>>n#6teq zpdD78jiQYhguC4B&hx#6OAgrOc4ihd=6=b--R{iZcW>r>Z)OjmL4yYW7unIz2|geu z1Q;?rI+Ls{RT5IUNk?MBl`<*l@NcSMj}VwZA(GYh2=H;?>(Z-SuDt{nG=U}qPv5sV zfTvZtoN)Z!4k-F7Ya2-xxH=Z}?(pt?JAcy4w_t(PY0Ob&v82Xmh!tWAEYT9|m5X~# z#jfxREYT9&lQ}U!f)} zuOVo{DX9)T{QBi0jQyf2fsTI1e-GIgC7`xL#x%}jc1 zqqf1eCZJSz8A-`ilFsY9oyUxadL>U@&`plDRH z3*ULhQA~2Yr>ZZ-=8xp&r0}02;2A+pH+{;fKLM8TAT%5ae?Zhltz(dW^i`u>? zlU}E4T8-@!$`&kY{O*zpc%3Ke?8tKq~6J$l^Zq zb{;ztbj@gsw3eZf$qoTxm@~dM%ZDGmYta@mOinv>Xupa;6{`P*G53mdhGWlD$`p6JjQ?2fWPiYLMv zb2JE=m;JY{v_6c|);hv$SzrO%*R4!C7qz{8ge#R47{d0o(A*qZEMpyEvLK@fSM4iz z>4;XDw-#J|h^JfkG0_1 zA6^WYZ{D$^pwq#AN+6Dd8SD<-H#A+s+K1(~Z4W*6V#JQB5E|-vTozQI^Yb*%3%n!t xuhMHJn+iRbkA8u_NtP;J*0Sm~Xwcvv!rU?K5002ovPDHLkV1nw{_eB5z literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/filter_button.png b/assets/images/2.0x/filter_button.png new file mode 100644 index 0000000000000000000000000000000000000000..767e4e561526714275c9167a6635475d8e31622b GIT binary patch literal 1344 zcmV-G1;6@d*e8@1@IzZ zEQqZfF4a!kNOLEDRe-8s>;b-GjQw`teyQLZA*76o@(xaxL1u}-C6+_DGE`wc+maXC z2X5CPMN$!{Q51m7NR?155$Z8gAW?x-n0L+Ts<^~A$yiD^up^?!zVB}(X;p~`)L&tu zghKuK`|~vwx5@Y{71MLWcv&|pK0~bJ%5TT(6c~lHB;tv%@?b|Aj74hJmx1ReIPkFaqA655vJN;0{0^Pj5um+}YG2}=OclU!EpU^+A{-|`)z9WIu zaz;U%2FjgUQrjS{emh3=6GjkbUjujLvNo3rq`j2}?9B$+**sR`Dp_g6QmfWDIe& zM{%xpL7*Vt$%Jb~Av=lF3**Wr7aP7YR^n8Td1AJ4VB2It#+VgkR~*HQT2Yfg%veUo zA;M~7EUF7MZ5LLMZRlQte_8}doj}Bt9$p6CO<#@5ou6!v(1_XrM+8upX7 zC7Krv#u(0bMh0Ws$caV6j~T~=qo5`tC(41_*)~olrX?8VfjR;+SM<3MzQYr-r!xA; z;LRKHmOch~P!Yvc3PFaPAT|dAxnQwAG^w1>z0SAg{hvvzo8{C9-Akzpq;8h?W(vE; z+OxVq>SjJ;0~tr$Ypd~n(_nQH6Pww#B6jl7)L}IVlyxgo>xu4}zAy;0vfO$?r$biF zlLYMkdbu+jJ$hk2D9EhYe}Igk)roP(V~bhdRQKKc-lv|}*BxX4pLyfZ?QF)KYdND> z#P~YG;{Fkb-3f~8tVRzt>_GML#HC@HIx1x6BXP)v>lMs0-rJja#op@4FZw zd_G(KyMwzmbX0Np=GFf0d)~*oRj-T@Kzix5L-*@qX{dlW25EvHj)l&)v% zXYBlvR>lll;0^;aFX=RDm!IpN{Kf)p&>t%D#2lCge%z)>;4v5Hdc7mel^4Wr+J$>e z!2s7{piry9O1CZ*C9xGlal41&b}Q(!P_^W5<6lf}_Ig8;$oD0O#wK}M?uSrG3)Aqu z=@6Dz@p9U^lTNV9MLao{DdQxCIVbf+`OvCNIVrJf-Su9YqC|f0dYQKKi}Ir-AI1{= z5`jDk@*YK8l4~;wBw|QgXLKV0-fkaZ%B3wzBmV)tTlApnVGnu$00000V4T5^Y;NM&H|6fVg?2=RS;(M3{v?36l5$8 za(7}_cTVOdki(Mh=ig1u+{(8uD5zH~%B@@7Pz?l literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/send.png b/assets/images/2.0x/send.png new file mode 100644 index 0000000000000000000000000000000000000000..055ee615aee148e733dbd4e2b827e622529996a4 GIT binary patch literal 582 zcmV-M0=fN(P)WVsK-KE4hK(z_>8P6?y`D1T-v23mxAZ zg|vk>3~9@kkPI`te!usoZw7#jbo=mjNFPuXhm6EHFL7Oe>GeltmAK3R{#6P%SAxhI z00cl;1tN0*Rft>wR3LH#h(J7zORx`sCB(w_6CoHVh#s==Jc|o)5CBAbo-s10Ck8Y2 zp&3T)vRRpgr*+uEG?>lmLetL3oaO?i#Qi5B4zUtF95o|cX)$;GQ3E*dP#GaBF*azo zs?AgYS!&;ZMrsT4PzYk}C8V|qJa3$vIZ22{_wn79ENkZ2Hkp<@jRU}0RY1OM1)7u4 zT&%hP_uPg8&9U_M_4$z_w}48&;QR{;($bv9ati`Y>p($b*a1s(`Mt>OrFrNKAnACd zTCjt#jII#E#i1)FI4`HQuE3+X9W$2z7lFX-g z4{Tb~agoR&K@(gVkm*&c`U*P;<6Sb31Frz+lGwC>8Q=eyrjr!7t@%6%YH82VHw9tF zja@U2o8Mdoq4G|wY{3f`w@b0b)TCJuC&klIMpkUQ{cTtGwk#cEC)Kr3E2eTH4r!;tzC*rHpw|AkG@ATaM~beM_uTXo7gvqZy+xU z*V$M(L6sX2`GaGVGkK2|6GjoOp)?%LA|D_~BT}Q`$2ar7_YDyYq5b5fa{l(M?+H-_ zA-+;dRp{MErF=fF0Q|wt z2Bv}7A;P*+%7bYUmYX1sl<@5At^l}0QBeU)h@%Ujg;E|aFD>-I5^@o=x%(dxgX=bl z8AL+VN^^c6EI^x}&E4Y`oxBc?KuLMi#l?WLHErKMdZ3JvXksxBum1_KXNecgK=g2RU5EV*YBXQ{`Vw4V5kUtN0$pZAE z?@vT1E%3qp-@osI2DG!-qupap?=3KoAOdLo(VTxec;LZ5|5i($w7WOk&4gG-L(`2H+>p|BI%-&ms(0^xWKs%I=NZV-SGkomhdC{r zH4{V$#9Df-VL3rlrtOjtov0T3`|-0yn$vOkQ{7a{^IM9Jy?ejjXe3SNgebtqT64ao zMNpffhUV)JM8v^mbr2Iqg=Li&&^Wqi;iN*=@Bg8nIyE?#axR%#963seC*T-V6fJ8J zL<{u)$psQgds3-=lQRF|<7X#R(pr~7T}-#pc({A~nT(FT97@d;EeD>I-AO9!Vg0*; zv4vvXMy%7vdL#r#S&wxG`!|W+;PXQI?digo=ayDAzt+65g$6|;lPSvOc2WJC0FUP$rFt!b z7^}_s4a!gr)%TGn28qDfvMs9r@e$D2?(%rJp-m9u{?fu8D_>I=LSpk;k^Scc*K4g; zGc(sopKT{!PE9B>0VKq(7uCPsAXEo=V}M>+?!nZAq71{E$s%1q|H;M0eNolV@0?`= z_LssieE#O@)!s%%W=)T0ETKqt!-mP7g`$P1E_h8u&s$H5WF}b8a!uVGVzwS3vg(}! zLm2FzqN2{a%9Iez0y_ut^z;^QbW*b(7s)AWna8DPxsq>^E(J`>-lBvkI}iL$1Xo0< z_Q4=b3(?QeCqbpi(7DMh z6er4JCQ+bcITkqOvlhywgNlT!LQy+{Oc>@8@dc&#-erclNyjoLc$`}=XJ)q3=|7Vo z7YuXfgraMP`5>k$6kRmTZDW{Fj0tkpFo%LMR45JrT{g_ue*11KY4fv5q<$9D3qJ3V zP9hXXxtOs~bm7U3q2O^*R!N$PkmQl7zDT4@SGZ6txwxCau$aN0I9wa1fZ9Ug7DfjVRA{6kV-@l6L>e+7si`E{{+&{p7}&;P7sx?_e4% z6#ErDzp6zE#eqIP!nHcc1!UG@F4RFT09`iBZ9Y+-1$5akUmdY6WCJCa4Rde+C6^6z zZ~!Hj4Rde+!sRC`zyZX!)m6jX1$+^TBk)BijsWVOmpo*r5U?ZhKDNqWO0;NDH@b3a{ z^h>n60p>id{OKJ2AdR5kCZqu(g>DQkx*OUx7|5;~LGNbeKaas;c+D}dJ(8^$MScQ) z=7U&wBPC!Y7g&YEC_1(mKtfNs%94Z%9uwfvH literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/exchange.png b/assets/images/3.0x/exchange.png new file mode 100644 index 0000000000000000000000000000000000000000..52d78d21ee3aa73f1b5a63d7882cf5ae6de35fa6 GIT binary patch literal 1528 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 JPDHLkV1mN4hw%Ua literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/menu_button.png b/assets/images/3.0x/menu_button.png new file mode 100644 index 0000000000000000000000000000000000000000..97f28ae94c13c3d4ef3f87db32a2a34a8ca37e47 GIT binary patch literal 293 zcmeAS@N?(olHy`uVBq!ia0vp^oItG0!3HF2);Jn~1PVMNiy0UcEkKyjb(&!UP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{w_}!$B+ufx04p~9WoGTTfhCxq=^DeYm^Rt z^a2PfFD+Bm5e3Ej+5U74{iCcSYLr_25&zO(CI#_H{7aLX%Wm9%PX z7h>^<)2-Ykk*>A&T@=ru?mV3}4~4Jp%$x0-cG@`p+lRTXeLG$M?P}q8@v$Ms?bwnF z$rEm^IP!jBjBv3>K=X?Y&o=*hs3GS(_vQ1$e$Q90cF%AB$0D+j<$u7}b@pwRj!8By mH-e0UjsEvdIU_jvC!6igBTm^%V&4LN!QkoY=d#Wzp$P!Sc5(Os literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/send.png b/assets/images/3.0x/send.png new file mode 100644 index 0000000000000000000000000000000000000000..f77c93aed1beb07e5f3df0daef8a20e07c09164e GIT binary patch literal 836 zcmV-K1H1f*P)Z?#F~I1_)m!WHLag zF+~})JHwRQ8)P#80w85@e(u(UbOs17CK!as8*DJnd72r9${2ej7*k3GdG{%Q9vRB?U1X8@#8Z~?`s5HhBTL}I79zoR>x_s(f&n8UZ|F%u%a3DHY1 zrp4m%{3;Wk4A{a!h#W+Xg9*jWy_71`+uH^Te}Ny^3fSAzo0}f~D$X9hw+Cn@pc#Q? z29N>9`t@>V-`-t2jbf2iK=BvSh$n<7wLbpr*}IMgPCCO9ZU&JIQm>#1dqK1^g(&j4 z8Gz(qaGOg#Ksk@Ddhh^1@nXqV!_Wl9mWiBvVxHr=P O0000KnArmxZgS>$R#GFG_AWH4C6Dpzl zm-1x${xA0Ve89Gg&{O*}HC4cfBUPmEI3Ls0WqmJzy_w26!l)H6pP$mPG)4qZ@tXO1LiH8)MbTR{-&?if!hs!sVe+@6g*^nC3)3Xf9zfS8q6k zgBBN5E!PxQ0Ms~u#asu3qihh8*U;Ns0`YwWge&}kxea0kz{!>I{hV^k~Yq Vz(DgB!~g&Q002ovPDHLkV1hj#ztjK# literal 0 HcmV?d00001 diff --git a/assets/images/coins.png b/assets/images/coins.png new file mode 100644 index 0000000000000000000000000000000000000000..8541ee94243aa3c093d31ecff2dbcc3a962337eb GIT binary patch literal 600 zcmV-e0;m0nP)Q|saq1)R2I53?5k@x?A3&V&V-bymlVvjTBjR8Tlkx^Qy0I9;1iV3c0_$Kx zfZpr>Rxp&Www{EBo^yIWe&^gvVoI(b-!o*IJ4CcaN~M($>9LK3a21gYeS@W}l@2#t z5g|1Ba#L+OP+W?b!a@{Ii`m*TA9E^ObZ}IUXPuebU#V0l%01M|U>DTg-b(sT}6;Hv=Zh`AX%J zAjG%jP=ecPQwbtHz&e6;hN${tVvvD7p~OcdWggtO7TFgBcZ^BJ_U>_~KNwU^A`inv zGeLeka7Jf_Wz`nhM*&^v+t9y|5+}T3z0Dv}zF#^&+N{j0C<@`#(?=R>nZ`1#N#-3S z%Z1id4u|XCtE;Y9(lUncNDN$8pZZNY<0th)cL@KWgL`C-yLvsm%-gatBIsR>6Dw2) zqAn#py?XV|i&;lsDL%6oi6}|%QI*=?Vbg4J3`9%`)^3!*(Famr8Nt?sZSF|#V2d(m z#cbJR%X+}+ttH`F+F$oz%Eu|l^!xqKlwmXoLzGID2M9KgD{yG875L}G)B#x88NQcmR_#@uUDi@7d(Ur9IGk``)6B5vN>7%gJm=@BSs{{DSGit!=ZDz|-X~%! hDtjkCxh?UCv3_TCTh`*eNkI2Ac)I$ztaD0e0sybYZbJY7 literal 0 HcmV?d00001 diff --git a/assets/images/exchange.png b/assets/images/exchange.png new file mode 100644 index 0000000000000000000000000000000000000000..ce2d3928f43a16df2952a26738dd5a63c5d68992 GIT binary patch literal 588 zcmV-S0<-;zP)66~>9Yyyyx3_ci-Q3K-2hdeb%oNzoJ`RRa#yCTZ1M~u7A97{^g2foiuP=_= zfRDnu&1CM{>T$(f{k8a00;?_PB5;r{zF@A~OeLlqS4v|da&RC(+?*VFGsPIP|AEuF zr@kI0W=u(lXhWx91r_D;yc&`z2|<>i6L2zDuoRS$1H3fpG?y~4;$N=lExk`8V>;-| z$E$N`^;=^R&Ii6+w+I1h_;~;1As#~X^i_~&w|qRST32zL_~!C>zIDIZigMYLBq4O= z2R%5xos_OyV4PncWbb!CSFzF_Js9PDLiN){INM$xFB+lQyHy4(-B#to`qJoWZQT@s z@^mmxsh>xF(8H65Ogpstg@%fCN*~|GL@1Oa@7{!?(G0ofoQyo#{v3fa8%v{W_4{xT zSa2R!AWBsIT%j$GYsg8@pOHwab&m&u2{_aM=%4__iV(A@#IW5FSXW_-?243Ax_SHs z95V$3K*BWSK(O{CHk0E%u|OHY)c>S9dAeAjE9i%Gfz`@v0@<`yLn?y$b<%NPYa3cu a9(@C2L&*S!X6_~c0000}5<%c0+i9gA(D2Xn;W zgA;pXU7k;62lmZqOhnrN2XJG;oP;9mOPRqB3hJ9T0a3Cqra>jxGV|_3!U_fXCh(tn zm%9n$BkF`XJV$RYwo#0-g3>r4@0*xItb}y7HW$Sg6^QwX$}UN3AZPZYnQ<2Xv(NmOzRcMM8bnf#@V`C!G`qgBb@cFfPkh+mGQjpi zs@VBE-7XXr9iU|ivbM^qm=u-L3wL`R*yHtAUn b>+<|7d4%(__($JO00000NkvXXu0mjf=;k!g literal 0 HcmV?d00001 diff --git a/assets/images/menu_button.png b/assets/images/menu_button.png new file mode 100644 index 0000000000000000000000000000000000000000..33a3e5c94f4da5b325f1434496fdf7eecc75496b GIT binary patch literal 165 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y~!3HE1UzHvKQk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFK)#iyi(^Oy} z-9K}7k)X^0J$C;3v!1fTuD?&+nh|SeJBk0hgyakU&K0tpzeFQCt`?L6O=0kK^>bP0 Hl+XkK+@vj0 literal 0 HcmV?d00001 diff --git a/assets/images/send.png b/assets/images/send.png new file mode 100644 index 0000000000000000000000000000000000000000..aef504999fd9adf5462eaf0dd6bf132789716483 GIT binary patch literal 378 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~i!3HGN^yhQ|Db50q$YKTtZeb8+WSBKa0w~B> z9OUlAuq2eY-?C^Qa&%qO?zfrYrUI+GbEE| z|Ejf~W~-JfbaKoydtGX-r4s2N;AGYwlFxsm{mJRGg{O5M{_IJ(l=XF+>lwyJ%tD-H z(|$-SyS4sxO+3pKDdql&T+a%0cpCn{w~CWEkP+*4#*xdj!)iu$=2;~(VX@cD(V4c5 zQ<6&hzdv|weOgN(@Xm!l4N^LnR-6|4+t4)oTW9x*;~76))r!wM_ZR(8wOS~-v9^YB z;xv9Csi~jpVwUq4-bngaQD>fQwdefvZvJqWj?4RviwjyG8?BqUon!OT)V*$B%MQdP VIm~&QWCRQ<22WQ%mvv4FO#o|ak0k&A literal 0 HcmV?d00001 diff --git a/assets/images/up_arrow.png b/assets/images/up_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..35324017625653b282db32c7c1c5dfc954403ecd GIT binary patch literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYq&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+i~#(mGkixeS{a zW7+-QFeS+xVcEbashD1u^~OQ@$`T=&tdo '${formatAmount(moneroAmountToString(amount: amount))} XMR'; - String fiatAmount() => _fiatAmount ?? ''; + String fiatAmount(String symbol) => _fiatAmount != null ? symbol + ' ' + _fiatAmount : ''; void changeFiatAmount(String amount) => _fiatAmount = formatAmount(amount); } diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index fa7819f2f..a379d22ed 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -18,14 +18,15 @@ import 'package:cake_wallet/src/stores/action_list/date_section_item.dart'; import 'package:cake_wallet/src/stores/action_list/trade_list_item.dart'; import 'package:cake_wallet/src/stores/action_list/transaction_list_item.dart'; import 'package:cake_wallet/src/screens/base_page.dart'; -import 'package:cake_wallet/src/screens/dashboard/date_section_raw.dart'; -import 'package:cake_wallet/src/screens/dashboard/trade_row.dart'; -import 'package:cake_wallet/src/screens/dashboard/transaction_raw.dart'; +import 'package:cake_wallet/src/screens/dashboard/widgets/date_section_raw.dart'; +import 'package:cake_wallet/src/screens/dashboard/widgets/trade_row.dart'; +import 'package:cake_wallet/src/screens/dashboard/widgets/transaction_raw.dart'; import 'package:cake_wallet/src/widgets/primary_button.dart'; import 'package:cake_wallet/src/screens/dashboard/wallet_menu.dart'; import 'package:cake_wallet/src/widgets/picker.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/wallet_card.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/buttons_widget.dart'; +import 'package:cake_wallet/src/screens/dashboard/widgets/trade_history_panel.dart'; class DashboardPage extends BasePage { final _bodyKey = GlobalKey(); @@ -115,6 +116,7 @@ class DashboardPageBody extends StatefulWidget { } class DashboardPageBodyState extends State { + final menuButton = Image.asset('assets/images/menu_button.png'); /*final _connectionStatusObserverKey = GlobalKey(); final _balanceObserverKey = GlobalKey(); final _balanceTitleObserverKey = GlobalKey(); @@ -136,7 +138,27 @@ class DashboardPageBodyState extends State { child: Column( children: [ Padding( - padding: EdgeInsets.only(left: 20, top: 78), + padding: EdgeInsets.only(top: 14), + child: Container( + width: double.infinity, + alignment: Alignment.centerRight, + child: SizedBox( + height: 37, + width: 37, + child: ButtonTheme( + minWidth: double.minPositive, + child: FlatButton( + highlightColor: Colors.transparent, + splashColor: Colors.transparent, + padding: EdgeInsets.all(0), + onPressed: () {}, + child: menuButton), + ), + ), + ) + ), + Padding( + padding: EdgeInsets.only(left: 20, top: 23), child: WalletCard(), ), Padding( @@ -144,8 +166,7 @@ class DashboardPageBodyState extends State { child: ButtonsWidget(), ), Expanded( - child: Container( - ) + child: TradeHistoryPanel() ) ], ), diff --git a/lib/src/screens/dashboard/date_section_raw.dart b/lib/src/screens/dashboard/widgets/date_section_raw.dart similarity index 89% rename from lib/src/screens/dashboard/date_section_raw.dart rename to lib/src/screens/dashboard/widgets/date_section_raw.dart index 86fc3ff06..edbc5c854 100644 --- a/lib/src/screens/dashboard/date_section_raw.dart +++ b/lib/src/screens/dashboard/widgets/date_section_raw.dart @@ -20,8 +20,8 @@ class DateSectionRaw extends StatelessWidget { final settingsStore = Provider.of(context); final currentLanguage = settingsStore.languageCode; final dateSectionDateFormat = settingsStore.getCurrentDateFormat( - formatUSA: "MMM d", - formatDefault: "d MMM"); + formatUSA: "yyyy MMM d", + formatDefault: "d MMM yyyy"); var title = ""; if (isToday) { @@ -39,7 +39,7 @@ class DateSectionRaw extends StatelessWidget { padding: const EdgeInsets.only(top: 10, bottom: 10), child: Center( child: Text(title, - style: TextStyle(fontSize: 16, color: Palette.wildDarkBlue))), + style: TextStyle(fontSize: 12, color: PaletteDark.historyPanelText))), ); } } diff --git a/lib/src/screens/dashboard/widgets/trade_history_panel.dart b/lib/src/screens/dashboard/widgets/trade_history_panel.dart new file mode 100644 index 000000000..2f4fad150 --- /dev/null +++ b/lib/src/screens/dashboard/widgets/trade_history_panel.dart @@ -0,0 +1,179 @@ +import 'dart:async'; +import 'package:cake_wallet/src/domain/common/balance_display_mode.dart'; +import 'package:cake_wallet/src/stores/action_list/action_list_store.dart'; +import 'package:cake_wallet/src/stores/action_list/date_section_item.dart'; +import 'package:cake_wallet/src/stores/action_list/trade_list_item.dart'; +import 'package:cake_wallet/src/stores/action_list/transaction_list_item.dart'; +import 'package:cake_wallet/src/stores/settings/settings_store.dart'; +import 'package:flutter/material.dart'; +import 'package:cake_wallet/palette.dart'; +import 'package:cake_wallet/generated/i18n.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; +import 'package:cake_wallet/routes.dart'; +import 'date_section_raw.dart'; +import 'trade_row.dart'; +import 'transaction_raw.dart'; + +class TradeHistoryPanel extends StatefulWidget { + @override + TradeHistoryPanelState createState() => TradeHistoryPanelState(); +} + +class TradeHistoryPanelState extends State { + final _listObserverKey = GlobalKey(); + final _listKey = GlobalKey(); + + double panelHeight; + double screenHeight; + double opacity; + bool isDraw; + + @override + void initState() { + panelHeight = 0; + screenHeight = 0; + opacity = 0; + isDraw = false; + super.initState(); + WidgetsBinding.instance.addPostFrameCallback(afterLayout); + } + + void afterLayout(dynamic _) { + screenHeight = MediaQuery.of(context).size.height; + setState(() { + panelHeight = screenHeight; + opacity = 1; + }); + Timer(Duration(milliseconds: 350), () => + setState(() => isDraw = true) + ); + } + + @override + Widget build(BuildContext context) { + final actionListStore = Provider.of(context); + final settingsStore = Provider.of(context); + final transactionDateFormat = DateFormat("HH:mm"); + final filterButton = Image.asset('assets/images/filter_button.png'); + + return Container( + width: double.infinity, + alignment: Alignment.bottomCenter, + child: AnimatedContainer( + width: double.infinity, + height: panelHeight, + duration: Duration(milliseconds: 1000), + curve: Curves.fastOutSlowIn, + decoration: BoxDecoration( + borderRadius: BorderRadius.only(topLeft: Radius.circular(20), topRight: Radius.circular(20)), + color: PaletteDark.historyPanel.withOpacity(opacity), + ), + child: isDraw + ? Container( + padding: EdgeInsets.only(top: 20, left: 20, right: 20), + child: Column( + children: [ + Container( + width: double.infinity, + height: 36, + margin: EdgeInsets.only(bottom: 10), + child: Stack( + alignment: Alignment.center, + children: [ + Text( + S.of(context).trade_history_title, + style: TextStyle( + fontSize: 20 + ), + ), + Positioned( + right: 0, + child: GestureDetector( + onTap: () {}, + child: filterButton, + ) + ) + ], + ), + ), + Observer( + key: _listObserverKey, + builder: (_) { + final items = actionListStore.items == null + ? [] + : actionListStore.items; + final itemsCount = items.length; + final symbol = settingsStore.fiatCurrency.toString(); + + return Expanded( + child: ListView.builder( + key: _listKey, + padding: EdgeInsets.only(bottom: 15), + itemCount: itemsCount, + itemBuilder: (context, index) { + + final item = items[index]; + + if (item is DateSectionItem) { + return DateSectionRaw(date: item.date); + } + + if (item is TransactionListItem) { + final transaction = item.transaction; + final savedDisplayMode = settingsStore.balanceDisplayMode; + final formattedAmount = + savedDisplayMode == BalanceDisplayMode.hiddenBalance + ? '---' + : transaction.amountFormatted(); + final formattedFiatAmount = + savedDisplayMode == BalanceDisplayMode.hiddenBalance + ? '---' + : transaction.fiatAmount(symbol); + + return TransactionRow( + onTap: () => Navigator.of(context).pushNamed( + Routes.transactionDetails, + arguments: transaction), + direction: transaction.direction, + formattedDate: + transactionDateFormat.format(transaction.date), + formattedAmount: formattedAmount, + formattedFiatAmount: formattedFiatAmount, + isPending: transaction.isPending); + } + + if (item is TradeListItem) { + final trade = item.trade; + final savedDisplayMode = settingsStore.balanceDisplayMode; + final formattedAmount = trade.amount != null + ? savedDisplayMode == BalanceDisplayMode.hiddenBalance + ? '---' + : trade.amountFormatted() + : trade.amount; + + return TradeRow( + onTap: () => Navigator.of(context) + .pushNamed(Routes.tradeDetails, arguments: trade), + provider: trade.provider, + from: trade.from, + to: trade.to, + createdAtFormattedDate: + transactionDateFormat.format(trade.createdAt), + formattedAmount: formattedAmount); + } + + return Container(); + } + ) + ); + }) + ], + ), + ) + : Offstage() + ), + ); + } +} \ No newline at end of file diff --git a/lib/src/screens/dashboard/trade_row.dart b/lib/src/screens/dashboard/widgets/trade_row.dart similarity index 71% rename from lib/src/screens/dashboard/trade_row.dart rename to lib/src/screens/dashboard/widgets/trade_row.dart index 75a3371bd..ce603c359 100644 --- a/lib/src/screens/dashboard/trade_row.dart +++ b/lib/src/screens/dashboard/widgets/trade_row.dart @@ -21,25 +21,25 @@ class TradeRow extends StatelessWidget { @override Widget build(BuildContext context) { - final amountCrypto = provider == ExchangeProviderDescription.xmrto - ? to.toString() - : from.toString(); + final amountCrypto = from.toString(); return InkWell( onTap: onTap, child: Container( - padding: EdgeInsets.only(top: 14, bottom: 14, left: 20, right: 20), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: PaletteDark.darkGrey, - width: 0.5, - style: BorderStyle.solid))), + padding: EdgeInsets.only(top: 5, bottom: 5), child: Row(children: [ - _getPoweredImage(provider), + Container( + height: 36, + width: 36, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: PaletteDark.historyPanelButton + ), + child: _getPoweredImage(provider), + ), Expanded( child: Padding( - padding: const EdgeInsets.only(left: 10, right: 10), + padding: const EdgeInsets.only(left: 10), child: Column( children: [ Row( @@ -48,23 +48,20 @@ class TradeRow extends StatelessWidget { Text('${from.toString()} → ${to.toString()}', style: TextStyle( fontSize: 16, - color: Theme.of(context) - .primaryTextTheme - .subhead - .color)), + )), formattedAmount != null ? Text(formattedAmount + ' ' + amountCrypto, style: const TextStyle( - fontSize: 16, color: Palette.purpleBlue)) + fontSize: 16)) : Container() ]), - SizedBox(height: 6), + SizedBox(height: 5), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(createdAtFormattedDate, style: const TextStyle( - fontSize: 13, color: Palette.blueGrey)) + fontSize: 14, color: PaletteDark.historyPanelText)) ]), ], ), diff --git a/lib/src/screens/dashboard/transaction_raw.dart b/lib/src/screens/dashboard/widgets/transaction_raw.dart similarity index 60% rename from lib/src/screens/dashboard/transaction_raw.dart rename to lib/src/screens/dashboard/widgets/transaction_raw.dart index 383db5218..bf970cd27 100644 --- a/lib/src/screens/dashboard/transaction_raw.dart +++ b/lib/src/screens/dashboard/widgets/transaction_raw.dart @@ -24,24 +24,25 @@ class TransactionRow extends StatelessWidget { return InkWell( onTap: onTap, child: Container( - padding: EdgeInsets.only(top: 14, bottom: 14, left: 20, right: 20), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: PaletteDark.darkGrey, - width: 0.5, - style: BorderStyle.solid))), + padding: EdgeInsets.only(top: 5, bottom: 5), child: Row(children: [ - Image.asset( - direction == TransactionDirection.incoming - ? 'assets/images/transaction_incoming.png' - : 'assets/images/transaction_outgoing.png', - height: 25, - width: 25), + Container( + height: 36, + width: 36, + decoration: BoxDecoration( + shape: BoxShape.circle, + color: PaletteDark.historyPanelButton + ), + child: Image.asset( + direction == TransactionDirection.incoming + ? 'assets/images/down_arrow.png' + : 'assets/images/up_arrow.png'), + ), Expanded( child: Padding( - padding: const EdgeInsets.only(left: 10, right: 10), + padding: const EdgeInsets.only(left: 10), child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -53,24 +54,25 @@ class TransactionRow extends StatelessWidget { (isPending ? S.of(context).pending : ''), style: TextStyle( fontSize: 16, - color: Theme.of(context) - .primaryTextTheme - .subhead - .color)), - Text(formattedAmount, + )), + Text(direction == TransactionDirection.incoming + ? formattedAmount + : '- ' + formattedAmount, style: const TextStyle( - fontSize: 16, color: Palette.purpleBlue)) + fontSize: 16)) ]), - SizedBox(height: 6), + SizedBox(height: 5,), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text(formattedDate, style: const TextStyle( - fontSize: 13, color: Palette.blueGrey)), - Text(formattedFiatAmount, + fontSize: 14, color: PaletteDark.historyPanelText)), + Text(direction == TransactionDirection.incoming + ? formattedFiatAmount + : '- ' + formattedFiatAmount, style: const TextStyle( - fontSize: 14, color: Palette.blueGrey)) + fontSize: 14, color: PaletteDark.historyPanelText)) ]), ], ),