From 048ecbf6c8fbcc6935b4f295fcb8af6e6035d7ce Mon Sep 17 00:00:00 2001 From: Chandram-Dutta Date: Fri, 30 Sep 2022 00:14:05 +0530 Subject: [PATCH 01/94] Initial Commit --- lib/main.dart | 1 - pubspec.lock | 28 ++++++++++++++-------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 597427ab..3bec891d 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:at_utils/at_logger.dart'; import 'package:desktop_window/desktop_window.dart'; import 'app.dart'; import 'dart:io'; diff --git a/pubspec.lock b/pubspec.lock index dfda3c2c..3d613a8c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,7 +42,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" at_backupkey_flutter: dependency: "direct main" description: @@ -202,7 +202,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -230,7 +230,7 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: @@ -335,7 +335,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" ffi: dependency: transitive description: @@ -616,21 +616,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: @@ -742,7 +742,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" path_provider: dependency: transitive description: @@ -1090,7 +1090,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -1111,35 +1111,35 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test: dependency: transitive description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.21.1" + version: "1.21.4" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.9" + version: "0.4.12" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.4.13" + version: "0.4.16" timezone: dependency: transitive description: From abc63559aa4dacea1c369e8bdda059ff4e030f72 Mon Sep 17 00:00:00 2001 From: Chandram-Dutta Date: Fri, 30 Sep 2022 03:18:49 +0530 Subject: [PATCH 02/94] Added Fonts and Assets for new UI --- assets/fonts/Inter/Inter-Bold.ttf | Bin 0 -> 316100 bytes assets/fonts/Inter/Inter-Medium.ttf | Bin 0 -> 314712 bytes assets/fonts/Inter/Inter-Regular.ttf | Bin 0 -> 309828 bytes assets/fonts/Inter/Inter-SemiBold.ttf | Bin 0 -> 315756 bytes assets/fonts/Inter/Inter-Thin.ttf | Bin 0 -> 310516 bytes assets/images/backup_keys.png | Bin 0 -> 482 bytes assets/images/contact_us.png | Bin 0 -> 784 bytes assets/images/delete_atsigns.png | Bin 0 -> 493 bytes assets/images/faq.png | Bin 0 -> 615 bytes assets/images/new_welcome_bg.png | Bin 0 -> 65610 bytes assets/images/settings.png | Bin 0 -> 611 bytes assets/images/switch_atsign.png | Bin 0 -> 547 bytes assets/images/terms.png | Bin 0 -> 583 bytes lib/app.dart | 2 +- lib/main.dart | 6 ++++-- lib/utils/images.dart | 11 ++++++++++- lib/utils/text_styles.dart | 24 +++++++++++++++++++++--- pubspec.yaml | 17 ++++++++++++++--- 18 files changed, 50 insertions(+), 10 deletions(-) create mode 100644 assets/fonts/Inter/Inter-Bold.ttf create mode 100644 assets/fonts/Inter/Inter-Medium.ttf create mode 100644 assets/fonts/Inter/Inter-Regular.ttf create mode 100644 assets/fonts/Inter/Inter-SemiBold.ttf create mode 100644 assets/fonts/Inter/Inter-Thin.ttf create mode 100644 assets/images/backup_keys.png create mode 100644 assets/images/contact_us.png create mode 100644 assets/images/delete_atsigns.png create mode 100644 assets/images/faq.png create mode 100644 assets/images/new_welcome_bg.png create mode 100644 assets/images/settings.png create mode 100644 assets/images/switch_atsign.png create mode 100644 assets/images/terms.png diff --git a/assets/fonts/Inter/Inter-Bold.ttf b/assets/fonts/Inter/Inter-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e82c70d1081e2857ada1b73395d4f42c2e8adc9 GIT binary patch literal 316100 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�d>qioIPP8A=u`pvh3h!11b92OYQ~<~?KU*@+${PU!*d(Mv&AqxhThiaGx_YXV@BE8jiRp|qdnJro^^_ZT;t|mAt9&p=;ytO3nv^K zAf-ef8;>S!q)mJcGFratGO-Ab7Xv#&hQkBqy;7F}F0~qT{W>5Dca0d(oZIT^#Mj7Z z1jvhGkaU8(h1Us?su&lUpJDa!8xAXHCwqHhb#mg^s|%thJG3?L{!K?m6A~QS>qy+( z1rC8lx$ju8%TP~(`ISKmX{mnV8+D~&kWy(HlD2r>HT`>wI931c}!f9 zfERnB_>r1(;l!Sepa=LcE*#Hw_S%;>86IdNhv~2_4nm1f7SWsTw z8@03YNXaVB!_s$P`o|FI`jqyQ!p-fh(x$sf zTHJ)FFf3z;ozSpe=BZI>KV{cje!ZsnBQY=+QKt0vA2!UtcZ%T~Jj6=z82!$89Oji7c+2J-hGVQe zYytvaGW?$|P^CLpWyh_@3|>nO-{igQ_K?S^yB4Rey9~Y&z#Cv=3CeOHCKSi-#BlCu zCMSl34^9dT8O+5F4i8Qqg1_iB`8ZCeztI#`cdzK^uH7R0dwUJ&?~S9Gb6dL93NIY) z=IBgE@jJQ^amZO`{;SsfQbNMg;Q2C@D@+XyOHB<6O{L4foZPBVpQOP(db~$74}w0*9k3X<@-B zTw!`hXe#T@Z;(N6q9b*^U_Ly36Lr0KN`uK(z@MwWOczyW&+Gqj@-1MoToU`w$?p#j zmK9v!@~yxh1F-m!E;4TNzXmLRG^`}Uw+vWN9F|6^Bk@wA^X zKzo7TstxAbGIcXi@#%!Rlk^RHisvrM5AxSJ_-fTGK<{Ja-ZLR$xs627Uu{<3?CidM z$BiR-te>NFu6{?!XmFZ2;*T`SNVh9>-k-}=r%~E($TPWmcDB*;r%$z)M+OIvWdA{j zE-NncS$qSz2fBbw4N(@T2v!^8Pbj~vpqyeJ@th?c9X|Ig+E*+MlKjR@a=d`&ruCzHQTLVpFsSVDD zVWp3hkAZhnou$0tL~>x}#PZvoC8o1XsgF@-f%{|DvmG5S_9%)Py(xm!@yP7gdqh`( zZ(8EEmbAL~l6Y@SJV_td>pt4|ahOl^4>`_(YbN@6Oc+>;zS#AW`0u(zm;dg(g1$YI z227J7^EP4JE(e?$w~Nz_-G@`9eBlm60~Llom8#L(i+ zrSvbf7bI;{K1F*?WKBkPzJYk?D7;`zRCcJk_3+6=8-C_@haLwvEgt4XyrEOvc0=Bc!Xo+oNr_*0>frg4L!Z{IpozkUB z7SJ`}lscY*&7Y-c#m^(_;v?&IYSKE%MFWYv1I!DRt5*?mC0R*J@U*U7&bhnvb0H%G zI`?-XBa}hci}z&=6GghOx)Eti%*7tdh+^r|QpGZOcv`xIDB87(>K>oax}R6lVEt6x z#S+qa2+|7xRZIZbNMWhezZtq%098B|@?&V^n4wKOe#NyN;zUI94UHu0Mh^M9Q$5l; zsWaYtFAHM7fhra0THS=cmV8UzM@0jZBh^ev4MM=GOem$Q+iG{b$kYcHVaFb(J!GXZ zd670!Sm+r)YxG>+VdWK$c(-5Z30yN=e<3YMj1?VdIU=injyoY9xq?PJWC4v8nnCwu zp>_zLOAl=L|9JcExTuaU?47&2cNc6F5i5!`K|%V8B7ziA#6lAh5LA#Ry(nPAhP{_4 zDqurm!xl9bGTX}q!z5MgL62wmS9fLhbG8>;nvJ~C>3*@OQ+g=zGV5y9#0$Bm#84Cpr zU>IbXh9L-H!rcAwRpg<*l_zq-<=t;*Bwe9bE@b_5GM|w4KNsEJKY-J(p|at(bAltn zm&c^8itRCCW9mC{O|zYsz`B3jp!KHujWeDfNOGG{owxr+pICQVbe~M|igkDB=3(ZY zQsNsjBM8o@-y+5(Y*UZ<8dMPqw~l*?D!5zz2kI%3UZ7hZJ)-Nbln~>ug}d@>O(i+| z?bJ_4M64MbyE>ZpJxG69vzD|zFt=_e=nXxiTR(4?QC zPz8?7K+BjA3pXsX;v{TT`L#Hw*dSo$G585>Cj$)no$QXF|C*!=8_D45WBn$F%E-b` z=$+eV>AmtIdOCi3zqG`oiUTK!(XuisY@AT+%u9Y13f_QoymerpRn)LaPgdt&pEvnH zk(F@|KllEDr0c|s#S1>mwruO+i^`P(n=Jw8p*5Hy^soa5&_)EnOtfPV@wD5R%4DoQ z5c`%8SuzL8=KV54mJ{RJ^Td1|9ZfRw;_?XbpO=V{-f0v4^6Pc*nm)aC z%5t1Y&?;`tWKAGgD;s?WTbpOp%qqTFGWpJe@YE6hF8%CUyWG4m^J;->@dV4yk z-^vV)SPBY(8E}g0;xg9|#z|Z$T~G)1A5$tCuBA_eo$cwDvQqk`Y2%f&>#J7`@n(Or zJ+EIgW)}NH17woxfB@HQN*#N7wiN28=Q#;s7 zLk<0hTV^f^AWpu4tsRV|Q%UdU%?h$)WpC!mX_8dQ2X0;!F+|D310Vxo>k&9q z#`6>Uu+_~0ujb9;yL2;U-`9$fGO$K-+t{>{ZssVPZe$-0I52`4kmnPv*&3Zg9AtM< zVP-Gx0kHvX8e4f_8(2>m;N}if3kHrZ3_6f??264e)0P}}bRVeNv5yM&B|M?=T+gVr zF@&@-GnquXMs{@QK!~wf=T?L`+KwcxvrWx#IdX+Omdj%_A7MVVlnwtds@KFAQ;z{X z2v_SB;n}v6efQ2*$uY;?ItF{TiJ907Z-Et$55`K!GoL;fG3UUreHOyQTE^%i0L$rD z^{tSun%!42_Ak4SRSfn*PJ-0(OWtsYyr@1pMa(6q6~}n8w)o4xWuZ=Nj+^Q zPD-CIrFlS3I@kP6JlB`e^Utct3ZV0f%wzd8Q;rv8$5+0ccaHA7IrAp{^c)G+e2^;8 zk`1LvQ5wTuktO-JGUX`=ZJ@XCy`V&GH%R-C21Cx7IYKqB5k6_+k7TN9dzXQZgS%MA1ZRLaZi^rX%H^ zWaxSN>CMw<^$UxL@?g@kl9Mr~$DEwXofbT~(n<*E~k5#_m?cZGl?FcH%Sk^_ux^B@+ZuBH1+P>%7?kBCyIqYGQP`tF5HFzb z4<)adadPy`(I=*9-m{>|n6Q;#9T1UqkVt`mG64i;f|1BfNR(JJW`f2CJcNxR44K7OG&=GY5Ul@_bhEHvL(?9nf!>zh zBxdiFT^9)bl0?J|9b>QTq)w0>U9e?lFE z;ZSV3P&F-+1nQ{%{Xd|K_fPih=-R;{TBxNj$tD^T7-1!o(H~nVFo$k(<+4KQ8yPPj zj-Y11__$JTzRV4~RNXMvf)NL&Oh}nFEhTNLG&Z`ZC^}}+q`y9^m4$pu5ff(~-@wFE z*m?j7iMxy!Bl>~!>5~1T`lY?kB&s&`1aFkDkqbS91@+}nUqNZmHi61SRR7&Hay98< zZ)o1UT|c`CYvSlq8(WUstk=A7K1#vPkl!fE;a5x+@J0L>u@v3T1u_D-J(Jt@Y7N8n zFCzUGrVJ_v;l5O|1^UAm;*QY-v@1zGG#eZ321nGL+3Awl=s*L+u3Ec>qIt>#O}-fY$k_0ZJ|S9+oa4!vp4qG!YSV@0@38YRCcxY1x2XeEmb zX)+nj4QJVd=dU75xn6Y=F6E}?l&;y6#0EJjHpn&O``oc83~syVSa?tEOr0iq?gn?G@-I3m??{3>bQUgYvL&K z=Uj$p6}LOgcK|P7C=Go^PnVaIK2ML5P8(?sQB4@0Ug+dB75sxJ;zDcAlki)P-;?-D zOX*J+N6rkKe5t@OrFIgt<6}_H;M4eN%PFHUFi6oHe*javaHQ)e8 z_GX`c%#qg*LsqTlHdj8n^vxYOnFKQ@6J9c+W=_fR@wKBvLi}m=u`8uF3a3pA`QD2( zuiATj%;>l%`LWvC7RY+R={VFWcT1KvoxZw5WT1gvJAH@6iUOeH zKN3SBKocdeAt5{HTKYWe`OR(dr0=-3Tlx|B zToK7?zB8#%7UC7PdP@a;t1J|@aHG(VF??rgrYw}%C`0ScvO%m2)gXoq1b1(~v*3qc za7VpKywgkY75dk25bspHV}k~YnA94(bjZ|rY=fEB)reV;-85fNPFABTiw ze#nmJlMI^ElRO_k8l!s;feKXYWhz=r zeL?xWes#0^sDOgC7DgyT3n^$l)4{zTsd3gXVqp9BrwCxCzQDh$U#;)`m&6~48OfnL zNgR;HePkicxg~<8^Z9C;sTYC7TBslS{wF+{CTbk@NpeKQ1VU0HMiyQ6l7aQxVvtEl}@^gU6IIyBg_WuD;reib?URgkqGe?AHafh?R!*a4B z!m}0Ek+a*NR)LdIY-(H1Esf=0b~aaqnn>Tg=E*z(Xxy60T6E!>d(ImfVKQAZAVvtxWXn8 zT8OUDIM=h2#H5mM>mTcF!qAXGZ)BS+wwxHNw9GNAWo$nv4i&3^xCiF>7CKWoYX()H zT>Ik`Qm%^kE?m-2lQnM!{cyJGhip=TJCl}rlQ_Qoy@cB@yG9Qm%O}mhmmjJN95YFk zurp0|lO8!Tku-m(yESen=E-`JBc06Uvg)$Yx}JL|bm4O00t{tAxWQMmWtoL9!gscr z)ML=8ZZlcKHj~IA0IOIMun4SR@fdF|?(I31Ifrv9<_IUqAyQy4YGQz;l59}YTl6U} zQCF@6y2X)pRWwEOl#dt^JgA#58fp9GbiNHz+U+?M*OtWy41Zn-T}=_Jx~I<+9* zB6S+bcVTQhCxOeVMeijad zEeK^xrsY$TcsX@_5Dn}^hS=Cm{%W#i&aq6{#do!Q@(i-{0))e_7y+^3I*m;dusIp8 zB?qGOO#qrQl?E!frLiG`=xR?^faHQ-iEdzEmt-lo`Hg-zjr15D6gQ2y(|hz~<>Q6@ zmy$MQNj-%964GXA|3yD+qOU-!R`p5fH#pXwOrroHY0X+;<@kzGRhJ3>9bHX}^3J@U zaghvoF_n1&PJKZSU!3v&Odgpy!xe%} zykNUItb1(vv*fDD>YS9K$z(-dep)VBRY4ygj;);KJou-D2kGNVu24E#Q@C!&wsQ7a zzD@i24ZXA4A<8dd{3>FD`H@i{!MpRU{}r(Oh^wsySoiot{x}*|TSK&1DjqcX{Tli#fTMX3V^thswZ{U%5`9!FJM3;w^g7F<&^{9+nws z%}vC4%TNWvJm?t95DkO-un9B{I63UYHt@59ZJMx+qG&{5Zg^}{V+PaiQPO=UA(ixL z&8nAki5E#3Gjh@*O>NrZyvT8>#Aog=YxdA*6*~dXzRT_D2n%N5crMG)b>jK$^F6)7 zj*#7JLdrHBlC3AfE9k?UZ*S6vE6|#Eu3p`+edXr2o7P~nvTx0%x0_aNE5Ca64!yH# z1?h70?R8?l^5$TV1m~FxT+^dCyFqU$N$e&2cy{58C@g7XWy5u1XEQ;QkGQc1cT zdro?9AQklNPlxD(ZJd7p(Jqs|$n24Han{D!7fHLN7ir~pJ?_!17Z$)BL2?Jfu{Zd* z%%u-_m(Hcn{2yHURM>%w;#I=11(A8^CL2lvWs7)fMeB`7#44)(^fUUnf@~d=R+vYm z5oB8>#%nze$s=JTtsrfjqRsK+JJxEd*$8FLDUHxni=!8x>>jiNKX#9eWHgVZ(oUYB zH-ViMCb8C=fV0VdR+`Ya`g!75)|%qjs_?e%ytxY2xEOzUt(;o#q<2a@ zW$caKDXb*>6%zUah8JjefUUfsVj?y(+%_@VA;>K1_IJuUR<$v#?7+z|Z?8o=t`wOo zSnn-a9%E}erh0mpqV3}yx+iY03)k=R z$3qEDLq(;#DwqZX8EFBd<9o&Z_m+zLXkG#9>UhO{nYFU`2Gc={iNCl6OvS2-`@D^^ zSn?&_%LaSP^TbHpV_u>&k=1mJnu`!(Qb0EDEMqKo=3s~ECMyK6Zn7G?8(EoyNo*tv zH8#Dq5|44UIK7K+KO-Z_{9$A4CuPJ>B&wo!$BxohD>-hGd*qzw%pgxbW3%nGEp?Al(8jQGZFli z+YS5`8ACANZ-}lNT*Jlg+9zz^!$tBAd$_RO z!ZvQ?K7l#wt&-cy5G@96KdU)w`&k@5AOYs#U@Lg+i|i^U3RzG9n|TOIKcLr9|NKC_ z$=&?g$PAC_+GuQz-${ljJ1Rhi!2C6a&91u`Mzr;^CyXHUjQDQDQb8YO&F{QGXxnjEZaJ5maJAfCW!t9X8S$1(- z5wRh@QwZ3TL3gi%i9MZ)c7P1_$v3?pD#5nY!GdLks{A@N9p9;yDmI8|S1 z;eOL)htrWY&L+oGYK%0-Rkqg})RGI*Zv z-tc^ja4}!j9{8QL2Wv0=Hx19rap-Nsd+MI&Bq{ZerC%$(q5QShEfsQv{$<;Em8rN) zSaU82UXeq)NV|;eoV9eIG;I9&C0z!PQT&hZYW2x-nbLoDy!99KtDQ`aM@#eJam&ns zfOY?34rJjmETY@{+NVzPkJ^~jsXJWJUEVOepMDFS-S0PPf_gV*LatDycnNr>Ibamj zE7VFRfd{KEBf}O(k695OUX~h=AKr!*m>nV(yxB>*;dg|pIv;XbwzmQMrk_He-asZ|!4oBsG0a!r^+ggPwSR_$2FO`!zoi z_k#F{Y~N0VL~YH^J??YSVarSIExFRxa?sFrHm%)UvOH(62x=>Td6phJ<945Jxp0sS zyf>T}(}z1d4$AWjDqb7xmc4uIu#lg83Wo|Eh*`qob4gM{g$`Y^YxBVDip2rYA@xZR zJRMMR3oXiF!4x}Q{?RwV{pgn)H-33ECNwlgc>L!zHCli8@cPgZBSLkb%-It*-6f(; zcU(s{d4R$H_*wWJYL>D@`+FTG1^8R24E&Rh*B8^zmEADl03TTp`gz@n zqjDc*w|8O69nea<*L%|A{Jh4Wk88qyl77n1d%ssP1moruwNq@C)MAoJ3ZSj9|4xx% zGH)FFU{(vnWdsf^=G38ryKuaI2{K_I6%r8>7dLe%mrBQ865P2cVJlgD3OcZ)00arf zpuv3hfmauzN!VC9NEK z>@X)DF`{7TuR-U@BrAkk#ZCaMQtTG2LZTBjb*^pBI__Z)V>x92>4uGw*c-riJAx}PMz^w^T>tt+H6M+_el;XG+? zJf|>5OKz=yEGtBt8bKpt7zD_E;wDTNN{u&RZuBZ${TiECYDr@wR-H~CkZ5nDGE-#? zB)p~=Z8~g-O>a}x(TzRN0r@RTKjwD_KQ(WEh?oS4zEsicg^ext`pd5SEO z8ob=|5}}kV@j+fc-T#u*3O8Tw!0=g%xj(iM%Cq6NiBKM7fE+t4Af|5oF-egALLKcE zo+K*f5f8+ic`<0A3+9F_bp6L;u3-tDN3Zh7q$e&Ddrx~3?yorZC1I}dGWLjrAk^(Nnu{Uw3%f&TW+eRaff zE9su<>5%v-Trya)!KJfANCTpf=IVJFi1Nb-uub$$x@ti8n@EHA;8IT%vuL~KVr?$ZTMvQ`GXAZ9}_L2 z+lT2V`prbfu@heTKOozts3mqh;>(+$NiZ42HmM8A2@T8191)Sp;BH2r4$oflJIHH( z@gXC6_4NBKY*}=#xTqL6#{qgHMdUj?b(|S!+xmwib?5 z(-ay)$I-HBi5vNqK1quPnsn)6(togTd3hW2E^WNAysbjZCt+);4Gtk@DFQ-G+MThh zgzVj9W@6Czn7%e>F>?(41pdJ2(t*6r0nRls|utT;ut}beY~)BE1n# zZGX0tqDec6`EEeN#QLIPJRJPUo6w~(9%va?rvc|Q_DbJB8zXLe5^D_d<%<^#8sU1; z+0x5E@>4$?Q5V4_=dQe7@Yd@p`fNeBXE-DC9Cp!e653#Es=gawNr;nk%=*!e_Rda( zd?Bwt@7T^VZHo8ch_2_mw|7b|@Jkwr=HA7}(Va?9aiKu`DPwaR7rIlUQFBsuK2Gx; zB#=3k%mY4g1khIFg2L8M=@Ae?GX%Nf=KCIsn~X93PbtaYQhu27zo(^p|M#?Y7wI0t zOkIDg?ceL5Ij&24vHmHa0w1!jqCyFGJ415?v}t$I-v=-gkZ&t3iYjVBjC8`ipfj^% z=7O7*!=^Di-_9td_g_qVQ=3ILD&}WTE-1;5N}odqafOCbe|qp;J6po#JzT%^$C;|^ znnL5Cfh?+qjkGu8pJIKSQ2&#{2pYW{wwG>VBru#SY~@B=*wB|58FM-a+k%KwPZwgq z-5m?26lfR888Cp>apY)+l$9~tNJjv*RrJZugjHkPAC(%ApjDaq3p_pN7i6p&tbRkP z*R7<{N^c?V=_NtqG16r>t)TDWj$eMjHPW3MG512oq)U@0Un$DGET0Dp2#>=OuQS|> zKO{9$E=TV(0-luErIN|7_(S9#wZgp;i0s3lb~VR(sX_{IZD)rg1ACA&q`=aW(M}n5 zr_+juL%s(+~l9pacViECnKxFRwX_s<|{FL{c6a=1oxRe-wafWo=Krqy@vto0D zN~7Vc)1Cm7y?=BI7tUM zQee^5O$A5`=JX)9sry~tyzY0p?8+6Ae*HS&)mK7m`nGo8lJ*)8LaN^xjV-?8p|x5`>X<#6F_8`~qD}rS$Sc68FdS z6mpRG2hU%=Cwt>+_p!d!M6zTS{q5pmdP(?Fqv2=#y5kY7NWbmrPNM8)9{hRL%4w+H zcA-kX3+lQlo8}3uLYZN za9Z(m{AAC4+sV|}If1}(PjN#;#xNi$sH?Y-sUc9y{>YZe4fZ-9sc0Qn2v$wTkY($r zwKZE#-Qm7y18Y$mSbfBF;tFEPbVbl-rJK!OlF_Hm(efu|PwDz|>=2|DX6ug4z>z=jjYR>PZv>y8&<(#Azv+35j^xp1Ctdf4d^t-Nr7 z#L`Y%KmUAdr>f6B+mgN^Y+Udz()^Q)bkjYndvx>VHKh5T;JDDT39?5e^p~%{rgvAZ zB3562LkvsktsN^?e!64j@*QNTd(rsx{B}S_rm2tKu9swH63Okuni4{fx64mYDsqEZ z-wb^JHc)6Im?^s<+GQ|aN9-NQ$G=BqX$;B&VPTF?EzITt%pdcW=|7gtzR$ttO`;}5j*T<%rUrlQ+p5`Wr_iu02#30%?2tV#C99vRWaQwdxOc9HH!pOb*? zRrK(y`D6xmNvD$cWq#v5zc6S?${}L7`U0)G_03JX1JJVI#hpTdKsDuC(bgjCH?&dO zV#HXuY3Do>08F*nTTVJ3J4rgOoBaOhtxoIeNdJh3PMOT6NtNDu+hDV|7i>Y+J^fNE+UNPM_UnnY?&J8&1_pyf?!-%EJ! z549`?eLYjeG8jm}Rk5`deE1vn?Xb(MMumSDtwNuPYc2c!z4-kS(#hEG%62GE%WpJf zLkH_82#Cbo0$0q+r);OrmKAI4=rbHZXtJzMeixn=IKPvGNDtP%uaooal0&RGWTO-d zoB{n+4r5R&sQ(=#U4TX~?8ewd!GZ&rS|DzQ7$yK$HV78*4|mBAXTNm3v57Biaqgki zdm=G^cqaN%>uuK@?)-=Q@=|W_Q{lAKQaJoA{`s8qXH-Re;rcxLpyUFd2&eG%*dzRN zg7Xo7J9MA(dIFUoo802oD!ye5SEf*5?pxcqY4uQ&LLAAp<92~ICJyaxv@cW0-0avcWyfGBPLx&u!t!+*xlG5hL_BQVzo38weVOcg^ z6E6K!6Rynr{dcH#NH7#b5#$-b144&Yb8qPYau{ba_a%pExB2gCOX;@X7xiT!U_W{UQNrBh z#0^oxq~-J^9mu`KGoOK#-mQ0O?K>KAYDV8h5{@W@d(!sxd&OPxM|)zG7W5HS8>09m zCvDxjw46`MJsoX5J#8I5>G?6GrDKw3&K~dJ;o)G{3tl3O?;$gi8eszmN_pLEjQ<7l zA@FK3!JQ)BiHrA{MnxgzBdnT@=- z{wZf5QQ-3m08>u#l5Zzxp_kCPHQr4!jm<5`|UsnorG|DSo9|Cy&y%JmR#vK&87#&TrII6FX<2f0Cw z>7*DeYh{)7o5k#!VNyWpW&@l3C#@3B45x3TZ|EDk_>Vt`iSU-wXMf24N1;@f*HDXw zhcFxL@c^BS#46z?$AZkig@WiMVSy3FLw}jV4jjn_0FX-VrAbzkUc%GM++zTAVK-fw z+d1hd{GLYRNclK`C?$Lr%~pQW@HBgm#(+X4q*YJOvlnU3XK~$xZ-~>ocl0W|0{9=VONsbKFrW_Uy|CqHqdM0>=Kigs}vNHB($(Hm92Y~jyhocQ%? zfdRwNhkgcQs}g605gLZ~8_avq$;}if!;1O!eGGCm4#=h!a50!1gCZcggt@r0PA*TT04>Bz&tpuj;wDHpknUaz+lU*lG(;MF^VOxTwy@gM|R%5D@ zaN$kbhh$}jhG%35Er;i3g~1q(mrvwBMVN$eEPa2emJXv5MW$gBOs465p^^brzGFhd zdpY{Q30)Q)R5UTLXF%i4o&gOv9sLz=n};ooFtasNxi=raD8kXH7g^RaY++cZZf5Ro z`XP%VoSak=`G+ThlD@BJ!7&>`+G(jZ7DT0T!EmwwuhRt~HqzC6a4`>sz(U=!ioA7je`t6OT>+snwk)m z=J~N>bOLc5`Xikl1j=zcy5=HjRkH9R37rkV=oj8hXs>ks*q+RG1Va0%J9bR%3m>b2 zeR;DLSy>xq4e?aLj}suJ7fsPytP6Doi$7B#%thQ!ro|?;YzTmEx1v&0V+p-8>A~v9 zn77tsdU8_9)YRnZiq|aA)uhi;pV3j_AToqxqsw5fuooUdv}&;=9l=8VWGPWET}ky; zl0O88<>b|JYD8YIq|L-hqDS59t6|@GUbl+r3u-$-k9HRCyr=`i1|XTGpeJdMJ2uJ} z9}1bSp?s!+)`GOpWA@5XR8Y zvC(e<0*{?&@Y6Cb7#RSA9}9+Ppv8_0O~}jt+mCgLAxom>90*-BYVQ86mVP}Qe6b1j zbMUhwy+Rj9mF~wsa}I2>_IGgbw3(;x3SkdG8DDqo6Vp9^9%Td2&{FTM#Qqc(pNLANMhKBR*mqRG;QBI&~VOkSba zvi=0)4kL7&oAip(4w@6x5ys?)&mMEy!(P&h4%-W z)H^bib}VGv$mKPW7Nf#@^@>1aYc49d0+XRGHPG-&mm zL92G$#J~V|yYBt1d$ymHp0(h>0fjyBa&qt1EqM{N+V zPfpIlDz5Iz#|dxra>bnhHhi!TicBI?EMMl@5usycGJsq2Y0;k8$SpZlpAlgZSws5! z4(~rUvQL~@n$;RUE}<%+edgZ8%hgefjC%V|8QDHE*{)lWV_17!$^GGe9OoAv>JQ&%KJLyogR1-AZZp_?zh+W|L1a-; zq(LMCcBq~BB;k9#G^lDKSpkrsR3&ecy6zU|{O(hq0i_y|f8 zCo8|UbThe19sPV#(S|+HhL2Fk&UiP*)X`Sa1ii;5ly1kYVlizsYl|v};nb zm9-%1ssQnZ4F%@OZ_<)OYpDM0Frnr5r|vGR*tjCLIG{y~z+$U`!FtLe0|)u`S9FrD zRG(^fZ%d1vx5n*AGfS*asEG|35Iwpux`nP)a)s|vmQ=K#G3s!`h_ujJ5;ZNqt@T(p zCx6)^_kK}6`g_%Os!?_D@A`zQP!*7K;@3V_1AlO|-@nvHqIN4^B`++fIW=1TM(4(q;#4 ziT>bW8-RwY!}w&uUY{vi%xZ|yulm?;&qlDO4(SiMuHD*p(r@Euol`*caw{tj3BI=7 zh;*y6+4K_R(i(NB)62nYGlv_v+Gu^jHEZ%;(z=!Lg{qabPO%MP!x6@xy3#K>xF)Nu z(N-<+5Yrk>RW4Fv3mb)nu~gG#QsFOm9>1Pd^7`>zy`0;(X(^rb_%WG7CQ3L0LMERe z3Mrihohh4qg8G~3VCn9nn@O}ZMBH0)k_>V4%0lh}(~H+(dfG_)Fp-J2SZN9!8IanG z`B$d<#+}$OnwzN6$lQa5cackR_D?hGgrlqXGqyY4EEkIx&dx(iH97l^skv78WB)05 zTCV9yH_AHGFj?mh>57|zjMK2c9;`;3jf67Li3ATjeXq@!w2LYDd-I{W` zi^WyP)7bP0?YN)VAF6NyI9vtVf>nmS9ad|CD#*KXhWKD}nDOVhac{UEUaJe?ay#$X zeX`ZbxwX>9A$+F1cxK&9=6KiVAg zdLaZP!Ks3M3hZ*=Si^qWo-lFu+%!6U~=lB^UM_%IUvhQ4|8y z;B>Pw(GeBr7WsTqE3Bs{WhPDCZBfNVzyhxTx?^I>f*A_1@A{XslH~e0o-yy=&q?Yf zEZ}mbXaAQ2lBALh;S~H#Sfe%8!xW?Rzj>J85SQ57|KecM8yo70k^kaYf+!*N&t(rW z>$S1XFbEna2)hQN&Om4;2c*3LEl0hgU%+eE>m|F+p5oelGKm%9NN>9592s%P_8Ss$ zp4OzDD7GE@#dK~6xFOaU{F(JnWe?>~wMD?w7TOmZ02U~KSuaHV7htiuVJ6v{IbCHx zZ8FfS%|8>b@^bpcD;jl{D;K@Ayaxs z)cLE0T0WS42c?pUvkG+dIVR)*2r{i7gA)HSaFM;2tOuD#!i5_8ldzYB#>1a_8lqAB zBx}cfs98`n_F2a`=GWj6o{Rwlq&L)DRP>GTBI0RU+9}L@Uzx)KYr|{gfWe{N6~{vd z9jU6gXheez?vRvc#E4A2c%2r~UtZ9S*SMWWb}t}C=c_IegL$h@-6wsvy`)3v&CT>C z4SunYc;n?7*si*>G3CYF4k-h8W}z~N#4|HP*cJ%)qs9AxQ{i0C!jGK5eS}ugN7d_G z;l)wg;Kk9@?}v#-Gfuesq;5b)#==D3{FB#@WR&G5C=M|%4&Q-oUFTHbLZW;ZKnHUz z71u=V(H6#Ee@Un$o-K$UQwPaM)WQGPZ_e#J)b;6QKs6lvyEBF!Kl&9(CKx%106cn1&ar@2;HF>h{VxmR$I zm%0LvR*1J>lvmD~SAn~O`tjE?mM+b34GX0~*~^w?tHQ&DcI=LONQj1JtX!7u9uYzN zv!C1}!uc;hN`t2~^;yeTWV%O;K#T1b&Xc!_*P;f)ShsCqC16Lmfa_xHA|*B|D^uW^ zU{etl;y)X^;4nz6xeA7Hnixw}M4=gIu(Na=r0!9mBq(I5OEY2b}@T|pCO@K;5O-YhG6%WF|Nl)@> zF{Z;0;s8r(i=DS*FAh%$d1Uxwe|+(h1U}Wu(WGLr;kHf(7(0F6hl=M0V!$ z_qB%()xJM>7>0M5MEb#>?^*Av^g;1|h81nH*=ib_Q!|!ypj&7G{d8(->a^)8sZ(Vg zrzf!p8A;QX-ZUJCqU;OH&ItvQbuS__D?Btk9R(DkfMgWFVm~noS`!|a95PBvUWq-QfkVxz)AQJ9c5J3;3qps#Sc-rq> zz+s(J%EIwws3#$wLvhAa>TJ{`ex5LtMn74IzQ-kKsn!~EzsWUG0+9~JgJNb1p zw=`(3Y^LAJ+#F$@jrEN5J0U_i4mOFTb;^}!U#57Q5*vj|uAtea!iv&Yb4Y%va^*wV za9ch6>LFgknO|AI1-P{wN!`ptC^)sLf8>|>IFd8 zJ}cn-*{L*NJVlbL$fa3hF2vlX?y3~QeQEW6#fWD#{1lSpBbV~VTujUrb@{|ZY9c(` z%W`>!Bp>RKOBW9JTlbq=#85{^s>8F>J}qOo<0j+?vLrHPd7JtfP?!*bD^p}60*YxWnf$9qH4MWYoocywqSN0f<^`| z%r)vtKcP9CANF9%f#Dm!;y|GOz^}(N?9Ft$P;&-OS-NT0ECdqP%<22>g6|Qw-kQXu zPKcC6DMBJ+o_rQCVFK`<_ZRu~^uzW;}j&Y7U?XIIC*pGxwPqSSF36r(+Aia&zqJ(%RlCNAY0p z)Zts_b<6FM5a{G;sJLfhgROl(jP#rJ!05&8l*C_ZVJv5V3{78G@M8gIR{Xet{!Eg} z=rl6zA^WGiyd1S?Eexs;uiquwUtF|kHnuw;B8p0@wl3-?zfAXxv~V98Zf_N2a9Gbf zZ{(1<(|kR$e71zp&n-;s9eVWc9XflctE+W4G-KTld>6#3aF;*_K?rQd8HZ0!8*Sto z7GFdQMVV+_e%PzG5qetKB1)O3cX22wO-;=)GjeKYZRc*6wPxEI50Cj`)})BgyaYd6zmAq&M=Pql7vv;w9Qor{Wna$?XauMNwYa16)GqU>lt48q|w`57&@(^;Lb9Z)i zC7T|RLrX_b_a+C3hqIfDB4_rTpu)f&y<={GjqeN5Lhs|^a8=Bxt&6TL7~Vq5;i zZ6i+aQTcZA4-578`-d0kp5E{RV|Qg3WbRH#+>>sw^=^%OY#)P>g#h;=CZQiJ(9tD$ z0~r`!%=E&*7#l6nWYPdcHGx=J6f)G+M!Rrf61!+FeEE_dIk29vDnB5sP!O-lTk#XG5MKAhQW;32&sPxn0IGN%Kq$}nsJevG9wm@Kt$YeaU*dqX%t*;NcNF!MDX6O{^LRi#I4BeIdu;pyC%glro;bMu$A1#>fZ~8I$_s~ zeDiO02zftL0~y>_K2&(8Hyv!QuFUy|tsp9KJh&MG1_W*^)nctobNdIdRg)d`sp~k4 zxIPgPolYmz%wE1{*wQiMCwaAM%&)orz~O_34w4V;(|ewkLs%f!y+*K1T^2;l zzTMIi-cIB8WSXSxNT`V$HXtg#Ai8DbBuIA-*fiDKp~IAQkTNp}ur)>-HbLcP0T*kC zhSKVLgnYea)6o|9n)mk|Je-h_Fh768GBVMshEF=Ye8=*`vrARBBZ4aeqgyslUO^9b zABwjg0Nl}0|0q@-U63w>ekBSUm5S-{8tVt#Il5!duqCH0AC{5+`bX7=aIoSYI(5(5 z{XYN%k13`$FqT*V@#I9b7}C_xLSymZ0YikLD3#%t+j>q552=!p;dX2i6}@lqdvm%bzpKiaQr1(s1v!yaC~W<8u@U#8Z$6fK~zr2 z0d9td!uhS#XzK&1;vs)Bn0q?7p?s9y3Gew7PibQ+SlD2OFjauP0OCtyVk7(~{f6|Xm>|HR_%GJU-#&1CppF|Wq0 zyS2M8S?W3`H$1-sV)+u8zMM<-ig$BTIymd=8$=s8xw&c^LpTPbhRL4}3ZmPuc*=s< z80cPO6ZQ8=Jwir%=U0cWh>wmN>)6fK_rm#Gx0G{B+uOD+%^j2&*lBX-0nQfP+6my$ zG^1s}L}4(A7rxfZ6UBrGhH32&I!gzn0~7+S)z#WfdvqVdC-oUOtT=G{@->IFVB`c+sjRWF5KyPhTns;GeY1@lvEonW);Zqy-leBzAYg1#OOY=|-A z(O&)YOe^$3f3itvs?aJU8sS0tjLxbK@)n(2JN4spr2!=il(J9dQpcVc;68ZpOEg8p z0LK_4EZnb)1+IiIg`HdgHCaJkFCHY^W)SFShYP2?Ll4>J=CaZmBpk2P z2}Yn-9~*%brs85DR!nCS(`_i3j8J!a(E0wT;=qiz7jm#J!^y3Cl4o?ql1P;`g=L9KDlRputQ%TLi+dVHJm(5 z*sR>Lym-k5&#B{i=Rt#2u-Xk(Q(M=|x@3EHCH5=2N|MZ?R{l~im5>#-`Bw_uXhXi(OXORsDFzeyNtlL|X zzu#EVLUhI8A+U9MG{Gw+6DMC)~4THj?HK+Q?Ye{AT z;=M_k@>O;JyR8P>?$qRuG>Dk2)4bFva%<`#8o{(@>0m^-u%nuEl7Y=5)5b-Nb)Y8b z5i?enFBgrK1DLT=sSF-C$gjWhb4{wu>%SN)$I3g2ohHVK|EqLRu(g{3__`6RdH-nB z%ua6Yxt3Zz1K8VR2}-;5&>6(pm{tc8e^qZ^LVSCB_>yS>9&XT~15_RXKKWIVXTZv7f`j z0`SA1m38VTR#uas9q(EiK>-*9IvRmYZ4XuLJ6#1kicAhs7-^|x00uC}wAaSkQ6ug- zZE!8BnCbz<-`!&Xhzg$Weq8;rg8)5nc=&As+lIXOvp}fn3Xu0H&j}z5_a4@Zmi-gbbs5 zguT)Y_$($ywnq9_887o4 z1w=mLBn_(VkCV4%`J)&c(bY|E+LfwRpeYBBeRS-a@jueQ)Pr+|Am zBboPSmm=PALBQwI;vUNhd6%$(~^Zfeq#>2|JH;8TzX zSK@G!vUNnZv4Y6ftfQI@9?|ak;eDdr^Q0-VRUcZD19Fvm%z1g@yT@y2*;+!@t)+DB z+Iqc*@ z;{wKyr)4;B1?kDUHI$YuJ1@KZVeP?t@i1j%u`{HVD`1I($w#8l+ei+JCJ|;p`A)o# zHAK8Wv(aqnEZz^*-M=K>KU@E^v{1aChWotU#^0I2MT|em?jqp7HkaetT#)-!F?Ff# z{uJ^43%DkY7Vodu-j`0t=l@+KWhDPjh~yIMi^UBDw8w_^+69Ua`62BSYHnxJxmgD< zA+oR(k%k}Ib(3vYFbc^3O~7U(FHHVpB(>5>C2;Y1IC36>fXEWGwx{V zpoGDJ_O9NFgulD{V|dKti)3e^wXvledZacSzgCB8YQ)i=O4}%ab=3QLS@E$sIkBU2 zxYgNlv3Ys1aoKr$W{p!t3>;+N&84O!(LQuoNOv4d>kyQj95i_R_`&QC?(f`E$FVD6 z?+CDW8vRLo%MSe^^6v3%Wl>5cloaLwYGOg$%n_~(s5i83H#b?-EP904(N)ANFEqoW zH$S*F+21j9*rNO%Vf|LbCn1C9ys<1vDg8JDEF3HY8#h_fEc!W)V_%Ku(|h$H{D8k^ zK;*oEEE>~STLU*^9NQuV=S^DyZdo~sKeCJTP4&;~-<@~pLiTo~gUIz6;R{o{Otzm9 zSR~;{8)PxzKW0%`@$Xr%@gS|$vqFEceTc}-`D?p_Goou2sqxN|L{->;K@N7VJEtew zhYTCmy_+gI58FEnJuA1dD?3_s9N^?Mc5Mf%j{fv`#`v;si53|i?C_&`DCgY&Tu%Fs z%5fOpP)??2*Z)=ytfz&TqzCopV6wAGs?aOLsZ~`de+zGbV7;uhTQ&5z9Pu}SmSWp2 zy~VoQK}i3@);~XKHb0~bIoNT=jH199_LCit;^`fD`u=}>`abJxdpvFD_m5Bifo@7^ zd|K>jIaBKp{ierHKS;Fad&hxkLL^j@p)9A+q;g~ zi_e$-=Fs;a9&hYoJ+X@$Uz+@5XOpv!EIji}3g3)mj|_`M>$P0)U%Iv8V`nNR&nR*nHPnnv4QLxko2X6egS0SbV?q(dZ^X!qphtEZIb1^7()`!W9 z#V8&B$W71&uGB7Z@~(mbz0AGRoSKH9lQWW&rgNI2)U@d{Qc{Z)H{VTDP7|Ip?m$RZ zmc|Ia8#w7R2i?An%TSz=-51wj@lXL#K;!TWxG9TTuA=kSh_}n9etY3eV$!z3E8+;Z zD*O7m<1uktfo|6gof(=QI>3V%564mzIsh3q34P%IxAxl&w&@Adk2TUmIv3GNX_rM? zQ{eNmqg>l4o)d>JO09~Q$Vf*C$G?^zLnAb>X3?b}(SS~9E|r2p!@sWUA-_qh)z5#H zwLy^Gz2qe>e&%|S!J50WwolbhWd(Kq^3Urkp5hyt*|dJKe6u`OX2Z{y%cPGa_*9%G zS0wNnQJj|l!UjnFV#KORVJT!^Nq=A|_>)M1Pvrr8M@s&rT#b~Mk+MjhD5g9te=DX~ zr%fq4tb1Y|?z1PVrH}ALS^Z)zSut9CVy?DS*<8hI{Bjd{rRjb-DSIsDwLtsHZ`G#c zw}N5BOX8pz)IYU;Y`~a| zL=HAK7%&pj%=h$2*zB&?yL<2b?)m@o%{k9hcXf4zx8AC*s;;hz6R3ILPMR^>xMz#S z_)cB;T`X}fCd9j#;D~cMLBHa4X^Trqlx}D_&88&Y+nv*Lx-XhdKZF?#xwa~Hov}~L zXwUFuaXx$G%w7)LehmIT@cHS;r#5W6k_n?;ty=MLfIc;LWsg?1JLF$AxcZcW%L+$o z8E3qno^zGkGjr^lRTHnJZq%;!Duln1%y4jSk-YO;9>j#XoJ8Jmt^z(ldsfxZ8F4!-2!@&YZ?P!-;Ogy^NKzW+1&m z^l;Zxr|P`?u}9}@_4$XD#jteFkBZa>sMRG}Wi6Sa$l#Eb#~R;uH~eD(w%Rr0mJsWH zZGkh`+j}--xTm?f0aZVAaQW1M>Q~jM~7JH&_R=ZQ_T~vlmp}enMyz4xq z@-6`3v}aqgsTfO*7RsX`Q^zj&u}p8U)IfDF6@_$VKI|exSwnvKC48V;*~no$W&&- z+bz4Jh8O&DUc0b1UuMm1?;h;Ej-<#wQKgjE#*>hdpwi{PxSNC94*!*}RaE@WaXbzbPZ?%F8yf z-IwZXmnfejCCjJZ_QOq;dvE=b=OS8ebZ>Ahk2&3bR$X^w#UZP{>7WlQ-{|wA#q+u& zFKpd-W%|nxLscD>`{0a6KE-Qg@7_)M*Pgty{frC4OYB&5p0&aAIPWv0a@hW)`2ApK zj9^B;!DQ}fY&U0&$MbIIA1>Z$aW4Mc<@;l?g*|sY$-RChjjiqV>n^74S5-_E9nP-K z&wWnt9+{C2-cz&coF1rWN#$S>x@0kxleuq?Vw<3|V^rp($~TD$7{jhx1;@JYCULG* zHFrnOoBv=hV^G`oKAto8!A^HLrSoUc!vw{ROH5joMoH|2#N&$Q$7RL;*;$eR=3>Xa zuCiw;2mWztvVq(ur}ovKx8CainaYwqdj^%O@69dVv&=cO`K!+108wMT4M=~dm*Uv218 zv{I#_T{e7G+CDB^<&Wc{m8ulB?cJM?t4{AmU+CZe!svJIxyS$NjH)(_1%m1`8`G&> z@eURg^W1mbbS7skDdfC8*wEYa#957Ih*PVp>~q|^+IaUu{Dnq|&Ip(mOHU^-5#%EUFiaWeBIktjbHP0@Rtww@rn6H zO5nO*Cd4wU(!(fVe+Fu3Vf~`U$EYTk)Mj_*@$!%GaCqb;}ZD)ciV0y>M?7GL^ z5<*B|;lk!g_Yy<3^d{@5dz$LSgwype$H%x=A>Sq{dc4-tPFA;pQ*S7rK{sP&s5XXs zMVu7ar)WA0Sv5uqs<~vFMkm)E+?mAPG{sTX zJW3@|qc5Fx4|o6c%DwoUwq#fMT$Se7<`XLQtRvy4RG9-Wn52Jwqx+h>7L)W#5a|E@ z2Tnh^6Pv^M79nmaJMYfr-W+A)1pA|k_{G=kpPaVF-myS6^n2#E@G-utj8rmxznr^Sa;6vkdCy3YKMf>MP>6do}zCx4K) zDhbNWRMg);v7oPN*WvaMw{8FXha}2g1?P`K8uzO7lv;CGOT0%Vojc0?=3MM^Eu{)j zYo0uIH*(*O{Y7PO5jL`VpG#BRSJb3kD%Fx1?&l}m1I`z1TCih_3y)7lUcPCU&WGDn zrTgRWs5*x(ymHrZ-ycnHuFfk};Y?tQty6pNJ5lxAB=^l{-EX?@PgOb2CoNaGUdQU^ z44Q{!=Fgrec%_hMfs0b8Pt~77rt?CxjjD8y*K=!oq<}n z3QNY-8@ZwW`BXJ(*Q;DEsoST*?5G{xpQ)^q&Sh+|dtUGG!^}yROR<~us;)KU8nc*_ z(63CQE~zB$pWms`?ji0)%Fm2Zey`nQ-bK5|iy4)T_s(B<-)WnyiEP?M_vN{c@XEbiZQP#DUuTrLk*A zESWJjY{ZD_Ws23~mH1$1d-ozHZrZ)VY~Cf1;^&SrJjK+*_=z6zA6I{TZB(QHWBK-! z=^^g974K-bw;omvRu5=AqwytGyhy1sDbtiLTD&+C+3B9Il3C?etx`Gd$izh5T${A( zmJSt%HONz}bgR#k6=_+#V&TclRMin9c#5s20Q~43ulRkjjP@+&^EqQ>JeiX5mN1KL zI?uU}#?(`#j=8HHcP={Vu5;Yc!u@SbLsi0f%-OMx8_nz+?IlRPT>p4Ru1(bjJJ%Si z{`|eHbB+6Ul9HV_jTyJ8V~OPMh)n%>tFUm)dEutAoS@4E^I1vPo--g$3)CimH_+nD^m-zxLEP=nSv+wGfacQnOW z%y=1hPn|*xZ=_5Wm`4j@Z}9yp*S4(gGa1L;cW*aqzHT&gU)!9m8x-<*-am5Y_hdI; zum-{n&os+kXJMZC#kNQ=q+88xGc`v>--yt+3pYdK7P zpsKqk{?uqjcyktUC}JlocCqnG+&vZfj=(Si3)#CC>L*o>Jp0&7t-AY%2dd`dDP5a~ z&uH{hkp|6(TEo}{p81}7cH6ytiY#&O;Nn)PNtx=)*i$W+)||a>NU;OK+oRTW-`UI~ zk4yUc6l+zqXWhB268d<l8|9FcZ$Zf`0sLd_Ejqs;sshwzuxRtaqbq z2TSdUUK28AY{k5ruDR1bPMXfw*Eds%>e+iVnEQpp*X2l>iq$6CxGQ@?Jo%C9RnO_) zn$w#Ja955oy*A%_=EvJqbwBqM!p${oS`rV&d!76FGP5KPHoN96$fED|>f7wEMGw^5 zpJzoy-g(krvoDj^Y+}}Na?*1;U zVy+^&0t#eYc6m_2yruF4)Sk?ib&We0EH`Mtkdc)``qam~Q1|xy&9tsl4S}zOqL)sQNE!VeU*S z$>o?Btzztclq+BCVaHXzt#TUWysi9?=UMG@`x`827Q^f<%s(0ZTf_KM$% zT8wX2lp{1I!%zAG_lrjEueA)RHGg$1=DoXM%v>nyjPjD`2TyJk~c{;>hC{f;^NG56JViWk;JyVk1Nqj;SfsdA)9tI?&vd)udSO;W@0WOY?fi3gRMWiq z8vl;g>2%pc#tvD@#iL|^J*Z=Uftc0qKonxKg}0?h-C;MOcm~C{+Z6Bd?RWXeU8`!( zzv#-Em#40(e5>q*c?V5&7Y!X}Wc+ZK75W#di?ORBc>K&M6cM{ZzfT`cl~)P-xz&zYx1Lr? zm1I%1ZziiET6y=I4=?zr{;H< z+ncL+*DY^tdmI=q5&IKq&KM=+z})9PG*uPT%KlbPt#@D3!=EUL>0^gF&Hc?>BZWRu z>mQdo)ms_v82425l5aF6c4AC_)lIqFzo9|RVh1>S(2vh*FnItC>L=fOHK-Z={~lh= zvhCUFa@s(8cwu%px^C$!^X*`8j?+ zZ;q`E>oqClsd7MBXac?99b*%GwXJ1^U}y;4VJs|xU2p*&gPYDnO2`AmN^c4MVJfVF z6L1&aA!a|w3be4TY=t)qXaM+!|@Cu5Pv6M!a6^PN`O1(W;g`b;4uO; zfQo|!vc+rzg8(%*!{IVK=b_HBN>)1<0<&NhQVN7(PzO4}D2fKM^`;*}7&C7dtfmjM`u@#9{5Qzk#O)^9d!5=q3$I*E!vEeHkD zk%;>fk={heCK0kpjBFAko5aC@Y!Y{ev9JVo!37|_iQOVeGD2af2_0Y<%z@2t0&tg< zv?Of}`9hP;!tg~31%DcJ_NM&*?kkbCleKtm}7 z`jWCS^n~%S4EDe!cxrdFU<#uq*?}<9H~_h%K`v=(0CGu#T+$$yG{iH_U3e#w)(^5m zFf@ejutg*t9;PD>>4-zR5fA~th@`h50E$9w=m?=O54OT7z-{{XA{lU-Av;utjxZk9 z!6|qulFg9U&BO8;IM$2M{HaDG6kQ($ENcz&Kb6yWt`{ z0rDp^^2&_7G9$0dU%*!|4c5cAa0}jw1SJCe48qSK{0!;=_!+buw!vwUEJ-0JP_DAn z1>B~m?vXQ=Qq%T`f7!S(;H`yrP z*%efT7J!arM|ZNXhMjO6z8A?s!#PK0pkByYe1HH zkH8IhC6dntflv(UKqnxae1wy48=Qtnh!Xic4SWt&pfwDHuVFpxg)2b0$!`LF<|obh z8vwG+KS88G6379?06z*eflfep1zw62BtHw17X@)&@CT7X$h}Z2KnDva24q|q85c&z zg%1MqElhYt9FPG@0pS%vM~iZA(UT&@@T=H3SPHx0B0K?PRy-Btg-Y-xd?ixCA2tJi zm%#6m_+1jeOBR9}&>n`u0g+NBln3&))N+wvKcM^s2SY>X4r2km3r6pPF93QMjNX+- z?@H%^5NHYgVJfVFLvRgVij;9eMkow5p#uzqIj|W{(4NQ)=y=)AFcQwgBZw6#mjZG_ zMQ8!5;UJK{a-^@k!|reaGAKVCD7)nki&P+=E09MO$ma^=a|QCb!g@GD16XJyh^`7XQ@sgeLPL2+mdJ%O@WWeMyOsX7}r!Ev|)Z$+y40^w96oN9Fd zy{k4tqJ6wiPUyMAQXWb z&>lv?LZGbIJ`Ir&MJE;c)yV;6p$QOX9pqOB`PJD8=iw2MhjmjxZm0;~zz>WvH3N@G z{ZxPs*RKS`zd0%)K zri9;=@S75TGs161_{|8v*)y763f_yfxCZY;TJ{zBB0n61oA6qsl?550Fw}$&K>MW? z?Uz>6bFFaO>NX(H*5qgFAgBP%0smT0hE+g0Ykd`H2erY^HmM;G1VcmMTHD0X0`Rvj z{({PBfIuLi*#^61}Ffd0k<7KhuAr$7pRyYL_fZVzf-)`BV3^ax<3fex=61OXbJsc zDv*|5heUd#uf4gicOB>iBj6%q=#;BId*Bj01-D4wlz`m(B9p%4W#3^ydixQdew3?z zC4e;cBaQt?V}C!$3c=742)jRF_g}*PdZhoW9U=qJ{{b5S{Ty%$eia!=ng%ul^k`61 zk-^AvFzFb)7$GMf8F6YnvzVG|q& z(lWL_Ag^)c)A-gvS(!i@CXj{+LjnDtSQwD|#Iq0y#D5a;pG5p85&ucVe-iPZG!53m zk0O&h!3ekxFGZ#pkRA#`b!Z2~bqevELLN>n1F<60j=&G_lgM-jqyx&<^lH!+2E$C) z4&RD=jUIh{Rb)mtI4m-=BFqz+l@yTm?7T1qRs;Drn>5eH?>YEACj%6M8h}2{As%zi z(H$%X+%p$>F~eTwr2+hzhu`yBKtJI6Jp7zTUd_7#xSg*9@tse6=M&%g#CJaNolkt{ zZvf&u{}%izvcMMtfv^_T0pzuScrPHo7ND~WsQVUjZ6VhdE`V@21NR|XWD)6GloPtc zSU`@8Hi|4JPZkdpS>gks5CQK+mij>ul!W@w8AbwrFQr~tra@ZB2js=F#t;Ta;U*BD z<$ZuOFGr3m$j=o$;WALRR|?bv(y@|!UpZf773o_w6qdqyk<|@gD(n(j!~JWf!#k0+ zxL>;vw!>L?B(jdWW!+&Q>~(KM))W8r*`XY?fzd#k*B=7X7^VT~3k!jk@T16vF92C= z_*!Hm^4>^(Y@|$YTqm;00l3?QUT;nf#C`KJku8L?1%2Lv?rcpCD@;B zwmlFDM`yx`n5Z@yg;I7C~bobjpAdikAmt$EW7#ad;I5rlR zh#b!d-CztXhMhouAAba~A}3NnZa_{akmm{fJ%N6l*bU#quOcUr<4I(461kr20wVyu zIfyz2Ixu2H(Lek*i4{ z2jI_D{JA;;UW8 zCGr-Xd`p_%Qs&-;iTsusYQi44B=WvDklrZtC5o`4JHrgNH*WyMBW401(^#&@_Jg+~ zZcO(WmRh!x2$h z6JVmf&UKwNvW&dY2&Tbqcqz)kjz~B;j>8>zD~j<(m9QSPhmo)V_Q8GN^GQGA>sJKo1Ah3efbZay zs6;N{WnrRCa8Oj@l#mq)LkRFrHE~B^QcvQE@D2PbDhX*wk{L)x66}+l5tS6bk`{vA zfV`6Kg%_fdRRi)SIq66~2?!_oYf&i-AiNaifViayg+*{tR7&zECFx2@x>Ay^lv80H zAfHr;p*kS9RLCtgaZA%nR9fPhE*+3(>9fHEh!T~7e9fo>*E13y|0=*r@&0E;1>jde zBT<2kMP+IMZc&+uZ{|KgSV8y~v=NYFmYJfm;!oB#z_o0|I~!qSPXn!ixMzPODn}`3 z0w+b~^aJFP^S-EDgp-Sx$)BYF!uo6#kPo?21L5ah0arxj$p_q@XNRb~MPVR36_u|a zEEe^7Wx!p2{K?OK`3D2C$WI>Re<-SeFJu5@SOB>dSO(~1fn#tD@T)+ysDcR~BM@Fe z(!w%Xs^A{LpMtmHrKmz(U?_YG-@_A#5>=Qm3KK?Q!YE8W6|M*5Q{k@wnG{|K=u~0! zr7&qM`~cpHDq=z!$OWaKEugDKB19D}0J{Kp#gJz)(o)<9HV7Y!Lv3gSeSxx8VjhIS z0k{D8Q3AaxX#jdvGCLFpbfsiV=n33Yl6y+!figfGOA*IXq^lI^3MO5_1)(PNgPrhB zRA~#+!eAL zs}Q#;N8m2}BC0BRU6r_3?Fz)X>Sa+(Csoz3t2PX#!$F|@Rf~jQMO6<3@})ZWRG$x* zAXZe39Dsakj05azAiw`EHHV0*ISV!d>0*3HF+QYfbpYg13wf}(m8x9{W&pCRO@7zO z1l?c{Ag{Wqp$ZHD(qGR9dc#do^~vA*q_;llum7{C29(JL699c}fG#vZ7aE|i4HcjV z4MU(YbOz$ra4Jxq8ivCyQH>HpHYf`%fxK(90*GrP^tiDQThiWk zwWxMMKsfDw6V)EQXulkgXNMGkZg)U;IvfGy`DG#K1?c3L=z7P}PzNZRozSCBi(nU! z_nnAuXUbRSj8GKn0=m%|d3HuFohi$mufj`FUC^yAnV=*zgq|=FR>2{-4&-0g1dtUd zk6oKWUqH@X*TGS^4aAEv9@Q-;Q~+e%Z2-)Gjc@`;f468+-IGHes0?jj2+V=4a0VWN zTT~BZ)gwPthYk=53t$Ia0OZ_LgY-}sYC~rj4NG7TT!tS-^>RW06o>lI9mc~7H~`n+ z7g4=^AP9n?G4zJXum%ppO?V@!j~`@*a?l+5!*mFPV{jMVi|U&cK7$Zw1%qG~Y=%>C zA7VuHO9}a)Dzt-PFb{}Re+!6v|DsSE@TdPqQC~S=6%hXc=)!=(FbOCt0||FvPFM;1 zMGZnv21NjI8k`>phvuXjf*gkOj2KFp9r^`K1Y|Pwx~O3s4=2pw=yYfqQ6tI&=^F7; z)X3_9K8|w15>cbGLNJ^L%EM^tyD?1x`HdL~3q*}IfHE?6F5D9}Zm6j7#bKtX2|kbs zIG<1#I>SDoE}K{uC?gZw!&fj4@M9wJnz$QI!Vf@wG06mfAk0a`Z!)r*Ox!1vKap!c#Zmcm#7&U5U&~J*^I-03}>Q4Gm-U7 z&S(B4YF05A2Rq<|sM(1jJ0O$U4PhD}n>iT)cXL+2c_4jr(T};6p&t&&r5l4TQD%ny4*PL~RX(o-i3m$5!s& zdPdYXbY>fVZzGQ3$UD3ZkYC~G`F8SUJ2Kn85_ZBxQ9IhfaKO!uweSqk_noOA8Y@&i{sSBz zApZ`ufT=+I4_p;>kT@LtS=1rYa_EDoZ(70EKzzTs0*?Uy4!huUr~*x(6AT309$pT6 z;WRuGW-~()Kwd}6LTkY7kyE0MCW0XlE$Ukz2!I=+j^%-1XbI%qF=T%Xc^Nt9H zoH!p}2840^m8cWgoj{LH2spapl4@D-&sHC2Dm+o zUY^CDbNF$t67+$kfc^PufJ`nVgk$g!VnkgGf?6<7)TLw)F6z5tK-?JHP*>2gtC>Z8 zpAn`3x_2!*l!4lSY_Dw-^#l6x!y-5duSH$Q{dIKw`e4`$_eI^v1Kf9mJiS4l-q;1` z>WwH-H;Knh;&_ud-wXrt=@#<7RR!7tx_XPW-JU4wPFg^ocecj!K-69I>uz@lg&D9B z4gvn(BhB}a)jec-4?iMs8_@_l!CFy~=uzZ!I3wzQR=}V8-1nd)jDR7d}9qy_gGI0KNaw z67^GYcna@Dy-W2+;V7tr&_?=*dXbF8GGmHfM^wS^jPVFo-DEr}EIK^q{PBx^)V+6V^1O87>!WVwK}GgnDVfs9g;-jvv-WWU~&U%_e7 zQsGysH=?CBAUOoV9nsQ|e&!l!={Qd}N3`^;vYo!OXcJwhqK@jEmHyL1IOV9cm^!Km3bAMft!HeK_#Fbu<>rtPoiZZKe8+U z{K|4vw5&};%SK*g>j<}ju(Px4s+UZd=)5qs&bYHQ{E7ZWqLObVoi7%QNWR{m&NlBf zsD16Xh?pViJ2RxH1X+6T5Z}p)u{;s0xRn3@4(?l4aZh$gX%%txnH+}neAZuXpT z+GY>wZM8%W;L06memwsNvnSVk$GfwS{~3jd*I)5m+S%7#?IB3QeUnOff~Ilz_!N=N z)I>{NFJ*lKm#p#KCChy;%Ld;lS?`-fR`?c?6+SIw4YN59c>TB{U;LF@+YPf=!7~At z!W`HEC*$oK8}Fn$=c{1}cI99V$Bp%r?yHy!;@rtfy|#qe$3|IkVn4w+C`*~)y51Qs ztl%okokL`UbA_yT?2{FaNLdl*pJ%m$`N+m&IS}WMXM&@WwEM5&`SH{HOqaBC-b9wa zK^QuE0P_(Tkn@i)%xcok%q4?9-s`L=W&a*?4rS&~a5a=XRu=Nc5qI4gjL!T6o@Kw= z^^zRUV9y*^DauXazvJ}Zo?FQB-y+1b=P%ujmFM<#pELNk0KNQ_*ME2Z>9zm<@sNKA z%MR~TK8A6_bKml?Y+MWJ>GRg}!e@r(n$KsRUwo>2Ub?DyUU>bPBNhI}zxaE7^UG8- z0Qr9;L=L#xQlD{dT_(ImTrbM?e}^iv&+3NT9+J{5C_VpU?sIQb^y#la4?n$bIVtBe zh%4s*P3$oK9;=1t*H51_zU`&ZKf}B&b^et1Qry}iRZYx)$p=YeyYX2qnY?BK>EwG% z8YSo;8GKhG^LRge%1IlaT%K*-^M5)6BrZ(z zvGljn{CW5Zs!FeqB)lNKe13~}H`xNHXI5%Fu7ID4@?0e&} z?L9*sv0ihJ<8#SvgI(2lZ1;N{FNsqJXcBLB@KpDn+jeod;^XoH_mlLso?-e-33E)8 zyv9mTDr21Nh>u5EBa@vbvEw@z=0P=YTcMlBt=INUhRojkxW{W>TfVmMi97bp<@!@t zXtxi1EMyzU8cdsy=U%znvNzKb$JY`@-5+N9cqV?#lfN=u*SO~}I`}DX{_gzKYya(I zR@?g24?C>C=hN%|!7)A5UJ2azXP5E)vcqfI$A8evoPd5$lwK}>nQ9D|usA%EG4neT zNPZ(oCKy>|`5)J$JjdmX;hsa7qvP!tU{1qs0pCK0#epBcA9K$tsc5Y79L5|MZ*RMu zf!zXU9_iqvK)m_!{9l`G&6+%CKc}r3Lb9x17ZSXT17$$7jVOd!eU z94Uo9p8r=&WKjGg-utV{3a3qJS>=q9Ri-ok{G$Jc#b`LZvJK1i?s z4V*iu3k=C;=4V095W=?UE>pc`f7&GQslFMq%G(aoo3a_RCvSvLO6FSD@R)yK;T zeY_`Syg4Jzl>ON4fp0jk1VNCS^9aoHm}_A(^o5Bq%(Bx#hdo=e+gHJ?6tO|Lp)b}s>+N1o0yekwDTzKltw&%{h^L+vIJf$ z$?sYxAvTV)(#*LR9YfEYy&!_)uYiRItXk64xmIeLyC90OlHL;L8i^Y)F9FX|@9_*w zp7GAi($w0I&Loekhs@&f_Mx~v!!f1{KYY4!JOI0+(%B^(|0QWzeFk486gwgbIf@Q1qR2uq@rkr(=Z@u+Uuz0MxlG{6G^Ko1&1Ld85TA~ipo)rkz z`4p8CRtMRh;8*H{4sz7l!!zgOn3y?3ra0QjH0Mj1VdJeo`pGymm27gl>1&oJo|B{t z?#FXH#p}KZ?ufsMJJP)z#+acp+6-0OF>gV*IT$}e4AuPW$gRW|$BksbNlgz}X!*dwntj8Qh_ak~TNMipM zL_PCv+(Wko7&CxKh#-#JI`%18J)J$!5p}7a-7h$+)7;kLd6JpW-@GYU_DPTOP_^ z8>wrImukqktWZQVgI)Z64)%VRNZG8($T~}ZEF@aNl^jjxC`gWI+zISMYU4{-) z(kGgaWCv&|9jT>;V}P1s1ge~l`|{GpnNuREUv@fb$|7fBRSh1b2rB$HepR!dOS5#00;zo-}3chjb@`U5Dw@X*WCU#KjS zpg;9rd|jwB)j~VW^{a99BlU{ctuW)={w2sL;Ryp}k?%0Jo?uM*_jYnOdE^tSQu-ZM zDKlVxJjQH=T`TNbeLVIF)yhHYc*@!LBr6kluWjOP9xSj)a8#uPKaT$`zyIDZ*H+~R zM}5c2Vp!rcN*4NzQrY6q7yo{qTFQK^pL`N4>+kX1By;|T!}7-0ri@(rolqsdkRYqv z{D{wDmB~7+oN>rx-!ixX(o^Om30uj_gsrfn&F%`7J-+O-9Z%|yrt7In?K_iu!Re8k zHi;@r0JLMieka%ze{S3Tzd$=X?f)-e+V9iodwuN7C2B~y6WVv3CyfzubOLVyD>-k1>AR-maItV*q_TrzP!&G}L<`#BruG zzr;{Kp0G{({P+H9YuQ7;;Spbv)Dp-0o02xVkKM*_)TQ3GsU|x_K5WK*tfRK88b<}`%6U!f8%nb15||CdjNa*LDOK!#fZeC?Qca3EYjWNQd3RI!Xt!;& z!SAP}E17mhzNfyuj2*S}hZUH6sN-)Dhh4O%#_4$^kY`1Ey@Cv5_Q-z9d`H?zXXsy? zlqAs!xQB1kq8I-jkF-2DQbyOsj_;GArxWfGO#2xzjc51eMBP{jqkybnrilH_IY&RF zyWLMAy}ihrdS-6fgPeNN?-;4u?RL9AU^7C##+>17ATzAIGTt#%1{tMj&lOWWoaH2s ztEVh5LezHr>0^&S)1Mn>_wDR7cxfODJ|5H7`+@YGuuaK z>{?No%X6`X}PT!}2#L^!aPB|H2=b7CnC*KDc(Vuzx|ry|hZikqK%rj=*~ZM>*EaO&0Z&w``W6{%9#%C>QGq z^ALJ7gYyMGgXot5@$JL4aO$g(jQdaI*gKZM_(7O6H)H%R=}mk$qm#R6Ki)+*uGu;S zVP4o~#aj+K%VbAqHJh?DRri%pBT#-MUVYS!vDoCW0_=^06y%fe!gOG9<& zAQJT$yGC{!4D)B~CSf)J+igzHgD{_QaV4f*p4($qf$p#wS)PgG1Af`=KV;(E&W9B6 zIeZ3zamUnQ^5G|_56K~`*_mCAYD*8sW%|;8pN_1)`B;W+lW~vB$Z3-OjIec`^4QY` zcbo0;L9Q*gipiz;IXPqO@=F{Giu^`gf7@bGSKDKc_PB~&huigqw?1dA7=MP5{)#Y& zxJ-sLke~aL!bPA38x@Udrvp8I9|ffMLpcZl5#?9ue2VdG{U8g?ymFAS&P&Vzs%O@fO7=60y1A=8=1BkZgww8T z80WLc=u()R zmA%@f_nPgW_g?PDzr#F}&gm6YPA}EuonBL!-u?^ydRJ@ao3vKl(Em-8^R?b`l|ZF; z7GigqSM>eAk#pKm`ayf-su>`y=mW2_&-L^Yh2F1XOmiFhG>ADZ!+nD7Z6BiYh`d8? z?~fsq@Ps+!XU$D{>%g;ffb_QCnKAbBp8D}(f()`Aox1APzs~ZLPZ^%$h2>Pj7INK4 zE0^#q8-5HWJyI!`wWl8@U)KwB?T+R{9R4KF%paT_b28Fn(!c`)iM9+D}_i zB0lS48`HQ6{Vn3n8)h$J^Xbp^S`0Ifc0e5T#Iibxsa%OO^_%1g=bAWlY&9_=MDrw- z{dbCG8v(2~$l`rq`$64dA1AjrH?e&P!bF!j zHsLBM`3zMu z)W}dfL){FGGc?Q4KEt96%QEcG@YX+(e+vH${@MIX`&aa@;or!=iGMTy7XCy1$N6vZ z-{F7E|BC-D|DXNe_`3sq1F{8t5zs4OV8HNz2?0|B76p70a5vy-z%PL+P!Dtlx>yc5 zRbb}8tbw@#^91G(ED=~EuvTEbz`=pz1Lp^Z1#S!68Mr_2QsCvltAY0d9|b-Me4a_m zy)PMtYh=3JRWGmpzWDf7jk%t0N4E(Sf%vLZ`Z zmhD+~XE~VVNS2dX&Stro<#Cpuvr1NH){Vx#rNO`KhQvbzR z7BA&WNVyhLZitlI#7p^`3^D$R{Zsn~_-FSo<6qgocD$6o@DKGL@4wZ5m;VX>YyNlq zU;DockbuMic>{U|^bHsk5E?KsV0yr^fLmTE)6@)fc%_^&Fe6gV`8QH-8aO0ydf@uN zt%2JE_r**3Zs5asDLasIl24@EE?&x6ewXqEq}(cK7gAn^l*6;^%CaxZ;Vj3pocUeK zj(?DHC{lill#~96l(mQi5uZg=i>MvZBBC`??h-LGVs*rhh(i&NBYus{7?~@wXk>8Y z7cUi34v3dBf@a)2UekwzA0>U--L9aXmg8#jM>Y5_{_xhryAK~e3VM|Ok?}}-aF}qZ zBOh#hu=2rz2X!74c<|YS7Z094_#V5n4|+c6@}MK}m~{W!`*rUZjVykT{=^@@NY}mI zktre`Mm&gE8!_DW1EMm!g0=+FV$ISeOV=!p8(!dLCI0KF%p zh2q@d#I0G~#;j{L$LwHEwk#Ld?4M6sNFNW+&$yp$WB(GAj5Fi@6STx;9z0Aa3DYK| z=1PeC64p;RGU0tpo978%`}r_uJ^ttCm9JlgIP;^eZTgjgQ18+2Ib)y2{p>4oS3las z+xPr<&bRuX{QTPZwe#!X*VV7PU*Aux|K!k*djFsQ?0EVitGFMtkG(&?R(|M~{qsBK zcOmWw$$stl+|kWZ&3Nf-?#Sop>L}qT>Dc6$oaSV5ibWC;3a7=R)a+K%!QC6x*efdHr$P`&F$CXR@snja7%B9Mv{%WWirY5QR ztQ&otMT0M@@6}I^QjXe=(vFRe_0A6Jy;fQa(dugLv@zO5ZI-rH`&K)vUD1Bge$!38 zgkDy!sJEs58l|t&*Xi5zUHW-PSw~GrImZI$3`YUuXXBNly77ynmgBIqqhqUMpJTFP zoujT}i?f?!uVbF$k>jzmoj%TS$T7~@&+*W)-!a8m-&xn$z)_TEqm$>7!PCl;Qc_J? zNo#2%ZRL!dm2+~!oW%0;6;+6;#Dd3V9dlT7d97Nf)~hh}gMLHrttC`Zn$l8fmX=IQ zuT|B))H-UNwD#H-ZL79TTW@61-s=hUgu0*Z(k;ha-AA9mvu+YK@jfG~zFT~?#F9Wo zOF}J)RM)CW4c__G)M`jAt)?{88k?iEdeTnoEbX-}(n0GgUuxZ?qt;!fGY0#$HdSV5 z(`2SLT~=yKWj(9(p4T?W1ua}IYTM?O)75ExgSxKoS2xs4 z{j&O5zoLH8uUd_?GRzMfrj<1}S?B0sR@Ev?b7^3X(Hb%nbdb5u98bUOwM^4LXba>A zIi*r+=d|ywI#yd%NQ-5)3h^${en5!oN8sZf*eU4DXgUuI&Lr-o_ zu>!S|=16IwwUpV~4B2e4thcVjr6rfrT1M4Q&m~DTQ<7?lq?6WzcS$|vind#>YI{^o zJ%y^Jr&J^L+G>zAzC)*Y6mJZ9aM zfm#RUs~yrS=;hT!y^@O1_iCxltL8PWoYhCGqSa@+(A3r{YpqeqsBBazrt`gqq}*CTzk9;Tl%cj({g*V+C&laj%jN>Tob|a?K>I>#qqVj!SiAKB+5{_$b>DhmWz`mGiyfD&l8(!co7M^| zo4Lku&k^Yu=onF%2HFgei4secej&csMzH$z8j&=@phC0VM2RcVu4Xpak!RABfa5L6?XMQk$vr3pp zt#E6*dEPnJnr7{=wppdDVD_z?;+*Q7>>TeLXEih*m>0|^&I!(mW`uLP)y6r^x@>)G z-ZXDmo2-r2bo0Ko#aicjVjZ*kTgA*H)*!2vWm*-jC@Yl}ZGEs}tXRu!d0gUB=6BX% z^Pbhw>ZD4!GP|C+f?Qc#SsfEp0_T^`zLLo?UWUk4xuNds4~=dTD3$e_`Yjo(-pLmI zHp?lcl9DRB3fAwa_WE5lSii?6mXUgdx~fO&_vNN~U}QHc8ug9t#snjqQPwDDls76E zb&YyP7o)3H*%)TEx4txn>z^5+#t37KG1eGoj5ikOJB>y30eTn{_1wlJV~H!9dCS_P zzt^MmXk(!@+?Cyx!wcwm+LcEZdV?*lgZ)A zYm9c~bA9g0FJqa17i6C1UD+IYB2QI9BbAZbNMfE*Ma{E@CHeFiddA=C?BHvNp|KH7 zF+(?;DyQsMJA=8M}==#(r(M zalklad}Eb2juqPIoV{KH!>Jc z41eR9Il)R}ZnSoqTU-(5R#&9DY+N-G7|#tq>7U8 znT#J*ajSwVVU<(8^rET{Z!!8>U0g+7#q`tqas7;bLO-jYG(*jouHvo|=62Up-EHhs zSBxvJlCDyYGmdkP^NuTy?;Y12w;gvJF;0ima=KjoT>V{NxdupbjjwvN^1S7*AQiNV z%)F>2jkG4xSZgXxv}V#&Yc9>S7SdJgE#0&}(p~E-J+yw(Q|m92wDF9f&Xm>Ka#^FT zU?bm^vO=592*oNnt!A3hEA3Ur(nR=;>8MJ%ehbXH;M5!D@hBT8-B0sxf*!HCC^$#_0{z z*LoKfO{Vy}O#N_fU)VVQPs!TrJf@)iQmA+M~}?d-eHhpT0ot*B7b-`XWA` zUZYOxYtb$;LUC_6vOM1BaPT#I>=?B#-{d@IVzxIDPdk<)VHbPX|FiS# zAg}9N|8K4Deb>(?$xS9Rd-hBwGvRFWgPjxJY)`WH+3DeO;pyRN>5=C0^r&FPuuafD zY!|GAuOU{(*Ac6PajXW}3amOt;sX$L)1yhMj1hu-BWJ_6GB$z0u6IkDK@H4D*3~ z!pyTX)1%X4(qq%((&N(;qP3%SqIIM7qV=P0QTM1EbjI98mtf7HYp_Mmwe_MFY~4qa)H&Y%M)Cx;Q;8x-~sLXbEaT zkDzDJE9f2c2{woZMuVck(U53pG%VUT8XimyrUlc3$AcMIiJ2KZ8Qm7$9^Db$8Qm4# z9o-Y%YrnDI+C}y|`@Q|a{%C)SHjOq5)(zGR)(^S|8>VNZXQpSRXQ$^x`$hXl2Sf+r zi;I(kQ-UeMqrp?@x#{`o1<{ewQPI)qMbR|dkL=Isb?NoVrb*v;mw4xR*Lb(| zqhxk`V0=(KIyp5S5s!>VC8xx9#COKK$9pBCkZh#vYkBP^|yh*%S+%xVK*U}r~$K$=@ebSqf)6<*NThd$8 z+tS<9JJLJj@#$UZ-RV8)z3F}F{pkbl;`pO@cKluZef&fGb^J~ImRsF*a3#00TP6N6 z{?&!9P5My$NBnpE52E)NXB`4kC8gNJHf|GPp(y$%`ZZ3YKVlyai++lJkE1wFAC7*D zgXpj5?>I~!Nhd|WL_bGAq?6+$`Z3PprP3+squzP%hPc7*`uG8Jra2>iD1JD8F#XW& z=Js@ZyS>~VZujJhWMXn{a%pmLa#eC=azS!=a&>ZHa$Ry!a#?aoa!oQOc{O<~StnUL zxih&VSs~dkc_e9{%yPH6N8Q~BpY({E>KR)D10n@JbcPF>^62c zyGJ}Vo)&)_FN%MPe~y2Ne~W*2k;`0Lx0GAet(MG7A51<@_D%*R`y_+Y8`AUAOVSDH zW$A_K73sCwCa=q|0kXZ>}QmEJ+7%8vJ zTL7~%RBQo^)X#Rrh+VfQW;5sx#2f|{o9=}3kA?0`%-K-MD==3;cO~X#sLa#@Bl(e) zF<_p9%Ipd-v!HttgPE~lFJiui?oDE`vG@nT+I|oWAXp>DPrQ@(E~wZD#J58S6Rb%D zm~Y52;twYBWE9DqRtmt@RPligJ0echl zaAI$R9zpE=&?AX`1bP&)FGG(evE26=@d*&i zb$1i2XW?g=Nj{r=FSdb`I+3(MJOwIt0rBO~2f%~a{sj6EapD^f6MH&TYzJcL4=0gW zj!z~|>O|57@yAffD~KP1D)G74o=V&<&}jr~X8}eeIatdIFgD4-+*%OK05d@ho>U^} zQ;LN?tt8NA6lqh>DqBOJ1LCKH!Asy3@B)~n$aSw0e>QYBG3!BJ18<-$*P(9`Bfjw# zG2%aSNPH>uZDRUE-vM)RE$SF!yc{Fven71JeIBu6pz}$%6m$VGzd=7Fp@Dux!j+(6 zYY`n#djQP4=Fg%0S+pCrmnPvJP{}LsCqpG40Q0l>30xxm zv_bs|;X%+9i1gWJMG_tiZBL}{#!O01cnEZ5B7M18g@lJfS0&P~o7G4-0t){Sf(g(L z1oOi930x9f0Bs_eD-KLE2`+?oB$z)AOeYdt1no>PryQ6yi1dpFJ|u+KK~b-Q^l_#u z!Q3-`8kYnwL)Rvlj}9=8k|XU_p5FrIr~_%Ac^jPtU7ujyIxyXcv}x0wU@jX!jZ36` zn+nO-rK{KmUdq)%@b4h-^R|lAe-9Eq1MR6u-S#4(MSSw<=MLPrxTWf`N~2OUf71n4;Bd8pJ4u#&gKl((UW z6Z;tS2<08Mam&I0#P{{}Ia_m9nE$BnUPKG|L`~-c3*jJ#Fh=(5- zIS+WLf62$A$WLeJVm$Rz2f&>3JR(m4kDB*7|U{+^k? zYYxQrGb9`geU^Cf1@Q@?6Oc9x!WW>57hjNj3!4J*6<{6oWfHW5N;yG@W@2U$84H_N z3BLQq&sHj1L*;M4E(eviEr@NUJp+3I^iAafsMs3V3!!rqsfV|Ty$Je_B6adEu@^(% zQ>1?85_<{seS-DXzWEF61IhYNMxSFd_=+y(2ohe-V4kp1naf< z`AHH;eio8Y%J`Wg>3>c_vE>)aHqbALT^{2Q=id>m z6XRzliOe6E9|+ct@pF?T5c~W@u%3*co+R?VXrw)WoGbSYw2gtj9xmcbf(j%^P`z2@&6 zu(`ZT2zCdkr&Ntp<3CdnKqd?;skXeZDa*P_jZYY_35unV!Xplgyq z%G6a6TdqZ99w=N}84X>B$ha?*`UVzd3)dqu1`O9HR?6Cq$apa9POOx>Ok`{rR)`fF zREhKlVGFTSp*014M%Y7vpN2h&JsjFgk@I_lJ}A4SvjGVtFB_6T^0|?+Ido$p?>*rr zM4o#x*CyEE(9MW_71|f{L;7=}{fW$XVwEt*JO!0~fbS=Qut9<&p>jWAKd=SK-#NF$ zwlE!RMXaQ^HL-FZ^e_24>siokiIud(zk!(#6`uxn3RLPzkh+jE121hv>I3+JQ5H z{w7G8hbnWRBM82c55kdP6!;#DR=$IdQT~LA?S$XJIO4B{jwe=p_AuhFfr{?}{I*^Y z9zl|$q2epRijN#c@bBFMtcd1VvEebqNQ3R?2iHv2sj&6r|$+Qm-KW1bPm!H$%@Q_73QI z#6AZ-pZJHMQun~lhF(Cd)X{|`X@*K&f}|7lVv>}hmyo14^iqO<6A*-#5&sYLa^h}* zUO^IRM^_U3J9_#S{L9Pzr7l6T04nt-JPoc@UV~moyreOaSZQBUe;}zqZy-qv^hQP6 zgw%~N6o`$4Awcp6l2@R&l4KI}He$thZdarp#HIkh!5PRrOL!NyKZM>*k~N{yHtq#d zru#_zD)fGmYy^FP#8R#YN&GHU>IUFukK7L=(l^W}$$C(!KM+g4#GgPcX@5jwIah1}@b6`U@Dq}Vy+0-R zec=GVn~{UxAPK_HNFw(BoFq~wUx2TXj->Go!SBfi;kP8&1G)(OgL8154Tw7mYKTL- zupx0LLUEGdPKHLr9Ro$W0{%^H{=OvdOzt>rd*V)kCd3^JO^Jj3ZARRw&^E-uw{2VE zPJ%8)l3k(gNU{rbY2uECE<-$QC-Z26J07|m@qa;4_k#Z!x&rZkKvyLG7ifEee>azp z&t#0|XJUJ0unNlf0CZL2;j?x%;!cCEPLlJX9Z2#Jv_um04YnibgmgBBb|&s@=o+94 z@_a6IP2%9gwkvUGK-VJfbm-ayze63^b%_56igqRVSD^4Y!7qfa54s`!Gojsyhrih} zaTA~wk_?4biIcLl5d8LGU~43K654}!v=ezY3m)yp_9FQGn85ZX$z9Ms1iz^k*bRvP z5Gu9?_`TP_ZbXvXpkgDCO8z$?_yzsIZc38Fpqml=d$YjyCH@I$Kaz+)_b2#GszAnt zLgJxyl881)@*8w>lA!Ko3?cKT$?wn|h@TDJ5e!1!Lg-+U%zzFdejZfpI2PwD3mpf> zBb@`Fl5ZgM+A{tYQt<`JD@dh19u1Dgw)lm#B@j#9iBAJrW0CbC!R-%~_5+;UM|=?k zouH?a_zb8LNSl?kKyV-QED}iFokPri(DR7Q0m$5F&c{%xKM)-Xy?_KAp%;=sY<3a2 z7`zKEA%T?XQX=o!@?IwdQty{5bD>v|;BDxYMAmccRYbnSuvZgV8?o0ABR+Di@;>xB zVunK}Djz_vCo=bHZ&akdZXz;QCu1x@=0fZ(%6#ap#JmB$4crdooI6M$<-L>0e2Epm z2a)7c+5?E{(0fR<3slMvq7hK34-iTH+)tveQ0aFb#__(;N5CX(?*yF;reOPE=%XYN z`#(k^_>H^=3W?ZZ8cD=wrjtl~>TzW~=nU`#(mVk=6FiOWQ=!k0Nb2NS1$mNjr+psh zNS(YuqLI)SNhJRDlCnPZWfGkYeT76)Z?i}$<$aa-_n@;$B4w36NNoQrc#}lp7jKb7 z$}$JQms7F1)CcfVKav(m#Kv=pNBgnjD_aB_8!0$$3E5 z_o8;hqt2tH6-f^^6#~hpTo0ri(Q+i%9J)O5PeNB9QnqMC62SMO_KK8M@+3%ES0<(x zbQL0NjM1u!*kCn9%DOs{wbQ5r2_A!rU4R({Z33O(15ZIa1F@ypqYLqqAj*dA_9lK<2KZ3TOdn$5Bm@JoF&)-Wl~&rb4A`V&myR$_A4D&c@DbPn;QrwW(4C09cSdL%0)E>hkbX1g zGw80wj)Lw6cE`0dpnDK`7m4-+dw~UDZzAut(LN-RJPjcD?Uf)JNUZq4AmuISVB)WX z4j~EJax|3qm!QLx`OtldKMgvZB;wcm5kCpKKS{rW9zgtL=z%2t8hQ}%4?_gNN_jwX60q*ElLOI zt;#~^ZAugLcI9*E9mK=#k=z5|cm9LuF5*Sy9w2!bD*gogy-+2ckL~-27rmdP3!o1W z^BVL)?|q`VECtSk)`TMO?1@iSo=@EDOfrf90t43&Bkz68^W z7hisy_^+WeNOC0f3F0NanI!!VD)lGCKeO=L|b61#(-3Voe~t3jm>K(HC~ zO(JVD(OV=q13HJuJZmI%Aan#`caVtRy-U3K)O#cm`_Cm_>fwEYU+f5?4~UmKn@3W~ z|9qtrRQyKx3VcY+2GEZPexogjJ|<>E=qDuU2mO?o(a?oN-hHFbh><>3{2t(U*ywX# zz_#PCE&c(LgQ0S7_(dw$enaxHwd57#WAR1U1~S%;#6N(H%_Au%ka2hP1Ceoh^ds>n zKz|}$(*7Czf_q6Be+md(|bbAsb{SG^j7{1eCClbS7I_ySb_)3S} z!5&BlzR+QB5~Kb*3?(u0-eDMVF?3%r9PiEv^lB2rh8-r77=GX3F%rWsIy??wNBp){ z&_U9Y@{SLJQb2+gpoWC)p&<$2CnZZl*q{`VK(>(&A%u^W90_FGlduj&{)7NFD5XT! zt4bLOQ0`J2BI`>f*jfl+i_%gg+zZ-{1ai*OB!rzx%aB0MS(b$RK$jzdoU=R$2SBBq zAUFiNB9Zl+l9U+)heB5(vaVBFnFJ%Cs}Nb|DXmI^kyZF{URs~XT0*HC37&;^C$ip9Dib5NuMnC0E>($27_sYyB%BZ3h#0Z)#zf|?OPdfQ z_S=+%KSDPnMr_%agg-&W?|~7!im!w4XQ=o$FjCe!k@@CQgBU6I=0xV5OIr{lHb6fi z$UJmuD`LbRTN9a&E^R~1E>QF*g3Q;Jwj*X&==MbBZc955vm10rBJ;SVorsb4wKI`9 z-IAmW%;8W;3&=cWNv;Rx2&h~GWX`fA?GTt#pwjk$m9(Y30dp!;+8D5MpM8iq4LX2W zx#vJ)PKOR6R_;HTmoOl*o5=rD4QMo86blcXp-W#7djpkC=<0`x7f|_5flo zfgVV#wAq7*xdtlt12SJ(l6wGiEmYD4GIv>$w1Bw|D%S&h0#w>LFcYDpi9HcIhM39F zu|(zzOXG-{0v%6e?yz(ik#EjQQa3>65lcr9`39|YB#}AA(ow`rg&s|0ez9~6G0#Ac zB{COSlClBwEL6$^WL~f&WdP;{sN@^S++XP=BHxykP9`!BSQ0+~<|U}qJ&^gtlGHbl z@6Jl66PYh8ok7ei&@+k587XQj1A-Ny*ORaf^ac{Nhu%oS zcF>zhuo6`A3c?U7bqs=)p;E6PjG)rLgJ2b?)Ds9}=p7_j6?!KL9aQQb1gk-%zCkGc znA9Z*R)a`+JNi9)2c9?DPwf^^DT5 z#E8v)BeK3x`W^g(J_Nqn6abHR7}%{T0ZZdRXXr9uMI7H6x-#g1=>Zp=W^eVXGGC1aKLS4}@M0P`+R)bRs|+GPl$u+>1QGr<(2q58?O*&_}=|Y{TwN zlfk37c3tRWBtShO5_wLrA#@smkEC*c_(aoFxOPA2GvHZl9|(O8Jdbq5Cg^XP(9Z-@ zpy*?S0M|63j}Z`iENDVMBOuy)&@_vr7eHSHuOUsb+3O^|2#P+VX%3Eyo!$oTAR0BZ_t^7`gA) z;9FdK74&=XBhDAQ{tSM>_Jh!0i8&Pd8!;oHzY{BI{6Vbb?-uHKfwkIj>+q@D&e7IZ_BoCe*9 z#FECwB$jhGA<1~C*c2qMLnR-;qwbrj~YG#3)bmRwTUZYFz7}6G>8nUQc2Jy@AAXzStMUaxbwXi2j6%?LaK)+(KlYuK89X^MB2^kvN6k zPGrun`3@3$=$#}S1{J#lnNw`Oo5*}&^F82R+$)0KN79F(_Y;|4Y<_^m0rWutdqjUh z$9v^{axLsud(Y|{~SESNK)O~jl5Z3Z2YXV|M_ClbSc9XpfsL+F~s%Jw>7UECLb z(6JkFsPm5KBZL4x-El(_!_FPIC2kNDZBRh`)1c$d#EI@j+-}gliIcMIL!2BNK%AUA zkhnddk}hy)!yUygAh`l6_5#U7=unbe3mrz1OQHLcl3WGdk091&&~bl~pe=Sh zfFzeg4lVk2&A>;%;=X|*FM|6Px-xNJL%R_79du3573cf{ z#k~agGxP-F7C}!Z?tAFj#Qgw$g}C3L@B_j976facPY{xOpvdDIXb)bFp^n$UIX;2H zhJx=D1YIVA8*uHrP}H*!qaAla-3tzN)&+GfIMh`aq$9Z3pp%Gu3yQiH^5dxUE>iDu z9R4IY+`9{WNN}%1XAn0V3R?^AO(^O~$d5mbZIB;F-E;vC{?X-G;ub((An|k17m0fZ zD)$qcybb-7#Ct%$B|ZuQm_NsT3`Je7>2UsM(2a=u2s(tgPoTqzLwak%Zi1T=1YMUW z?q%po#G!t=?nc~v=)S})gq{G-V7+ujeuNZx@A?yQXmeeECJy!375*W(Nzh-3!!x)m z>RWJVlU?Blf}4U@9+X3HsN;2)1IV9yAG$j6DC>I1koYg?@x!S?|=}SS-4Sp-c z8w9~E*O3%uycK^JQk3!bZX|`RQOq3oAv6SSaNsg%Td*#+KZmXdw!&OZGjwYr|Hfke zHY7w}GJjhV!iVN>N5aRU+mjIfF@FcJ57Lo)4Is7w9Z0OCH;7o&!~DU-!UyJ~PUjzp z{$VfZLBx)Q9t=)Ec~^yA1TMw)$4l4bo+n7Jz_uajwNUtgkWPeJ;*rJz*hTPg=X*iP_o zLfa6;C<+$9jzR(-U$7KOmWH+?i5!!CfSA3(f@MfD6S^!xJgs1XTn`YZJ6NzhN#s5& zkR*VvNRqRl?TP;mx)Mnwk7z4GBKKc~c=RU=P{)Fw3tf%)>Cn}Qe;-;Ri5zbt{(ERM z@e80G31W-~3p$ZR%F&r51E6b=L~PTABu_xsBp!aWpeykoK-VH3KCxhJlDrIEha}UW z>w;d$|9a5gU}J291)G3@*p~Ya0z7u}V*F7hQ?}wJbmdHtg&%U4FF^ye0Npmo^#t7x zgCw|8w{5UaaD#3~!3x1kx*Z2SgZaAcf)z}A-S)vQW*yze4>p?PbUVebyPl@oZLocd zZns@xdnwb5H7e$mK_ z9*=|NtfpyPunfLg=5hSaI=&g^b`q=?73rtJ8c{=!XF(O;F7li+bad_;(of_A-8$|U?jd0I1(!u2L}5G2ViBQ zIj9EZoaSH`92t%yTjI-uao8Gz?H%x6{60MPhUI7X#j3?PoHr83$Kvm6<*AHAs$+u< zg6{bL{zzNS7#|D`y5Xvk_`acge)gd_r#t>yq`vkNcj|}p4hi-RT5wG{s04j5+qhG( zbFeMgaEbHQ4~jFF%w=(Gw>;NlagUL>OY{Gv#(b@h)Q1E;aECHHY&iZq^#7Xrt~jF^ zSB*ga{?|GO<~A6DqvKG*A^7`nly(TV55}>P!G8F!*hxy>ZSmGlI75z&&#&&Arz_ST zi~mc$rCye_=)Wl(iu4i17-#U#jr@G6#hvrJjl&v|++AvsXB+|@hW!ypdw8Dz@r&;# zxn_;;j1q2xYqm!{%DK(KzbS9?KPjw-zx~(B6_ib&2mPP!TjXX4*0zQqy+iQdq4=-l z^Kk4-KE%Ru-@d_)`Sv*YQ}be5(6`2-EaJPPaD`Y@YWfhUc;o)C%=Wl`oByY4{w?{w zNRz%YHfY86Smf(a_q`M*d1wSnZWIOqSAyUp|TrG1Ep?VIPV z@Pe_yuBcVd^f&X(a$(7VUB9!M=8He18#Yg3LJ^+6kj{o<^9mGS#uZG~f=3w*x zq%tb6x1IB{?~gNvBb~8%N|M5nID1I2JGP2ma_9VRQoB3hsQ7_+@EAPZzi(-yD6KBshSp3Gd)aC#180f z`j`#OhGrwPvDw6IYBn={5k02AY1K$FTbL~oooj2ejoH?0XSO#xm>tbdW@odD+12c3 zb~k&NJ9*CU$Bjfn7Yv$}XYMx-m

6=3(=QnPeuLDdti0n3-y(nd#Q;7fbjCmF@fSxxm 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Inter/Inter-Regular.ttf b/assets/fonts/Inter/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d4eebf20665d5ae746c622a2bd42274b54d2bf1 GIT binary patch literal 309828 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

V7T@aTyAqtk8R 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

NU^a~Y-YT{n`0xQzR2cZRm6M*N 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

qEIEEraMLk+K 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 z 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� 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Inter/Inter-Thin.ttf b/assets/fonts/Inter/Inter-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7aed55d560065b7a5a1975121e0b13ac25e798c8 GIT binary patch literal 310516 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

_l*o+mcntCJeTvro_NJ}L$i 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 z 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 SMb literal 0 HcmV?d00001 diff --git a/assets/images/backup_keys.png b/assets/images/backup_keys.png new file mode 100644 index 0000000000000000000000000000000000000000..2e593fd65b75ee815633335740aab2571e8b3069 GIT binary patch literal 482 zcmV<80UiE{P){O2Onfj)BP#!<6lIyQJC32B_=$0ZU8#OmR^ZHXe{lKxfnG^tG;QL;QlI zlxd#lbA2+IEEzPx+7$x?-~%R;SYY1kSXeNAIFZJR(hviL%ugui8?7}>yVbaJC{)E} ze6NW=(g+^GBlur|^*)Du-(O<7!X+wJz$71McRKp!zh7zDRyt!%@=3b4Q6+IPXP zf<4bWa43GfZ8QbDFZ^4LRS$dy#H2mu3>{{*Uaw&vRv`DP71@&ggwFo4P{CYyJ%Vy?8h&qXx)^ci#C*m+b86sGs2=`K8;nu=NIBXzvomp8e*XEQY{|; Y4)G1r7V#d#5C8xG07*qoM6N<$f+D@n<^TWy literal 0 HcmV?d00001 diff --git a/assets/images/contact_us.png b/assets/images/contact_us.png new file mode 100644 index 0000000000000000000000000000000000000000..ca9a8977f5413f3a2df9b05b627c2736766b381b GIT binary patch literal 784 zcmV+r1MmEaP)fv18YYks*mM{2>Ns zk#~-&@GqCKSfTm*=+9C>viaPUX-M3DF7A6ajwvGMb2VbR)puG z*=*j&>Dl~&6>g3Jg0kIiE3nKhHyfwtOeT{$l&i+Tg>Bn&kplqnyg7-@_VB)ZPu~Gr z7Ypmb5qw(fbUF)>gJ6>*yt-=cdK?fUkVgM60xK5~YH>3zWSp-3qGQ|tMM2_-6AE0l zRm}x5X}(-82RgNFQH)5qtpUpTGn>t-MFQCYQmHLZ>Ka(#DQn;s7cb4=vQ#QHP6`CH z5U6H=c=;|A&mc*D6y_SZ7aF?ve0U{J16m0aHI1tE! z^=z6uN|G@1u%Rk8_SDC`4_San-hGhXQIeurdFh2!6|XasH-}xk!8+kyAXsn&lxG~M z;zJK|^)BLs>5nYy!-WI2P#@#E@2KBHZ*C<`%2E!XZUCqvvdbLV=n;q!{HBEX|B}{A z1VSN^fhl?aIg8U%=6=DtymG2kt|}c~L4OmZ8T6@uWRWBb;(O3)wccE`azA}ZjsQZY z&U9@(N*O?(!|WGm4$_V}YCS?~M_kny7y27HL!252#c-9+2Ssy#pWY*$0z4gNB;Tq4 O0000010p13z1m`Xw_NIHnw3xo!_uB3dq&dmaG<B>?- zeINM01PughAAbA9*K#>q8DTxRmBee%uOF-p8Vi*3t9dUZA{NbvE=Ppk+AZR)r;v#T jQjJD{H#QbtB-?)h-;kiZVzXbT00000NkvXXu0mjfJ@dlA literal 0 HcmV?d00001 diff --git a/assets/images/faq.png b/assets/images/faq.png new file mode 100644 index 0000000000000000000000000000000000000000..39818426e41d467acc637ebd5cb252e48aece77e GIT binary patch literal 615 zcmV-t0+{`YP))Jr(+%>>Z@+_cY7lB|E8&wO zUmVMy@9y*2@#q3+nnqLuk|fFXcTXdXgCIy@-ct?mJTE^S4oSb?pO?gw$>b5u2i*p3 zkY|CcCdF#hhm2Q86=J{N$CxuxTxePz=M*9S;!cp~gTdgAY5=0TKobjj3Y%Y+JNcCX>G@VZK&1TcS+%kW`HywD5RDt`T zlch}!FeV1+n<8Zq;_1Tduq{JEc>iiTpD{5A9+kb@?b=ZPI~N1kEp!#f$$bCGbUtHZ zAe45c=Mr{-MHLrgDkUCCSVwv%=T#L4E$sioSk(yY5Y12{3?Zl&m}OpV>VWG$4n^VR zfx_Nyx7(5F95$gY0n$__1u_<#%|3SWSXVg7X+xH<_E?I9Qg7x$>O>3_ntDIU5!S@K zZ#kb(a7&ba8)8ARUayUdMPYHG<-6RQ82pX z2&a84S5)g;hmJFkuO0GLq0wlZrA6JVmn0W?x!Pt_A;h6r?Bh*Vg*w5r&;~tIO@L#} zbqckVy^hU!>VOrU>iX|5jE>oC7Eul8^?JGf{sRvf>yI>*tT_Mx002ovPDHLkV1iQ9 B2z~$n literal 0 HcmV?d00001 diff --git a/assets/images/new_welcome_bg.png b/assets/images/new_welcome_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..88390bbac0c362b3fd25467b6f0183b6233e67bb GIT binary patch literal 65610 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

npeqFVUiOp-*v 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 T@9}v<00000NkvXXu0mjfHdF?2 literal 0 HcmV?d00001 diff --git a/assets/images/settings.png b/assets/images/settings.png new file mode 100644 index 0000000000000000000000000000000000000000..75f0c826d1ed307fea37872dd937bb87669d7443 GIT binary patch literal 611 zcmV-p0-XJcP)ydHJN>WR{)Zj92S$5m`mBh{Xf$4<0L1{mB>XvgJPA^a8&yWcJytwRoq_yGT?9k9);V)`B)@NxPO#ODCog>2_2=dwa}}f z;RwBFjP=8-yOZRD;;=_Vr&<)ydu9Qz!0s7o7y|k)_WdPbix_f#M!yDZ4H6*9msvLK z*(dwHhaY>#I`UgX+1*mReeWSo?sh^8|FJ3c9oBQ+dDcoDb^K;-N z#++dX|4oL*l&Vo;uAC$;5kSlxE{n);OeKyDpb_?=Ml6vCegULX@*9co-rnHvbi3R_ xyue_6mkYhI$ek_215qJ7=h1jVIv)0x`U3+AX;T#f=`jER002ovPDHLkV1o9W450u3 literal 0 HcmV?d00001 diff --git a/assets/images/switch_atsign.png b/assets/images/switch_atsign.png new file mode 100644 index 0000000000000000000000000000000000000000..97fba8b5699181233e120ea1f07984fb50730246 GIT binary patch literal 547 zcmV+;0^I$HP)= zn?qgrvFm=EMM7a1y4XA{m-Mus&1P|xkyTu*R;wwtc>`enK+8%Fhl3AzQfi}sFA8Wx z3j6@@{?hM`3h7*Y_j*2`_oN4V!t&BI^=#V?sKgNmt1oWajK|}EGzAAD$8o;Zv-)Lr zw)}89oxZ4nWH5bcbpSnVay=Wm9J3kYOPi{Z6MdI3ADh+;F&rP_qk}WX3(^ zPBfWJHk6lQ1kVGM(N^_?cA!FW5o&$`3DycPhmAd`vO{QPA1}bZ78DPArhFRxRUC3p z3yR+S1~6x8)kJcCc^mWS(}E&VB5ct$8-&s8cDq~gVlgt>=ZiKI$>nJyfkoLEuTzzw z1FRjOL!LGO&Sjk%ha#jO?4cTy!%H@8v_VhqH-XmC|ANXxSfk@7*Jd3%&fY|UU7X;i z>-D;)dsf0odqe_d*XUZGWp>%Qcez{!Nb!&iiKh$C)v^P3_MfV@wjeXwT?4W#`GLC$ l#!sI#g?p3HXp~gh{Qx(z!E-8&wmAR*002ovPDHLkV1j7b>D&MS literal 0 HcmV?d00001 diff --git a/assets/images/terms.png b/assets/images/terms.png new file mode 100644 index 0000000000000000000000000000000000000000..3cc874c71863b5c61f90e01448820c2b95aad6e1 GIT binary patch literal 583 zcmV-N0=WH&P)d6~sAmfQ&mx2M)u5V?qU?1Dpy-2XQ(ecOLndtQg^$FtTKY ze}>uhL;m#GU5S7y%JV!X56ZHv)UN{#m_$*O!@VI73WA{A@AuhgG+G?N)9JJi^G5%p z9^geJy~)uV^`PM1QG?p;b_u>2D;7*Q;5Ee*fAUSh%kg-8O&)|%=CgKC3YtyZd_uxmucyo6Y9oT&EgKCqQ3do@7*9 z_gCB*@(C6|zjC|7@jyPoWRX&hfMqQU{T@d=f^R`S!7K#R0A`LKr`H0|-nrniNv9Gf zW*<9F!h0+GfUIFs)9=& { initialRoute: initialRoute, navigatorKey: NavService.navKey, theme: ThemeData( - fontFamily: 'HelveticaNeu', + fontFamily: 'Inter', scaffoldBackgroundColor: Colors.white, primaryColor: Color.fromARGB(255, 240, 94, 62), appBarTheme: AppBarTheme( diff --git a/lib/main.dart b/lib/main.dart index 3bec891d..8d23115f 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,7 +1,9 @@ -import 'package:flutter/material.dart'; +import 'dart:io'; + import 'package:desktop_window/desktop_window.dart'; +import 'package:flutter/material.dart'; + import 'app.dart'; -import 'dart:io'; void main() async { WidgetsFlutterBinding.ensureInitialized(); diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 644c93c2..5dcfc9cd 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -1,7 +1,7 @@ class ImageConstants { static String _basePath = 'assets/images'; - static String welcomeBackground = '$_basePath/welcome_bg.png'; + static String welcomeBackground = '$_basePath/new_welcome_bg.png'; static String logoIcon = '$_basePath/logo.png'; // static String myFiles = '$_basePath/myfiles.png'; static String group = '$_basePath/group.png'; @@ -40,9 +40,18 @@ class ImageConstants { static String myFiles = '$_basePath/my_files.png'; static String groups = '$_basePath/groups.png'; static String contactUs = '$_basePath/contactUs.png'; + static String settings = '$_basePath/settings.png'; // TEST FILE DELETE WHEN IN PRODUCTION static String test = '$_basePath/test.jpg'; + // New UI Settings Screen + static String switchAtSign = '$_basePath/switch_atsign.png'; + static String backupKeys = '$_basePath/backup_keys.png'; + static String faqs = '$_basePath/faq.png'; + static String contactUsLogo = '$_basePath/contact_us.png'; + static String termsAndConditions = '$_basePath/terms.png'; + static String deleteAtsigns = '$_basePath/delete_atsigns.png'; + // Sample profile pictures static String barbara = '$_basePath/barbara.jpg'; static String colin = '$_basePath/colin.jpg'; diff --git a/lib/utils/text_styles.dart b/lib/utils/text_styles.dart index 4e2bd4a7..2918f196 100644 --- a/lib/utils/text_styles.dart +++ b/lib/utils/text_styles.dart @@ -1,8 +1,6 @@ -import 'dart:ui'; - +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; -import 'package:at_common_flutter/services/size_config.dart'; class CustomTextStyles { //REGULAR FONTS @@ -36,6 +34,12 @@ class CustomTextStyles { letterSpacing: 0.1, fontWeight: FontWeight.normal); + static TextStyle black12 = TextStyle( + color: Colors.black, + fontSize: 12.toFont, + letterSpacing: 0.1, + fontWeight: FontWeight.normal); + static TextStyle secondaryRegular14 = TextStyle( color: ColorConstants.fontSecondary, fontSize: 14.toFont, @@ -97,6 +101,12 @@ class CustomTextStyles { fontWeight: FontWeight.normal); //BOLD FONTS + static TextStyle blackBold25 = TextStyle( + color: Colors.black, + fontSize: 25.toFont, + letterSpacing: 0.1, + fontWeight: FontWeight.w700, + ); static TextStyle whiteBold16 = TextStyle( color: Colors.white, fontSize: 16.toFont, @@ -145,6 +155,14 @@ class CustomTextStyles { fontWeight: FontWeight.w700, ); + //SEMIBOLD FONTS + static TextStyle greySemiBold18 = TextStyle( + color: Color(0xFF939393), + fontSize: 18.toFont, + letterSpacing: 0.1, + fontWeight: FontWeight.w600, + ); + //MEDIUM FONTS static TextStyle primaryMedium14 = TextStyle( diff --git a/pubspec.yaml b/pubspec.yaml index 44342542..d455844d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -80,7 +80,7 @@ dev_dependencies: flutter_test: sdk: flutter msix: ^3.3.1 -dependency_overrides: +dependency_overrides: biometric_storage: ^4.1.3 at_contacts_group_flutter: git: @@ -96,7 +96,7 @@ dependency_overrides: git: url: https://github.com/atsign-foundation/at_widgets.git path: at_onboarding_flutter - ref: fix_flutter_qr_reader + ref: fix_flutter_qr_reader # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -137,7 +137,18 @@ flutter: - family: PlayfairDisplay fonts: - asset: assets/fonts/Playfair_Display/PlayfairDisplay-Bold.ttf - + - family: Inter + fonts: + - asset: assets/fonts/Inter/Inter-Thin.ttf + weight: 300 + - asset: assets/fonts/Inter/Inter-Medium.ttf + weight: 500 + - asset: assets/fonts/Inter/Inter-Regular.ttf + weight: 400 + - asset: assets/fonts/Inter/Inter-SemiBold.ttf + weight: 600 + - asset: assets/fonts/Inter/Inter-Bold.ttf + weight: 700 # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # From 25a5f12eede813943305058361ca3226530d4d46 Mon Sep 17 00:00:00 2001 From: Chandram-Dutta Date: Fri, 30 Sep 2022 03:38:55 +0530 Subject: [PATCH 03/94] Added Settings Screen --- lib/routes/route_names.dart | 1 + lib/routes/routes.dart | 4 +- lib/screens/common_widgets/app_bar.dart | 30 +-- lib/screens/common_widgets/side_bar.dart | 30 ++- lib/screens/home/home.dart | 2 +- lib/screens/settings/settings_screen.dart | 206 ++++++++++++++++++ .../settings/widgets/settings_buttons.dart | 51 +++++ lib/utils/text_strings.dart | 9 +- 8 files changed, 300 insertions(+), 33 deletions(-) create mode 100644 lib/screens/settings/settings_screen.dart create mode 100644 lib/screens/settings/widgets/settings_buttons.dart diff --git a/lib/routes/route_names.dart b/lib/routes/route_names.dart index ddbd3a39..b9f4b784 100644 --- a/lib/routes/route_names.dart +++ b/lib/routes/route_names.dart @@ -13,4 +13,5 @@ class Routes { static const String EMPTY_TRUSTED_CONTACTS = 'emptyTrustedContacts'; static const String MY_FILES = 'myFiles'; static const String GROUPS = 'groups'; + static const String SETTINGS = 'settings'; } diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index cca75c11..96002809 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -2,10 +2,11 @@ import 'package:at_contacts_flutter/screens/blocked_screen.dart'; import 'package:at_contacts_group_flutter/screens/group_contact_view/group_contact_view.dart'; import 'package:at_contacts_group_flutter/screens/list/group_list.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/website_webview.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/home/home.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/website_webview.dart'; +import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/trusted_contacts/trusted_contacts.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/welcome_screen.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; @@ -48,6 +49,7 @@ class SetupRoutes { return GroupList(); }, Routes.TRUSTED_CONTACTS: (context) => TrustedContacts(), + Routes.SETTINGS: (context) => SettingsScreen() }; } } diff --git a/lib/screens/common_widgets/app_bar.dart b/lib/screens/common_widgets/app_bar.dart index 597ec3bb..b2721275 100644 --- a/lib/screens/common_widgets/app_bar.dart +++ b/lib/screens/common_widgets/app_bar.dart @@ -5,21 +5,17 @@ ///[title] is a [String] to display the title of the appbar ///[showTrailingButton] toggles the visibility of trailing button, default add icon ///therefore it has it's navigation embedded in the widget itself. - import 'dart:io'; -import 'package:at_contact/at_contact.dart'; + +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_flutter/screens/contacts_screen.dart'; import 'package:at_contacts_flutter/widgets/add_contacts_dialog.dart'; -import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; -import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; -import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; -import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:filesystem_picker/filesystem_picker.dart'; import 'package:flutter/material.dart'; @@ -68,7 +64,7 @@ class _CustomAppBarState extends State { Widget build(BuildContext context) { return AppBar( elevation: widget.elevation, - centerTitle: true, + centerTitle: false, leading: (widget.showLeadingicon) ? Image.asset(ImageConstants.logoIcon) : (widget.showBackButton) @@ -109,11 +105,9 @@ class _CustomAppBarState extends State { ), Expanded( child: (widget.showTitle) - ? Center( - child: Text( - widget.title!, - style: CustomTextStyles.primaryBold18, - ), + ? Text( + widget.title!, + style: CustomTextStyles.blackBold25, ) : Container(), ), @@ -172,12 +166,12 @@ class _CustomAppBarState extends State { asSelectionScreen: true, selectedContactsHistory: [], selectedList: (s) async { - for(var element in s){ + for (var element in s) { await Provider.of< - TrustedContactProvider>( - context, - listen: false) - .addTrustedContacts(element!); + TrustedContactProvider>( + context, + listen: false) + .addTrustedContacts(element!); } }, ), @@ -200,7 +194,7 @@ class _CustomAppBarState extends State { ) ], automaticallyImplyLeading: false, - backgroundColor: ColorConstants.appBarColor, + backgroundColor: Colors.transparent, ); } diff --git a/lib/screens/common_widgets/side_bar.dart b/lib/screens/common_widgets/side_bar.dart index 08d5d2e1..79f29bee 100644 --- a/lib/screens/common_widgets/side_bar.dart +++ b/lib/screens/common_widgets/side_bar.dart @@ -1,33 +1,28 @@ -import 'dart:io'; import 'dart:typed_data'; import 'package:at_client_mobile/at_client_mobile.dart'; +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; -import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; -import 'package:atsign_atmosphere_pro/routes/route_names.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; -import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; -import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; -import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:at_onboarding_flutter/at_onboarding_flutter.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar_backup_item.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar_list_item.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; -import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; +import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; import 'package:package_info_plus/package_info_plus.dart'; +import 'package:provider/provider.dart'; import 'package:url_launcher/url_launcher.dart'; class SideBarWidget extends StatefulWidget { @@ -48,7 +43,8 @@ class _SideBarWidgetState extends State { TextStrings().sidebarTermsAndConditions, TextStrings().sidebarPrivacyPolicy, TextStrings().sidebarFaqs, - TextStrings().sidebarTrustedSenders + TextStrings().sidebarTrustedSenders, + TextStrings().sidebarSettings, ]; final List menuItemsIcons = [ @@ -62,6 +58,7 @@ class _SideBarWidgetState extends State { ImageConstants.faqsIcon, ImageConstants.trustedSendersIcon, ImageConstants.trustedSender, + ImageConstants.settings, ]; final List targetScreens = [ @@ -73,7 +70,8 @@ class _SideBarWidgetState extends State { Routes.WEBSITE_SCREEN, Routes.WEBSITE_SCREEN, Routes.FAQ_SCREEN, - Routes.TRUSTED_CONTACTS + Routes.TRUSTED_CONTACTS, + Routes.SETTINGS, ]; String? activeAtSign; Uint8List? image; @@ -358,6 +356,14 @@ class _SideBarWidgetState extends State { showIconOnly: !isExpanded, ), SizedBox(height: isTablet ? 20.toHeight : 0), + SideBarItem( + isScale: true, + image: menuItemsIcons[10], + title: menuItemsTitle[9], + routeName: targetScreens[9], + showIconOnly: !isExpanded, + ), + SizedBox(height: isTablet ? 20.toHeight : 0), InkWell( onTap: () async { CommonUtilityFunctions().showResetAtsignDialog(); diff --git a/lib/screens/home/home.dart b/lib/screens/home/home.dart index a8e8c94c..73d7d76c 100644 --- a/lib/screens/home/home.dart +++ b/lib/screens/home/home.dart @@ -318,7 +318,7 @@ class _HomeState extends State { children: [ CircularProgressIndicator( valueColor: AlwaysStoppedAnimation( - ColorConstants.redText)), + Color.fromARGB(255, 49, 44, 43))), SizedBox( height: 20, ), diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart new file mode 100644 index 00000000..ae8e2b04 --- /dev/null +++ b/lib/screens/settings/settings_screen.dart @@ -0,0 +1,206 @@ +import 'package:at_backupkey_flutter/widgets/backup_key_widget.dart'; +import 'package:at_client_mobile/at_client_mobile.dart'; +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; +import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:url_launcher/url_launcher.dart'; + +import '../../routes/route_names.dart'; +import '../../services/common_utility_functions.dart'; +import '../../services/navigation_service.dart'; +import '../../utils/constants.dart'; +import '../../utils/images.dart'; +import '../../utils/text_strings.dart'; +import '../../utils/text_styles.dart'; +import '../common_widgets/app_bar.dart'; +import '../common_widgets/side_bar.dart'; +import '../common_widgets/switch_at_sign.dart'; + +class SettingsScreen extends StatefulWidget { + const SettingsScreen({Key? key}) : super(key: key); + + @override + State createState() => _SettingsScreenState(); +} + +class _SettingsScreenState extends State { + final List optionTitle = [ + TextStrings().switchatSign, + TextStrings().backUpKeys, + TextStrings().faqs, + TextStrings().contactUs, + TextStrings().termsAppBar, + TextStrings().deleteAtsigns, + ]; + + final List optionIcons = [ + ImageConstants.switchAtSign, + ImageConstants.backupKeys, + ImageConstants.faqs, + ImageConstants.contactUsLogo, + ImageConstants.termsAndConditions, + ImageConstants.deleteAtsigns, + ]; + + void switchAtsign() async { + var atSignList = await KeychainUtil.getAtsignList(); + await showModalBottomSheet( + context: NavService.navKey.currentContext!, + backgroundColor: Colors.transparent, + builder: (context) => AtSignBottomSheet( + atSignList: atSignList, + ), + ); + } + + @override + void initState() { + super.initState(); + + _initPackageInfo(); + } + + PackageInfo _packageInfo = PackageInfo( + appName: 'Unknown', + packageName: 'Unknown', + version: 'Unknown', + buildNumber: 'Unknown', + ); + + Future _initPackageInfo() async { + final PackageInfo info = await PackageInfo.fromPlatform(); + if (mounted) { + setState(() { + _packageInfo = info; + }); + } + } + + @override + Widget build(BuildContext context) { + SizeConfig().init(context); + return Scaffold( + extendBodyBehindAppBar: true, + appBar: (SizeConfig().isTablet(context) + ? null + : CustomAppBar( + showMenu: false, + showBackButton: true, + showLeadingicon: true, + showTrailingButton: false, + showTitle: true, + showClosedBtnText: false, + title: 'Settings')), + extendBody: true, + drawerScrimColor: Colors.transparent, + endDrawer: SideBarWidget( + isExpanded: true, + ), + body: Stack( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.welcomeBackground, + ), + fit: BoxFit.fill, + ), + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.all(28.0), + child: ListView( + children: [ + Text( + 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', + style: CustomTextStyles.black12, + ), + SizedBox( + height: 28, + ), + SettingsButton( + buttonText: optionTitle[0], + onPressed: switchAtsign, + image: optionIcons[0], + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[1], + onPressed: () async { + BackupKeyWidget( + atsign: AtClientManager.getInstance() + .atClient + .getCurrentAtSign()!, + ).showBackupDialog(context); + }, + image: optionIcons[1], + ), + Divider( + height: 58, + color: Color(0xFFD9D9D9), + ), + SettingsButton( + buttonText: optionTitle[2], + onPressed: () { + Navigator.pushNamed( + context, + Routes.FAQ_SCREEN, + ); + }, + image: optionIcons[2], + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[3], + onPressed: () async { + await launchUrl(Uri( + scheme: 'mailto', path: 'atmospherepro@atsign.com')); + }, + image: optionIcons[3], + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[4], + onPressed: () { + Navigator.pushNamed( + context, + Routes.WEBSITE_SCREEN, + arguments: { + 'title': optionTitle[4], + 'url': MixedConstants.PRIVACY_POLICY + }, + ); + }, + image: optionIcons[4], + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[5], + onPressed: () async { + CommonUtilityFunctions().showResetAtsignDialog(); + }, + image: optionIcons[5], + ), + SizedBox( + height: 12, + ), + ], + ), + ), + ) + ], + ), + ); + } +} diff --git a/lib/screens/settings/widgets/settings_buttons.dart b/lib/screens/settings/widgets/settings_buttons.dart new file mode 100644 index 00000000..7af940ff --- /dev/null +++ b/lib/screens/settings/widgets/settings_buttons.dart @@ -0,0 +1,51 @@ +import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; +import 'package:flutter/material.dart'; + +class SettingsButton extends StatelessWidget { + const SettingsButton({ + Key? key, + required this.onPressed, + required this.buttonText, + required this.image, + }) : super(key: key); + + final Function()? onPressed; + final String? buttonText; + final String image; + + @override + Widget build(BuildContext context) { + return MaterialButton( + elevation: 0, + onPressed: onPressed, + color: Color(0xFFF1F1F1), + shape: RoundedRectangleBorder( + side: BorderSide( + color: Color(0xFF939393), + width: 1, + style: BorderStyle.solid, + ), + borderRadius: BorderRadius.circular(10), + ), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), + child: Row( + children: [ + Image.asset( + image, + height: 27, + width: 27, + ), + SizedBox( + width: 12, + ), + Text( + buttonText.toString(), + style: CustomTextStyles.greySemiBold18, + ), + ], + ), + ), + ); + } +} diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index d9e0d655..a8a83f9f 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -57,6 +57,7 @@ class TextStrings { String sidebarSwitchOut = 'Switch atSign'; String sidebarDeleteAtsign = 'Delete atSign(s)'; String sidebarContactUs = 'Contact us'; + String sidebarSettings = 'Settings'; String atSign = 'atSign'; String switchingAtSign = 'Switching atsign...'; @@ -163,7 +164,7 @@ class TextStrings { String removeGroupPhoto = 'Remove Group Photo'; // terms and conditions texts - String termsAppBar = 'Terms and Conditions'; + String termsAppBar = 'Terms & Conditions'; String termsAndConditions = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. \n\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; @@ -324,6 +325,12 @@ class TextStrings { String mayBeLater = 'Maybe later'; String to = 'to'; + //New UI Setting Screen + String switchatSign = 'Switch atSign'; + String backUpKeys = 'Backup Your Keys'; + String contactUs = 'Contact Us'; + String deleteAtsigns = 'Delete atSign(s)'; + static final String resetButton = 'Reset'; static const String resetDescription = 'This will remove the selected atSign and its details from this app only.'; From 77e99448cd15620f2a8519ae9a9693a00d8ab205 Mon Sep 17 00:00:00 2001 From: Chandram-Dutta Date: Fri, 30 Sep 2022 04:38:30 +0530 Subject: [PATCH 04/94] Update --- lib/screens/settings/settings_screen.dart | 3 ++- lib/screens/settings/widgets/settings_buttons.dart | 5 +++-- lib/utils/colors.dart | 5 +++++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index ae8e2b04..48505bfb 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -2,6 +2,7 @@ import 'package:at_backupkey_flutter/widgets/backup_key_widget.dart'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -142,7 +143,7 @@ class _SettingsScreenState extends State { ), Divider( height: 58, - color: Color(0xFFD9D9D9), + color: ColorConstants.dividerGrey, ), SettingsButton( buttonText: optionTitle[2], diff --git a/lib/screens/settings/widgets/settings_buttons.dart b/lib/screens/settings/widgets/settings_buttons.dart index 7af940ff..4c5ca37f 100644 --- a/lib/screens/settings/widgets/settings_buttons.dart +++ b/lib/screens/settings/widgets/settings_buttons.dart @@ -1,3 +1,4 @@ +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; @@ -18,10 +19,10 @@ class SettingsButton extends StatelessWidget { return MaterialButton( elevation: 0, onPressed: onPressed, - color: Color(0xFFF1F1F1), + color: ColorConstants.fadedGreyN, shape: RoundedRectangleBorder( side: BorderSide( - color: Color(0xFF939393), + color: ColorConstants.grey, width: 1, style: BorderStyle.solid, ), diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 45ee0b55..9486654b 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -32,6 +32,11 @@ class ColorConstants { static const Color light_border_color = Color(0xFFEEF1F4); static const Color textBoxBg = Color(0xFFF2F2F2); static const Color lightBlueBg = Color(0xFFF8FBFF); + + //NEW UI COLORS + static const Color fadedGreyN = Color(0xFFF1F1F1); + static const Color dividerGrey = Color(0xFFD9D9D9); + static const Color grey = Color(0xFF939393); } class ContactInitialsColors { From 047427fd3e7b27d8c2ec4906d531a8945393a4b2 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 4 Oct 2022 13:07:16 +0530 Subject: [PATCH 05/94] svg files added --- assets/svg/contacts.svg | 4 ++++ assets/svg/history.svg | 3 +++ assets/svg/home.svg | 3 +++ assets/svg/my_files.svg | 3 +++ assets/svg/navigation_rectangle.svg | 21 +++++++++++++++++++++ assets/svg/plus.svg | 3 +++ assets/svg/settings.svg | 3 +++ 7 files changed, 40 insertions(+) create mode 100644 assets/svg/contacts.svg create mode 100644 assets/svg/history.svg create mode 100644 assets/svg/home.svg create mode 100644 assets/svg/my_files.svg create mode 100644 assets/svg/navigation_rectangle.svg create mode 100644 assets/svg/plus.svg create mode 100644 assets/svg/settings.svg diff --git a/assets/svg/contacts.svg b/assets/svg/contacts.svg new file mode 100644 index 00000000..25b1ba3c --- /dev/null +++ b/assets/svg/contacts.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/history.svg b/assets/svg/history.svg new file mode 100644 index 00000000..81d29e8f --- /dev/null +++ b/assets/svg/history.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/home.svg b/assets/svg/home.svg new file mode 100644 index 00000000..ed614a2b --- /dev/null +++ b/assets/svg/home.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/my_files.svg b/assets/svg/my_files.svg new file mode 100644 index 00000000..e3925589 --- /dev/null +++ b/assets/svg/my_files.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/navigation_rectangle.svg b/assets/svg/navigation_rectangle.svg new file mode 100644 index 00000000..b77ce64d --- /dev/null +++ b/assets/svg/navigation_rectangle.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/plus.svg b/assets/svg/plus.svg new file mode 100644 index 00000000..83a18aee --- /dev/null +++ b/assets/svg/plus.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/settings.svg b/assets/svg/settings.svg new file mode 100644 index 00000000..42bd6a9d --- /dev/null +++ b/assets/svg/settings.svg @@ -0,0 +1,3 @@ + + + From 1d535867e1b23f1c38881103c6593a3f0e9251b9 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 4 Oct 2022 13:11:13 +0530 Subject: [PATCH 06/94] bottom navigation implemented --- .../welcome_screen/welcome_screen.dart | 269 +++++++++++++++--- pubspec.yaml | 1 + 2 files changed, 228 insertions(+), 42 deletions(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 2a2cf670..50edee5e 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -15,6 +15,7 @@ import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; import '../../utils/text_strings.dart'; import '../common_widgets/side_bar.dart'; @@ -75,7 +76,7 @@ class _WelcomeScreenState extends State { ? _fileTransferProvider.error[_fileTransferProvider.SEND_FILES] : null, ); - }); + }); } setAtSign() async { @@ -106,45 +107,117 @@ class _WelcomeScreenState extends State { color: ColorConstants.scaffoldColor, child: SafeArea( child: Scaffold( - bottomNavigationBar: BottomNavigationBar( - elevation: 0, - selectedLabelStyle: TextStyle( - fontSize: 12.toFont, - fontWeight: FontWeight.normal, + // bottomNavigationBar: Container( + // decoration: BoxDecoration( + // borderRadius: BorderRadius.only( + // topRight: Radius.circular(30), topLeft: Radius.circular(30)), + // boxShadow: [ + // BoxShadow( + // color: Colors.black26, spreadRadius: 0, blurRadius: 10), + // ], + // ), + // child: ClipRRect( + // borderRadius: BorderRadius.only( + // topLeft: Radius.circular(30.0), + // topRight: Radius.circular(30.0), + // ), + // child: BottomNavigationBar( + // elevation: 0, + // selectedLabelStyle: TextStyle( + // fontSize: 12.toFont, + // fontWeight: FontWeight.normal, + // ), + // unselectedLabelStyle: TextStyle( + // fontSize: 12.toFont, + // fontWeight: FontWeight.normal, + // ), + // items: [ + // BottomNavigationBarItem( + // icon: SvgPicture.asset("assets/svg/contacts.svg"), + // label: + // _selectedBottomNavigationIndex == 0 ? '' : 'Contacts', + // activeIcon: SizedBox( + // height: 50, + // child: Column( + // children: [ + // SvgPicture.asset("assets/svg/contacts.svg", + // color: Color(0xffEAA743)), + // Text("Contacts"), + // // SizedBox( + // // height: 5, + // // width: 60, + // // child: CustomPaint( + // // painter: PainterOne(), + // // ), + // // ), + // ], + // ), + // ), + // ), + // BottomNavigationBarItem( + // icon: SvgPicture.asset("assets/svg/my_files.svg", + // color: _selectedBottomNavigationIndex == 1 + // ? Color(0xffEAA743) + // : Colors.black), + // label: 'My Files', + // ), + // BottomNavigationBarItem( + // icon: SvgPicture.asset("assets/svg/history.svg", + // color: _selectedBottomNavigationIndex == 2 + // ? Color(0xffEAA743) + // : Colors.black), + // label: 'History', + // ), + // BottomNavigationBarItem( + // icon: SvgPicture.asset("assets/svg/settings.svg", + // color: _selectedBottomNavigationIndex == 3 + // ? Color(0xffEAA743) + // : Colors.black), + // label: 'Settings', + // ), + // ], + // currentIndex: _selectedBottomNavigationIndex, + // selectedItemColor: Colors.amber[800], + // onTap: _onBottomNavigationSelect, + // ), + // ), + // ), + bottomNavigationBar: customBottomNavigationBar(), + key: _scaffoldKey, + backgroundColor: ColorConstants.scaffoldColor, + floatingActionButtonLocation: + FloatingActionButtonLocation.centerDocked, + floatingActionButton: Container( + width: 79, + height: 79, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: + LinearGradient( + colors: [Color(0xffF05E3F), Color(0xffEAA743)], + stops: [0.1, 0.8], + ) ), - unselectedLabelStyle: TextStyle( - fontSize: 12.toFont, - fontWeight: FontWeight.normal, + child: FloatingActionButton( + elevation: 0, + backgroundColor: Colors.transparent, + onPressed: () {}, + child: SvgPicture.asset("assets/svg/plus.svg",), ), - items: [ - BottomNavigationBarItem( - icon: Icon(Icons.home, size: 20.toFont), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(Icons.import_export, size: 20.toFont), - label: 'Received', - ), - ], - currentIndex: _selectedBottomNavigationIndex, - selectedItemColor: Colors.amber[800], - onTap: _onBottomNavigationSelect, ), - key: _scaffoldKey, - backgroundColor: ColorConstants.scaffoldColor, appBar: _selectedBottomNavigationIndex == 0 ? (SizeConfig().isTablet(context) - ? null - : CustomAppBar( - showLeadingicon: true, - )) + ? null : CustomAppBar( - showMenu: true, - showBackButton: false, - showTrailingButton: true, - showTitle: true, - showClosedBtnText: false, - title: 'Received Files'), + showLeadingicon: true, + )) + : CustomAppBar( + showMenu: true, + showBackButton: false, + showTrailingButton: true, + showTitle: true, + showClosedBtnText: false, + title: 'Received Files'), extendBody: true, drawerScrimColor: Colors.transparent, endDrawer: SideBarWidget( @@ -152,16 +225,128 @@ class _WelcomeScreenState extends State { ), body: Consumer( builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[_selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }), + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[_selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }), + ), + ), + ); + } + + Widget customBottomNavigationBar() { + return Container( + height: 70, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topRight: Radius.circular(20), topLeft: Radius.circular(20)), + boxShadow: [ + BoxShadow(color: Colors.black26, spreadRadius: 0, blurRadius: 10), + ], + ), + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0), + ), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + bottomNavigationItem("assets/svg/contacts.svg", "Contacts", 0), + bottomNavigationItem("assets/svg/my_files.svg", "My Files", 1), + SizedBox( + width: 20, + ), + bottomNavigationItem("assets/svg/history.svg", "History", 2), + bottomNavigationItem("assets/svg/settings.svg", "Settings", 3), + ], + ), ), ), ); } + + Widget bottomNavigationItem(String assetLocation, String label, int index) { + return GestureDetector( + onTap: () { + setState(() { + _selectedBottomNavigationIndex = index; + }); + }, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Spacer(), + SvgPicture.asset( + assetLocation, + color: _selectedBottomNavigationIndex == index + ? Color(0xffEAA743) + : Colors.black, + // height: 29, + ), + SizedBox( + height: 3, + ), + Text(label, + style: TextStyle( + fontSize: 11, + color: _selectedBottomNavigationIndex == index + ? Color(0xffEAA743) + : Colors.black)), + Spacer(), + if (_selectedBottomNavigationIndex == index) + Container( + height: 2, + width: 50, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color(0xffEAA743).withOpacity(0.5), + spreadRadius: 5, + blurRadius: 7, + offset: Offset(0, -1), // changes position of shadow + ), + ], + ), + ), + if (_selectedBottomNavigationIndex == index) + SizedBox( + height: 5, + width: 60, + child: CustomPaint( + painter: PainterOne(), + ), + ), + ], + ), + ); + } +} + +class PainterOne extends CustomPainter { + @override + void paint(Canvas canvas, Size size) { + double w = size.width; + double h = size.height; + + var paint1 = Paint() + ..color = Color(0xffEAA743) + ..style = PaintingStyle.fill; + + RRect halfRect = RRect.fromRectAndCorners( + Rect.fromCenter(center: Offset(w / 2, h / 2), width: w, height: h), + bottomLeft: Radius.circular(50), + bottomRight: Radius.circular(50)); + canvas.drawRRect(halfRect, paint1); + } + + @override + bool shouldRepaint(CustomPainter oldDelegate) => true; } diff --git a/pubspec.yaml b/pubspec.yaml index 44342542..30bc1ac3 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -75,6 +75,7 @@ dependencies: at_sync_ui_flutter: ^1.0.6 showcaseview: ^1.1.5 biometric_storage: ^4.1.3 + flutter_svg: ^1.1.5 dev_dependencies: flutter_test: From 7aa99674e36176bb54e4580299aa76d62fc2d5ec Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 4 Oct 2022 13:35:00 +0530 Subject: [PATCH 07/94] home icon on FAB in settings page --- .../welcome_screen/welcome_screen.dart | 83 +------------------ pubspec.yaml | 1 + 2 files changed, 4 insertions(+), 80 deletions(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 50edee5e..77d4fc37 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -107,81 +107,6 @@ class _WelcomeScreenState extends State { color: ColorConstants.scaffoldColor, child: SafeArea( child: Scaffold( - // bottomNavigationBar: Container( - // decoration: BoxDecoration( - // borderRadius: BorderRadius.only( - // topRight: Radius.circular(30), topLeft: Radius.circular(30)), - // boxShadow: [ - // BoxShadow( - // color: Colors.black26, spreadRadius: 0, blurRadius: 10), - // ], - // ), - // child: ClipRRect( - // borderRadius: BorderRadius.only( - // topLeft: Radius.circular(30.0), - // topRight: Radius.circular(30.0), - // ), - // child: BottomNavigationBar( - // elevation: 0, - // selectedLabelStyle: TextStyle( - // fontSize: 12.toFont, - // fontWeight: FontWeight.normal, - // ), - // unselectedLabelStyle: TextStyle( - // fontSize: 12.toFont, - // fontWeight: FontWeight.normal, - // ), - // items: [ - // BottomNavigationBarItem( - // icon: SvgPicture.asset("assets/svg/contacts.svg"), - // label: - // _selectedBottomNavigationIndex == 0 ? '' : 'Contacts', - // activeIcon: SizedBox( - // height: 50, - // child: Column( - // children: [ - // SvgPicture.asset("assets/svg/contacts.svg", - // color: Color(0xffEAA743)), - // Text("Contacts"), - // // SizedBox( - // // height: 5, - // // width: 60, - // // child: CustomPaint( - // // painter: PainterOne(), - // // ), - // // ), - // ], - // ), - // ), - // ), - // BottomNavigationBarItem( - // icon: SvgPicture.asset("assets/svg/my_files.svg", - // color: _selectedBottomNavigationIndex == 1 - // ? Color(0xffEAA743) - // : Colors.black), - // label: 'My Files', - // ), - // BottomNavigationBarItem( - // icon: SvgPicture.asset("assets/svg/history.svg", - // color: _selectedBottomNavigationIndex == 2 - // ? Color(0xffEAA743) - // : Colors.black), - // label: 'History', - // ), - // BottomNavigationBarItem( - // icon: SvgPicture.asset("assets/svg/settings.svg", - // color: _selectedBottomNavigationIndex == 3 - // ? Color(0xffEAA743) - // : Colors.black), - // label: 'Settings', - // ), - // ], - // currentIndex: _selectedBottomNavigationIndex, - // selectedItemColor: Colors.amber[800], - // onTap: _onBottomNavigationSelect, - // ), - // ), - // ), bottomNavigationBar: customBottomNavigationBar(), key: _scaffoldKey, backgroundColor: ColorConstants.scaffoldColor, @@ -194,7 +119,7 @@ class _WelcomeScreenState extends State { shape: BoxShape.circle, gradient: LinearGradient( - colors: [Color(0xffF05E3F), Color(0xffEAA743)], + colors: [Color(0xffF05E3F), Color(0xffe9a642)], stops: [0.1, 0.8], ) ), @@ -202,7 +127,7 @@ class _WelcomeScreenState extends State { elevation: 0, backgroundColor: Colors.transparent, onPressed: () {}, - child: SvgPicture.asset("assets/svg/plus.svg",), + child: _selectedBottomNavigationIndex == 3 ? SvgPicture.asset("assets/svg/plus.svg",) : SvgPicture.asset("assets/svg/home.svg",) , ), ), appBar: _selectedBottomNavigationIndex == 0 @@ -276,9 +201,7 @@ class _WelcomeScreenState extends State { Widget bottomNavigationItem(String assetLocation, String label, int index) { return GestureDetector( onTap: () { - setState(() { - _selectedBottomNavigationIndex = index; - }); + _onBottomNavigationSelect(index); }, child: Column( mainAxisAlignment: MainAxisAlignment.end, diff --git a/pubspec.yaml b/pubspec.yaml index 30bc1ac3..ec368880 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -111,6 +111,7 @@ flutter: # To add assets to your application, add an assets section, like this: assets: - assets/images/ + - assets/svg/ # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/assets-and-images/#resolution-aware. From 65ade8bcf0b6dc6519c13aab9f0db65452059c02 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 4 Oct 2022 13:48:14 +0530 Subject: [PATCH 08/94] added screens whichever were available --- lib/screens/welcome_screen/welcome_screen.dart | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 77d4fc37..56e75e22 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -1,6 +1,8 @@ import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_screen_received_files.dart'; import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; @@ -98,7 +100,9 @@ class _WelcomeScreenState extends State { static List _bottomSheetWidgetOptions = [ WelcomeScreenHome(), - WelcomeScreenReceivedFiles() + MyFiles(), + HistoryScreen(), + WelcomeScreenReceivedFiles(), ]; @override From 4fb753e2ac9251ac66bfd6d040b0375ab0ecab37 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 4 Oct 2022 13:56:52 +0530 Subject: [PATCH 09/94] increased padding --- lib/screens/welcome_screen/welcome_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 56e75e22..1f99488d 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -184,7 +184,7 @@ class _WelcomeScreenState extends State { topRight: Radius.circular(30.0), ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 8.0), + padding: const EdgeInsets.symmetric(horizontal: 20.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ From 2eb00327bf18f64daac2919bf184a42463b332d0 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Fri, 7 Oct 2022 20:32:37 +0530 Subject: [PATCH 10/94] made the required changes --- .../welcome_screen/welcome_screen.dart | 35 +++++++++++-------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 1f99488d..818c6d30 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_contacts_flutter/screens/contacts_screen.dart'; import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; @@ -20,8 +21,6 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; import '../../utils/text_strings.dart'; -import '../common_widgets/side_bar.dart'; -import '../../view_models/file_transfer_provider.dart'; class WelcomeScreen extends StatefulWidget { @override @@ -100,6 +99,7 @@ class _WelcomeScreenState extends State { static List _bottomSheetWidgetOptions = [ WelcomeScreenHome(), + ContactsScreen(), MyFiles(), HistoryScreen(), WelcomeScreenReceivedFiles(), @@ -130,7 +130,11 @@ class _WelcomeScreenState extends State { child: FloatingActionButton( elevation: 0, backgroundColor: Colors.transparent, - onPressed: () {}, + onPressed: () { + setState(() { + _selectedBottomNavigationIndex = 0; + }); + }, child: _selectedBottomNavigationIndex == 3 ? SvgPicture.asset("assets/svg/plus.svg",) : SvgPicture.asset("assets/svg/home.svg",) , ), ), @@ -184,17 +188,17 @@ class _WelcomeScreenState extends State { topRight: Radius.circular(30.0), ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 20.0), + padding: const EdgeInsets.symmetric(horizontal: 15.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - bottomNavigationItem("assets/svg/contacts.svg", "Contacts", 0), - bottomNavigationItem("assets/svg/my_files.svg", "My Files", 1), + bottomNavigationItem("assets/svg/contacts.svg", "Contacts", 1), + bottomNavigationItem("assets/svg/my_files.svg", "My Files", 2), SizedBox( width: 20, ), - bottomNavigationItem("assets/svg/history.svg", "History", 2), - bottomNavigationItem("assets/svg/settings.svg", "Settings", 3), + bottomNavigationItem("assets/svg/history.svg", "History", 3), + bottomNavigationItem("assets/svg/settings.svg", "Settings", 4), ], ), ), @@ -216,7 +220,7 @@ class _WelcomeScreenState extends State { color: _selectedBottomNavigationIndex == index ? Color(0xffEAA743) : Colors.black, - // height: 29, + height: 25, ), SizedBox( height: 3, @@ -227,17 +231,18 @@ class _WelcomeScreenState extends State { color: _selectedBottomNavigationIndex == index ? Color(0xffEAA743) : Colors.black)), - Spacer(), + // Spacer(), + SizedBox(height: 10,), if (_selectedBottomNavigationIndex == index) Container( height: 2, - width: 50, + width: 40, decoration: BoxDecoration( boxShadow: [ BoxShadow( color: Color(0xffEAA743).withOpacity(0.5), - spreadRadius: 5, - blurRadius: 7, + spreadRadius: 3, + blurRadius: 5, offset: Offset(0, -1), // changes position of shadow ), ], @@ -245,8 +250,8 @@ class _WelcomeScreenState extends State { ), if (_selectedBottomNavigationIndex == index) SizedBox( - height: 5, - width: 60, + height: 4, + width: 50, child: CustomPaint( painter: PainterOne(), ), From 42ecdb6e0192988180d56f0dc671330d047d0812 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Fri, 7 Oct 2022 20:35:16 +0530 Subject: [PATCH 11/94] minor size change --- lib/screens/welcome_screen/welcome_screen.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 818c6d30..6e4c09fd 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -195,7 +195,7 @@ class _WelcomeScreenState extends State { bottomNavigationItem("assets/svg/contacts.svg", "Contacts", 1), bottomNavigationItem("assets/svg/my_files.svg", "My Files", 2), SizedBox( - width: 20, + width: 1, ), bottomNavigationItem("assets/svg/history.svg", "History", 3), bottomNavigationItem("assets/svg/settings.svg", "Settings", 4), From fca7d4d1b3490a1657aec205564659febc070d0d Mon Sep 17 00:00:00 2001 From: Chandram-Dutta Date: Mon, 10 Oct 2022 21:07:40 +0530 Subject: [PATCH 12/94] Updated the imports for uniformity --- lib/screens/settings/settings_screen.dart | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 48505bfb..4490e546 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -1,22 +1,22 @@ import 'package:at_backupkey_flutter/widgets/backup_key_widget.dart'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/routes/route_names.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/constants.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; -import '../../routes/route_names.dart'; -import '../../services/common_utility_functions.dart'; -import '../../services/navigation_service.dart'; -import '../../utils/constants.dart'; -import '../../utils/images.dart'; -import '../../utils/text_strings.dart'; -import '../../utils/text_styles.dart'; -import '../common_widgets/app_bar.dart'; -import '../common_widgets/side_bar.dart'; -import '../common_widgets/switch_at_sign.dart'; class SettingsScreen extends StatefulWidget { const SettingsScreen({Key? key}) : super(key: key); From d63e2cdd0eb9492448a4848a2e94b7337979f71f Mon Sep 17 00:00:00 2001 From: ketanvishwakarma Date: Mon, 10 Oct 2022 23:40:54 +0530 Subject: [PATCH 13/94] Add: "Inter" fonts --- assets/fonts/Inter/Inter-Bold.ttf | Bin 0 -> 316100 bytes assets/fonts/Inter/Inter-Light.ttf | Bin 0 -> 310420 bytes assets/fonts/Inter/Inter-Medium.ttf | Bin 0 -> 314712 bytes assets/fonts/Inter/Inter-Regular.ttf | Bin 0 -> 309828 bytes assets/fonts/Inter/Inter-SemiBold.ttf | Bin 0 -> 315756 bytes lib/app.dart | 2 +- pubspec.yaml | 13 +++++++++++++ 7 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 assets/fonts/Inter/Inter-Bold.ttf create mode 100644 assets/fonts/Inter/Inter-Light.ttf create mode 100644 assets/fonts/Inter/Inter-Medium.ttf create mode 100644 assets/fonts/Inter/Inter-Regular.ttf create mode 100644 assets/fonts/Inter/Inter-SemiBold.ttf diff --git a/assets/fonts/Inter/Inter-Bold.ttf b/assets/fonts/Inter/Inter-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8e82c70d1081e2857ada1b73395d4f42c2e8adc9 GIT binary patch literal 316100 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�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

6=3(=QnPeuLDdti0n3-y(nd#Q;7fbjCmF@fSxxm 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⁡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 Ag#Z8m literal 0 HcmV?d00001 diff --git a/assets/fonts/Inter/Inter-Medium.ttf b/assets/fonts/Inter/Inter-Medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b53fb1c4acbe100c7a91f07564b7f1fa2d5bab12 GIT binary patch literal 314712 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Inter/Inter-Regular.ttf b/assets/fonts/Inter/Inter-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8d4eebf20665d5ae746c622a2bd42274b54d2bf1 GIT binary patch literal 309828 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

V7T@aTyAqtk8R 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

NU^a~Y-YT{n`0xQzR2cZRm6M*N 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

qEIEEraMLk+K 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 z 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� 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 z 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 literal 0 HcmV?d00001 diff --git a/lib/app.dart b/lib/app.dart index 4fdbee87..b553c55c 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -79,7 +79,7 @@ class _MyAppState extends State { initialRoute: initialRoute, navigatorKey: NavService.navKey, theme: ThemeData( - fontFamily: 'HelveticaNeu', + fontFamily: 'Inter', scaffoldBackgroundColor: Colors.white, primaryColor: Color.fromARGB(255, 240, 94, 62), appBarTheme: AppBarTheme( diff --git a/pubspec.yaml b/pubspec.yaml index 44342542..3f106119 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -138,6 +138,19 @@ flutter: fonts: - asset: assets/fonts/Playfair_Display/PlayfairDisplay-Bold.ttf + - family: Inter + fonts: + - asset: assets/fonts/Inter/Inter-Light.ttf + weight: 300 + - asset: assets/fonts/Inter/Inter-Regular.ttf + weight: 400 + - asset: assets/fonts/Inter/Inter-Medium.ttf + weight: 500 + - asset: assets/fonts/Inter/Inter-SemiBold.ttf + weight: 600 + - asset: assets/fonts/Inter/Inter-Bold.ttf + weight: 700 + # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # From 7c2ae80f3ac12f581dc9789832e9766c5d2900fe Mon Sep 17 00:00:00 2001 From: ketanvishwakarma Date: Mon, 10 Oct 2022 23:42:32 +0530 Subject: [PATCH 14/94] Add: Image assets --- assets/images/blocked.png | Bin 4034 -> 796 bytes assets/images/contacts.png | Bin 1904 -> 691 bytes assets/images/faqs.png | Bin 1842 -> 630 bytes assets/images/groups.png | Bin 2208 -> 880 bytes assets/images/home_icon.png | Bin 6259 -> 598 bytes assets/images/my_files.png | Bin 828 -> 646 bytes assets/images/selected_sidebar.png | Bin 0 -> 1138 bytes assets/images/send.png | Bin 3184 -> 0 bytes assets/images/send_icon.png | Bin 0 -> 748 bytes assets/images/settings.png | Bin 0 -> 782 bytes assets/images/termsAndConditions.png | Bin 1621 -> 568 bytes assets/images/transferHistory.png | Bin 1556 -> 755 bytes assets/images/trustedSendersIcon.png | Bin 2176 -> 855 bytes lib/utils/images.dart | 5 ++++- 14 files changed, 4 insertions(+), 1 deletion(-) create mode 100644 assets/images/selected_sidebar.png delete mode 100644 assets/images/send.png create mode 100644 assets/images/send_icon.png create mode 100644 assets/images/settings.png diff --git a/assets/images/blocked.png b/assets/images/blocked.png index d040e218d4494cc39f89f43d193a54ceb457db7c..ae313d2af05ff01b89c5b8e17edcb5e1746d77d7 100644 GIT binary patch literal 796 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 Z!e0&3N9YvKV5tBA002ovPDHLkV1i4BGNb?i literal 1904 zcmZvdXE+;*8po5^n#FQ~@0RX|z1gw=S8OSZOisk4-Gem6l-ZpevQD`fI_Z^*n@H@B3Cuw{yxK>Yu zf3L_fo1HeYT86lqTP-WJt5$c8^nwyv%Atm&(=1!wvyXaIR`hrR3Y1Y%9i=%=d#Fd=J(I(J{Sb_f$~TYYpo4AU-YNZG3W#iO$?EW@!-i2dBp>@5#+PCl%zRuA znDhY;H5iw{{wN$KH~WqpV~vdx^z6XfK>0*YF}a?Ac;Stn^f#v*Q2ba22p2R{X+Weq zQMt(z{WkC{%d2wy>suiB*rsKM))leMh#eL9Jhx8D)crq0>0oYNb%LhGG_d)Y8~iN( z)^P|*f)G;COGqWz+bRHjslM51#UGk5LJ(^N)5M&bRCI|!6=nn~)Cvbv_8ktIS1^-D zki15uOcq4&*lUdlwC;>w6j?&yM6EN+7?1HLn`zgd5n_Vnw9wH5ZwE`o$DUpgQylqG zfB2FXT~RKF(*&pONg?ez=U|1e{g$Fm4=fAhz7f94h!+3P*g!1N!QrC~%tX9rI&81i z=EbXo^OopoO#h=e$P#Jd+ww9m5R!t`NqC&$XCR%TBqn#jtH$=_eOu<15$TyfZmbmi?1sXA@Z#`o!>=J2sULs`9fSq}iK?MB>P!NE7EfX@ToO zZh1D|mN3{CkESF}TUTg@8rF+3p$T)+nY?lJeY`gfMp)0JhaI(PpE(Slb0uGTW3y2r4;{s?4Mv=4=LbBf z58{nQQ#Ozbzi;!t_=k3+kN^5X(*oiiv4JEU78_pn4e&=97iK znrui8ZHSNbPMnkf-`b^Hg@NEJ33q}doiJ@ZrN81d@JpejN2of@pb4YjS0Zzb5=R~P z6YQGx4ohi=lpO8NZ0Nb2jHr9MUeya12g}XcvaAnZdHVoy5kUJF!ng^Qj}_*07N{g% zhF)pkg`+@g1Tb7Alu$~}KB(|6M~$0-Kc{<;;ROO+BIG$Nbhu$>QRNK@zA7S>m4Dk~ z(XvZ2Hm9;*A?2mvpQ$jB+saMUj2W){VqaKXavU#J9fviH5RxVVczk!(&)@4Ge2u`* zpH3Xs>h}Pk)CR~ z(?{9QWx|fx?=`9$CJaUl-pZM+R@E6tuy?dv;9r(c0%eU`FbyPux3PX9+&`#>yfn zd8TMq%~ZC$b;TVbViw*I=WM(aOfudHFbHDMJsp!k&>Az7)&eL&B92E_b4iMiP*yL1 zuk6Y?SMIK{Y+X4xoTQ?`<%z;DiMINg=5T#uzg z|9z&4@dRJx*>7vNEj-@jH84$-89KGs(f;Y0W_o6djHPPHNDR#0(=Fi8wS+cQ8x9}2 z*R6pC)nU8os2J7zZldJpN9d;AW+MdmPo ze$$KgIfskLvFicgCc-|p+t68Z#Z(}@a;)q6U1-e(-6If`P@b>^kDMRi_ i1+-y!-qx`QMHML7I5KQropk*9`3N`%Y{R91)V}~vpInsy diff --git a/assets/images/faqs.png b/assets/images/faqs.png index f899d7e4efcf09276fd0e90049f153d0589d096c..2d41567f0d96b5a711086e4eaea2a1553b70f8dc 100644 GIT binary patch literal 630 zcmV-+0*U>JP)4xj_D0HJ^r4n5m3)V;5py}3ErWwBiCfm;(a+yQxT&`w;lF*1LX0XjM_AWI3_UR%*uj6<9Hb{z2<_SLbCTGb z7&9QC_r%nJr#O!yjVva`s!$e84)A!DC>nP&8fWod~uMov#|QC2pDItrL5DkJWGb~AH5S99^6_dVzQo^yLHgoXHP!;x?R z0JO0IzTw+W`yvh4b{$8vi?E3Z2Uu@s4FGgL8Gw92wuRgl z0I1cg{WYQ0ga6K7mSFt;TmXRG!uon0rhw$Xgc4ClPyz|=dD>y>?VE`diI??>FRK?^U8;+RD_hd|kA*u|ivzdNtGK{C&^Oy1;}P%8s)F2FA0woSIUm zY1U@Ly_MwQ5bKiY4y(k zp~9u%b&IgP@TN5|MsEbCTCVNBsU57ZSHFjxZwQ+^My~AB zyF~eudb3t4EKplrRwzzJs_T3=i?n9f$=)GQhSv3_v+}(0mS(j)YxbDI;y|Is<92Y*pO zKI6ti950$TF2#s=q*i0`!6L{gfOm*#{gy5few7BM^qhP+4Ae&WbG60LXOn?oN{C6% z0lI+}%SKy#FzerdGa0F?3+T?Z2_|g0hJUvO@&M-@O;PVZEl4nI{&mGYqiuKwnW)Q(v8{ z9aHpU(5lhn&1>4SU2d2c(|~>NskLN9gIlD7oR)I2UB++ zLt4axx@tqG$Tgx%n_C?-nqEf4>M&$4RX|}QZg`za$w3Lf2V1m5}l61YnMKDPNABUFOS7JgPt)wie z*Q<%@+k62^FW?&9h(0oMotWcr*=la8!pS>2{Od_nz8SSW3Q7)oDv?`4DVPD{pG%fW zeDEX0P>HzBf5O{ zk8n#Zyp$P@bOS}-$P-@D!VzZ+eyTpSiypeOy4J(hAK_Trm|*lN0lO=2#+s01cO^aq zjs9^X{uWHTQ+{n~jo3b1{PMU=f3q!y-)S4jm>U{$N)I!6J)1HV+4=F{c}WZWW5+&~ zyr&S{9kJEW;_*Sb1{IHfQ_gz7FPA=mNUQ4583X4cft>q46mD5fo)jK81=7C{PHNTI z%&J->JyoY9@oZi1Ynh4d7Bi;%&2#D5fxi`G1}Q)ykg;U19bcUyDMvx2J3RQVrWV#fdg diff --git a/assets/images/groups.png b/assets/images/groups.png index 768d8bf76819805a2fd8cfe8a12da5cc5bee285f..e95c177a4dfba46445336942f09bad8771723570 100644 GIT binary patch literal 880 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 literal 6259 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 literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)EX7WqAsj$Z!;#X#z`*p`)5S5Q zBJS;-z5XJO5^Nu4ntqhhoEnt8_CJG}iiyfC!6;tU4c?F0+r`$k7X7$*M=wAqmvgR~ ziJHkT{*2r$F5bE4j>z6GJnypS#M^hqo43#5=WJ}LeD>_`M;0S@zO_HtI5RZPZctK) zXmVq0OSHZgb>BWuE%{8d$=f3j?wotX!lKFP;Sj*kv$>Ilh4p}iG@UuVtUZgq`7Zqu z{Gq1r(X+5gCG#wAy*XhPCoSQ+`ubF^vL}Mf^6mN?(wBv7o1h}C&$VXlmLu8=Y$qzj zO;vk$vU>F;PVIIde@$cciuGFgfeJ5VFU(6!O)Whou~)xCnDyL~gwCI6{*4nxoefPX6^0@hV?iX-dX3Y zzs2~raoV&;#*PO4*|+bG-Je*yD$SkkhW!S^1i!)6h?PMvK}0m^R;u z68d>mXqxniB}KbCPNm*ipU09Q|8bjwou1jEoyrydU2DJYUS-%|`RKyx`QKMZM!s`n z{3iIn@ayX5S!ItH-!e3Z@Bg(fEtzqK^0RRJ-<5O2H*aLz(yXJmP5)N^?b~ztQ`uK% z*FLUeyJos$^>IZ74NnKACZ>cryebMB499LdTyOZ~FR=We?Qtu;|9?I{IM2u~rQyG` z|IN;=lNI#qjVzMf4otdl$~2ATceN!WCkIzUq1l9n1q>4D%(cu-zyFsP#yvfdZ^`I* aV7^Mmp9GH5Yf`}Mz~JfX=d#Wzp$PygS!_}O diff --git a/assets/images/selected_sidebar.png b/assets/images/selected_sidebar.png new file mode 100644 index 0000000000000000000000000000000000000000..e67b044f04af3c699bd7968438844df4cc2ab963 GIT binary patch literal 1138 zcmV-&1daQNP)`9TuI3ACOr>CbYo4!`n7p0WTl7;T?@89lryU#X#W>yMNzaU^I=G_sQ+;ZNu}$v?;%IAu|t+ABTxaXlRytb8~ZT9$wOF z*e-z4o;8hc2I#`L#)1M%wed7O^p`N#ehptYZGSGHk+lsD)s(dRQriSt5-nJK#t5^E zQJ}eF9ICsbfv0SWb)yFprel~Z!I^<^Nix$GOq18sqMG?42b_)WHJM;)`jqZ_WJ1P} z<}!rU>4E7sfO(j3?M%48AYnID7ud3C=TSi}<804^=|KfQ6sE>aLnE0K%53Lt(wOGZ ztXbn$@ySA^aP`&f6j_j(3SK$Am@1@MDA7Sru(HI6e#30ECRGq`nrnK#WjJHySOaSv zq4JWWxhrsb61iS4LSd{a{}8$&DfV?>3ag3e;*qhIr-hr%=0G66f`%rvV!-KvMj{@4 zQ3z;LuCc_uh8sd? z%{ehd5(}UQH00~#bs=0X#CgewkAM$eyJ_n^(-}f&JBDUY3h+l1g>A2wP6O=e}3>r_a(I9u?MtK_~- z)i`$w++Yy`QWGW0_f)#2t}=(r$K4fxSDbPKknCx;!Wx$)z!c>s6>^a^SEfNyZ)DBW zkqZuF;&~eu3SmB@X*k)ZCcwSOOCjtAGS^Pnx$@yH44lLHTp`S9h>WHWGjh&h@VSQ_ zLUII*%$+BzZ0DiiOy1r^QW(AMr44DSpGqDFvdO8Uv|oFzgPQhLLXp|FxIwm;Kq5bU zN^!k-31eY!hRR^x;*zGa^4xh`a3~b}t+*JQ#1z|-B7I8n=X|hG@e&JIAS7R$=9bo)zLKllND0C}3oBU|W(4GuVJ-f&AK5v5GhPO@$ zf)GmiVB_)e@xinlhDoKm0dC#@v0?L{_WT_~ByF9l{aEqK1fSdVrO5PY+D+`C-f(@j z|3x){S4#WKg0l12@Ap@>;K6>%Kl#tNHl;_qes4f>^`({4xga7~l07*qoM6N<$ Ef|l_g)Bpeg literal 0 HcmV?d00001 diff --git a/assets/images/send.png b/assets/images/send.png deleted file mode 100644 index 8e16cc25d5da12d4ae886ae252766fdc2a91e451..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3184 zcmV-$43G1PP)Px#IAvH#W=%~1DgXcg2mk?xX#fNO00031000^Q000000-yo_1ONa40RR91g`fif z1ONa40RR91asU7T0IeL!`~Uz8=1D|BRCodHU2SvJ))l^2yRiXdn>7v?N*cV*Oh0#~ zzo66pnEn?U;SnX=swRX*0C(uCcYdHU@ilrIY7q zC3}r+Y1b>Q-mYdmT1!{=<++c}bI!feRc0hNcK6_c0qyDf+5;hkfj_mS903VZRHT%{ zL}FPAaY=5}r)@p(v_aQ9>dq7M{ODi}L`Q39;IPJEjWrk#JTG#c5 z&T+L59|4f!#2Tt`D6Fb9rA7YQG>M~@J7LvBmAi#N=%m=HiV(K6aMbb|jw@+t1*eC< zBSi|Q-7GDj$gGex5JX9fgG;aWOo}Hc>|n17?4+C)Y2m2l51m}A((WIDNRy(qSs=*Y zg_N)y3s-SmNlPm@KL2J?JVl-de9kwp>>w>=NXv|pmcSquu_J{81xpJa4!UWO6}2d7 zae(n*A6rtiwp~d}D;nMZmPd0Z*6~bcfA?91pMxze9JOG?R7EZO?U6*0!T|x6!(?e` zm}a3`Eq&x1SNrx5NF*s*n+}3}PC`zV%U0CFPPN)R5Wpk;CpM%MeIDszf7+53qB)_} zCY7|fcV}uy;lSWXi!jZp(V9%>zJ*s%=Y0fmY$+$%=iWGZxt3M}fX}Lw1#@DNhANrGPu(>cPOvr}}wiuN= zBVbDlq87q{SczZ4isYt95kj{#rA5wTEss~CC@uVqCWU~DDiR2^NXrzY<#$m5MUf&Z zJt4#wCJ~~R@TEnOB08k7Y7zx$kw>r*W%C)4&66hbSa~Kdq?VUNdFaZE@IloKY6!#u zIate7ygwQOUTG}y3pgOt%VoOU zi>Sqm6s{dGDnC5Q7;5GrKS18^#@+*J3SvH zDLm?O@=z{kOu(Y#H4S7T8n?&-X~K&<PxMj-Q{>5>--cZ}HCm4&aj%Y+XPa_%X0FcC<9k{tS|b zwuaZvs`mDXEiJ#rS{`_xc7dZ7j$%66;z|nFMh*-dJKo>V5mGZ^5(u>c4MJ@YhUj}K zvNHRUmPC@ml`%r}4GxZuXR}$$0k(+4(NZ(i9)|?$pa6s{E6aq_vL zq32)BvSraS_UJE@#<4VVc*hmdJ@6GqOQ)ABV(!_fMUleCP8%8;8j*4UqrWt6$&!E% z14{!xhONx^VPzsXWk9PYiOX2r_7z836e)Zpg;!R?!^eM|)wG}BF}26(T<-WwY$Y%tH(~oC6R;3GNQcSAD6RuSkKtKdsT;=R%F3gEG8~E& z9g<>T;Q6tB462!CWDsah_jAFxV0;(mO{(rPM*RYVVigjCZ1s8 zd6bh)y~w$Nl9Y2G{D0seoD-sU3F~}e+P%Fk&ZJFm9DFS0&vMX5hV}iF z(oN97Y>x_CsUl4ZdkzDgjDaGFJDn%Lnob?ee2kpBExd#L^#nJ=wR)re^6Ki+m)#T; zHYpsZj%PfrPPd&p%hbo+sq3a=+PxOIeFJat9MSrv3buByb4wREDe&~wkYQ+W>ay(A zO-Rfq@Ldm9^C%xXb+MgGa052*b3}Iq$;su)!n-J|V~KF9pC6=f9=l_w4xNoo-|p0n zxK%)%>j;6TunMmul6+a$iw`=wvV+9!lHwpg)PnKxiRR29-|+$_o}W(;r{UoyV!`(g zaO-JOSk;Fl%vXsvF8C!8ZVlKZ#o@!pkM;H0gEbttOTi;`j;U9Vzqz3p&^eIdkGv3y zUM;?ZB8-5F*^w)weu@0EBM-Ccv}SL_rn7tjFKS{e-aX}2I{4^P<|tfIy_ru7GWa6VchgB zo=u?s4*&rY8;Bs@Fa@2##MJ!&O6V#}WhuIXuhWZZ0saCcLOZ{@y0Fyg)xAouNYMkN zF&Xz47-XKVeiOyjdr)LoMKCFNPF=}IS1|6p7`{RcpuTBP<4mRU=+m7kqI*PH3g7#N zO1R4|)avx=}WzWkLP zQvP|5WU)J}EXBUMj27WMUfige=hoI9759}zgfCK-qLa=c@d;k+DJ)ltzrRAz6LDIRVvlY_NV$Y4;$p34OeIkw_Gq?sSjopT=zt8L z3NokkO6fXIVK_Q{o3a$>b4Y}N;kz5AX?;BIUixUTy~U{}1+0ROM+Yxy8;!!!lcjIB zLzCYBKnl#_r)+~|xQ}KR^m6GMn!cX0=6g0bHI{-U0!uO8G>Gt}p5h%(WKx_U@uYx6 zl;JhZ3Rx>G>-xhK_jTJ%&tfJok@5k{@Hrkl#-|b%t^$q3eLJ-69^Oa7L|Fz z57_I~((QfVp)LUe{NQfvEd|I>MJs00^gZ$**&BCDVSi1hI1iANMEJy%*pUKOfh}7o zA4l;C^T=nzq=MSggQfTibgv!-Ks z(4@EI&`4oPgp^p*kzbN2-a;2BiHHafK?)A>digF;b4|xan`=5o1gBJ0qi2=^7U64r zXM)#soYBkeuj!bo-iSzJnG^w=ZMxmErenZmMFiEDS0gA(fi)e?*Xj-9Y`1GV#vI>R zR^L}rKqCGN_k<s1vswbbJb_{ za&T)p#uwW7*1TgOCU{-PIaI>r~;_|`m&Z~$Lf^xohv+!J^&La#2|KF8ZEmBMcXye!2!tOCDGdqzow-_S=lzg+wH(O~(siujv?F=#pErEQYS|&~vka z@E1O|UXsy^Z{tWL)^toR^wDh@KjL2lFRs96_<0o9bc`-^39cD`bvMDyQ%&0k0^b2? W#F9mL3$0H800000Pc%~9Dokhq7&#_m0 z1Q^fP#4S!^^RDSNSHR#s*Q&IfUXUB10*pR*Rqie66)ofwWCWewiujHG{7T#z%@uJQ zDla~;vc@Jzz#4I;z|vX1Fno_Mf?$6 zd!heH%-D;|Eay0lZ1|~hHW*{S(s_sBXeGGXbF3)~zQfpaL8FFML`TOK`}Sdr)|bt z3@EpKS0D_V2MY zVJJu#c#kLn12?H*JWbfWeuF;1j*tPf1q@PzXS<$wOc5W5I||&ZBnXACfah;PpabvA z2ooGAAN3EZ($bu($iPj398uIP{0000KdF#*2CK+Y~0mjgL= z$WP$ZOM`LQU2Z-e5`0Lc-8?4RE|Nq}@P2u4j+B>t_9SwHcLA={r!ZR*TJW^Cy9GP^ z-{P&6#$Y|0?#5vPe(p+Q5mE(DbNjP+T<`<5B&=reHA2Smt(U(M8|vvV7!S6~ZLLNa z#Qj}ZzoGzA*Kh&-oTEf2kw(xjhD#(nA-%f{(kNUV;xi=)MhT3gL4NRqoCH3ubAUWo zR8V_tq4#DVR?wj`a=lcH^M}I8TW`pB(kZrszGHPnmwuZ7w-Ib8VZUKmgoj%ck|8-c zGCeEk8N^{Qec3J3anO^9LaITjrM@t|XQab1+gCxyK;EP%QVsaP$@$8vFfF~Jc)lnG zF`XPe+-V=w3r*rrfqN48#eP>v2QRmuC`3vEHRSHXomNN(?`XdTo#9-S4Xu4OLJ+*w z8pL4`pDzdK=c*_|2QuH0blB^VKgf6ovH}00ZuO4PXJ5;7_ln*##&up{dIO>D{w3f$ zxmDBdT1eJqMh=-p+VvupQRw5}p{zMf zAk}wD4O+aF9>2k(HSJvG!$5wgvLU_9Ykkz83%LH1NhR^)8;;Zi(PyNoaBma5Wh`vjks~1ph?zIaUdNK+Ywv^b{;s3|>oOxPd5{#;=&p zjzxp_VKMIM2Kfop9^W2mGh$J+$V*_=U?os1^vfaik{_{Q!-iS#4})l(lJ`xAN&o-= M07*qoM6N<$g7|q=!~g&Q literal 0 HcmV?d00001 diff --git a/assets/images/termsAndConditions.png b/assets/images/termsAndConditions.png index 8581d538483e728fff459fa2d2463189280dd214..c6b9714202845cc520f309386ea95b19d5bfa694 100644 GIT binary patch literal 568 zcmV-80>}M{P)0>s4V8hWYC{e{BcqM+?*jS zl5|bFKt%Mn&{!T2rWP2PB7jiNM+qPYPz6+r5IK-(;{)j)<12XqM|^jn)a>W*W6+-v zmDtu^y`8R(#~bwb{LcRP?tqPb(J@c8@UxNY`58Fc-=RN27bDj5H*mDyqd$Psbv=$8 zFx?c>eD-eiFmP=LM>qm_9Jsc`1cc53#R7H-Y+R4C4ha0zfj88(z-PUd!IYI)!jI^^ z&@0;g&@<_U^o~gQ?tp|_cj+o4z5yr}0IEPTGDQI2LF|FB0fhc9Bv3z6s--^1IC2d5 zlYVS*lLFwTD}WDeEWwBVJ+1rJS&3CkD;wh#>MrpUaZzur8||D`yDbr}2>B|5C2N4) zSzXTG3QGXoP8*#!6)A!GIgI*u`G`tb)xoMxc7sGB(a9Idq8AhU#iAbk z003xvUc&k9Df0_R_+FhpUj4(KK;r#8E&>fh21|R5ZTNSd5qLacw&#%mB0Sfck(Z&c#0kvRvj8^P8>CZMWbH?XR?Z9bMA1g(i;| z)CyuW5hK6n$MCNcSNJ{d0(?xKoy+o(S>y+8>vnz6YID3Ov*gWfJb{xoZwco4-AUWs zbiVi0v_If4Y6I=bE1Q!IJ6=(fL1yys;s@x$ZG#cb`X;x+CApaI(AB0&X{r~!6ErQS z^G26g7c$i8yFOQrmk{a~UN4Q;Rh)JK_1sdMNjtm0RH7?Pdz@8Cl_lOz+uLn^Ns6e& zDI{aJ@y}b6cVRWF3+qbfTE3{|fPGSSnD(N9g>!Dz&xeaJg3g>jZB0&QRE&pisWRC*66>cN_a-O?lf0jg-wagV~^e>IwGNBpU7UL%xqd>=<9ewv06Ef zS_a4q5GR|z`Tj9F?P_OaYXKtQ`^~UmPMp(C5(}+m?61Q5%iysK+WkM8f6EEv&_5}w zpQt_0eB`MPqxO06Ut(vEbx1LBRkinVQ@lXd8olNrAD|pG=MW)MUU5Djn&R1vjT~J1 zZJIKrbB(ndX{}FXykYU7ws|WKXK#NnDG+f`V2wC$@qKX1d1*hyiSkXo8B7(poZA}5 z;@rpA_CL=Rzb0SGS1Jb+PFB#eY!wN5ej7H%V&RC`dZK&MNaol&~E{-ya}uCp{gSKnMg>AdsCQ(y25HSI_T zk^oVT%M7CF%YB16N92;k)zcsB=d)nA*)fbL$FD^F*q>4P=}F~ z)fbTW%fglMfoR3h+dd1V;_13wEh2>`zpAH}GO@)K!$eJqPc@;U>&&6|FSIAhx!jJp zAwhK(@yTM>TH(2?r%>3&(w67L&xqBtiQJDm4l^#@LKr|zK3)~gx{OS63}8KJzc=y? zXrk6$ZU#ywFVT<44rN7OsZM2|)m7*$_QGG-i(od+ib8d4ZscIkBTelX& z8Zc*0mUHmFr?*f=?ybbXSLMEfOVvnJ`Ec~jx^;s}z4Ra1Yz{g(s7{72`J~}r9KK;r z?Z4(B>=M0i6|h@le$76gnTtI5=^ZJ)Zhu{HY)B_D5zeV9z0`dow2sRBy^PDnyx!+K zQVAUl?Vj$-v`Zxxd&z4yvNBt<-qL2m3EaDGVNt8J?-%r3 z11fZ?`64cynj=0o!A Pm-p`J=7Vdv7?SmGvEutT diff --git a/assets/images/transferHistory.png b/assets/images/transferHistory.png index 319cd884804c3ee38e0741510e5bc47ddbf74084..0d8464d5a1e027a4f082d0fdb23eb87790f57ccc 100644 GIT binary patch literal 755 zcmV^&KR^%xW@cVDS3Tb{D@!Yj=I>Low^CU7ZDor9$Vz49@yt>+y1Yo`T_ZYo zz#HMW1p=&|5VCUH^-($lrIj0}{L9J;r-NtvE9!}SVr%6cl=w?XI6ax5hlsQSkBT~{ zK&6Lt23{0zF&?sVhqQOY7X#nmJv$+8G!+?+&S2k25>)Oh5M$*hYELFbo&0SPtH%@u7>v6=q`GQS z8*qm-mz|na2JrqaF+9`Sl~I$*fUcQequx^PZJss16}S)sa>%o76m1Fes@y_JtN|n_ zP@(-Wddhk%(T=U8K6X$(u3`^`7`L^;QwB7A@D2O${pSe}UI4iU#V=xkqF@S{j z6fq7f>#u@wE2NHvZoKjaaW5??QgyQxlN;~{db+lT-^aCEm^vCA6QJ=y&J=x+TS#qy zKUm*^+jwPOy?dcv@1dRAfcHIhrA&ko>iK;PZcG2v6Z8h^BlP{2e(6M)v&YA&N9d)->KH{j9U+|2PDj& zY9RE#wstta$ad&oy&PwP5SI*Q!*W~z?1slGzs6<#ukN5sf#DTl#f`Ghv*kSvYJ;dL l^H%wb`jSePp_`de@E^48?X?_j+YA5z002ovPDHLkV1i!aPX+)0 literal 1556 zcmc(f`#aMM9LK+#nJ;1A(U{yeXG&B|lf$zTyjn2p#Y#=z@U*g9fGNbL-tr~w$Pb6JFK1#ZHXKggMZ8tv{5qTu8o;t zgd;2zj0~-Ei5c{%?p}S%A4<93sDrYRe0ds3zjs&%Bd4yhq7_Dvr)&l+3i#VZ*VSp$A7mqoF?S0hGEy~-YDVSU-8>Zqt8bo z64l8~L7e!x{(}zMWYEF-na_x~Df>cv9YEbpkL0;|AchR}7a<8cw=d-G2T8XX46BZy z#qo9u(t_Ql>Qrr>Y|b^164^?28*|In_K!VZX+Dpa%|CrnDi&_UyhBrFnQMJwy&*SUBZ!Up;?d2Gn-C2 zCLD>0K>FBu2h9l_Z;tg}xUy6Z$UIaOWmS?xoInQMpw~|*SxfUkEqs!`2`ecnX-CEM z%{wa|zD?QHX+2zd%ej(*<*8J^C!=Mr`s{Wu`X={HnyptN)yj#)s_h*#@Hok>d+qZp zMP}R_Q6>>1Xn=^g$iYoc7jpT!cv}IUFOf)o%uP#)CyuGi^L_VD*l|2xex($nEc+Kqd`mz6DUQY{o@D$O`61M? zA8={Nswnac?1-+=YS|fdj-5bNTi|nCzZM#u_#(WWqj;t4^;7d78gb%N>^KvnsMJ)| z4)DFJJx)~Oy?WK*`sT9U9j#63R2OKB7cRrnoIaRfX!h6&FpMHUNi@W7<3|#g<7ozH z^DY>YcVrS>HZpUitz? zv*KP$dfrqyY#B&y9*A3bj+C9Nj~C>F!=FaW*`=EsrFm2Q5llz_W-kzheS=O|5(c9p z!~>8amIX@l?YQ^?04xStOUoWQ??YyKM0E;dWM#)0 oy7Bmdh)3z3HIGew-u$(HQENCb0+H1^GyL;AGw8vzT1rgbKXCbv`~Uy| diff --git a/assets/images/trustedSendersIcon.png b/assets/images/trustedSendersIcon.png index a21d3ce9ff8014cc24e2270e99556319f87327ff..7f0fbdb203bd7599dc40fcf24cd5521aef8baf7d 100644 GIT binary patch literal 855 zcmV-d1E~CoP)q!hSv<;uIq)aGhC)V8nfv9=qfspLtL=$vu7qOr$V-E`vdWG@h5J%Ad<&xnmn#r zp^jl*uX}wgr#qA5RHUDJUCeE742fsR#4uc~klm8bePT=*dqD=9#DUgKXM4fe|8NNd zh|f8DxtS0@$S216<^6uH?FUD}FSY&VJa)BxrJ2a0jVWyUv=yK-Cu3L1}7nfrR@?c z&ZA6-wNiYZIO9P3MtEB@Oy^FCQz?Fi@WEM9i&M$hB1x-x9qbQ;-_m z2XsWSglk}__`AR)w6>H(sT>(U`DSVZB4kyJ=No#|v3?qhk^Yv681zC~E55NwEJ)b`Wp3mIs8ymnF> zrejF^;^D@E#ESSQaV+U4Y=^A2BQ3voWMCNoFdHjwOOqnL&>}HrMdayzAZ-%29B+`j zUc2r2z0honr-{S}!{U=07*?>^F&jOVlVp&;w)TMoXE zHSx6AqfdMmo`{RB$k=5rjrOkV7ocH$5=&-A6W8T>havoqFgu23hY>L%d~8Jvnj35P hKLf*+D_7n(e*v2$F)p&HXhHx0002ovPDHLkV1k3JkY@k@ literal 2176 zcmajhdpy&N8wc?3HfAOy_xo5xZkxH^nj$0jA(C1mAr$5)m*z5LGx?EAxi!Oa&#fqz ziG^P-#S(HkLT*E$IF7^5`S<+udtR^S^M3yS{PR3=w724iOThsE;J3zEI3Mfy&%&U` zNfX+tIfg6jytNDLc%orGDF6V|x3(~MiM+O+A9zQ^RixK1Vlucw3X41I&FJCMRlXvR z{>t;5Zf@;@Vhc)$Qe2idMryJezPv+8;R7lr8;DMd?!rtJv`Dm&yovY89g5OEnb6de zOMpLTr`Bw2{Cqf}q5j@vqrkY)Gt=05v?*$M{_tCVn0%O@tL3%xTrLX!s?|7Byg347 zLyG6(V)=6Y+rwGV*x0JCk`nTgtE&gOuXBnRwv9O*=0VBR6|@#Qexa zyq^#2^_gN{Bv%2Yq8^05O1SnnBu`L;+!nWU*cI32r&tKS+N!PXG0I+=i#e$q{Q6S+ zUeZ{0w1gvDc+sbdfg;MM< zgP;k6+pfBz7nilroO6-J#Oiu^#Y%M0=By|x+n{$(jUl!EeyS()NhL~|no|Vv1!5N3_jqz4|IpndQ zxIUBcVo}r8u7hOUF7Z9pbbCOS^$_@`yeFB?8WU_O*>cvf1*)p5nzy#3Q6YE~ztiT= zw?ZMrQ$~^xSFYg9=25|>r zJ6MH_W_zt6w|`%_>yRD`D$EH+gL=@^C=p9zPAO7=D2QmFFAXW3n|j?W>#(%-5DluX z3+d2(qG+|fSy;+)>pYqrqtR%c@D*`kCbrl&X*g$9i&5gy%z0d-K2e3@tp5d=5nx7* z*!vk&JJ_5)jD?mfE&E?4Vcx(3S|_Xg8C8vqb}hAG0M!iM8}WtMGd{627-BYZHH*A$@JU`<{+ngux+quWG+!G`V(HYd3FgYx)NskUzzP+I;Z}2 zZCe@OeoiX% zb%fgwnGXw430QUe@Y1&I0{QKzT%E2hCaR{(EHz6wWd@FklBgFPFV$WM@%x!0jc}!2 ziR^n57QbKsP4{^B(NEsoMPMaxQtQp6_2Qu7c;6W-0223&$0@gy(0<8e{qcEu1+tiQ zKVn~u9?fYO^~+9DUn%-HO?vjh-!D0K14dAW?_v*x#E|(xSLUKAXl4qnE5SZDNOPpl zAAXTdQR5%-PoG09T;X!IRC8;x)zY+=e~ zT%9GjX2Xgiu_v$y=e6yMkT7sVV21#3Jpxo*Ap3r}X7%>V;&~A{eEjPsaiV|6<5wPU zQ*tAy@qv82Cv|t!S5f#TIHbD9%e0xn;Hm=uHbaImHGsW*G!v&~^X?{9e+^-Goq>+c zvc}EZkScmMAD!6x(|QhVg*rPMce#z$@?!>O)XoF&E8Kv48>V1?neMUq?vwO7R#%^@ zp%Y-9H8>zfzs#9W5^F3^4ts)plGCNy{Ru)r-V9paNSUw@1D3ujuMdB+!V4UE_BF=i z5^Qhy`!y9R4}%GUl-akc`9WO5oKLuV0kLkeAm@I@LvNE>LFs0Y1xNGx(K1-GnDe$tD0mfHci&1t8V7n`7SD?Rs4feyTWweNo1Gt-y~ z&Cj4R1wE~5NIWMq@fRqe?w^?4HrPIPqhBDTJ) zO7u*f8-E&YzdUHBx(E}W;#{BAfxP3$M`U;9aDwwEkiZ#-Lz73$dI9#Qn%0Y>O%5L> zjMt5P0VE)C4`aCPmA7*N+4s|1JNm|F71P_Nmk^;Ve3_!q2YKb16Agu6M$)pl{fQG) zHi1Q-ANH?Cpiu{UCY&N)BCanukTNZ1n3{Yk%!7y42A08O$2LyOGm_&@a%WB$SzWuJ zai=LDP+z~P@xl^KqRZ)2zE`0Yq1KZ~+<)>^FI8(wK`p~(Z%cNYLZp~t&M}07_XoO* zEk1NR-zaP?$tb_ile^wi>6(%J{lgNkEmQoDqs6@8j^0g&A4;dbM0Q#zVhk_pRD{po zO#-aqu nM> Date: Mon, 10 Oct 2022 23:47:29 +0530 Subject: [PATCH 15/94] Update: Sidebar --- .../desktop_welcome_screen.dart | 920 ++++++++++-------- .../common_widgets/contact_initial.dart | 45 + .../common_widgets/custom_circle_avatar.dart | 48 + .../common_widgets/gradient_button.dart | 56 ++ lib/utils/colors.dart | 6 + lib/utils/constants.dart | 3 +- lib/utils/text_strings.dart | 4 + lib/utils/text_styles.dart | 26 +- 8 files changed, 706 insertions(+), 402 deletions(-) create mode 100644 lib/screens/common_widgets/gradient_button.dart diff --git a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart index 8fb3d2fd..1a0fe566 100644 --- a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart +++ b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart @@ -6,6 +6,7 @@ import 'package:atsign_atmosphere_pro/desktop_screens/desktop_common_widgets/des import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_onboarding.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_button.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/loading_widget.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; @@ -19,12 +20,9 @@ import 'package:atsign_atmosphere_pro/view_models/switch_atsign_provider.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; import 'package:provider/provider.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; -import 'package:url_launcher/url_launcher_string.dart'; import 'package:url_launcher/url_launcher.dart'; class DesktopWelcomeScreenStart extends StatefulWidget { @@ -39,31 +37,6 @@ class _DesktopWelcomeScreenStartState extends State { String? currentatSign; AtClient atClient = AtClientManager.getInstance().atClient; - void _showLoader(bool loaderState, String authenticatingForAtsign) { - if (mounted) { - setState(() { - if (loaderState) { - currentatSign = authenticatingForAtsign; - } - authenticating = loaderState; - }); - } - } - - /// returns list of menu items which contains list of onboarded atsigns and [add_new_atsign], [save_backup_key] - Future> getpopupMenuList() async { - var popupMenuList = []; - var atsignList = await BackendService.getInstance().getAtsignList(); - atsignList?.forEach((element) { - popupMenuList.add(element); - }); - - popupMenuList.add(TextStrings() - .addNewAtsign); //to show add option in switch atsign drop down menu. - popupMenuList.add(TextStrings().saveBackupKey); - return popupMenuList; - } - @override Widget build(BuildContext context) { SizeConfig().init(context); @@ -82,84 +55,8 @@ class _DesktopWelcomeScreenStartState extends State { print( 'ProviderHandler SwitchAtsignProvider build called ${AtClientManager.getInstance().atClient.getCurrentAtSign()}'); return Scaffold( - appBar: PreferredSize( - preferredSize: Size.fromHeight(MixedConstants.APPBAR_HEIGHT), - child: Stack( - clipBehavior: Clip.none, - children: [ - Container( - padding: const EdgeInsets.all(15.0), - decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: Colors.black, - width: 0.1, - ), - ), - ), - child: AppBar( - leading: InkWell( - onTap: () { - DesktopSetupRoutes.nested_pop(); - }, - child: Image.asset( - ImageConstants.logoIcon, - height: 50.toHeight, - width: 50.toHeight, - ), - ), - actions: [ - FutureBuilder( - key: Key(AtClientManager.getInstance() - .atClient - .getCurrentAtSign()!), - future: getpopupMenuList(), - builder: (context, - AsyncSnapshot> snapshot) { - if (snapshot.data != null) { - List? atsignList = snapshot.data; - var image = CommonUtilityFunctions() - .getCachedContactImage( - atClient.getCurrentAtSign()!); - return Container( - width: 100, - child: PopupMenuButton( - icon: Row( - children: [ - image == null - ? ContactInitial( - initials: atClient - .getCurrentAtSign(), - size: 35, - maxSize: (80.0 - 30.0), - minSize: 35, - ) - : CustomCircleAvatar( - byteImage: image, - nonAsset: true, - size: 35, - ), - Icon(Icons.arrow_drop_down) - ], - ), - elevation: 10, - itemBuilder: (BuildContext context) { - return getPopupMenuItem(atsignList!); - }, - onSelected: onAtsignChange), - ); - } else { - return SizedBox(); - } - }), - ], - ), - ), - ], - ), - ), body: Stack(clipBehavior: Clip.none, children: [ - DesktopWelcomeScreen(), + DesktopWelcomeScreen(atClient: atClient), authenticating ? LoadingDialog().showTextLoader( '${TextStrings().initialisingFor} $currentatSign') @@ -168,55 +65,23 @@ class _DesktopWelcomeScreenStartState extends State { ); }); } - - getPopupMenuItem(List list) { - List> menuItems = []; - list.forEach((element) { - menuItems.add(PopupMenuItem( - value: element, - child: DesktopSwitchAtsign(key: Key(element), atsign: element), - )); - }); - - return menuItems; - } - - onAtsignChange(String selectedOption) async { - late var atClientPrefernce; - await BackendService.getInstance() - .getAtClientPreference() - .then((value) => atClientPrefernce = value) - .catchError((e) => print(e)); - - if (selectedOption == TextStrings().addNewAtsign) { - await CustomOnboarding.onboard( - atSign: '', - atClientPrefernce: atClientPrefernce, - showLoader: _showLoader, - ); - } else if (selectedOption == TextStrings().saveBackupKey) { - BackupKeyWidget( - atsign: AtClientManager.getInstance().atClient.getCurrentAtSign()!, - ).showBackupDialog(context); - } else if (selectedOption != - AtClientManager.getInstance().atClient.getCurrentAtSign()) { - await CustomOnboarding.onboard( - atSign: selectedOption, - atClientPrefernce: atClientPrefernce, - showLoader: _showLoader, - ); - } - } } class DesktopWelcomeScreen extends StatefulWidget { - const DesktopWelcomeScreen({Key? key}) : super(key: key); + const DesktopWelcomeScreen({ + Key? key, + required this.atClient, + }) : super(key: key); + + final AtClient atClient; + @override _DesktopWelcomeScreenState createState() => _DesktopWelcomeScreenState(); } class _DesktopWelcomeScreenState extends State { final List menuItemsIcons = [ + // general ImageConstants.homeIcon, ImageConstants.contactsIcon, ImageConstants.transferHistoryIcon, @@ -225,13 +90,16 @@ class _DesktopWelcomeScreenState extends State { ImageConstants.groups, // ImageConstants.transferHistoryIcon, ImageConstants.trustedSender, - ImageConstants.termsAndConditionsIcon, + // helpcenter ImageConstants.faqsIcon, - ImageConstants.trustedSendersIcon, - ImageConstants.contactUs, + ImageConstants.termsAndConditionsIcon, + ImageConstants.sidebarSettings, + // ImageConstants.trustedSendersIcon, + // ImageConstants.contactUs, ]; final List menuItemsTitle = [ + // general TextStrings().sidebarHome, TextStrings().sidebarContact, TextStrings().sidebarTransferHistory, @@ -240,9 +108,11 @@ class _DesktopWelcomeScreenState extends State { TextStrings().groups, // TextStrings().downloadAllFiles, TextStrings().sidebarTrustedSenders, - TextStrings().sidebarTermsAndConditions, + // helpcenter TextStrings().sidebarFaqs, - TextStrings().sidebarContactUs, + TextStrings().sidebarTermsAndConditions, + TextStrings().sidebarSettings, + // TextStrings().sidebarContactUs, ]; final List routes = [ @@ -257,6 +127,7 @@ class _DesktopWelcomeScreenState extends State { '', '', '', + '', ]; bool showContent = false; @@ -266,161 +137,218 @@ class _DesktopWelcomeScreenState extends State { return Scaffold( body: Stack(children: [ Row( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Consumer( - builder: (_context, _sideBarProvider, _) { - if (_sideBarProvider.isSidebarExpanded) { - MixedConstants.SIDEBAR_WIDTH = 180; - } else { - MixedConstants.SIDEBAR_WIDTH = 70; - } - - return SingleChildScrollView( - child: Container( - width: MixedConstants.SIDEBAR_WIDTH, - padding: EdgeInsets.only( - left: _sideBarProvider.isSidebarExpanded ? 10 : 0), - decoration: BoxDecoration( - color: Colors.white, - border: Border( - right: BorderSide( - color: Colors.black, - width: 0.1, - ), + Consumer(builder: (_context, _sideBarProvider, _) { + return SizedBox( + width: _sideBarProvider.isSidebarExpanded + ? MixedConstants.SIDEBAR_WIDTH_EXPANDED + : MixedConstants.SIDEBAR_WIDTH_COLLAPSED, + ); + }), + Expanded( + child: Navigator( + key: NavService.nestedNavKey, + initialRoute: DesktopRoutes.DESKTOP_HOME_NESTED_INITIAL, + onGenerateRoute: (routeSettings) { + var routeBuilders = + DesktopSetupRoutes.routeBuilders(context, routeSettings); + return MaterialPageRoute(builder: (context) { + return routeBuilders[routeSettings.name!]!(context); + }); + }, + ), + ), + ], + ), + Consumer( + builder: (_context, _sideBarProvider, _) { + return Container( + width: _sideBarProvider.isSidebarExpanded + ? MixedConstants.SIDEBAR_WIDTH_EXPANDED + : MixedConstants.SIDEBAR_WIDTH_COLLAPSED, + height: SizeConfig().screenHeight, + margin: EdgeInsets.only(right: 2), + padding: EdgeInsets.symmetric(horizontal: 20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topRight: Radius.circular(30), + bottomRight: Radius.circular(30), + ), + boxShadow: [ + BoxShadow( + // color: Colors.grey.withOpacity(0.5), + color: ColorConstants.light_grey, + spreadRadius: 0, + blurRadius: 1, + offset: Offset(1, 2), // changes position of shadow + ), + ], + ), + child: ProviderHandler( + functionName: 'routes', + showError: true, + load: (provider) { + provider.init(); + }, + successBuilder: (provider) => SingleChildScrollView( + child: Column( + crossAxisAlignment: _sideBarProvider.isSidebarExpanded + ? CrossAxisAlignment.start + : CrossAxisAlignment.center, + children: [ + SizedBox(height: 20.toHeight), + InkWell( + onTap: () { + DesktopSetupRoutes.nested_pop(); + }, + child: Image.asset(ImageConstants.logoIcon, + height: 58.toHeight), ), - ), - child: ProviderHandler( - functionName: 'routes', - showError: true, - load: (provider) { - provider.init(); - }, - successBuilder: (provider) => Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: _sideBarProvider.isSidebarExpanded - ? CrossAxisAlignment.center - : CrossAxisAlignment.center, - children: [ - SideBarIcon( - menuItemsIcons[0], - routes[0], - title: menuItemsTitle[0], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[1], - routes[1], - arguments: { - 'isBlockedScreen': false, - }, - title: menuItemsTitle[1], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[2], - routes[2], - title: menuItemsTitle[2], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[3], - routes[3], - arguments: { - 'isBlockedScreen': true, - }, - title: menuItemsTitle[3], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[4], - routes[4], - title: menuItemsTitle[4], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[5], - routes[5], - title: menuItemsTitle[5], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[6], - routes[6], - title: menuItemsTitle[6], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - // SideBarIcon( - // menuItemsIcons[7], - // routes[7], - // isUrlLauncher: true, - // title: menuItemsTitle[7], - // isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - // ), - // SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[7], - routes[7], - isUrlLauncher: true, - arguments: {"url": MixedConstants.TERMS_CONDITIONS}, - title: menuItemsTitle[7], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[8], - routes[8], - isUrlLauncher: true, - arguments: {"url": MixedConstants.FAQ}, - title: menuItemsTitle[8], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, - ), - SizedBox(height: 40.toHeight), - SideBarIcon( - menuItemsIcons[10], - routes[7], - isEmailLauncher: true, - arguments: {"email": 'atmospherepro@atsign.com'}, - title: menuItemsTitle[9], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + SizedBox(height: 20.toHeight), + if (_sideBarProvider.isSidebarExpanded) + GradientButton( + onPressed: () {}, + height: 50.toHeight, + width: MixedConstants.SIDEBAR_WIDTH_EXPANDED - 41, + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + TextStrings().sidebarSendFiles, + style: CustomTextStyles.desktopButton15, + ), + SizedBox(width: 8.toWidth), + Image.asset( + ImageConstants.sendIcon, + height: 20.toHeight, + fit: BoxFit.cover, + color: CustomTextStyles.desktopButton15.color, + ), + ], ), - ], + ), + SizedBox(height: 2.toHeight), + SidebarTitleText(TextStrings().sidebarGeneral), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[0], + routes[0], + title: menuItemsTitle[0], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[1], + routes[1], + arguments: { + 'isBlockedScreen': false, + }, + title: menuItemsTitle[1], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, ), - errorBuilder: (provider) => Center( - child: Text(TextStrings().errorOccured), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[2], + routes[2], + title: menuItemsTitle[2], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, ), - ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[3], + routes[3], + arguments: { + 'isBlockedScreen': true, + }, + title: menuItemsTitle[3], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[4], + routes[4], + title: menuItemsTitle[4], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[5], + routes[5], + title: menuItemsTitle[5], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[6], + routes[6], + title: menuItemsTitle[6], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SidebarTitleText(TextStrings().sidebarHelpCenter), + // SideBarIcon( + // menuItemsIcons[7], + // routes[7], + // isUrlLauncher: true, + // title: menuItemsTitle[7], + // isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + // ), + // SizedBox(height: 40.toHeight), + SideBarIcon( + menuItemsIcons[7], + routes[7], + isUrlLauncher: true, + arguments: {"url": MixedConstants.FAQ}, + title: menuItemsTitle[7], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[8], + routes[8], + isUrlLauncher: true, + arguments: {"url": MixedConstants.TERMS_CONDITIONS}, + title: menuItemsTitle[8], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 2.toHeight), + SideBarIcon( + menuItemsIcons[9], + routes[9], + title: menuItemsTitle[9], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + // SideBarIcon( + // menuItemsIcons[10], + // routes[7], + // isEmailLauncher: true, + // arguments: {"email": 'atmospherepro@atsign.com'}, + // title: menuItemsTitle[9], + // isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + // ), + SizedBox(height: 10.toHeight), + BuildAvatarWidget( + atClient: widget.atClient, + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 10.toHeight), + ], ), - ); - }, - ), - Expanded( - child: ClipRect( - child: Navigator( - key: NavService.nestedNavKey, - initialRoute: DesktopRoutes.DESKTOP_HOME_NESTED_INITIAL, - onGenerateRoute: (routeSettings) { - var routeBuilders = - DesktopSetupRoutes.routeBuilders(context, routeSettings); - return MaterialPageRoute(builder: (context) { - return routeBuilders[routeSettings.name!]!(context); - }); - }, + ), + errorBuilder: (provider) => Center( + child: Text(TextStrings().errorOccured), ), ), - ), - ], + ); + }, ), Consumer(builder: (_context, _provider, _) { return Positioned( top: 40, - left: _provider.isSidebarExpanded ? 160 : 50, + left: _provider.isSidebarExpanded + ? MixedConstants.SIDEBAR_WIDTH_EXPANDED - 20 + : MixedConstants.SIDEBAR_WIDTH_COLLAPSED - 20, child: Builder( builder: (context) { return InkWell( @@ -434,6 +362,7 @@ class _DesktopWelcomeScreenState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(30.toWidth), color: Colors.black), + padding: EdgeInsets.only(left: 4), child: Icon( _provider.isSidebarExpanded ? Icons.arrow_back_ios @@ -470,7 +399,7 @@ class _DesktopWelcomeScreenState extends State { : SizedBox(), trailing: isSelectContacts ? Container( - padding: EdgeInsets.symmetric(vertical: 15), + padding: EdgeInsets.symmetric(vertical: 15.toHeight), child: Image.asset( ImageConstants.contactsIcon, color: Colors.black, @@ -487,6 +416,168 @@ class _DesktopWelcomeScreenState extends State { } } +class BuildAvatarWidget extends StatefulWidget { + const BuildAvatarWidget({ + Key? key, + required this.atClient, + required this.isSidebarExpanded, + }) : super(key: key); + + final AtClient atClient; + final bool isSidebarExpanded; + + @override + State createState() => _BuildAvatarWidgetState(); +} + +class _BuildAvatarWidgetState extends State { + bool authenticating = false; + + String? currentatSign; + + void _showLoader(bool loaderState, String authenticatingForAtsign) { + if (mounted) { + setState(() { + if (loaderState) { + currentatSign = authenticatingForAtsign; + } + authenticating = loaderState; + }); + } + } + + /// returns list of menu items which contains list of onboarded atsigns and [add_new_atsign], [save_backup_key] + Future> getpopupMenuList() async { + var popupMenuList = []; + var atsignList = await BackendService.getInstance().getAtsignList(); + atsignList?.forEach((element) { + popupMenuList.add(element); + }); + + popupMenuList.add(TextStrings() + .addNewAtsign); //to show add option in switch atsign drop down menu. + popupMenuList.add(TextStrings().saveBackupKey); + return popupMenuList; + } + + getPopupMenuItem(List list) { + List> menuItems = []; + list.forEach((element) { + menuItems.add(PopupMenuItem( + value: element, + child: DesktopSwitchAtsign(key: Key(element), atsign: element), + )); + }); + + return menuItems; + } + + onAtsignChange(String selectedOption) async { + late var atClientPrefernce; + await BackendService.getInstance() + .getAtClientPreference() + .then((value) => atClientPrefernce = value) + .catchError((e) => print(e)); + + if (selectedOption == TextStrings().addNewAtsign) { + await CustomOnboarding.onboard( + atSign: '', + atClientPrefernce: atClientPrefernce, + showLoader: _showLoader, + ); + } else if (selectedOption == TextStrings().saveBackupKey) { + BackupKeyWidget( + atsign: AtClientManager.getInstance().atClient.getCurrentAtSign()!, + ).showBackupDialog(context); + } else if (selectedOption != + AtClientManager.getInstance().atClient.getCurrentAtSign()) { + await CustomOnboarding.onboard( + atSign: selectedOption, + atClientPrefernce: atClientPrefernce, + showLoader: _showLoader, + ); + } + } + + @override + Widget build(BuildContext context) { + return FutureBuilder( + key: Key(AtClientManager.getInstance().atClient.getCurrentAtSign()!), + future: getpopupMenuList(), + builder: (context, AsyncSnapshot> snapshot) { + if (snapshot.data != null) { + List? atsignList = snapshot.data; + var image = CommonUtilityFunctions() + .getCachedContactImage(widget.atClient.getCurrentAtSign()!); + return Container( + width: widget.isSidebarExpanded + ? MixedConstants.SIDEBAR_WIDTH_EXPANDED + : MixedConstants.SIDEBAR_WIDTH_COLLAPSED, + height: 74.toHeight, + child: PopupMenuButton( + icon: Row( + mainAxisAlignment: widget.isSidebarExpanded + ? MainAxisAlignment.start + : MainAxisAlignment.center, + children: [ + image == null + ? ContactInitialV2( + initials: widget.atClient.getCurrentAtSign(), + size: 50.toFont, + maxSize: (80.0 - 30.0), + minSize: 50, + ) + : CustomCircleAvatarV2( + byteImage: image, + nonAsset: true, + size: 50.toFont, + ), + // Icon(Icons.arrow_drop_down) + if (widget.isSidebarExpanded) + Flexible( + child: Text( + ' ' + widget.atClient.getCurrentAtSign()!, + style: + CustomTextStyles.desktopPrimaryBold12.copyWith( + overflow: TextOverflow.ellipsis, + ), + ), + ), + ], + ), + elevation: 10, + itemBuilder: (BuildContext context) { + return getPopupMenuItem(atsignList!); + }, + onSelected: onAtsignChange), + ); + } else { + return SizedBox(); + } + }); + } +} + +class SidebarTitleText extends StatelessWidget { + const SidebarTitleText( + this.text, { + Key? key, + }) : super(key: key); + + final String text; + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 14.toHeight), + child: Text( + text, + style: CustomTextStyles.desktopSecondaryBold12, + ), + ); + } +} + // ignore: must_be_immutable class SideBarIcon extends StatelessWidget { final String? image, routeName, title; @@ -513,113 +604,100 @@ class SideBarIcon extends StatelessWidget { ? true : false; } - return Container( - width: isSidebarExpanded ? null : 32, - height: 32, - padding: EdgeInsets.all(5), - decoration: BoxDecoration( - shape: BoxShape.circle, - ), - child: InkWell( - onTap: () { - if (routeName != null && routeName != '') { - if (routeName == DesktopRoutes.DESKTOP_HOME) { - DesktopSetupRoutes.nested_pop(); - return; - } - DesktopSetupRoutes.nested_push(routeName, arguments: arguments); - } - if ((isUrlLauncher) && - (arguments != null) && - (arguments!['url'] != null)) { - _launchInBrowser(arguments!['url']); - } - if ((isEmailLauncher) && - (arguments != null) && - (arguments!['email'] != null)) { - _launchInEmail(arguments!['email']); - } - }, - child: routeName == DesktopRoutes.DESKTOP_HISTORY - ? Stack( - clipBehavior: Clip.none, - children: [ - Row( - children: [ - Image.asset( - image!, - height: 22, - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - ), - SizedBox(width: isSidebarExpanded ? 10 : 0), - isSidebarExpanded - ? Text( - title!, - softWrap: true, - style: TextStyle( - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - letterSpacing: 0.1, - fontSize: 12, - fontWeight: FontWeight.normal, - ), - ) - : SizedBox() - ], - ), - Consumer( - builder: (context, _fileDownloadChecker, _) { - return _fileDownloadChecker.undownloadedFilesExist - ? Positioned( - left: 10, - top: -8, - child: Container( - decoration: BoxDecoration( - color: Colors.white, - shape: BoxShape.circle, - ), - padding: EdgeInsets.all(1.toHeight), - child: CircleAvatar( - backgroundColor: Colors.red, - radius: 5.toWidth, - ), - ), - ) - : SizedBox(); - }, - ), - ], + return Padding( + padding: const EdgeInsets.only(right: 8.0), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + isCurrentRoute + ? Image.asset( + ImageConstants.sidebarSelectedTile, + height: 50.toHeight, + width: 4, ) - : Row( - children: [ - Image.asset( - image!, - height: 22, - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - ), - SizedBox(width: isSidebarExpanded ? 10 : 0), - isSidebarExpanded - ? Text( - title!, - softWrap: true, - style: TextStyle( - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - letterSpacing: 0.1, - fontSize: 12, - fontWeight: FontWeight.normal, - ), - ) - : SizedBox() - ], + : SizedBox(width: 4), + Flexible( + child: Container( + width: isSidebarExpanded ? double.maxFinite : 50, + height: 50.toHeight, + padding: EdgeInsets.symmetric( + vertical: 14.toHeight, + horizontal: isSidebarExpanded ? 20 : 12, ), - )); + decoration: isCurrentRoute + ? BoxDecoration( + color: ColorConstants.sidebarTileSelected, + borderRadius: BorderRadius.only( + topRight: Radius.circular(8), + bottomRight: Radius.circular(8), + )) + : null, + child: InkWell( + onTap: () { + if (routeName != null && routeName != '') { + if (routeName == DesktopRoutes.DESKTOP_HOME) { + DesktopSetupRoutes.nested_pop(); + return; + } + DesktopSetupRoutes.nested_push(routeName, + arguments: arguments); + } + if ((isUrlLauncher) && + (arguments != null) && + (arguments!['url'] != null)) { + _launchInBrowser(arguments!['url']); + } + if ((isEmailLauncher) && + (arguments != null) && + (arguments!['email'] != null)) { + _launchInEmail(arguments!['email']); + } + }, + child: routeName == DesktopRoutes.DESKTOP_HISTORY + ? Stack( + clipBehavior: Clip.none, + children: [ + BuildSidebarIconTitle( + image: image, + isCurrentRoute: isCurrentRoute, + isSidebarExpanded: isSidebarExpanded, + title: title, + ), + Consumer( + builder: (context, _fileDownloadChecker, _) { + return _fileDownloadChecker + .undownloadedFilesExist + ? Positioned( + left: 12, + top: -4, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + shape: BoxShape.circle, + ), + padding: EdgeInsets.all(1.toHeight), + child: CircleAvatar( + backgroundColor: Colors.red, + radius: 5.toWidth, + ), + ), + ) + : SizedBox(); + }, + ), + ], + ) + : BuildSidebarIconTitle( + image: image, + isCurrentRoute: isCurrentRoute, + isSidebarExpanded: isSidebarExpanded, + title: title, + ), + )), + ), + ], + ), + ); } Future _launchInBrowser(String url) async { @@ -644,3 +722,47 @@ class SideBarIcon extends StatelessWidget { ); } } + +class BuildSidebarIconTitle extends StatelessWidget { + const BuildSidebarIconTitle({ + Key? key, + required this.image, + required this.isCurrentRoute, + required this.isSidebarExpanded, + required this.title, + }) : super(key: key); + + final String? image; + final bool isCurrentRoute; + final bool isSidebarExpanded; + final String? title; + + @override + Widget build(BuildContext context) { + return Row( + mainAxisSize: MainAxisSize.min, + children: [ + Image.asset( + image!, + height: 22.toFont, + color: isCurrentRoute + ? ColorConstants.sidebarTextSelected + : ColorConstants.sidebarTextUnselected, + ), + SizedBox(width: isSidebarExpanded ? 10 : 0), + isSidebarExpanded + ? Text( + title!, + softWrap: true, + style: CustomTextStyles.desktopPrimaryRegular12.copyWith( + color: isCurrentRoute + ? null + : ColorConstants.sidebarTextUnselected, + fontWeight: FontWeight.w500, + ), + ) + : SizedBox() + ], + ); + } +} diff --git a/lib/screens/common_widgets/contact_initial.dart b/lib/screens/common_widgets/contact_initial.dart index f09501c6..b048633b 100644 --- a/lib/screens/common_widgets/contact_initial.dart +++ b/lib/screens/common_widgets/contact_initial.dart @@ -44,3 +44,48 @@ class ContactInitial extends StatelessWidget { ); } } + +class ContactInitialV2 extends StatelessWidget { + final double? size, maxSize, minSize; + final String? initials; + final int? index; + final Color? background; + + ContactInitialV2({ + Key? key, + this.size = 40, + required this.initials, + this.index, + this.background, + this.maxSize, + this.minSize, + }) : super(key: key); + + int get startIndex => (index == 1) ? 0 : 1; + int get endIndex => (initials!.length < 3) ? initials!.length : 3; + + Widget build(BuildContext context) { + return Container( + height: size!.toFont, + width: size!.toFont, + decoration: BoxDecoration( + color: background ?? ContactInitialsColors.getColor(initials!), + borderRadius: BorderRadius.circular((size!.toFont * 0.2)), + boxShadow: [ + BoxShadow( + color: ColorConstants.light_grey, + spreadRadius: 1, + blurRadius: 10, + offset: Offset(0, 4), // changes position of shadow + ), + ], + ), + child: Center( + child: Text( + initials!.substring(startIndex, endIndex).toUpperCase(), + style: CustomTextStyles.whiteBold(size: (size! ~/ 3)), + ), + ), + ); + } +} diff --git a/lib/screens/common_widgets/custom_circle_avatar.dart b/lib/screens/common_widgets/custom_circle_avatar.dart index 84fed56b..24f736ae 100644 --- a/lib/screens/common_widgets/custom_circle_avatar.dart +++ b/lib/screens/common_widgets/custom_circle_avatar.dart @@ -2,6 +2,7 @@ /// [size] is set to [50] as default import 'dart:typed_data'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; @@ -46,3 +47,50 @@ class CustomCircleAvatar extends StatelessWidget { ); } } + +class CustomCircleAvatarV2 extends StatelessWidget { + final String? image; + final double size; + final bool nonAsset; + final Uint8List? byteImage; + + const CustomCircleAvatarV2({ + Key? key, + this.image, + this.size = 50, + this.nonAsset = false, + this.byteImage, + }) : super(key: key); + @override + Widget build(BuildContext context) { + return Container( + height: size.toFont, + width: size.toFont, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(size.toWidth * 0.2), + image: DecorationImage( + image: nonAsset + ? Image.memory( + byteImage!, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: size.toFont, + ), + ); + }, + ).image + : AssetImage(image!), + ), + boxShadow: [ + BoxShadow( + color: ColorConstants.light_grey, + spreadRadius: 1, + blurRadius: 10, + offset: Offset(0, 4), // changes position of shadow + ), + ], + )); + } +} diff --git a/lib/screens/common_widgets/gradient_button.dart b/lib/screens/common_widgets/gradient_button.dart new file mode 100644 index 00000000..fc24ac07 --- /dev/null +++ b/lib/screens/common_widgets/gradient_button.dart @@ -0,0 +1,56 @@ +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class GradientButton extends StatelessWidget { + final double? width; + final double? height; + final VoidCallback? onPressed; + final Widget child; + final double radius; + + const GradientButton({ + Key? key, + required this.onPressed, + required this.child, + this.width, + this.radius = 8, + this.height, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + width: width, + height: height, + margin: EdgeInsets.symmetric(horizontal: 4), + decoration: BoxDecoration( + gradient: LinearGradient( + colors: [ + ColorConstants.orangeColor, + ColorConstants.yellow, + ], + ), + borderRadius: BorderRadius.circular(radius), + boxShadow: [ + BoxShadow( + color: ColorConstants.light_grey, + spreadRadius: 0, + blurRadius: 2, + offset: Offset(1, 2), // changes position of shadow + ), + ], + ), + child: ElevatedButton( + onPressed: onPressed, + style: ElevatedButton.styleFrom( + backgroundColor: Colors.transparent, + shadowColor: Colors.transparent, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(radius), + ), + ), + child: child, + ), + ); + } +} diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 45ee0b55..612f1834 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -19,6 +19,7 @@ class ColorConstants { static const Color fadedGrey = Color(0xffF1F2F3); static const Color listBackground = Color(0xffF7F7FF); static const Color orangeColor = Color(0xffF05E3F); + static const Color yellow = Color(0xFFEAA743); static const Color MILD_GREY = Color(0xFFE4E4E4); static const Color redAlert = Color(0xffF86060); static const Color red = Color(0xFFe34040); @@ -32,6 +33,11 @@ class ColorConstants { static const Color light_border_color = Color(0xFFEEF1F4); static const Color textBoxBg = Color(0xFFF2F2F2); static const Color lightBlueBg = Color(0xFFF8FBFF); + + static const Color sidebarTextUnselected = Color(0xFFA4A4A5); + static const Color sidebarTextSelected = Color(0xFF000000); + static const Color sidebarTextHeading = Color(0xFFE7E7E7); + static const Color sidebarTileSelected = Color(0xFFF5F5F5); } class ContactInitialsColors { diff --git a/lib/utils/constants.dart b/lib/utils/constants.dart index 9b2519fd..130be21b 100644 --- a/lib/utils/constants.dart +++ b/lib/utils/constants.dart @@ -58,7 +58,8 @@ class MixedConstants { static String? ApplicationDocumentsDirectory = ''; /// Sibebar width - static double SIDEBAR_WIDTH = 70; + static double SIDEBAR_WIDTH_COLLAPSED = 180; + static double SIDEBAR_WIDTH_EXPANDED = 280; /// Appbar height static const double APPBAR_HEIGHT = 80; diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index d9e0d655..3256b1da 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -40,6 +40,9 @@ class TextStrings { String reset = 'Reset'; //sidebar menu texts + String sidebarGeneral = 'GENERAL'; + String sidebarHelpCenter = 'HELPCENTER'; + String sidebarSendFiles = 'Send Files'; String sidebarHome = 'Home'; String sidebarContact = 'Contacts'; String sidebarTransferHistory = 'Transfer History'; @@ -57,6 +60,7 @@ class TextStrings { String sidebarSwitchOut = 'Switch atSign'; String sidebarDeleteAtsign = 'Delete atSign(s)'; String sidebarContactUs = 'Contact us'; + String sidebarSettings = 'Settings'; String atSign = 'atSign'; String switchingAtSign = 'Switching atsign...'; diff --git a/lib/utils/text_styles.dart b/lib/utils/text_styles.dart index 4e2bd4a7..7d1edb0b 100644 --- a/lib/utils/text_styles.dart +++ b/lib/utils/text_styles.dart @@ -1,5 +1,3 @@ -import 'dart:ui'; - import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; @@ -245,18 +243,36 @@ class CustomTextStyles { letterSpacing: 0.1, fontWeight: FontWeight.bold); + static TextStyle desktopPrimaryBold12 = TextStyle( + color: Colors.black, + fontSize: 10, + fontWeight: FontWeight.w600, + ); + static TextStyle desktopPrimaryBold18 = TextStyle( color: ColorConstants.fontPrimary, fontSize: 18, letterSpacing: 0.1, fontWeight: FontWeight.bold); + static TextStyle desktopSecondaryBold12 = TextStyle( + color: ColorConstants.sidebarTextHeading, + fontSize: 10, + letterSpacing: 0.1, + fontWeight: FontWeight.w700); + static TextStyle desktopBlackPlayfairDisplay26 = TextStyle( fontFamily: 'PlayfairDisplay', fontSize: 44, color: Colors.black, ); + static TextStyle desktopPrimaryRegular12 = TextStyle( + color: Colors.black, + fontSize: 12, + letterSpacing: 0.1, + fontWeight: FontWeight.normal); + static TextStyle desktopPrimaryRegular14 = TextStyle( color: Colors.black, fontSize: 14, @@ -281,4 +297,10 @@ class CustomTextStyles { letterSpacing: 0.1, fontWeight: FontWeight.w600, ); + + static TextStyle desktopButton15 = TextStyle( + color: Colors.white, + fontSize: 15, + letterSpacing: 0.1, + fontWeight: FontWeight.w700); } From b04e18638012997097c816d75c463e013daed276 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Sat, 15 Oct 2022 16:44:42 +0530 Subject: [PATCH 16/94] icons don't move now --- lib/screens/welcome_screen/welcome_screen.dart | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 6e4c09fd..4f5a746e 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -188,7 +188,7 @@ class _WelcomeScreenState extends State { topRight: Radius.circular(30.0), ), child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15.0), + padding: const EdgeInsets.only(left: 15, right: 15.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ @@ -212,7 +212,7 @@ class _WelcomeScreenState extends State { _onBottomNavigationSelect(index); }, child: Column( - mainAxisAlignment: MainAxisAlignment.end, + mainAxisAlignment: MainAxisAlignment.center, children: [ Spacer(), SvgPicture.asset( @@ -247,7 +247,8 @@ class _WelcomeScreenState extends State { ), ], ), - ), + ) + else SizedBox(height: 2, width: 40,), if (_selectedBottomNavigationIndex == index) SizedBox( height: 4, @@ -255,7 +256,8 @@ class _WelcomeScreenState extends State { child: CustomPaint( painter: PainterOne(), ), - ), + ) + else SizedBox(height: 4, width: 50,) ], ), ); From 123b08fc2b6f98b70f28d24c6ba7f2db11032f01 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 25 Oct 2022 20:07:42 +0530 Subject: [PATCH 17/94] settings screen implementation started --- .../desktop_welcome_screen.dart | 39 ++++++++++++------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart index 8fb3d2fd..be43431f 100644 --- a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart +++ b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart @@ -270,7 +270,7 @@ class _DesktopWelcomeScreenState extends State { Consumer( builder: (_context, _sideBarProvider, _) { if (_sideBarProvider.isSidebarExpanded) { - MixedConstants.SIDEBAR_WIDTH = 180; + MixedConstants.SIDEBAR_WIDTH = 250; } else { MixedConstants.SIDEBAR_WIDTH = 70; } @@ -428,18 +428,31 @@ class _DesktopWelcomeScreenState extends State { Provider.of(context, listen: false) .updateSidebarWidth(); }, - child: Container( - width: 40, - height: 40, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(30.toWidth), - color: Colors.black), - child: Icon( - _provider.isSidebarExpanded - ? Icons.arrow_back_ios - : Icons.arrow_forward_ios_sharp, - size: 20, - color: Colors.white), + // child: Container( + // width: 40, + // height: 40, + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(30.toWidth), + // color: Colors.black), + // child: Icon( + // _provider.isSidebarExpanded + // ? Icons.arrow_back_ios + // : Icons.arrow_forward_ios_sharp, + // size: 20, + // color: Colors.white), + // ), + child: CircleAvatar( + backgroundColor: Colors.black, + radius: 20, + child: Padding( + padding: const EdgeInsets.only(left: 5.0), + child: Icon( + _provider.isSidebarExpanded + ? Icons.arrow_back_ios + : Icons.arrow_forward_ios_sharp, + size: 20, + color: Colors.white), + ), ), ); }, From 0bde5c0ad6a453d1fe3f8bbd51b24e5d0f22fe59 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 25 Oct 2022 20:17:58 +0530 Subject: [PATCH 18/94] made required changes --- lib/screens/welcome_screen/welcome_screen.dart | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 4f5a746e..73cab1f3 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -4,6 +4,7 @@ import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; +import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_screen_received_files.dart'; import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; @@ -102,7 +103,7 @@ class _WelcomeScreenState extends State { ContactsScreen(), MyFiles(), HistoryScreen(), - WelcomeScreenReceivedFiles(), + SettingsScreen() ]; @override @@ -135,7 +136,9 @@ class _WelcomeScreenState extends State { _selectedBottomNavigationIndex = 0; }); }, - child: _selectedBottomNavigationIndex == 3 ? SvgPicture.asset("assets/svg/plus.svg",) : SvgPicture.asset("assets/svg/home.svg",) , + child: _selectedBottomNavigationIndex == 4 || _selectedBottomNavigationIndex == 0? + SvgPicture.asset("assets/svg/plus.svg",) : + SvgPicture.asset("assets/svg/home.svg",) , ), ), appBar: _selectedBottomNavigationIndex == 0 From 27512ebf0f739262b063f299c6bde08382480673 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Tue, 25 Oct 2022 20:18:23 +0530 Subject: [PATCH 19/94] removed unused resource --- lib/screens/welcome_screen/welcome_screen.dart | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 73cab1f3..3509c3cc 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -6,7 +6,6 @@ import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; -import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_screen_received_files.dart'; import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; From 8ec447c905284ac56c5a0cda6374d3c3b6179ce2 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Wed, 26 Oct 2022 13:52:56 +0530 Subject: [PATCH 20/94] settings screen added --- lib/desktop_routes/desktop_route_names.dart | 1 + lib/desktop_routes/desktop_routes.dart | 2 + .../desktop_settings/desktop_settings.dart | 172 ++++++++++++++++++ 3 files changed, 175 insertions(+) create mode 100644 lib/desktop_screens/desktop_settings/desktop_settings.dart diff --git a/lib/desktop_routes/desktop_route_names.dart b/lib/desktop_routes/desktop_route_names.dart index 2299f268..e5ce2487 100644 --- a/lib/desktop_routes/desktop_route_names.dart +++ b/lib/desktop_routes/desktop_route_names.dart @@ -15,6 +15,7 @@ class DesktopRoutes { static const DESKTOP_GROUP_VIEW = 'desktop_group_view'; static const DESKT_FAQ = 'desktop_faq'; static const DESKTOP_DOWNLOAD_ALL = 'desktop_download_all_files'; + static const String DESKTOP_SETTINGS = 'desktop_settings'; /// Group left half routes static const String DESKTOP_GROUP_LEFT_INITIAL = 'desktop_group_left_initial'; diff --git a/lib/desktop_routes/desktop_routes.dart b/lib/desktop_routes/desktop_routes.dart index bb99ea49..76e11d42 100644 --- a/lib/desktop_routes/desktop_routes.dart +++ b/lib/desktop_routes/desktop_routes.dart @@ -88,6 +88,8 @@ class DesktopSetupRoutes { title: 'FAQ', url: '${MixedConstants.WEBSITE_URL}/faqs', ) + + DesktopRoutes.DESKTOP_SETTINGS: (context) => DesktopSettings(), }; } diff --git a/lib/desktop_screens/desktop_settings/desktop_settings.dart b/lib/desktop_screens/desktop_settings/desktop_settings.dart new file mode 100644 index 00000000..e611f97e --- /dev/null +++ b/lib/desktop_screens/desktop_settings/desktop_settings.dart @@ -0,0 +1,172 @@ +import 'package:at_backupkey_flutter/widgets/backup_key_widget.dart'; +import 'package:at_client_mobile/at_client_mobile.dart'; +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/desktop_screens/desktop_common_widgets/desktop_header.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; +// import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; +import 'package:flutter/material.dart'; +import 'package:package_info_plus/package_info_plus.dart'; +import 'package:url_launcher/url_launcher.dart'; + +class DesktopSettings extends StatefulWidget { + const DesktopSettings({Key? key}) : super(key: key); + + @override + State createState() => _DesktopSettingsState(); +} + +class _DesktopSettingsState extends State { + final List optionTitle = [ + TextStrings().sidebarSwitchOut, + TextStrings().sidebarBackupKey, + TextStrings().faqs, + TextStrings().sidebarContactUs, + TextStrings().termsAppBar, + TextStrings().sidebarDeleteAtsign, + ]; + + final List optionIcons = [ + ImageConstants.switchAtSign, + ImageConstants.backupKeys, + ImageConstants.faqs, + ImageConstants.contactUsLogo, + ImageConstants.termsAndConditions, + ImageConstants.deleteAtsigns, + ]; + + void switchAtsign() async { + var atSignList = await KeychainUtil.getAtsignList(); + await showModalBottomSheet( + context: NavService.navKey.currentContext!, + backgroundColor: Colors.transparent, + builder: (context) => AtSignBottomSheet( + atSignList: atSignList, + ), + ); + } + + @override + void initState() { + super.initState(); + + _initPackageInfo(); + } + + PackageInfo _packageInfo = PackageInfo( + appName: 'Unknown', + packageName: 'Unknown', + version: 'Unknown', + buildNumber: 'Unknown', + ); + + Future _initPackageInfo() async { + final PackageInfo info = await PackageInfo.fromPlatform(); + if (mounted) { + setState(() { + _packageInfo = info; + }); + } + } + + @override + Widget build(BuildContext context) { + SizeConfig().init(context); + return Scaffold( + body: Stack( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.backgroundDesktop, + ), + fit: BoxFit.fill, + ), + ), + ), + SafeArea( + child: Column( + children: [ + SizedBox(height: 20), + DesktopHeader( + title: TextStrings().sidebarSettings, + showBackIcon: false, + ), + Padding( + padding: + const EdgeInsets.symmetric(horizontal: 36, vertical: 18), + child: ListView( + shrinkWrap: true, + children: [ + Text( + 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', + style: CustomTextStyles.black12, + ), + SizedBox( + height: 28, + ), + SettingsButton( + buttonText: optionTitle[0], + onPressed: switchAtsign, + image: optionIcons[0], + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[1], + onPressed: () async { + BackupKeyWidget( + atsign: AtClientManager.getInstance() + .atClient + .getCurrentAtSign()!, + ).showBackupDialog(context); + }, + image: optionIcons[1], + ), + Divider( + height: 58, + color: ColorConstants.dividerGrey, + ), + SettingsButton( + buttonText: optionTitle[3], + onPressed: () async { + await launchUrl(Uri( + scheme: 'mailto', + path: 'atmospherepro@atsign.com')); + }, + image: optionIcons[3], + ), + SizedBox( + height: 12, + ), + SizedBox( + height: 12, + ), + SettingsButton( + buttonText: optionTitle[5], + onPressed: () async { + CommonUtilityFunctions().showResetAtsignDialog(); + }, + image: optionIcons[5], + ), + SizedBox( + height: 12, + ), + ], + ), + ), + ], + ), + ) + ], + ), + ); + } +} \ No newline at end of file From 7167733fa5adfe8da07b3553e249d1df009362d0 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Wed, 26 Oct 2022 20:08:06 +0530 Subject: [PATCH 21/94] settings screen implemented with a little nav bar --- assets/images/blocked.png | Bin 4034 -> 856 bytes assets/images/contacts.png | Bin 1904 -> 753 bytes assets/images/desktop_bg.png | Bin 0 -> 142741 bytes assets/images/faqs.png | Bin 1842 -> 654 bytes assets/images/groups.png | Bin 2208 -> 887 bytes assets/images/my_files.png | Bin 828 -> 646 bytes assets/images/termsAndConditions.png | Bin 1621 -> 559 bytes assets/images/transferHistory.png | Bin 1556 -> 721 bytes assets/images/trustedSendersIcon.png | Bin 2176 -> 896 bytes lib/desktop_routes/desktop_routes.dart | 7 +- .../desktop_settings/desktop_settings.dart | 15 +-- .../desktop_welcome_screen.dart | 105 +++++++++++++----- lib/services/common_utility_functions.dart | 1 + lib/utils/images.dart | 1 + lib/utils/text_strings.dart | 2 + pubspec.lock | 28 ++--- 16 files changed, 105 insertions(+), 54 deletions(-) create mode 100644 assets/images/desktop_bg.png diff --git a/assets/images/blocked.png b/assets/images/blocked.png index d040e218d4494cc39f89f43d193a54ceb457db7c..fdda10cb70b062cf8ae39c270ba407a950331079 100644 GIT binary patch literal 856 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 literal 1904 zcmZvdXE+;*8po5^n#FQ~@0RX|z1gw=S8OSZOisk4-Gem6l-ZpevQD`fI_Z^*n@H@B3Cuw{yxK>Yu zf3L_fo1HeYT86lqTP-WJt5$c8^nwyv%Atm&(=1!wvyXaIR`hrR3Y1Y%9i=%=d#Fd=J(I(J{Sb_f$~TYYpo4AU-YNZG3W#iO$?EW@!-i2dBp>@5#+PCl%zRuA znDhY;H5iw{{wN$KH~WqpV~vdx^z6XfK>0*YF}a?Ac;Stn^f#v*Q2ba22p2R{X+Weq zQMt(z{WkC{%d2wy>suiB*rsKM))leMh#eL9Jhx8D)crq0>0oYNb%LhGG_d)Y8~iN( z)^P|*f)G;COGqWz+bRHjslM51#UGk5LJ(^N)5M&bRCI|!6=nn~)Cvbv_8ktIS1^-D zki15uOcq4&*lUdlwC;>w6j?&yM6EN+7?1HLn`zgd5n_Vnw9wH5ZwE`o$DUpgQylqG zfB2FXT~RKF(*&pONg?ez=U|1e{g$Fm4=fAhz7f94h!+3P*g!1N!QrC~%tX9rI&81i z=EbXo^OopoO#h=e$P#Jd+ww9m5R!t`NqC&$XCR%TBqn#jtH$=_eOu<15$TyfZmbmi?1sXA@Z#`o!>=J2sULs`9fSq}iK?MB>P!NE7EfX@ToO zZh1D|mN3{CkESF}TUTg@8rF+3p$T)+nY?lJeY`gfMp)0JhaI(PpE(Slb0uGTW3y2r4;{s?4Mv=4=LbBf z58{nQQ#Ozbzi;!t_=k3+kN^5X(*oiiv4JEU78_pn4e&=97iK znrui8ZHSNbPMnkf-`b^Hg@NEJ33q}doiJ@ZrN81d@JpejN2of@pb4YjS0Zzb5=R~P z6YQGx4ohi=lpO8NZ0Nb2jHr9MUeya12g}XcvaAnZdHVoy5kUJF!ng^Qj}_*07N{g% zhF)pkg`+@g1Tb7Alu$~}KB(|6M~$0-Kc{<;;ROO+BIG$Nbhu$>QRNK@zA7S>m4Dk~ z(XvZ2Hm9;*A?2mvpQ$jB+saMUj2W){VqaKXavU#J9fviH5RxVVczk!(&)@4Ge2u`* zpH3Xs>h}Pk)CR~ z(?{9QWx|fx?=`9$CJaUl-pZM+R@E6tuy?dv;9r(c0%eU`FbyPux3PX9+&`#>yfn zd8TMq%~ZC$b;TVbViw*I=WM(aOfudHFbHDMJsp!k&>Az7)&eL&B92E_b4iMiP*yL1 zuk6Y?SMIK{Y+X4xoTQ?`<%z;DiMINg=5T#uzg z|9z&4@dRJx*>7vNEj-@jH84$-89KGs(f;Y0W_o6djHPPHNDR#0(=Fi8wS+cQ8x9}2 z*R6pC)nU8os2J7zZldJpN9d;AW+MdmPo ze$$KgIfskLvFicgCc-|p+t68Z#Z(}@a;)q6U1-e(-6If`P@b>^kDMRi_ i1+-y!-qx`QMHML7I5KQropk*9`3N`%Y{R91)V}~vpInsy diff --git a/assets/images/desktop_bg.png b/assets/images/desktop_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..52371e876e49103691d9b125bd5355f235596922 GIT binary patch literal 142741 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

^b#sBOF$KNuK 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%0APspI?2lKf-L94c3 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 DPg%8X literal 0 HcmV?d00001 diff --git a/assets/images/faqs.png b/assets/images/faqs.png index f899d7e4efcf09276fd0e90049f153d0589d096c..1d5366f1d295a0bb0802837d08160b86a519ef26 100644 GIT binary patch literal 654 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(Fok-$IEGZjy`9;Zd&oe*)tE`S zq^0kI;4a6T3vw>>UEqxowC*{`(epsi$mumR`^@*nAC|LBn58~9w{se`rZ?1X+F zL3@`ixxYK>jGZ373(45OI;<|W=cdic|8`$5a{bjYc%ho&F@wxMJ|M04wvf%H9rnL2r#olW; zgTJs=eUDh|_&bsH)CNtd$uUvU#t$Ryw;pl1Z)s(UMmJ->~QO6+$9baSZ>{a+=lsW zyO@Sb`}VrMar%bm9eyul6?TRZTt#wS=R?Y0)*e*7P?yozB;j8r(tq6)#CH1S;`C?| zqZvp8*T;&z*TZek%QOOA$8{p~|LLjnAfIF1{UC grEYHgIsON$rK08Jr3Pn!$&7)))78&qol`;+03$ag9RL6T literal 1842 zcmc(gSy<8u7smg{qJm4)mm8u^@~M+cnoeoshFgk?I$GJdAU3JEFlJ&RDI#WBK9!9U zZsU>>nP&8fWod~uMov#|QC2pDItrL5DkJWGb~AH5S99^6_dVzQo^yLHgoXHP!;x?R z0JO0IzTw+W`yvh4b{$8vi?E3Z2Uu@s4FGgL8Gw92wuRgl z0I1cg{WYQ0ga6K7mSFt;TmXRG!uon0rhw$Xgc4ClPyz|=dD>y>?VE`diI??>FRK?^U8;+RD_hd|kA*u|ivzdNtGK{C&^Oy1;}P%8s)F2FA0woSIUm zY1U@Ly_MwQ5bKiY4y(k zp~9u%b&IgP@TN5|MsEbCTCVNBsU57ZSHFjxZwQ+^My~AB zyF~eudb3t4EKplrRwzzJs_T3=i?n9f$=)GQhSv3_v+}(0mS(j)YxbDI;y|Is<92Y*pO zKI6ti950$TF2#s=q*i0`!6L{gfOm*#{gy5few7BM^qhP+4Ae&WbG60LXOn?oN{C6% z0lI+}%SKy#FzerdGa0F?3+T?Z2_|g0hJUvO@&M-@O;PVZEl4nI{&mGYqiuKwnW)Q(v8{ z9aHpU(5lhn&1>4SU2d2c(|~>NskLN9gIlD7oR)I2UB++ zLt4axx@tqG$Tgx%n_C?-nqEf4>M&$4RX|}QZg`za$w3Lf2V1m5}l61YnMKDPNABUFOS7JgPt)wie z*Q<%@+k62^FW?&9h(0oMotWcr*=la8!pS>2{Od_nz8SSW3Q7)oDv?`4DVPD{pG%fW zeDEX0P>HzBf5O{ zk8n#Zyp$P@bOS}-$P-@D!VzZ+eyTpSiypeOy4J(hAK_Trm|*lN0lO=2#+s01cO^aq zjs9^X{uWHTQ+{n~jo3b1{PMU=f3q!y-)S4jm>U{$N)I!6J)1HV+4=F{c}WZWW5+&~ zyr&S{9kJEW;_*Sb1{IHfQ_gz7FPA=mNUQ4583X4cft>q46mD5fo)jK81=7C{PHNTI z%&J->JyoY9@oZi1Ynh4d7Bi;%&2#D5fxi`G1}Q)ykg;U19bcUyDMvx2J3RQVrWV#fdg diff --git a/assets/images/groups.png b/assets/images/groups.png index 768d8bf76819805a2fd8cfe8a12da5cc5bee285f..f443dbd0b608cfd5ff1c824f6d0b2d61ef4f84f2 100644 GIT binary patch literal 887 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezr3(Fxz>$IEGZjU5&Un@s0vdDQEbh zsRgP_T3#!>RJiWAt~rPO+?>YWcS;@znaS>G(N%Pmxaq{7d~K)C4fDk}=e9Sf^Ej1V zcl}cPKjH0f^W-}jJ%8`6h+VTaKH@Wz{=bXnelz*j-g22WouT7|#nwELBhK#qDwiw7 z&3F!Lul=W*Yhdq`(!22eeRenRKRuqW=F&dZhByVSK#kp(y*4g(cq`0#?g!iA z)(QVqU+nV;NvO-8ar6^c5a*-tA7^ZS9}Aj$H2(Q=2i7H(iu+6RzHjmgV0gj0h{>jK zUEU-0!;QR$gBpBQ>+`SAQWE;Yw6S@o7SBHMyKW1F%Ja+k9XM z*+r+%q^DR&3YyH7e12#1oMiqgJ{7YE;om-6ZT#sf={%iBYD?{-wQJ{xocmQ@){$%} zaPzDcM*tTzr!7ceto-?y<$CpO))m^PNOtZN2d2ho~rnmop6zZN4%)Q0M z^o41m!oEA9%Phaw%AW7Fycj(})0~a5)=^)8YmRN!E0LcwFa5WF`Aup`@{Y}U?0X#& z+9#|ptvi44PK9Q!;yV*DEv`LHB7c&$t*t79|Rp3%# zIoCZ;Gy9&{GCpH}q~LQWYwOG`{^+F^FIXQbe6f(v{Iu;_u7^yEWm#tEOq&zCcsrXH zxcjmHT>N(Z=74O5y$&XP7r0#>Ll~<&V;HY;r9|p8dF(IzH93CG@&Do(iJ>$7$}XzD ziIrS>^Gz$&Mtil~&hGOt^ L^>bP0l+XkKt literal 2208 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 literal 828 zcmeAS@N?(olHy`uVBq!ia0vp^0U*r51|<6gKdl8)EX7WqAsj$Z!;#X#z`*p`)5S5Q zBJS;-z5XJO5^Nu4ntqhhoEnt8_CJG}iiyfC!6;tU4c?F0+r`$k7X7$*M=wAqmvgR~ ziJHkT{*2r$F5bE4j>z6GJnypS#M^hqo43#5=WJ}LeD>_`M;0S@zO_HtI5RZPZctK) zXmVq0OSHZgb>BWuE%{8d$=f3j?wotX!lKFP;Sj*kv$>Ilh4p}iG@UuVtUZgq`7Zqu z{Gq1r(X+5gCG#wAy*XhPCoSQ+`ubF^vL}Mf^6mN?(wBv7o1h}C&$VXlmLu8=Y$qzj zO;vk$vU>F;PVIIde@$cciuGFgfeJ5VFU(6!O)Whou~)xCnDyL~gwCI6{*4nxoefPX6^0@hV?iX-dX3Y zzs2~raoV&;#*PO4*|+bG-Je*yD$SkkhW!S^1i!)6h?PMvK}0m^R;u z68d>mXqxniB}KbCPNm*ipU09Q|8bjwou1jEoyrydU2DJYUS-%|`RKyx`QKMZM!s`n z{3iIn@ayX5S!ItH-!e3Z@Bg(fEtzqK^0RRJ-<5O2H*aLz(yXJmP5)N^?b~ztQ`uK% z*FLUeyJos$^>IZ74NnKACZ>cryebMB499LdTyOZ~FR=We?Qtu;|9?I{IM2u~rQyG` z|IN;=lNI#qjVzMf4otdl$~2ATceN!WCkIzUq1l9n1q>4D%(cu-zyFsP#yvfdZ^`I* aV7^Mmp9GH5Yf`}Mz~JfX=d#Wzp$PygS!_}O diff --git a/assets/images/termsAndConditions.png b/assets/images/termsAndConditions.png index 8581d538483e728fff459fa2d2463189280dd214..50b2174151014ad97b9a037512920752c9faacdc 100644 GIT binary patch literal 559 zcmV+~0?_@5P)1h5aSb87(_50x{Js-6k%DVQW1i@95EDd-tR1$A9lbj2kwwHW z5oK9^(yyaSygmx6uSq*!n4&oDt@ops`ocU1cWs53^IzBpM?cJQ$b!tseq=#rWIwVX zGqN99kQv#JEEpiyBxfIoEQpYElCzgX7DT8rnYUmshb#cOCpr5$WC5rap5(G0SpcY? zJIPs(>ke4}rs(f~tyw&mjvy|4Tx{I!gunIb=bE{-kMGYl&blhb$POe>cGOdS0-HLl$I4_9F{2 zBm0pBnUVd-g3QQ%D407*=g`0Ws2f;zl0J)la3LHEY~ac~NA5{FCno*BEcYax5e>Z# xl5>(i8O_jjdz2iLREzpzU+Faul8ud5=Laz*V*aA-RAvAG002ovPDHLkV1kFA`&|G4 literal 1621 zcmZ{kYdG5p7RLWcNK%)i7t3l1ZD&fgDAlP;P!-e=6?K`7Tr4FirFADIf}NU9Mx)HA zOWc~$Zd^Kw&#iAbk z003xvUc&k9Df0_R_+FhpUj4(KK;r#8E&>fh21|R5ZTNSd5qLacw&#%mB0Sfck(Z&c#0kvRvj8^P8>CZMWbH?XR?Z9bMA1g(i;| z)CyuW5hK6n$MCNcSNJ{d0(?xKoy+o(S>y+8>vnz6YID3Ov*gWfJb{xoZwco4-AUWs zbiVi0v_If4Y6I=bE1Q!IJ6=(fL1yys;s@x$ZG#cb`X;x+CApaI(AB0&X{r~!6ErQS z^G26g7c$i8yFOQrmk{a~UN4Q;Rh)JK_1sdMNjtm0RH7?Pdz@8Cl_lOz+uLn^Ns6e& zDI{aJ@y}b6cVRWF3+qbfTE3{|fPGSSnD(N9g>!Dz&xeaJg3g>jZB0&QRE&pisWRC*66>cN_a-O?lf0jg-wagV~^e>IwGNBpU7UL%xqd>=<9ewv06Ef zS_a4q5GR|z`Tj9F?P_OaYXKtQ`^~UmPMp(C5(}+m?61Q5%iysK+WkM8f6EEv&_5}w zpQt_0eB`MPqxO06Ut(vEbx1LBRkinVQ@lXd8olNrAD|pG=MW)MUU5Djn&R1vjT~J1 zZJIKrbB(ndX{}FXykYU7ws|WKXK#NnDG+f`V2wC$@qKX1d1*hyiSkXo8B7(poZA}5 z;@rpA_CL=Rzb0SGS1Jb+PFB#eY!wN5ej7H%V&RC`dZK&MNaol&~E{-ya}uCp{gSKnMg>AdsCQ(y25HSI_T zk^oVT%M7CF%YB16N92;k)zcsB=d)nA*)fbL$FD^F*q>4P=}F~ z)fbTW%fglMfoR3h+dd1V;_13wEh2>`zpAH}GO@)K!$eJqPc@;U>&&6|FSIAhx!jJp zAwhK(@yTM>TH(2?r%>3&(w67L&xqBtiQJDm4l^#@LKr|zK3)~gx{OS63}8KJzc=y? zXrk6$ZU#ywFVT<44rN7OsZM2|)m7*$_QGG-i(od+ib8d4ZscIkBTelX& z8Zc*0mUHmFr?*f=?ybbXSLMEfOVvnJ`Ec~jx^;s}z4Ra1Yz{g(s7{72`J~}r9KK;r z?Z4(B>=M0i6|h@le$76gnTtI5=^ZJ)Zhu{HY)B_D5zeV9z0`dow2sRBy^PDnyx!+K zQVAUl?Vj$-v`Zxxd&z4yvNBt<-qL2m3EaDGVNt8J?-%r3 z11fZ?`64cynj=0o!A Pm-p`J=7Vdv7?SmGvEutT diff --git a/assets/images/transferHistory.png b/assets/images/transferHistory.png index 319cd884804c3ee38e0741510e5bc47ddbf74084..da4b068a466da1489656b1c7431c5add40491f1c 100644 GIT binary patch literal 721 zcmV;?0xtcDP)d5GW}s4^=r3Di2jT5GoH<8T8lh z_SoggQ_OlCZr84idXF{-$RdoxY}%Dke`FT3@Yx&3VK(i`Q`n83DJa_QkY$>tXB-FZ z+LZ&L@=%onq4H3b1EKOzl?Q-!lXcsBqS~hIk0d=mm3Ar*Rk;I1VxHZry}vqyJ`&%v zV5;%~#LNY9NTy3zP*vH9)I58P`G~NDU^$$*v z5~P#;+&eq(pz?o+c1YcQ)m`-tH=C*pB2e~ttdz~YB+-AX2GI`n1nIAY+QgUWs6hxSW|7c3PJKCHFU`&prpaEw z{|#+2TE`K}$22=jz+#ssOa_i4O&$WqwDjTVj7}Ob;2n~}LSGZbm|^muBRXkFU3=+o z&?ZB$C8=ilT0(DCOmytIz37=Z1c7K}Pwz^b@ON-F(e)oXZXw+~u-~|~1Z5Owrs}LC zd~}Rg*T7yWwzE#ydLNIOma?%|dj3WR`CuGd*7%WqV3r=D8w9;EFK1>*FVaHFt^#+8 z*J?D@Anw;usCLnQH>9F3$*vRhmFhpu0b`XC)7IPFSc8Al25*rMC73~FV;`&UB{UNw z(Q${gQ1*H@k;4&J4tt4*FPbED?s02lf$zTyjn2p#Y#=z@U*g9fGNbL-tr~w$Pb6JFK1#ZHXKggMZ8tv{5qTu8o;t zgd;2zj0~-Ei5c{%?p}S%A4<93sDrYRe0ds3zjs&%Bd4yhq7_Dvr)&l+3i#VZ*VSp$A7mqoF?S0hGEy~-YDVSU-8>Zqt8bo z64l8~L7e!x{(}zMWYEF-na_x~Df>cv9YEbpkL0;|AchR}7a<8cw=d-G2T8XX46BZy z#qo9u(t_Ql>Qrr>Y|b^164^?28*|In_K!VZX+Dpa%|CrnDi&_UyhBrFnQMJwy&*SUBZ!Up;?d2Gn-C2 zCLD>0K>FBu2h9l_Z;tg}xUy6Z$UIaOWmS?xoInQMpw~|*SxfUkEqs!`2`ecnX-CEM z%{wa|zD?QHX+2zd%ej(*<*8J^C!=Mr`s{Wu`X={HnyptN)yj#)s_h*#@Hok>d+qZp zMP}R_Q6>>1Xn=^g$iYoc7jpT!cv}IUFOf)o%uP#)CyuGi^L_VD*l|2xex($nEc+Kqd`mz6DUQY{o@D$O`61M? zA8={Nswnac?1-+=YS|fdj-5bNTi|nCzZM#u_#(WWqj;t4^;7d78gb%N>^KvnsMJ)| z4)DFJJx)~Oy?WK*`sT9U9j#63R2OKB7cRrnoIaRfX!h6&FpMHUNi@W7<3|#g<7ozH z^DY>YcVrS>HZpUitz? zv*KP$dfrqyY#B&y9*A3bj+C9Nj~C>F!=FaW*`=EsrFm2Q5llz_W-kzheS=O|5(c9p z!~>8amIX@l?YQ^?04xStOUoWQ??YyKM0E;dWM#)0 oy7Bmdh)3z3HIGew-u$(HQENCb0+H1^GyL;AGw8vzT1rgbKXCbv`~Uy| diff --git a/assets/images/trustedSendersIcon.png b/assets/images/trustedSendersIcon.png index a21d3ce9ff8014cc24e2270e99556319f87327ff..e43ed5ec3f446d5019ffff69333ce691ee2369fc 100644 GIT binary patch literal 896 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 nM> DesktopEmptyGroup(), + DesktopRoutes.DESKTOP_SETTINGS: (context) => DesktopSettings(), + DesktopRoutes.DESKT_FAQ: (context) => WebsiteScreen( title: 'FAQ', url: '${MixedConstants.WEBSITE_URL}/faqs', - ) - - DesktopRoutes.DESKTOP_SETTINGS: (context) => DesktopSettings(), + ), }; } diff --git a/lib/desktop_screens/desktop_settings/desktop_settings.dart b/lib/desktop_screens/desktop_settings/desktop_settings.dart index e611f97e..ff7a5421 100644 --- a/lib/desktop_screens/desktop_settings/desktop_settings.dart +++ b/lib/desktop_screens/desktop_settings/desktop_settings.dart @@ -3,7 +3,7 @@ import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/desktop_screens/desktop_common_widgets/desktop_header.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; -// import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; +import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -23,12 +23,12 @@ class DesktopSettings extends StatefulWidget { class _DesktopSettingsState extends State { final List optionTitle = [ - TextStrings().sidebarSwitchOut, - TextStrings().sidebarBackupKey, + TextStrings().switchatSign, + TextStrings().backUpKeys, TextStrings().faqs, - TextStrings().sidebarContactUs, + TextStrings().contactUs, TextStrings().termsAppBar, - TextStrings().sidebarDeleteAtsign, + TextStrings().deleteAtsigns, ]; final List optionIcons = [ @@ -144,10 +144,7 @@ class _DesktopSettingsState extends State { image: optionIcons[3], ), SizedBox( - height: 12, - ), - SizedBox( - height: 12, + height: 24, ), SettingsButton( buttonText: optionTitle[5], diff --git a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart index be43431f..4df7709f 100644 --- a/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart +++ b/lib/desktop_screens/desktop_welcome_screen/desktop_welcome_screen.dart @@ -19,9 +19,8 @@ import 'package:atsign_atmosphere_pro/view_models/switch_atsign_provider.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; -import 'package:flutter/rendering.dart'; -import 'package:flutter/widgets.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:url_launcher/url_launcher_string.dart'; @@ -229,6 +228,7 @@ class _DesktopWelcomeScreenState extends State { ImageConstants.faqsIcon, ImageConstants.trustedSendersIcon, ImageConstants.contactUs, + ImageConstants.settings, ]; final List menuItemsTitle = [ @@ -243,6 +243,7 @@ class _DesktopWelcomeScreenState extends State { TextStrings().sidebarTermsAndConditions, TextStrings().sidebarFaqs, TextStrings().sidebarContactUs, + TextStrings().sidebarSettings, ]; final List routes = [ @@ -254,6 +255,7 @@ class _DesktopWelcomeScreenState extends State { DesktopRoutes.DESKTOP_GROUP, // DesktopRoutes.DESKTOP_DOWNLOAD_ALL, DesktopRoutes.DESKTOP_EMPTY_TRUSTED_SENDER, + DesktopRoutes.DESKTOP_SETTINGS, '', '', '', @@ -298,15 +300,32 @@ class _DesktopWelcomeScreenState extends State { successBuilder: (provider) => Column( mainAxisAlignment: MainAxisAlignment.center, crossAxisAlignment: _sideBarProvider.isSidebarExpanded - ? CrossAxisAlignment.center + ? CrossAxisAlignment.start : CrossAxisAlignment.center, children: [ - SideBarIcon( - menuItemsIcons[0], - routes[0], - title: menuItemsTitle[0], - isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + if(_sideBarProvider.isSidebarExpanded) + Padding( + padding: const EdgeInsets.only(left: 15.0, top: 20), + child: Text( + TextStrings().general, + textAlign: TextAlign.left, + style: GoogleFonts.inter( + textStyle: TextStyle( + fontSize: 12.toFont, + fontWeight: FontWeight.w700, + // height: 1.3, + color: Color(0xffE7E7E7) + ), + ), + ), ), + SizedBox(height: 30,), + // SideBarIcon( + // menuItemsIcons[0], + // routes[0], + // title: menuItemsTitle[0], + // isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + // ), SizedBox(height: 40.toHeight), SideBarIcon( menuItemsIcons[1], @@ -366,7 +385,7 @@ class _DesktopWelcomeScreenState extends State { // SizedBox(height: 40.toHeight), SideBarIcon( menuItemsIcons[7], - routes[7], + routes[9], isUrlLauncher: true, arguments: {"url": MixedConstants.TERMS_CONDITIONS}, title: menuItemsTitle[7], @@ -384,12 +403,20 @@ class _DesktopWelcomeScreenState extends State { SizedBox(height: 40.toHeight), SideBarIcon( menuItemsIcons[10], - routes[7], + routes[10], isEmailLauncher: true, arguments: {"email": 'atmospherepro@atsign.com'}, title: menuItemsTitle[9], isSidebarExpanded: _sideBarProvider.isSidebarExpanded, ), + SizedBox(height: 40.toHeight), + SideBarIcon( + menuItemsIcons[11], + routes[7], + title: menuItemsTitle[10], + isSidebarExpanded: _sideBarProvider.isSidebarExpanded, + ), + SizedBox(height: 40.toHeight), ], ), errorBuilder: (provider) => Center( @@ -420,7 +447,7 @@ class _DesktopWelcomeScreenState extends State { Consumer(builder: (_context, _provider, _) { return Positioned( top: 40, - left: _provider.isSidebarExpanded ? 160 : 50, + left: _provider.isSidebarExpanded ? 230 : 50, child: Builder( builder: (context) { return InkWell( @@ -564,20 +591,31 @@ class SideBarIcon extends StatelessWidget { height: 22, color: isCurrentRoute ? ColorConstants.orangeColor - : ColorConstants.fadedText, + : Color(0xffA4A4A5), ), SizedBox(width: isSidebarExpanded ? 10 : 0), isSidebarExpanded ? Text( title!, softWrap: true, - style: TextStyle( - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - letterSpacing: 0.1, - fontSize: 12, - fontWeight: FontWeight.normal, + // style: TextStyle( + // color: isCurrentRoute + // ? ColorConstants.orangeColor + // : ColorConstants.fadedText, + // letterSpacing: 0.1, + // fontSize: 12, + // fontWeight: FontWeight.normal, + // ), + style: GoogleFonts.inter( + textStyle: TextStyle( + color: isCurrentRoute + ? ColorConstants.orangeColor + : Color(0xffA4A4A5), + fontSize: 12.toFont, + fontWeight: FontWeight.w500, + // height: 1.3, + // color: Color(0xffE7E7E7) + ), ), ) : SizedBox() @@ -613,21 +651,32 @@ class SideBarIcon extends StatelessWidget { height: 22, color: isCurrentRoute ? ColorConstants.orangeColor - : ColorConstants.fadedText, + : Color(0xffA4A4A5), ), SizedBox(width: isSidebarExpanded ? 10 : 0), isSidebarExpanded ? Text( title!, softWrap: true, - style: TextStyle( - color: isCurrentRoute - ? ColorConstants.orangeColor - : ColorConstants.fadedText, - letterSpacing: 0.1, - fontSize: 12, - fontWeight: FontWeight.normal, - ), + // style: TextStyle( + // color: isCurrentRoute + // ? ColorConstants.orangeColor + // : ColorConstants.fadedText, + // letterSpacing: 0.1, + // fontSize: 12, + // fontWeight: FontWeight.normal, + // ), + style: GoogleFonts.inter( + textStyle: TextStyle( + color: isCurrentRoute + ? ColorConstants.orangeColor + : Color(0xffA4A4A5), + fontSize: 12.toFont, + fontWeight: FontWeight.w500, + // height: 1.3, + // color: Color(0xffE7E7E7) + ), + ) ) : SizedBox() ], diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 67334024..f0a7bfdf 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -99,6 +99,7 @@ class CommonUtilityFunctions { child: SingleChildScrollView( child: Container( padding: EdgeInsets.all(20), + width: 600, child: Column( mainAxisSize: MainAxisSize.min, children: [ diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 5dcfc9cd..076e192f 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -63,6 +63,7 @@ class ImageConstants { static String groupPhotoDesktop = '$_basePath/group_photo.png'; static String homeBgDesktop = '$_basePath/home_bg.png'; static String homeIcon = '$_basePath/home_icon.png'; + static String backgroundDesktop = '$_basePath/desktop_bg.png'; static String homeCaraousel1 = '$_basePath/home_caraousel_2.png'; static String homeCaraousel2 = '$_basePath/home_caraousel_1.png'; diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index a8a83f9f..4e3a4101 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -59,6 +59,8 @@ class TextStrings { String sidebarContactUs = 'Contact us'; String sidebarSettings = 'Settings'; + String general = 'General'; + String atSign = 'atSign'; String switchingAtSign = 'Switching atsign...'; String deleteDataMessage = diff --git a/pubspec.lock b/pubspec.lock index 3d613a8c..dfda3c2c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,7 +42,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.9.0" + version: "2.8.2" at_backupkey_flutter: dependency: "direct main" description: @@ -202,7 +202,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.0" charcode: dependency: transitive description: @@ -230,7 +230,7 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.0" collection: dependency: transitive description: @@ -335,7 +335,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.1" + version: "1.3.0" ffi: dependency: transitive description: @@ -616,21 +616,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.12" + version: "0.12.11" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.5" + version: "0.1.4" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.8.0" + version: "1.7.0" mime: dependency: transitive description: @@ -742,7 +742,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.8.1" path_provider: dependency: transitive description: @@ -1090,7 +1090,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.9.0" + version: "1.8.2" stack_trace: dependency: transitive description: @@ -1111,35 +1111,35 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.0" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.1" + version: "1.2.0" test: dependency: transitive description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.21.4" + version: "1.21.1" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.12" + version: "0.4.9" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.4.16" + version: "0.4.13" timezone: dependency: transitive description: From 76879a941bd587df2db1f2368fe483e4e879cc17 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Wed, 26 Oct 2022 20:15:45 +0530 Subject: [PATCH 22/94] undo pubspec.lock --- pubspec.lock | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/pubspec.lock b/pubspec.lock index dfda3c2c..98190782 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -42,7 +42,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.9.0" at_backupkey_flutter: dependency: "direct main" description: @@ -202,7 +202,7 @@ packages: name: characters url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: @@ -230,7 +230,7 @@ packages: name: clock url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: @@ -335,7 +335,7 @@ packages: name: fake_async url: "https://pub.dartlang.org" source: hosted - version: "1.3.0" + version: "1.3.1" ffi: dependency: transitive description: @@ -616,21 +616,21 @@ packages: name: matcher url: "https://pub.dartlang.org" source: hosted - version: "0.12.11" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities url: "https://pub.dartlang.org" source: hosted - version: "0.1.4" + version: "0.1.5" meta: dependency: transitive description: name: meta url: "https://pub.dartlang.org" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: @@ -742,7 +742,7 @@ packages: name: path url: "https://pub.dartlang.org" source: hosted - version: "1.8.1" + version: "1.8.2" path_provider: dependency: transitive description: @@ -1090,7 +1090,7 @@ packages: name: source_span url: "https://pub.dartlang.org" source: hosted - version: "1.8.2" + version: "1.9.0" stack_trace: dependency: transitive description: @@ -1111,35 +1111,35 @@ packages: name: string_scanner url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.2.1" test: dependency: transitive description: name: test url: "https://pub.dartlang.org" source: hosted - version: "1.21.1" + version: "1.21.4" test_api: dependency: transitive description: name: test_api url: "https://pub.dartlang.org" source: hosted - version: "0.4.9" + version: "0.4.12" test_core: dependency: transitive description: name: test_core url: "https://pub.dartlang.org" source: hosted - version: "0.4.13" + version: "0.4.16" timezone: dependency: transitive description: @@ -1331,4 +1331,4 @@ packages: version: "0.1.0" sdks: dart: ">=2.17.0 <3.0.0" - flutter: ">=3.0.0" + flutter: ">=3.0.0" \ No newline at end of file From 43cade24cb818084baa8d3167a92ad3198ff1641 Mon Sep 17 00:00:00 2001 From: AdiAr11 Date: Fri, 4 Nov 2022 13:19:10 +0530 Subject: [PATCH 23/94] reverted gradient_button --- lib/screens/common_widgets/gradient_button.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/screens/common_widgets/gradient_button.dart b/lib/screens/common_widgets/gradient_button.dart index aae5ab4e..fc24ac07 100644 --- a/lib/screens/common_widgets/gradient_button.dart +++ b/lib/screens/common_widgets/gradient_button.dart @@ -43,7 +43,7 @@ class GradientButton extends StatelessWidget { child: ElevatedButton( onPressed: onPressed, style: ElevatedButton.styleFrom( - // backgroundColor: Colors.transparent, + backgroundColor: Colors.transparent, shadowColor: Colors.transparent, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(radius), From be464c30c92354d4166c3a497feb01414fa64058 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 17 Jan 2023 09:13:25 +0700 Subject: [PATCH 24/94] feat: update UI My Files Screen --- assets/svg/app_icon.svg | 9 + assets/svg/ic_arrow_down.svg | 3 + assets/svg/ic_check.svg | 4 + assets/svg/ic_reload.svg | 3 + assets/svg/ic_search.svg | 3 + assets/svg/ic_unchecked.svg | 3 + lib/data_models/enums/file_types.dart | 28 +++ lib/routes/route_names.dart | 1 + lib/routes/routes.dart | 2 + .../common_widgets/app_bar_custom.dart | 76 ++++++ .../common_widgets/option_header_widget.dart | 231 ++++++++++++++++++ lib/screens/my_files/my_files_screen.dart | 61 +++++ .../welcome_screen/welcome_screen.dart | 86 ++++--- lib/utils/vectors.dart | 9 + 14 files changed, 483 insertions(+), 36 deletions(-) create mode 100644 assets/svg/app_icon.svg create mode 100644 assets/svg/ic_arrow_down.svg create mode 100644 assets/svg/ic_check.svg create mode 100644 assets/svg/ic_reload.svg create mode 100644 assets/svg/ic_search.svg create mode 100644 assets/svg/ic_unchecked.svg create mode 100644 lib/data_models/enums/file_types.dart create mode 100644 lib/screens/common_widgets/app_bar_custom.dart create mode 100644 lib/screens/common_widgets/option_header_widget.dart create mode 100644 lib/screens/my_files/my_files_screen.dart create mode 100644 lib/utils/vectors.dart diff --git a/assets/svg/app_icon.svg b/assets/svg/app_icon.svg new file mode 100644 index 00000000..cb9f5f0b --- /dev/null +++ b/assets/svg/app_icon.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/svg/ic_arrow_down.svg b/assets/svg/ic_arrow_down.svg new file mode 100644 index 00000000..736ecb1d --- /dev/null +++ b/assets/svg/ic_arrow_down.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_check.svg b/assets/svg/ic_check.svg new file mode 100644 index 00000000..2493a29b --- /dev/null +++ b/assets/svg/ic_check.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_reload.svg b/assets/svg/ic_reload.svg new file mode 100644 index 00000000..b8d8df71 --- /dev/null +++ b/assets/svg/ic_reload.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_search.svg b/assets/svg/ic_search.svg new file mode 100644 index 00000000..a0fc8607 --- /dev/null +++ b/assets/svg/ic_search.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_unchecked.svg b/assets/svg/ic_unchecked.svg new file mode 100644 index 00000000..4a25b358 --- /dev/null +++ b/assets/svg/ic_unchecked.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/data_models/enums/file_types.dart b/lib/data_models/enums/file_types.dart new file mode 100644 index 00000000..e2fb9001 --- /dev/null +++ b/lib/data_models/enums/file_types.dart @@ -0,0 +1,28 @@ +enum FileTypes { all, docx, ppt, pdf, excel, txtFile, psd, html, png } + +extension GenderTypeExtension on FileTypes { + String get text { + switch (this) { + case FileTypes.all: + return 'All'; + case FileTypes.docx: + return 'Docx'; + case FileTypes.ppt: + return 'PPT'; + case FileTypes.pdf: + return 'PDF'; + case FileTypes.excel: + return 'Excel'; + case FileTypes.txtFile: + return 'Txt File'; + case FileTypes.psd: + return 'PSD'; + case FileTypes.html: + return 'HTML'; + case FileTypes.png: + return 'PNG'; + default: + return ''; + } + } +} diff --git a/lib/routes/route_names.dart b/lib/routes/route_names.dart index b9f4b784..fbbb9f2e 100644 --- a/lib/routes/route_names.dart +++ b/lib/routes/route_names.dart @@ -12,6 +12,7 @@ class Routes { static const String TRUSTED_CONTACTS = 'trustedContacts'; static const String EMPTY_TRUSTED_CONTACTS = 'emptyTrustedContacts'; static const String MY_FILES = 'myFiles'; + static const String MY_FILES_SCREEN = 'myFiles'; static const String GROUPS = 'groups'; static const String SETTINGS = 'settings'; } diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 96002809..d014d5ed 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -6,6 +6,7 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/website_webview.dar import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/home/home.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/trusted_contacts/trusted_contacts.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/welcome_screen.dart'; @@ -29,6 +30,7 @@ class SetupRoutes { url: '${MixedConstants.WEBSITE_URL}/faqs', ), Routes.MY_FILES: (context) => MyFiles(), + Routes.MY_FILES_SCREEN: (context) => MyFilesScreen(), Routes.HISTORY: (context) => HistoryScreen(tabIndex: 1), Routes.BLOCKED_USERS: (context) => BlockedScreen(), Routes.CONTACT_SCREEN: (context) { diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart new file mode 100644 index 00000000..a4da7771 --- /dev/null +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -0,0 +1,76 @@ +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { + final String? title; + final String? description; + final Widget? actionCustom; + final double? marginRightAction; + final double? height; + final bool isContent; + final Widget? suffixIcon; + + const AppBarCustom({ + Key? key, + this.title, + this.actionCustom, + this.marginRightAction, + this.height, + this.description, + this.isContent = false, + this.suffixIcon, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + padding: EdgeInsets.symmetric(vertical: 24), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 30, right: 24), + child: SvgPicture.asset( + AppVectors.appIcon, + color: Colors.black, + ), + ), + Expanded( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + title ?? '', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + SizedBox(width: 12), + Text( + description ?? '', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], + ), + ), + suffixIcon ?? SizedBox(), + ], + ), + ); + } + + @override + Size get preferredSize => Size.fromHeight(height ?? 130); +} diff --git a/lib/screens/common_widgets/option_header_widget.dart b/lib/screens/common_widgets/option_header_widget.dart new file mode 100644 index 00000000..b2d1d3bd --- /dev/null +++ b/lib/screens/common_widgets/option_header_widget.dart @@ -0,0 +1,231 @@ +import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class OptionHeaderWidget extends StatefulWidget { + final Function? onReloadCallback; + final Function? onSearchCallback; + final bool hideReloadIcon; + final Function? selectTypeCallback; + + OptionHeaderWidget({ + Key? key, + this.onReloadCallback, + this.onSearchCallback, + this.hideReloadIcon = true, + this.selectTypeCallback, + }) : super(key: key); + + @override + State createState() => _OptionHeaderWidgetState(); +} + +class _OptionHeaderWidgetState extends State { + FileTypes? typeSelected = FileTypes.all; + + @override + Widget build(BuildContext context) { + return Container( + margin: EdgeInsets.symmetric(horizontal: 28), + padding: EdgeInsets.fromLTRB(14, 11, 15, 14), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: ColorConstants.textBoxBg, + ), + child: Row( + children: [ + Visibility( + visible: widget.hideReloadIcon, + child: _buildButton( + title: "Refresh", + icon: AppVectors.icReload, + onTap: widget.onReloadCallback), + ), + SizedBox(width: 12), + _buildButton( + title: "Search", + icon: AppVectors.icSearch, + onTap: widget.onSearchCallback, + ), + SizedBox(width: 15), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Delivery Type", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + ), + SizedBox(height: 5), + Container( + height: 48, + margin: const EdgeInsets.only(right: 12), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.symmetric(horizontal: 18), + child: DropdownButtonHideUnderline( + child: Padding( + padding: EdgeInsets.zero, + child: DropdownButton( + value: typeSelected, + icon: SvgPicture.asset( + AppVectors.icArrowDown, + ), + isExpanded: true, + underline: null, + alignment: AlignmentDirectional.bottomEnd, + hint: Text( + "All", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: ColorConstants.grey, + ), + ), + items: FileTypes.values.map( + (key) { + return DropdownMenuItem( + value: key, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12, + ), + child: Row( + children: [ + Expanded( + child: Text( + key.text, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + typeSelected == key + ? SvgPicture.asset( + AppVectors.icCheck, + // color: Colors.green, + ) + : SvgPicture.asset( + AppVectors.icUnCheck, + // color: Colors.green, + ), + ], + ), + ), + Container( + color: ColorConstants.sidebarTileSelected, + height: 2, + width: double.infinity, + ) + ], + ), + ); + }, + ).toList(), + selectedItemBuilder: (BuildContext context) { + return FileTypes.values.map( + (key) { + return DropdownMenuItem( + value: key, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12, + ), + child: Text( + key.text, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + Container( + color: ColorConstants.sidebarTileSelected, + height: 1, + width: double.infinity, + ) + ], + ), + ); + }, + ).toList(); + }, + onChanged: (value) { + setState( + () { + typeSelected = value; + }, + ); + widget.selectTypeCallback?.call(); + }, + borderRadius: BorderRadius.circular(10), + ), + ), + ), + ), + ], + ), + ), + ], + ), + ); + } + + Widget _buildButton({ + String? title, + required String icon, + Function? onTap, + }) { + return InkWell( + onTap: onTap?.call(), + child: Column( + children: [ + Text( + title ?? '', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + ), + SizedBox(height: 5), + Container( + height: 48, + width: 48, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.grey, + ), + ), + child: Center( + child: SvgPicture.asset(icon), + ), + ) + ], + ), + ); + } +} diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart new file mode 100644 index 00000000..96c59f57 --- /dev/null +++ b/lib/screens/my_files/my_files_screen.dart @@ -0,0 +1,61 @@ +import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/svg.dart'; + +class MyFilesScreen extends StatefulWidget { + @override + _MyFilesScreenState createState() => _MyFilesScreenState(); +} + +class _MyFilesScreenState extends State + with TickerProviderStateMixin { + TabController? _controller; + bool isOpen = false; + List tabs = []; + List tabNames = []; + + bool isLoading = false; + Type runtimeType = Videos; + + @override + void initState() { + super.initState(); + } + + @override + Widget build(BuildContext context) { + SizeConfig().init(context); + return Scaffold( + appBar: AppBarCustom( + height: 130, + title: "My Files", + description: '3', + ), + body: isLoading ? buildLoading : buildBody()); + } + + Widget get buildLoading { + return SafeArea( + top: false, + child: Center( + child: CircularProgressIndicator(), + ), + ); + } + + Widget buildBody() { + return Column( + children: [ + OptionHeaderWidget(), + Expanded( + child: Container(), + ), + ], + ); + } +} diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 3509c3cc..a1843a4e 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -3,12 +3,11 @@ import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; @@ -34,6 +33,7 @@ class _WelcomeScreenState extends State { bool isExpanded = true; int _selectedBottomNavigationIndex = 0; late FileTransferProvider _fileTransferProvider; + // 0-Sending, 1-Success, 2-Error List transferStatus = [ SizedBox(), @@ -49,6 +49,7 @@ class _WelcomeScreenState extends State { ) ]; String? currentAtSign; + @override void initState() { _fileTransferProvider = @@ -100,7 +101,7 @@ class _WelcomeScreenState extends State { static List _bottomSheetWidgetOptions = [ WelcomeScreenHome(), ContactsScreen(), - MyFiles(), + MyFilesScreen(), HistoryScreen(), SettingsScreen() ]; @@ -115,18 +116,16 @@ class _WelcomeScreenState extends State { key: _scaffoldKey, backgroundColor: ColorConstants.scaffoldColor, floatingActionButtonLocation: - FloatingActionButtonLocation.centerDocked, - floatingActionButton: Container( + FloatingActionButtonLocation.centerDocked, + floatingActionButton: Container ( width: 79, height: 79, decoration: BoxDecoration( shape: BoxShape.circle, - gradient: - LinearGradient( + gradient: LinearGradient( colors: [Color(0xffF05E3F), Color(0xffe9a642)], stops: [0.1, 0.8], - ) - ), + )), child: FloatingActionButton( elevation: 0, backgroundColor: Colors.transparent, @@ -135,24 +134,29 @@ class _WelcomeScreenState extends State { _selectedBottomNavigationIndex = 0; }); }, - child: _selectedBottomNavigationIndex == 4 || _selectedBottomNavigationIndex == 0? - SvgPicture.asset("assets/svg/plus.svg",) : - SvgPicture.asset("assets/svg/home.svg",) , + child: _selectedBottomNavigationIndex == 0 + ? SvgPicture.asset( + "assets/svg/plus.svg", + ) + : SvgPicture.asset( + "assets/svg/home.svg", + ), ), ), - appBar: _selectedBottomNavigationIndex == 0 - ? (SizeConfig().isTablet(context) - ? null - : CustomAppBar( - showLeadingicon: true, - )) - : CustomAppBar( - showMenu: true, - showBackButton: false, - showTrailingButton: true, - showTitle: true, - showClosedBtnText: false, - title: 'Received Files'), + // appBar: _selectedBottomNavigationIndex == 0 + // ? (SizeConfig().isTablet(context) + // ? null + // : CustomAppBar( + // showLeadingicon: true, + // )) + // : CustomAppBar( + // showMenu: true, + // showBackButton: false, + // showTrailingButton: true, + // showTitle: true, + // showClosedBtnText: false, + // title: 'Received Files', + // ), extendBody: true, drawerScrimColor: Colors.transparent, endDrawer: SideBarWidget( @@ -160,14 +164,14 @@ class _WelcomeScreenState extends State { ), body: Consumer( builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[_selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }), + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[_selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }), ), ), ); @@ -234,7 +238,9 @@ class _WelcomeScreenState extends State { ? Color(0xffEAA743) : Colors.black)), // Spacer(), - SizedBox(height: 10,), + SizedBox( + height: 10, + ), if (_selectedBottomNavigationIndex == index) Container( height: 2, @@ -250,7 +256,11 @@ class _WelcomeScreenState extends State { ], ), ) - else SizedBox(height: 2, width: 40,), + else + SizedBox( + height: 2, + width: 40, + ), if (_selectedBottomNavigationIndex == index) SizedBox( height: 4, @@ -259,7 +269,11 @@ class _WelcomeScreenState extends State { painter: PainterOne(), ), ) - else SizedBox(height: 4, width: 50,) + else + SizedBox( + height: 4, + width: 50, + ) ], ), ); diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart new file mode 100644 index 00000000..58ef3cb5 --- /dev/null +++ b/lib/utils/vectors.dart @@ -0,0 +1,9 @@ +class AppVectors { + static String _basePath = 'assets/svg'; + static String appIcon = '$_basePath/app_icon.svg'; + static String icReload = '$_basePath/ic_reload.svg'; + static String icSearch = '$_basePath/ic_search.svg'; + static String icArrowDown = '$_basePath/ic_arrow_down.svg'; + static String icCheck = '$_basePath/ic_check.svg'; + static String icUnCheck = '$_basePath/ic_unchecked.svg'; +} From 6b96df63201312dd1e6bbb44ef238f2153b53ce8 Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 19 Jan 2023 12:05:27 +0700 Subject: [PATCH 25/94] feat: update MyFiles Screen --- assets/svg/ic_cancel.svg | 4 + lib/data_models/enums/file_types.dart | 34 +- .../common_widgets/option_header_widget.dart | 285 ++++++++-------- lib/screens/my_files/my_files_screen.dart | 308 +++++++++++++++++- lib/utils/colors.dart | 1 + lib/utils/vectors.dart | 1 + lib/view_models/my_files_provider.dart | 110 ++++++- 7 files changed, 552 insertions(+), 191 deletions(-) create mode 100644 assets/svg/ic_cancel.svg diff --git a/assets/svg/ic_cancel.svg b/assets/svg/ic_cancel.svg new file mode 100644 index 00000000..b60eef94 --- /dev/null +++ b/assets/svg/ic_cancel.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/data_models/enums/file_types.dart b/lib/data_models/enums/file_types.dart index e2fb9001..77792431 100644 --- a/lib/data_models/enums/file_types.dart +++ b/lib/data_models/enums/file_types.dart @@ -1,26 +1,22 @@ -enum FileTypes { all, docx, ppt, pdf, excel, txtFile, psd, html, png } +enum FileType { all, photo, video, audio, apk, document, unknown } -extension GenderTypeExtension on FileTypes { +extension GenderTypeExtension on FileType { String get text { switch (this) { - case FileTypes.all: + case FileType.all: return 'All'; - case FileTypes.docx: - return 'Docx'; - case FileTypes.ppt: - return 'PPT'; - case FileTypes.pdf: - return 'PDF'; - case FileTypes.excel: - return 'Excel'; - case FileTypes.txtFile: - return 'Txt File'; - case FileTypes.psd: - return 'PSD'; - case FileTypes.html: - return 'HTML'; - case FileTypes.png: - return 'PNG'; + case FileType.photo: + return 'Photo'; + case FileType.video: + return 'Video'; + case FileType.audio: + return 'Audio'; + case FileType.apk: + return 'APK'; + case FileType.document: + return 'Document'; + case FileType.unknown: + return 'Unknown'; default: return ''; } diff --git a/lib/screens/common_widgets/option_header_widget.dart b/lib/screens/common_widgets/option_header_widget.dart index b2d1d3bd..00ac8274 100644 --- a/lib/screens/common_widgets/option_header_widget.dart +++ b/lib/screens/common_widgets/option_header_widget.dart @@ -1,21 +1,24 @@ -import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; class OptionHeaderWidget extends StatefulWidget { - final Function? onReloadCallback; - final Function? onSearchCallback; + final Function()? onReloadCallback; + final Function()? onSearchCallback; final bool hideReloadIcon; - final Function? selectTypeCallback; + final Widget? filterWidget; + final TextEditingController? controller; + final Function(String)? onSearch; OptionHeaderWidget({ Key? key, this.onReloadCallback, this.onSearchCallback, this.hideReloadIcon = true, - this.selectTypeCallback, + this.filterWidget, + this.controller, + this.onSearch, }) : super(key: key); @override @@ -23,7 +26,7 @@ class OptionHeaderWidget extends StatefulWidget { } class _OptionHeaderWidgetState extends State { - FileTypes? typeSelected = FileTypes.all; + bool isSearch = false; @override Widget build(BuildContext context) { @@ -34,172 +37,73 @@ class _OptionHeaderWidgetState extends State { borderRadius: BorderRadius.circular(8), color: ColorConstants.textBoxBg, ), - child: Row( - children: [ - Visibility( - visible: widget.hideReloadIcon, - child: _buildButton( - title: "Refresh", - icon: AppVectors.icReload, - onTap: widget.onReloadCallback), - ), - SizedBox(width: 12), - _buildButton( - title: "Search", - icon: AppVectors.icSearch, - onTap: widget.onSearchCallback, - ), - SizedBox(width: 15), - Expanded( - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - "Delivery Type", - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: ColorConstants.sidebarTextUnselected, + child: isSearch + ? _buildSearchWidget() + : Row( + children: [ + Visibility( + visible: widget.hideReloadIcon, + child: _buildButton( + title: "Refresh", + icon: AppVectors.icReload, + onTap: widget.onReloadCallback, ), ), - SizedBox(height: 5), - Container( - height: 48, - margin: const EdgeInsets.only(right: 12), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(10), - ), - padding: const EdgeInsets.symmetric(horizontal: 18), - child: DropdownButtonHideUnderline( - child: Padding( - padding: EdgeInsets.zero, - child: DropdownButton( - value: typeSelected, - icon: SvgPicture.asset( - AppVectors.icArrowDown, + SizedBox(width: 12), + _buildButton( + title: "Search", + icon: AppVectors.icSearch, + onTap: () { + setState(() { + isSearch = true; + }); + widget.onSearchCallback?.call(); + }, + ), + SizedBox(width: 15), + Expanded( + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "Delivery Type", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, ), - isExpanded: true, - underline: null, - alignment: AlignmentDirectional.bottomEnd, - hint: Text( - "All", - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w700, + ), + SizedBox(height: 5), + Container( + height: 48, + margin: const EdgeInsets.only(right: 12), + decoration: BoxDecoration( + border: Border.all( color: ColorConstants.grey, ), + borderRadius: BorderRadius.circular(10), ), - items: FileTypes.values.map( - (key) { - return DropdownMenuItem( - value: key, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - vertical: 12, - ), - child: Row( - children: [ - Expanded( - child: Text( - key.text, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), - typeSelected == key - ? SvgPicture.asset( - AppVectors.icCheck, - // color: Colors.green, - ) - : SvgPicture.asset( - AppVectors.icUnCheck, - // color: Colors.green, - ), - ], - ), - ), - Container( - color: ColorConstants.sidebarTileSelected, - height: 2, - width: double.infinity, - ) - ], - ), - ); - }, - ).toList(), - selectedItemBuilder: (BuildContext context) { - return FileTypes.values.map( - (key) { - return DropdownMenuItem( - value: key, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - vertical: 12, - ), - child: Text( - key.text, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), - Container( - color: ColorConstants.sidebarTileSelected, - height: 1, - width: double.infinity, - ) - ], - ), - ); - }, - ).toList(); - }, - onChanged: (value) { - setState( - () { - typeSelected = value; - }, - ); - widget.selectTypeCallback?.call(); - }, - borderRadius: BorderRadius.circular(10), + padding: const EdgeInsets.symmetric(horizontal: 18), + child: widget.filterWidget, ), - ), + ], ), ), ], ), - ), - ], - ), ); } Widget _buildButton({ String? title, required String icon, - Function? onTap, + Function()? onTap, }) { return InkWell( - onTap: onTap?.call(), + onTap: () { + onTap?.call(); + }, child: Column( children: [ Text( @@ -221,11 +125,84 @@ class _OptionHeaderWidgetState extends State { ), ), child: Center( - child: SvgPicture.asset(icon), + child: SvgPicture.asset( + icon, + color: ColorConstants.grey, + ), ), ) ], ), ); } + + Widget _buildSearchWidget() { + return Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Search", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + ), + SizedBox(height: 5), + Container( + height: 48, + margin: const EdgeInsets.only(right: 12), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + // color: Colors.green, + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.only(left: 6, right: 8), + child: Row( + children: [ + Expanded( + child: TextField( + controller: widget.controller, + decoration: InputDecoration.collapsed( + hintText: 'Search History by atSign', + hintStyle: TextStyle( + color: ColorConstants.sidebarTextUnselected, + fontSize: 14, + fontWeight: FontWeight.w500, + fontStyle: FontStyle.italic, + ), + ), + onChanged: widget.onSearch, + ), + ), + SizedBox( + width: 20, + height: 20, + child: SvgPicture.asset( + AppVectors.icSearch, + ), + ), + ], + ), + ), + ], + ), + ), + _buildButton( + onTap: () { + setState(() { + isSearch = false; + }); + }, + icon: AppVectors.icCancel, + ) + ], + ); + } } diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 96c59f57..ba46cb9e 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -1,11 +1,20 @@ +import 'dart:math'; + +import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; class MyFilesScreen extends StatefulWidget { @override @@ -14,16 +23,19 @@ class MyFilesScreen extends StatefulWidget { class _MyFilesScreenState extends State with TickerProviderStateMixin { - TabController? _controller; bool isOpen = false; List tabs = []; List tabNames = []; bool isLoading = false; Type runtimeType = Videos; + late MyFilesProvider provider; + late TextEditingController searchController; @override void initState() { + provider = context.read(); + searchController = TextEditingController(); super.initState(); } @@ -31,31 +43,293 @@ class _MyFilesScreenState extends State Widget build(BuildContext context) { SizeConfig().init(context); return Scaffold( - appBar: AppBarCustom( - height: 130, - title: "My Files", - description: '3', - ), - body: isLoading ? buildLoading : buildBody()); - } - - Widget get buildLoading { - return SafeArea( - top: false, - child: Center( - child: CircularProgressIndicator(), + appBar: AppBarCustom( + height: 130, + title: "My Files", + description: '${provider.allFiles.length}', ), + body: buildBody(), ); } + // Widget get buildLoading { + // return SafeArea( + // top: false, + // child: Center( + // child: CircularProgressIndicator(), + // ), + // ); + // } + Widget buildBody() { return Column( children: [ - OptionHeaderWidget(), + OptionHeaderWidget( + controller: searchController, + onSearch: (content){ + + }, + onReloadCallback: () async { + await provider.getMyFilesRecords(); + await provider.getAllFiles(); + }, + filterWidget: Consumer( + builder: (context, provider, _) { + return DropdownButtonHideUnderline( + child: Padding( + padding: EdgeInsets.zero, + child: DropdownButton( + value: provider.typeSelected, + icon: SvgPicture.asset( + AppVectors.icArrowDown, + ), + isExpanded: true, + underline: null, + alignment: AlignmentDirectional.bottomEnd, + hint: Text( + "All", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: ColorConstants.grey, + ), + ), + items: FileType.values.map( + (key) { + return DropdownMenuItem( + value: key, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12, + ), + child: Row( + children: [ + Expanded( + child: Text( + key.text, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + provider.typeSelected == key + ? SvgPicture.asset( + AppVectors.icCheck, + ) + : SvgPicture.asset( + AppVectors.icUnCheck, + ), + ], + ), + ), + Container( + color: ColorConstants.sidebarTileSelected, + height: 2, + width: double.infinity, + ) + ], + ), + ); + }, + ).toList(), + selectedItemBuilder: (BuildContext context) { + return FileType.values.map( + (key) { + return DropdownMenuItem( + value: key, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + vertical: 12, + ), + child: Text( + key.text, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + Container( + color: ColorConstants.sidebarTileSelected, + height: 1, + width: double.infinity, + ) + ], + ), + ); + }, + ).toList(); + }, + onChanged: (type) { + provider.changeTypeSelected(type!); + }, + borderRadius: BorderRadius.circular(10), + ), + ), + ); + }, + ), + ), Expanded( - child: Container(), + child: ProviderHandler( + load: (provider) async { + await provider.getAllFiles(); + }, + functionName: 'all_files', + showError: false, + successBuilder: (provider) { + return (provider.displayFiles.isEmpty) + ? Center( + child: Text( + TextStrings().noFilesRecieved, + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.normal, + ), + ), + ) + : Scrollbar( + child: ListView.builder( + itemCount: provider.displayFiles.length, + physics: ClampingScrollPhysics(), + padding: EdgeInsets.only( + top: 24.toHeight, left: 28, right: 28), + itemBuilder: (context, index) { + return InkWell( + onTap: () async { + await openFilePath( + provider.displayFiles[index].filePath!, + ); + }, + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + border: Border.all( + color: ColorConstants.sidebarTextUnselected, + ), + ), + padding: EdgeInsets.symmetric( + horizontal: 24, + vertical: 16, + ), + margin: EdgeInsets.only(bottom: 12), + child: Row( + children: [ + Expanded( + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + "${provider.displayFiles[index].fileName}", + maxLines: 2, + style: TextStyle( + color: ColorConstants.grayText, + fontSize: 12, + fontWeight: FontWeight.w600, + ), + ), + ), + SizedBox(height: 2), + Text( + getFileSizeString( + bytes: provider + .displayFiles[index].size ?? + 0, + decimals: 2, + ), + style: TextStyle( + color: ColorConstants + .sidebarTextUnselected, + fontSize: 9, + fontWeight: FontWeight.w500, + ), + ) + ], + ), + ), + Icon(Icons.remove_red_eye_outlined), + ], + ), + ), + ); + }, + ), + ); + }, + ), ), ], ); } + + Widget fileCard(String? title, String? filePath, {String? fileTransferId}) { + return InkWell( + onLongPress: () { + // deleteFile(filePath!, fileTransferId: fileTransferId); + }, + child: Column( + children: [ + filePath != null + ? Container( + width: 80.toHeight, + height: 80.toHeight, + color: Colors.purple, + // child: thumbnail(filePath.split('.').last, filePath), + ) + : Container( + width: 80.toHeight, + height: 80.toHeight, + child: ClipRect( + child: Image.asset( + ImageConstants.emptyTrustedSenders, + fit: BoxFit.fill, + ), + ), + ), + title != null + ? Container( + width: 100.toHeight, + height: 30.toHeight, + child: Padding( + padding: const EdgeInsets.only(top: 5.0), + child: Text( + title, + style: TextStyle( + color: Color(0xFF8A8E95), + fontSize: 12.toFont, + fontWeight: FontWeight.normal, + ), + textAlign: TextAlign.center, + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ) + : SizedBox() + ], + ), + ); + } + + static String getFileSizeString({required double bytes, int decimals = 0}) { + const suffixes = ["b", "Kb", "Mb", "Gb", "Tb"]; + var i = (log(bytes) / log(1024)).floor(); + return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + + ' ' + + suffixes[i]; + } } diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index fb8dd7a0..520546b1 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -43,6 +43,7 @@ class ColorConstants { static const Color sidebarTextSelected = Color(0xFF000000); static const Color sidebarTextHeading = Color(0xFFE7E7E7); static const Color sidebarTileSelected = Color(0xFFF5F5F5); + static const Color grayText = Color(0xFF424242); } class ContactInitialsColors { diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index 58ef3cb5..afdadfe0 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -6,4 +6,5 @@ class AppVectors { static String icArrowDown = '$_basePath/ic_arrow_down.svg'; static String icCheck = '$_basePath/ic_check.svg'; static String icUnCheck = '$_basePath/ic_unchecked.svg'; + static String icCancel = '$_basePath/ic_cancel.svg'; } diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index 55879bdc..9cf57a5c 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -21,6 +21,7 @@ import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:flutter/material.dart'; @@ -34,17 +35,24 @@ class MyFilesProvider extends BaseModel { receivedApk = [], receivedDocument = [], recentFile = [], + allFiles = [], + displayFiles = [], receivedUnknown = []; + List tabNames = ['Recents']; String SORT_FILES = 'sort_files'; String POPULATE_TABS = 'populate_tabs'; String SORT_LIST = 'sort_list'; String RECENT_HISTORY = 'recent_history'; + String ALL_FILES = 'all_files'; String MY_FILES = 'my_files'; String fileSearchText = ''; List tabs = [Recents()]; + Map> filesByAlpha = {}; + FileType typeSelected = FileType.all; + init() async { await getMyFilesRecords(); await sortFiles(); @@ -63,7 +71,34 @@ class MyFilesProvider extends BaseModel { tabNames = ['Recents']; } - getMyFilesRecords() async { + void changeTypeSelected(FileType type) { + typeSelected = type; + displayFiles = filterFiles(type); + notifyListeners(); + } + + List filterFiles(FileType type) { + switch (type) { + case FileType.all: + return allFiles; + case FileType.photo: + return receivedPhotos; + case FileType.video: + return receivedVideos; + case FileType.audio: + return receivedAudio; + case FileType.apk: + return receivedApk; + case FileType.document: + return receivedDocument; + case FileType.unknown: + return receivedUnknown; + default: + return []; + } + } + + Future getMyFilesRecords() async { var atClient = AtClientManager.getInstance().atClient; setStatus(MY_FILES, Status.Loading); @@ -344,6 +379,79 @@ class MyFilesProvider extends BaseModel { } } + Future getAllFiles() async { + setStatus(ALL_FILES, Status.Loading); + allFiles = []; + try { + await Future.forEach(myFiles, (FileTransfer fileData) async { + await Future.forEach(fileData.files!, (FileData file) async { + String filePath; + + if (Platform.isMacOS || Platform.isLinux || Platform.isWindows) { + filePath = MixedConstants.RECEIVED_FILE_DIRECTORY + + Platform.pathSeparator + + fileData.sender! + + Platform.pathSeparator + + (file.name ?? ''); + } else { + filePath = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (file.name ?? ''); + } + + FilesDetail fileDetail = FilesDetail( + fileName: file.name, + filePath: filePath, + size: double.parse(file.size.toString()), + date: fileData.date?.toLocal().toString(), + type: file.name!.split('.').last, + contactName: fileData.sender, + fileTransferId: fileData.key, + ); + + allFiles.add(fileDetail); + }); + }); + displayFiles = filterFiles(typeSelected); + // await sortFilesByAlpha(allFiles); + setStatus(ALL_FILES, Status.Done); + } catch (e) { + setStatus(ALL_FILES, Status.Error); + } + } + + Future sortFilesByAlpha(List files) async { + for (int i = 0; i < files.length; i++) { + String fileName = (files[i].fileName ?? '').trim(); + bool isExist = false; + final firstName = fileName.split('').first.toUpperCase(); + + if (filesByAlpha.isNotEmpty) { + for (int i = 0; i < filesByAlpha.length; i++) { + if (firstName.contains(filesByAlpha.keys.toString())) { + isExist = true; + break; + } + } + } + + if (filesByAlpha.isEmpty || !isExist) { + filesByAlpha.addAll( + { + firstName: [files[i]], + }, + ); + } else { + filesByAlpha.update(firstName, (value) { + value.add(files[i]); + return value; + }); + } + } + filesByAlpha.keys.toList().sort(); + print(filesByAlpha); + } + setFileSearchText(String str) { fileSearchText = str; notifyListeners(); From 9df5109ce69ded1b6a4ff03398d5016a0083ec2b Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 2 Feb 2023 12:27:09 +0700 Subject: [PATCH 26/94] feat: done transfer history screen --- assets/svg/ic_note.svg | 3 + assets/svg/ic_receive.svg | 3 + assets/svg/ic_receive_border.svg | 4 + assets/svg/ic_send.svg | 3 + assets/svg/ic_send_border.svg | 4 + assets/svg/ic_sort.svg | 3 + lib/data_models/file_entity.dart | 18 + lib/data_models/file_modal.dart | 18 +- lib/routes/route_names.dart | 3 +- lib/routes/routes.dart | 2 + .../common_widgets/option_header_widget.dart | 7 +- .../history/transfer_history_screen.dart | 554 ++++++++++++++++++ .../history/widgets/filter_item_widget.dart | 49 ++ lib/screens/my_files/my_files_screen.dart | 24 +- .../welcome_screen/welcome_screen.dart | 3 +- lib/utils/app_utils.dart | 11 + lib/utils/colors.dart | 4 + lib/utils/vectors.dart | 6 + lib/view_models/history_provider.dart | 148 +++++ 19 files changed, 842 insertions(+), 25 deletions(-) create mode 100644 assets/svg/ic_note.svg create mode 100644 assets/svg/ic_receive.svg create mode 100644 assets/svg/ic_receive_border.svg create mode 100644 assets/svg/ic_send.svg create mode 100644 assets/svg/ic_send_border.svg create mode 100644 assets/svg/ic_sort.svg create mode 100644 lib/data_models/file_entity.dart create mode 100644 lib/screens/history/transfer_history_screen.dart create mode 100644 lib/screens/history/widgets/filter_item_widget.dart create mode 100644 lib/utils/app_utils.dart diff --git a/assets/svg/ic_note.svg b/assets/svg/ic_note.svg new file mode 100644 index 00000000..136b43ed --- /dev/null +++ b/assets/svg/ic_note.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_receive.svg b/assets/svg/ic_receive.svg new file mode 100644 index 00000000..ddc12fbc --- /dev/null +++ b/assets/svg/ic_receive.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_receive_border.svg b/assets/svg/ic_receive_border.svg new file mode 100644 index 00000000..0c2c1e1d --- /dev/null +++ b/assets/svg/ic_receive_border.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_send.svg b/assets/svg/ic_send.svg new file mode 100644 index 00000000..123fb378 --- /dev/null +++ b/assets/svg/ic_send.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_send_border.svg b/assets/svg/ic_send_border.svg new file mode 100644 index 00000000..0c1ee148 --- /dev/null +++ b/assets/svg/ic_send_border.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_sort.svg b/assets/svg/ic_sort.svg new file mode 100644 index 00000000..e0ce4708 --- /dev/null +++ b/assets/svg/ic_sort.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/data_models/file_entity.dart b/lib/data_models/file_entity.dart new file mode 100644 index 00000000..b1b2e880 --- /dev/null +++ b/lib/data_models/file_entity.dart @@ -0,0 +1,18 @@ +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; + +class FileEntity { + final FileData? file; + final String? date; + final HistoryType? historyType; + final String? atSign; + final String? note; + + FileEntity({ + this.file, + this.date, + this.historyType, + this.atSign, + this.note, + }); +} diff --git a/lib/data_models/file_modal.dart b/lib/data_models/file_modal.dart index 9076ece5..cc9ff5fe 100644 --- a/lib/data_models/file_modal.dart +++ b/lib/data_models/file_modal.dart @@ -2,7 +2,22 @@ import 'dart:convert'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_status.dart'; -enum HistoryType { send, received } +enum HistoryType { all, received, send } + +extension HistoryTypeExtension on HistoryType { + String get text { + switch (this) { + case HistoryType.all: + return 'All'; + case HistoryType.received: + return 'Received'; + case HistoryType.send: + return 'Send'; + default: + return ''; + } + } +} class FilesDetail { String? fileName; @@ -14,6 +29,7 @@ class FilesDetail { String? date; String? fileTransferId; FileTransferStatus? status; + FilesDetail( {this.fileName, this.filePath, diff --git a/lib/routes/route_names.dart b/lib/routes/route_names.dart index fbbb9f2e..731dcd16 100644 --- a/lib/routes/route_names.dart +++ b/lib/routes/route_names.dart @@ -5,6 +5,7 @@ class Routes { static const String FAQ_SCREEN = 'faqScreen'; static const String BLOCKED_USERS = 'blockedUsers'; static const String HISTORY = 'history'; + static const String HISTORY_SCREEN = 'historyScreen'; static const String CONTACT_SCREEN = 'contactScreen'; static const String ADD_CONTACT_SCREEN = 'addContactScreen'; static const String SCAN_QR_SCREEN = 'scanQrScreen'; @@ -12,7 +13,7 @@ class Routes { static const String TRUSTED_CONTACTS = 'trustedContacts'; static const String EMPTY_TRUSTED_CONTACTS = 'emptyTrustedContacts'; static const String MY_FILES = 'myFiles'; - static const String MY_FILES_SCREEN = 'myFiles'; + static const String MY_FILES_SCREEN = 'myFilesScreen'; static const String GROUPS = 'groups'; static const String SETTINGS = 'settings'; } diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index d014d5ed..2f597cfc 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -4,6 +4,7 @@ import 'package:at_contacts_group_flutter/screens/list/group_list.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/website_webview.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/history/transfer_history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/home/home.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; @@ -32,6 +33,7 @@ class SetupRoutes { Routes.MY_FILES: (context) => MyFiles(), Routes.MY_FILES_SCREEN: (context) => MyFilesScreen(), Routes.HISTORY: (context) => HistoryScreen(tabIndex: 1), + Routes.HISTORY_SCREEN: (context) => TransferHistoryScreen(), Routes.BLOCKED_USERS: (context) => BlockedScreen(), Routes.CONTACT_SCREEN: (context) { Map args = diff --git a/lib/screens/common_widgets/option_header_widget.dart b/lib/screens/common_widgets/option_header_widget.dart index 00ac8274..683116eb 100644 --- a/lib/screens/common_widgets/option_header_widget.dart +++ b/lib/screens/common_widgets/option_header_widget.dart @@ -10,6 +10,8 @@ class OptionHeaderWidget extends StatefulWidget { final Widget? filterWidget; final TextEditingController? controller; final Function(String)? onSearch; + final Function()? searchOffCallBack; + final EdgeInsetsGeometry? margin; OptionHeaderWidget({ Key? key, @@ -19,6 +21,8 @@ class OptionHeaderWidget extends StatefulWidget { this.filterWidget, this.controller, this.onSearch, + this.margin, + this.searchOffCallBack, }) : super(key: key); @override @@ -31,7 +35,7 @@ class _OptionHeaderWidgetState extends State { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.symmetric(horizontal: 28), + margin: widget.margin ?? EdgeInsets.symmetric(horizontal: 28), padding: EdgeInsets.fromLTRB(14, 11, 15, 14), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), @@ -199,6 +203,7 @@ class _OptionHeaderWidgetState extends State { setState(() { isSearch = false; }); + widget.searchOffCallBack?.call(); }, icon: AppVectors.icCancel, ) diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart new file mode 100644 index 00000000..c179a2fa --- /dev/null +++ b/lib/screens/history/transfer_history_screen.dart @@ -0,0 +1,554 @@ +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; + +class TransferHistoryScreen extends StatefulWidget { + const TransferHistoryScreen({Key? key}) : super(key: key); + + @override + State createState() => _TransferHistoryScreenState(); +} + +class _TransferHistoryScreenState extends State { + bool isLoading = false; + late HistoryProvider provider; + late TextEditingController searchController; + + @override + void initState() { + provider = context.read(); + searchController = TextEditingController(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarCustom( + height: 130, + title: "Transfer History", + ), + body: buildBody(), + ); + } + + Widget buildBody() { + return Column( + children: [ + OptionHeaderWidget( + controller: searchController, + margin: EdgeInsets.symmetric(horizontal: 22), + onSearch: (content) { + provider.setHistorySearchText = content; + provider.searchFiles(); + }, + searchOffCallBack: () { + searchController.clear(); + provider.setHistorySearchText = ''; + provider.searchFiles(); + }, + onReloadCallback: () async { + provider.refreshData(); + }, + filterWidget: Consumer( + builder: (context, provider, _) { + return DropdownButtonHideUnderline( + child: Padding( + padding: EdgeInsets.zero, + child: DropdownButton( + value: provider.typeSelected, + icon: SvgPicture.asset( + AppVectors.icArrowDown, + ), + itemHeight: 56, + isExpanded: true, + isDense: true, + underline: null, + alignment: AlignmentDirectional.bottomEnd, + hint: Text( + "All", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w700, + color: ColorConstants.grey, + ), + ), + items: HistoryType.values.map( + (key) { + return key == HistoryType.all + ? DropdownMenuItem( + value: key, + child: Center( + child: Text( + "All", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold, + color: + ColorConstants.sidebarTextUnselected, + ), + ), + ), + ) + : DropdownMenuItem( + value: key, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + color: ColorConstants.sidebarTileSelected, + height: 1, + width: double.infinity, + ), + key == HistoryType.received + ? Container( + width: double.infinity, + child: FilterItemWidget( + backgroundColor: ColorConstants + .yellow + .withOpacity(0.37), + borderColor: ColorConstants.yellow + .withOpacity(0.37), + prefixIcon: AppVectors.icReceive, + title: "Received", + ), + ) + : FilterItemWidget( + backgroundColor: ColorConstants + .orangeColor + .withOpacity(0.37), + borderColor: ColorConstants + .orangeColor + .withOpacity(0.37), + prefixIcon: AppVectors.icSend, + title: "Sent", + ), + ], + ), + ); + }, + ).toList(), + selectedItemBuilder: (BuildContext context) { + return HistoryType.values.map( + (key) { + return DropdownMenuItem( + value: key, + child: Text( + key.text, + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold, + color: ColorConstants.grey, + ), + ), + ); + }, + ).toList(); + }, + onChanged: (type) { + provider.changeTypeSelected(type!); + }, + borderRadius: BorderRadius.circular(10), + ), + ), + ); + }, + ), + ), + Expanded( + child: ProviderHandler( + load: (provider) async { + await provider.getAllFiles(); + }, + functionName: 'get_file_status', + showError: false, + successBuilder: (provider) { + return Container( + margin: EdgeInsets.only( + top: 16, + left: 25, + right: 21, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + height: 24, + padding: EdgeInsets.only(left: 19), + decoration: BoxDecoration( + color: ColorConstants.textBoxBg, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6), + topRight: Radius.circular(6), + ), + ), + child: Row( + children: [ + _buildTableTitle(title: "FileName", flex: 2), + _buildTableTitle(title: "Size", flex: 1), + _buildTableTitle(title: "Date", flex: 1), + _buildTableTitle(title: "Delivery", flex: 1), + _buildTableTitle(title: "atSign", flex: 2), + SizedBox(width: 36), + ], + ), + ), + _buildTableRow(), + ], + ), + ); + }, + ), + ), + ], + ); + } + + Widget _buildTableTitle({ + required String title, + int flex = 1, + }) { + return Expanded( + flex: flex, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + title, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + overflow: TextOverflow.ellipsis, + ), + ), + SvgPicture.asset( + AppVectors.icSort, + ) + ], + ), + ); + } + + Widget _buildTableRow() { + return ProviderHandler( + functionName: provider.SENT_HISTORY, + showError: false, + successBuilder: (provider) { + final files = provider.displayFiles; + return Expanded( + child: Scrollbar( + child: RefreshIndicator( + onRefresh: () async { + provider.refreshData(); + }, + child: ListView.builder( + padding: EdgeInsets.only(bottom: 110), + itemCount: files.length, + itemBuilder: (context, index) { + final DateFormat formatter = DateFormat('dd/MM/yy'); + final String date = (files[index].date ?? '').isNotEmpty + ? formatter.format(DateTime.parse( + files[index].date!, + )) + : ''; + + GlobalKey key = GlobalKey(); + + return SizedBox( + key: key, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.only( + left: 19, + top: 7, + bottom: 6, + ), + child: Row( + children: [ + Expanded( + flex: 2, + child: Text( + files[index].file?.name ?? '', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), + ), + ), + Expanded( + flex: 1, + child: Text( + AppUtils.getFileSizeString( + bytes: (files[index].file?.size ?? 0) + .toDouble(), + decimals: 2, + ), + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textGray, + ), + ), + ), + Expanded( + flex: 1, + child: Text( + date, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textGrey, + ), + ), + ), + Expanded( + flex: 1, + child: Align( + alignment: Alignment.centerLeft, + child: SvgPicture.asset( + files[index].historyType == + HistoryType.received + ? AppVectors.icReceiveBorder + : AppVectors.icSendBorder, + ), + ), + ), + Expanded( + flex: 2, + child: Text( + files[index].atSign ?? '', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), + ), + ), + SizedBox(width: 8), + (files[index].note ?? '').isNotEmpty + ? InkWell( + onTap: () { + _onTapNoteIcon( + key: key, + note: files[index].note!, + ); + }, + child: SvgPicture.asset( + AppVectors.icNote, + ), + ) + : SizedBox(width: 16), + InkWell( + onTap: () { + _onTapMoreIcon(key); + }, + child: Padding( + padding: EdgeInsets.only(left: 8), + child: Icon( + Icons.more_vert_outlined, + size: 16, + color: ColorConstants.grey, + ), + ), + ), + ], + ), + ), + Container( + height: 1, + color: ColorConstants.textBoxBg, + ) + ], + ), + ); + }, + ), + ), + ), + ); + }, + ); + } + + void _onTapMoreIcon(GlobalKey key) { + RenderBox box = key.currentContext!.findRenderObject() as RenderBox; + Offset position = box.localToGlobal(Offset.zero); + final size = box.size; + + showDialog( + barrierDismissible: true, + useRootNavigator: true, + context: context, + builder: (context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: WillPopScope( + onWillPop: () async { + return true; + }, + child: Stack( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + color: Colors.transparent, + height: double.infinity, + width: double.infinity, + ), + ), + Positioned( + right: 19, + top: position.dy - size.height - 28, + child: Container( + width: 188, + height: 40, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(12), + bottomLeft: Radius.circular(12), + ), + border: Border.all( + color: ColorConstants.sidebarTextUnselected, + ), + color: Colors.white, + ), + child: Row( + children: [ + Expanded( + child: Center( + child: Text( + "Resend", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: ColorConstants.textLightGrey, + ), + ), + ), + ), + Container( + color: ColorConstants.sidebarTextUnselected, + height: double.infinity, + width: 1, + ), + Expanded( + child: Center( + child: Text( + "Download", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: ColorConstants.textLightGrey, + ), + ), + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + }, + ); + } + + void _onTapNoteIcon({ + required GlobalKey key, + required String note, + }) { + RenderBox box = key.currentContext!.findRenderObject() as RenderBox; + Offset position = box.localToGlobal(Offset.zero); + final size = box.size; + + showDialog( + barrierDismissible: true, + useRootNavigator: true, + context: context, + builder: (context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: WillPopScope( + onWillPop: () async { + return true; + }, + child: Stack( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + color: Colors.transparent, + height: double.infinity, + width: double.infinity, + ), + ), + Positioned( + right: 32, + top: position.dy - size.height - 4, + child: Container( + width: 247, + constraints: BoxConstraints( + minHeight: 79, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(12), + border: Border.all( + color: ColorConstants.sidebarTextUnselected, + ), + color: Colors.white, + ), + padding: EdgeInsets.symmetric( + vertical: 10, + horizontal: 12, + ), + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + note, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w400, + ), + ), + ), + SizedBox(width: 8), + SvgPicture.asset( + AppVectors.icNote, + ), + ], + ), + ), + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/screens/history/widgets/filter_item_widget.dart b/lib/screens/history/widgets/filter_item_widget.dart new file mode 100644 index 00000000..7f0159e2 --- /dev/null +++ b/lib/screens/history/widgets/filter_item_widget.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class FilterItemWidget extends StatelessWidget { + final Color backgroundColor; + final Color borderColor; + final String prefixIcon; + final String title; + + const FilterItemWidget({ + Key? key, + required this.backgroundColor, + required this.borderColor, + required this.prefixIcon, + required this.title, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Container( + height: 30, + padding: const EdgeInsets.fromLTRB(12, 7, 8, 8), + margin: EdgeInsets.symmetric(vertical: 12.5,horizontal: 16), + decoration: BoxDecoration( + color: backgroundColor, + border: Border.all( + color: borderColor, + ), + borderRadius: BorderRadius.circular(14), + ), + child: Row( + children: [ + SvgPicture.asset(prefixIcon), + Expanded( + child: Center( + child: Text( + title, + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index ba46cb9e..1e224dbe 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -7,6 +7,7 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.da import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; @@ -21,8 +22,7 @@ class MyFilesScreen extends StatefulWidget { _MyFilesScreenState createState() => _MyFilesScreenState(); } -class _MyFilesScreenState extends State - with TickerProviderStateMixin { +class _MyFilesScreenState extends State { bool isOpen = false; List tabs = []; List tabNames = []; @@ -41,7 +41,6 @@ class _MyFilesScreenState extends State @override Widget build(BuildContext context) { - SizeConfig().init(context); return Scaffold( appBar: AppBarCustom( height: 130, @@ -52,15 +51,6 @@ class _MyFilesScreenState extends State ); } - // Widget get buildLoading { - // return SafeArea( - // top: false, - // child: Center( - // child: CircularProgressIndicator(), - // ), - // ); - // } - Widget buildBody() { return Column( children: [ @@ -245,7 +235,7 @@ class _MyFilesScreenState extends State ), SizedBox(height: 2), Text( - getFileSizeString( + AppUtils.getFileSizeString( bytes: provider .displayFiles[index].size ?? 0, @@ -324,12 +314,4 @@ class _MyFilesScreenState extends State ), ); } - - static String getFileSizeString({required double bytes, int decimals = 0}) { - const suffixes = ["b", "Kb", "Mb", "Gb", "Tb"]; - var i = (log(bytes) / log(1024)).floor(); - return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + - ' ' + - suffixes[i]; - } } diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index a1843a4e..8de40a75 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -3,6 +3,7 @@ import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/history/transfer_history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; @@ -102,7 +103,7 @@ class _WelcomeScreenState extends State { WelcomeScreenHome(), ContactsScreen(), MyFilesScreen(), - HistoryScreen(), + TransferHistoryScreen(), SettingsScreen() ]; diff --git a/lib/utils/app_utils.dart b/lib/utils/app_utils.dart new file mode 100644 index 00000000..967bb233 --- /dev/null +++ b/lib/utils/app_utils.dart @@ -0,0 +1,11 @@ +import 'dart:math'; + +class AppUtils{ + static String getFileSizeString({required double bytes, int decimals = 0}) { + const suffixes = ["b", "Kb", "Mb", "Gb", "Tb"]; + var i = (log(bytes) / log(1024)).floor(); + return ((bytes / pow(1024, i)).toStringAsFixed(decimals)) + + ' ' + + suffixes[i]; + } +} \ No newline at end of file diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 520546b1..8e73c4f1 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -33,6 +33,10 @@ class ColorConstants { static const Color light_border_color = Color(0xFFEEF1F4); static const Color textBoxBg = Color(0xFFF2F2F2); static const Color lightBlueBg = Color(0xFFF8FBFF); + static const Color textBlack = Color(0xFF414141); + static const Color textGray = Color(0xFFA7A7A7); + static const Color textGrey = Color(0xFF868686); + static const Color textLightGrey = Color(0xFF868686); //NEW UI COLORS static const Color fadedGreyN = Color(0xFFF1F1F1); diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index afdadfe0..125351d7 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -7,4 +7,10 @@ class AppVectors { static String icCheck = '$_basePath/ic_check.svg'; static String icUnCheck = '$_basePath/ic_unchecked.svg'; static String icCancel = '$_basePath/ic_cancel.svg'; + static String icReceive = '$_basePath/ic_receive.svg'; + static String icSend = '$_basePath/ic_send.svg'; + static String icSort = '$_basePath/ic_sort.svg'; + static String icReceiveBorder = '$_basePath/ic_receive_border.svg'; + static String icSendBorder = '$_basePath/ic_send_border.svg'; + static String icNote = '$_basePath/ic_note.svg'; } diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 0a0002b7..cf1f7837 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_commons/at_commons.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_entity.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_object.dart'; @@ -32,6 +33,7 @@ import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:flutter/cupertino.dart'; + // import 'package:at_client/src/stream/file_transfer_object.dart'; import 'package:flutter/services.dart'; import 'package:at_client/src/service/notification_service.dart'; @@ -50,6 +52,7 @@ class HistoryProvider extends BaseModel { String SET_FILE_HISTORY = 'set_flie_history'; String SET_RECEIVED_HISTORY = 'set_received_history'; String GET_ALL_FILE_DATA = 'get_all_file_data'; + String GET_FILE_STATUS = 'get_file_status'; String DOWNLOAD_FILE = 'download_file'; String DOWNLOAD_ACK = 'download_ack'; List sentHistory = [], tempSentHistory = []; @@ -59,6 +62,11 @@ class HistoryProvider extends BaseModel { String? state; String _historySearchText = ''; + List receivedFiles = [], + sentFiles = [], + allFiles = [], + displayFiles = []; + // on first transfer history fetch, we show loader in history screen. // on second attempt we keep the status as idle. bool isSyncedDataFetched = false; @@ -87,6 +95,8 @@ class HistoryProvider extends BaseModel { BackendService backendService = BackendService.getInstance(); String? app_lifecycle_state; + HistoryType typeSelected = HistoryType.all; + resetData() { isSyncedDataFetched = false; sentHistory = []; @@ -111,6 +121,144 @@ class HistoryProvider extends BaseModel { notifyListeners(); } + Future getAllFiles() async { + setStatus(GET_FILE_STATUS, Status.Loading); + try { + allFiles = []; + + await Future.wait([ + getReceivedFiles(), + getSentFiles(), + ]); + + allFiles.addAll(sentFiles); + allFiles.addAll(receivedFiles); + + allFiles.sort((a, b) => (b.date ?? '').compareTo(a.date ?? '')); + displayFiles = allFiles; + + setStatus(GET_FILE_STATUS, Status.Done); + } catch (e) { + setStatus(GET_FILE_STATUS, Status.Error); + } + } + + Future getReceivedFiles() async { + List listReceivedFile = []; + await getAllFileTransferData(); + if (receivedHistoryLogs.isNotEmpty) { + for (int i = 0; i < receivedHistoryLogs.length; i++) { + FileTransfer? fileTransfer = receivedHistoryLogs[i]; + if ((fileTransfer.files?.length ?? 0) > 0) { + for (int j = 0; j < fileTransfer.files!.length; j++) { + listReceivedFile.add( + FileEntity( + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: fileTransfer.sender, + historyType: HistoryType.received, + note: fileTransfer.notes, + ), + ); + } + } + } + receivedFiles = listReceivedFile; + } + } + + Future getSentFiles() async { + List listSentFile = []; + await getSentHistory(); + if (sentHistory.isNotEmpty) { + for (int i = 0; i < sentHistory.length; i++) { + FileTransfer? fileTransfer = sentHistory[i].fileDetails; + if ((fileTransfer?.files?.length ?? 0) > 0) { + for (int j = 0; j < fileTransfer!.files!.length; j++) { + listSentFile.add( + FileEntity( + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: sentHistory[i].fileTransferObject?.sharedWith, + historyType: HistoryType.send, + note: fileTransfer.notes, + ), + ); + } + } + } + sentFiles = listSentFile; + } + } + + void changeTypeSelected(HistoryType type) { + typeSelected = type; + displayFiles = filterFiles(type); + notifyListeners(); + } + + void refreshData() async { + try { + if (typeSelected != HistoryType.all) { + setStatus(GET_FILE_STATUS, Status.Loading); + typeSelected == HistoryType.send + ? await getSentFiles() + : await getReceivedFiles(); + setStatus(GET_FILE_STATUS, Status.Done); + } else { + await getAllFiles(); + } + } catch (e) { + setStatus(GET_FILE_STATUS, Status.Error); + } + } + + void searchFiles() { + List resultsFilter = []; + List listFiles = []; + + if (typeSelected == HistoryType.received) { + listFiles = receivedFiles; + } else if (typeSelected == HistoryType.send) { + listFiles = sentFiles; + } else { + listFiles = allFiles; + } + + if (_historySearchText.isNotEmpty) { + listFiles.forEach( + (element) { + if ((element.atSign ?? '').contains(_historySearchText)) { + resultsFilter.add(element); + } + }, + ); + + displayFiles = resultsFilter; + } else { + displayFiles = listFiles; + } + + notifyListeners(); + } + + List filterFiles(HistoryType type) { + switch (type) { + case HistoryType.all: + return allFiles; + case HistoryType.received: + return receivedFiles; + case HistoryType.send: + return sentFiles; + default: + return []; + } + } + updateFileHistoryDetail(FileHistory fileHistory) async { // checking whether sent file is stored in individual atKey or in sentHistory list. if (individualSentFileId[fileHistory.fileDetails!.key] != null) { From 8b978d7baa9281496a1d02460b20fd39a2aab011 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 6 Feb 2023 16:59:19 +0530 Subject: [PATCH 27/94] feat: welcome home screen updated according to new UI --- assets/images/close_icon.png | Bin 0 -> 1215 bytes assets/images/send_file_icon.png | Bin 0 -> 4434 bytes ios/Podfile.lock | 10 +- .../common_widgets/app_bar_custom.dart | 19 +- lib/screens/common_widgets/file_card.dart | 51 ++ .../widgets/group_contact_list_tile.dart | 38 +- .../widgets/overlapping_contacts.dart | 229 ++----- .../widgets/select_contact_widget.dart | 58 +- .../widgets/welcome_sceen_home.dart | 588 +++++++++--------- lib/services/overlay_service.dart | 199 +++--- lib/utils/images.dart | 2 + lib/utils/text_strings.dart | 2 + 12 files changed, 552 insertions(+), 644 deletions(-) create mode 100644 assets/images/close_icon.png create mode 100644 assets/images/send_file_icon.png create mode 100644 lib/screens/common_widgets/file_card.dart diff --git a/assets/images/close_icon.png b/assets/images/close_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..6a31b998e4dbf38541b22e7312432af03ed58898 GIT binary patch literal 1215 zcmV;w1VH500009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP-%8`bq9C-x9kqc_0o`D+|BwBGm z{D>q65Pyj~{q?AHG^>4>mpl{D{z3&x-HXd-; zjb6li(G##PCJJ&Utd^iL!R=U!i3Q?^JPDlNR=_?phJ6miTU=Zeg+f80TUl8VtE;O@ z51xWCWNe_m!+uaWg**>93*Zb_pClIi`T2RD7NmYtKgn8x1Gic0T6DgUVuD%{9abup z?EU@y=Vr6{6UM8uB~|P{Jw27q&(Gf@Kw!-PV&M{<91F*91A>hD`}_OZhlhuf>_Q$N zAHU)JPAqj2!B>Jnkd2Fri#)9SkL*Ek{^{vyp0i{vJPgXtau%8-8o{vi3WNhfeXo^U zNy@wE>XPlmHOvsT{>;ow|J~i)hJ1lwXu(z=OYqLQqp8!Zpn;>KqYt+6lamvI>x3;!IV4&oG!Pp=zGLXzNqOx@2 zs$4;3+1^J&q0)eOa{vgP8aEy13{j|j4MsXDDzMYe z&CT_Z(h!tpO-3-oLxT;OawRVc+R5c|2u88P!FUn*BZ$I2QW|pQ3=a|J%=Y%S=|=&A zoTItpnf)+9rjwKZ4#LB zCU`O=bUcZ9-lR&UQm)Zx{FToT)I)u=17RG*MOsITFeQZ0YahdS65f&9-d9e zyjIMSZk5H7+4)jwWyd!Km_ZR0s z2K>s&`ohvP@4&Igo{~T`U4E!8y88#AOL0-|y6)IF)8}7tZHcLXz&{Rg4qps{8;bju d*v@)&{0}F5E`Vy`4=Mlv002ovPDHLkV1m;$E=T|X literal 0 HcmV?d00001 diff --git a/assets/images/send_file_icon.png b/assets/images/send_file_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..dd8ddc3a9c098378b7631ae8ade6d2b476745df0 GIT binary patch literal 4434 zcmV-Y5v}ftP)U_*`U{nBee1mBl-!`4 zf9tJE&zHaagLUKMUnq=?1+slRRkjJpa$u;|WKAmDQN7<@vw+~Ltzxib4+_`^}QYnxP8=9(Gtu6(`f}vWG?OfKh zEEw(X&w^sj$nNX$!h(Qsn_9eMM<9m}|Lf4fgTKVpUq}uK^V|e4Q>;%-JtuQ>Yoehc ziSXk1#to5LO=5H~1_;UaR@z~;V(E*P-)f;`3D^Rn1U)w=GCM1>e!YZoT&W*A^ql0B zT$(a*@L+#bt^Pe(KL+}ErChpvSr+hef)V%z*{%leR1=6~>+h4y{Xur*tt_Jzu?HkJ zpv3MJ&NUiR!QkCRC&0(ntdYjt+(VL6a)B~;;zVEAXbd}TpgV*%oC2X;hxxz*Iduz6 ziP8AbgB5sC>@^Ew3MdQ2O~iHF??(ot*z*dX9z*-?s@I#qf%|IJ>N?3Oxj^~g?AgL# zyTh1KUA8mmCJJ@p^CU zuf^tG6`l)yOvEd_cy0~6&A{+*vt7z-94NGl+JyG!b}G4UT&&fCGDCU_dBkf*1N$|U zcdlNQUxCynU``EnjTk949cA;-m%soL7y!f^TL4rDwVIBa3kFO8k8H;Ko`F|3qU~)N?+@RP70&yvLU~1^xd1%M~0F+m8ypY@&JI~ZjDPutXJUJ=TC3ZTUbP)^AWO6)a-BM|$5jqdmA{Jgw@b93h2zeCvnZ_hp}zx&glC^7|gLv){xL;QvN!FWBoN?VN21){sw^6>VkB$4-$K(LY zPhNdh#sN+pFE0RuD`(Ei=;qCGH%f%g*3ifrOsWVVDrk5}P}EClAxYY}#)DI3kVyW( zalwbBVMY!Rg6KWat=#-=gA#kw(c%c~*fALy9F+e+ zgWSu}a1!wEPo0#JfBc80HefE&i_Vl#>geDHjE2DhYw=t!=T9cuB@lG|)QT#n62iy( zr0BIMHjym%Uf921iU7ntkATvJ_X-G#YRamCqKy$BHAaY6VtO2e)WP}l%|@dvqD*0y zx*HAb^$m`F{L+KiW*B_X!1Ff%&Mcm#=JewnJ2?w2YXG=1Os#@K6Sb-zWI7j(j!N|2 zdlC?6ZJ)+33eIYAihZFQ0o~7V0FUQ!ZTjR%nTJ>E1?eRw(d?DGhi-F_!5@U+oCBzA z{5`n87km*IvP}V@5v-3xf=!#Gao>Fsy!)Aj~JN26T>k|RxM$^cwx6nQX-Jq)Now$tO|tqEhEhIuVqgy%VR>J-wyBaU>l_cS*qZSeHdj`Sn-I;t_AX!HA? zPC(JLqXM92=HIbP_~83eU0zd}B>Enfq8^ z`0gj3XdYW_@!m(gwyZoT%@(9PVl+pAsq2Ihrz_B|6K}sQF{0YU+@zHtO6u@j#O*Z% zfR`>^l5Gg#>5d~i0GapOm_-mI#&G|!;S=#Z*Qs;_ip_S#hGZi@5}YBk(1Z%umZ4dv z-hW@_Q5adq&Dm;dB&k)-F4KVL^-Tw_b!?7KSQsiMapZ@x#(#%T4b zfg*O43`iOzxyCBnlQ8L?5x`wId{|=6noT1kGwOWq@H_9gF#h3(A9k+x%$YNC;lc%( zf%kD8_W&h8_`%TPX7Eownc_OtmZYsYC7<(#TeUe1m!lA$T4YG>!D;yGktfz7N(tpS zc;$Z75qiQ*5=gjq1>R{K+VS9n4`NlK-*uRp!U&i3T!%TG#)NMOra^Zddcx19FThj+ThlVm}BPcW;@S1dW{XV9hgf+AOE-nuf68l z7AXmLkV|ph$#s`;iPl>r=A`QFRoY?5s1{oW^3xdYSpXCIppAU-7PN@4M`{=OSD_`9|*#*oM!3)~);KWH4pwD+)>$5c4ukA4ZlZTu+dp z!-lEC23+zvat1)T0o6VNj@g3w3X2;}lb6+PVjku_1e~G&R^)KD!rO4>d>SPF{$Kwp zi!@Jm2(Fo=n|QRPyy(98xr?3WXgmD9B=L1Hmkls4cK#%Qse#l-?!RC9k$4JTe?3Vx*d>vb1tn-M zVkC)W)fn2YCtEvV41DFB()9y8y5=hYWydE!Df8eF<$`Qyv#Eh3g(%8D84yX+jwEP(j&OD{>pOuKq4 z|6DuK&gw!NQc<#j+JQ2FdI!+SHP~l>Si!Xt_Q_wv;F2P=G2$YfkBOvNPi|%DL{mh; zaa(_yuXLtk?3NuV_>Qol11L;9T}RHO=3@$8uS;vhBWY=2EG>=D^9~?QSMow;5kD~3 z6lnLXG5frd3zSArPu#Fz5Pjd6EVCzokQ5o+VxO8)^Bh#oG%yQ>NZK^CPHM%F*ADtZ zYDTZ`fUZR=w*{uHp>J=z8k!Q=N@KIk;myW&$dRlxHHDnw;uoKpTQn{*3qreAtHum^ zGjxFXx{J)<(e*1Rj9z`rr1eI6eKmqN%O}Y>jVp}DP)%XQ2?5hRdevSqDTp{ze^vt1 zNCHyvyg{IQ{Ch%4gX%!AE_gM)4^%YK`q;!33YK<4$x$`MY6Y(qjHgOGnbwZQ z$FXyvtXWF44J!*uRK(N{nv&&$Y=^ZWDNxMFQ3{?6tqHXQ!`4T)&R|W!DEfDhD^lj; z$u?D&Hy_;FkereWl)m0xE+j|#689ofo@F`A+;Z^!7WDSA&)mPVg80$%c-%&{YFdKt+8B1;3jThz6( zpfrYtVl=FAv(%m)trRes>pbr?#Z2~8teM5;{={4)%~?U4_v*9RW2|SdEGXr^zPJ&F z^%R%L^4=l|x=g%a12M)HPE(eN9b!p?X!#?Qw04A<`m^;=q9*vcKS$5UDT9O2e6d(v z606+AgtGf7%^?pg6FXRKNjjYYB q>X7X9o}S!a5#<79c;m*}bfGX`8joz?4Mc%EPV*KKyZ&1mO|Qri`K zEu|4{OmMkv_Pv@f=7RrBxqL=)N-j{w#>N&FA9&!kiqpJsjhfdJNaYMBp=FCRU+@3og-exAz_E=tYJ zTdX_Q`OyGY{PuqCbKe`@y!rbGAk*#TM}&|Xwgmt(0*CO>0}osr+qLVe+<|odAz((< zHXD$u5&!@E^Z&daqsw^5C5b#Q*iXGQDOK|t#r*EtD7x~+7hil^x+HfDN+(jnYTi12 zHi|+}95;AC_`z|3zbBGrEX40_xm|;Mp@Mll{)$OgK`Fv)2AM-eNBc~|h{>ZKEPb%h z72kl_&0K+FagaegG*ZyBmlw>0V!3k6Cnvb$1kmM z9P+n{U6ihZ!k?iq@odwI4iv^bC`Dbv;aA(5m8Vy!cl>+nJCg2#0&}nl=Yri2TE7d5 zrL`gudou2(bQKhe#uw_2m!t%I?4h8!s5k5`EZqggdl${iP?C^c-Lt=5&~@q#Ke$PI}>dhK!Zn|423SVif!ro=VIND7Mo$s3=OE=pHH!3=g1$*Fe>)D-a~%kN6e=U^@`;y+GKG^bLTk}k^M Y02j=9OlRs!7XSbN07*qoM6N<$f@IE;5dZ)H literal 0 HcmV?d00001 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 18b6777e..17eac80f 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -57,8 +57,6 @@ PODS: - Flutter - flutter_local_notifications (0.0.1): - Flutter - - flutter_qr_reader (0.0.1): - - Flutter - fluttertoast (0.0.2): - Flutter - Toast @@ -123,7 +121,6 @@ DEPENDENCIES: - flutter_image_compress (from `.symlinks/plugins/flutter_image_compress/ios`) - flutter_keychain (from `.symlinks/plugins/flutter_keychain/ios`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - - flutter_qr_reader (from `.symlinks/plugins/flutter_qr_reader/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - open_file (from `.symlinks/plugins/open_file/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) @@ -175,8 +172,6 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_keychain/ios" flutter_local_notifications: :path: ".symlinks/plugins/flutter_local_notifications/ios" - flutter_qr_reader: - :path: ".symlinks/plugins/flutter_qr_reader/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" open_file: @@ -215,11 +210,10 @@ SPEC CHECKSUMS: DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 emoji_picker_flutter: df19dac03a2b39ac667dc8d1da939ef3a9e21347 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 - Flutter: 50d75fe2f02b26cc09d224853bb45737f8b3214a + Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_image_compress: 5a5e9aee05b6553048b8df1c3bc456d0afaac433 flutter_keychain: 01aabf894ffe8b01adfda1d9df21c210c1b4b452 flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743 - flutter_qr_reader: d930dde3b2cfe2b3d0bb7d66e5ff3e514300a5e5 fluttertoast: 16fbe6039d06a763f3533670197d01fc73459037 libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d @@ -241,6 +235,6 @@ SPEC CHECKSUMS: video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1 webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: db8a7794fb1b0bee1e3803fed876c7cf9577099b +PODFILE CHECKSUM: db1b3d34103b9bca35e1d0bca266af8024bec0bc COCOAPODS: 1.11.3 diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index a4da7771..88aa02d4 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -41,15 +42,17 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - Text( - title ?? '', - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, + Expanded( + child: Text( + title ?? '', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, ), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), SizedBox(width: 12), Text( diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart new file mode 100644 index 00000000..1d665246 --- /dev/null +++ b/lib/screens/common_widgets/file_card.dart @@ -0,0 +1,51 @@ +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:file_picker/file_picker.dart'; +import 'package:flutter/material.dart'; +import '../../utils/colors.dart'; + +class FileCard extends StatefulWidget { + PlatformFile fileDetail; + FileCard({Key? key, required this.fileDetail}) : super(key: key); + + @override + State createState() => _FileCardState(); +} + +class _FileCardState extends State { + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.sidebarTextUnselected.withOpacity(0.5)), + ), + margin: EdgeInsets.fromLTRB(0, 5, 5, 0), + padding: EdgeInsets.fromLTRB(13, 8, 8, 13), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 100.toWidth, + child: Text( + widget.fileDetail.name, + style: TextStyle(color: Colors.black, fontSize: 12), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + Text(widget.fileDetail.size.toString()), + ], + ), + Icon(Icons.remove_red_eye) + ], + ), + ); + } +} diff --git a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart index 1f41f5f7..790508e3 100644 --- a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart +++ b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart @@ -7,6 +7,8 @@ import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; +import '../../../utils/images.dart'; + class ContactListTile extends StatefulWidget { final String? name; final String? atSign; @@ -53,7 +55,7 @@ class _ContactListTileState extends State { }); }, title: Text( - widget.name!, + widget.atSign!, style: TextStyle( color: Colors.black, fontSize: 14.toFont, @@ -62,7 +64,7 @@ class _ContactListTileState extends State { ), ), subtitle: Text( - widget.atSign!, + widget.name!, style: TextStyle( color: ColorConstants.fadedText, fontSize: 14.toFont, @@ -80,9 +82,13 @@ class _ContactListTileState extends State { onTap: () { widget.onRemove(); }, - child: Icon( - Icons.close, - color: Color(0xffA8A8A8), + child: Container( + width: 40, + height: 40, + child: FittedBox( + fit: BoxFit.fill, + child: Image.asset(ImageConstants.closeIcon), + ), ), ) : Icon( @@ -100,28 +106,6 @@ class _ContactListTileState extends State { ), child: widget.image, ), - Positioned( - bottom: 0, - right: 0, - child: (widget.onlyRemoveMethod) - ? Container() - : Container( - height: 15.toHeight, - width: 15.toHeight, - decoration: BoxDecoration( - shape: BoxShape.circle, - color: (widget.isSelected) - ? Colors.black - : Colors.transparent), - child: (widget.isSelected) - ? Icon( - Icons.check, - color: Colors.white, - size: 10.toHeight, - ) - : Container(), - ), - ) ], ), ), diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index e638866f..d3c478b6 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -1,26 +1,25 @@ import 'dart:typed_data'; -import 'package:at_contact/at_contact.dart'; - /// This is a custom widget to display the selected contacts /// in a row with overlapping profile pictures - import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; import 'package:atsign_atmosphere_pro/screens/group_contacts_screen/widgets/group_contact_list_tile.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; -import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:provider/provider.dart'; +import '../../../utils/colors.dart'; + class OverlappingContacts extends StatefulWidget { - final List? selectedList; + final List selectedList; final ValueChanged? onChnage; - const OverlappingContacts({Key? key, this.selectedList, this.onChnage}) + const OverlappingContacts( + {Key? key, required this.selectedList, this.onChnage}) : super(key: key); @override @@ -48,179 +47,55 @@ class _OverlappingContactsState extends State { @override Widget build(BuildContext context) { - return GestureDetector( - onTap: () { - setState(() { - isExpanded = !isExpanded; - }); - }, - child: Container( - height: (isExpanded) ? 300.toHeight : 60.toHeight, - padding: EdgeInsets.all(10), - decoration: BoxDecoration( - color: Color(0xffF7F7FF), - borderRadius: BorderRadius.circular(10), - ), - child: Stack( - children: [ - Stack( - children: List.generate( - (widget.selectedList!.length > 3) - ? 3 - : widget.selectedList!.length, - (index) { - Uint8List? image = _atsignImages[ - widget.selectedList![index]?.contact?.atSign]; + return GestureDetector(onTap: () { + setState(() { + isExpanded = !isExpanded; + }); + }, child: Consumer( + builder: (context, provider, _) { + return Container( + height: 80.toHeight * widget.selectedList.length, + width: 350.toWidth > 350 ? 350 : 350.toWidth, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ColorConstants.textBoxBg), + ), + child: ListView.builder( + itemCount: widget.selectedList.length, + itemBuilder: (context, index) { + Uint8List? image = + _atsignImages[widget.selectedList![index]?.contact?.atSign]; - return Positioned( - left: 5 + double.parse((index * 10).toString()), - top: 5.toHeight, - child: Container( - height: 28.toHeight, - width: 28.toHeight, - decoration: BoxDecoration(shape: BoxShape.circle), - child: (image != null) - ? CustomCircleAvatar( - byteImage: image, - nonAsset: true, - ) - : ContactInitial( - initials: widget - .selectedList![index]?.contact?.atSign ?? - widget.selectedList![index]?.group?.groupName, - ), - ), - ); + return ContactListTile( + isSelected: provider.selectedContacts + .contains(provider.selectedContacts[index]), + onAdd: () {}, + onRemove: () { + provider.removeContacts(provider.selectedContacts[index]); + widget.onChnage!(true); }, - ), - ), - Positioned( - top: 5.toHeight, - left: 40 + - double.parse((widget.selectedList!.length * 25).toString()), - child: Row( - // mainAxisSize: MainAxisSize.min, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - (widget.selectedList!.isEmpty) - ? Container() - : Row( - mainAxisAlignment: MainAxisAlignment.spaceEvenly, - children: [ - Container( - width: 160.toWidth, - child: Row( - children: [ - Container( - width: 60.toWidth, - child: Text( - '${widget.selectedList![0]?.contact?.atSign ?? widget.selectedList![0]?.group?.groupName}', - style: - CustomTextStyles.secondaryRegular14, - overflow: TextOverflow.ellipsis, - ), - ), - Container( - // width: 100.toWidth, - child: Text( - widget.selectedList!.length - 1 == 0 - ? '' - : widget.selectedList!.length - 1 == 1 - ? ' and ${widget.selectedList!.length - 1} other' - : ' and ${widget.selectedList!.length - 1} others', - style: - CustomTextStyles.secondaryRegular14, - overflow: TextOverflow.ellipsis, - ), - ) - ], - ), - ), - ], - ), - Row( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - SizedBox( - width: 10.toWidth, + name: provider.selectedContacts[index].contact?.atSign + ?.substring(1) ?? + provider.selectedContacts[index].group?.groupName + ?.substring(0), + atSign: provider.selectedContacts[index].contact?.atSign ?? + '${provider.selectedContacts[index].group?.members?.length.toString()} Members', + image: (image != null) + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + initials: provider + .selectedContacts[index].contact?.atSign ?? + provider.selectedContacts[index].group?.groupName, ), - ], - ) - ], - ), - ), - Positioned( - top: 10.toHeight, - right: 0, - child: Container( - width: 20.toWidth, - child: Icon( - (isExpanded) - ? Icons.keyboard_arrow_up - : Icons.keyboard_arrow_down, - size: 15.toFont, - ), - ), - ), - (isExpanded) - ? Consumer( - builder: (context, provider, _) { - return Positioned( - top: 50.toHeight, - child: Container( - height: 200.toHeight, - width: SizeConfig().screenWidth - 60.toWidth, - child: ListView.builder( - itemCount: widget.selectedList!.length, - itemBuilder: (context, index) { - Uint8List? image = _atsignImages[ - widget.selectedList![index]?.contact?.atSign]; - - return ContactListTile( - isSelected: provider.selectedContacts - .contains(provider.selectedContacts[index]), - onAdd: () {}, - onRemove: () { - provider.removeContacts( - provider.selectedContacts[index]); - widget.onChnage!(true); - }, - name: provider - .selectedContacts[index].contact?.atSign - ?.substring(1) ?? - provider.selectedContacts[index].group - ?.groupName - ?.substring(0), - atSign: provider.selectedContacts[index].contact - ?.atSign ?? - '${provider.selectedContacts[index].group?.members?.length.toString()} Members', - image: (image != null) - ? CustomCircleAvatar( - byteImage: image, - nonAsset: true, - ) - : ContactInitial( - initials: provider - .selectedContacts[index] - .contact - ?.atSign ?? - provider.selectedContacts[index] - .group?.groupName, - ), - ); - }, - ), - ), - ); - }, - ) - : Positioned( - top: 20.toHeight, - child: Container(), - ) - ], - ), - ), - ); + ); + }, + ), + ); + }, + )); } } diff --git a/lib/screens/welcome_screen/widgets/select_contact_widget.dart b/lib/screens/welcome_screen/widgets/select_contact_widget.dart index b8bc33cf..5cfae72b 100644 --- a/lib/screens/welcome_screen/widgets/select_contact_widget.dart +++ b/lib/screens/welcome_screen/widgets/select_contact_widget.dart @@ -38,18 +38,14 @@ class _SelectContactWidgetState extends State { ), ), ), - child: ClipRRect( - borderRadius: BorderRadius.circular(15.toFont), - child: Container( - color: ColorConstants.inputFieldColor, - child: _ExpansionTileWidget( - headerText, - (index) { - widget.onUpdate(true); - setState(() {}); - }, - )), - ), + child: Container( + child: _ExpansionTileWidget( + headerText, + (index) { + widget.onUpdate(true); + setState(() {}); + }, + )), ); } } @@ -61,31 +57,25 @@ class _ExpansionTileWidget extends StatelessWidget { _ExpansionTileWidget(this.headerText, this.onSelected); @override Widget build(BuildContext context) { - return ListTile( - // tilePadding: SizeConfig().isTablet(context) - // ? EdgeInsets.symmetric(vertical: 10.toFont, horizontal: 10.toFont) - // : EdgeInsets.only(left: 10.toFont, right: 10.toFont), - // backgroundColor: ColorConstants.inputFieldColor, - title: Text( - headerText!, - style: TextStyle( - color: ColorConstants.fadedText, - fontSize: 14.toFont, - fontWeight: FontWeight.normal, - ), - semanticsLabel: 'Select atSign from contacts button', - ), - trailing: Container( - padding: EdgeInsets.symmetric(vertical: 15), - child: Image.asset( - ImageConstants.contactsIcon, - color: Colors.black, - semanticLabel: '', - ), - ), + return InkWell( onTap: () { selectContact(context); }, + child: Container( + height: 62.toHeight > 62 ? 62 : 62.toHeight, + width: 350.toWidth > 350 ? 350 : 350.toWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ColorConstants.grey), + ), + child: Padding( + padding: EdgeInsets.fromLTRB(20.toWidth, 20.toHeight, 0, 20.toHeight), + child: Text( + 'Select atSign', + style: TextStyle(color: ColorConstants.grey), + ), + ), + ), ); } diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 1f3dcb84..dfcccb01 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -1,9 +1,13 @@ import 'dart:async'; import 'package:at_client_mobile/at_client_mobile.dart'; +import 'package:at_common_flutter/widgets/custom_app_bar.dart'; import 'package:at_contact/at_contact.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/common_button.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_heading.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/error_dialog.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/file_card.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_callback.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/overlapping_contacts.dart'; @@ -12,6 +16,7 @@ import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/select_file import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; @@ -21,13 +26,16 @@ import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; +import '../../../utils/images.dart'; +import '../../common_widgets/app_bar_custom.dart'; + class WelcomeScreenHome extends StatefulWidget { @override _WelcomeScreenHomeState createState() => _WelcomeScreenHomeState(); } class _WelcomeScreenHomeState extends State { - bool? isContactSelected; + bool isContactSelected = false; bool? isFileSelected; late WelcomeScreenProvider _welcomeScreenProvider; HistoryProvider? historyProvider; @@ -55,99 +63,173 @@ class _WelcomeScreenHomeState extends State { context, ); - return Container( + return Scaffold( + appBar: AppBarCustom( + height: 130, + title: "${BackendService.getInstance().currentAtSign ?? ''} ", + description: '', + ), + body: Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.welcomeBackground, + ), + fit: BoxFit.fill, + ), + // shape: BoxShape.circle, + // gradient: LinearGradient( + // colors: [Color(0xffF05E3F), Color(0xffe9a642)], + // stops: [0.1, 0.8], + // ), + ), width: double.infinity, height: SizeConfig().screenHeight, - child: Container( - width: double.infinity, - height: SizeConfig().screenHeight, - child: Stack( - children: [ - Row( - children: [ - Expanded( - flex: 3, - child: SingleChildScrollView( - controller: scrollController, - child: Container( - width: double.infinity, - padding: EdgeInsets.symmetric( - horizontal: 20.toWidth, vertical: 20.toHeight), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - TextStrings().welcome, - semanticsLabel: TextStrings().welcome, - style: GoogleFonts.playfairDisplay( - textStyle: TextStyle( - fontSize: 26.toFont, - fontWeight: FontWeight.w800, - height: 1.3, - ), - ), + child: Stack( + children: [ + Row( + children: [ + Expanded( + flex: 3, + child: SingleChildScrollView( + controller: scrollController, + child: Container( + width: double.infinity, + padding: EdgeInsets.symmetric( + horizontal: 20.toWidth, vertical: 20.toHeight), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + TextStrings().selectFiles, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, ), - InkWell( - onTap: switchAtsign, - child: Text( - BackendService.getInstance().currentAtSign!, - style: GoogleFonts.playfairDisplay( - textStyle: TextStyle( - fontSize: 26.toFont, - fontWeight: FontWeight.w800, - height: 1.3, - color: ColorConstants.orangeColor, + ), + SizedBox(height: 16), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isEmpty) { + return InkWell( + onTap: () { + providerCallback( + context, + task: (provider) => + provider.pickFiles(provider.MEDIA), + taskName: (provider) => + provider.PICK_FILES, + onSuccess: (provider) {}, + onError: (err) => ErrorDialog().show( + err.toString(), + context: context)); + }, + child: Container( + height: + 142.toHeight > 142 ? 142 : 142.toHeight, + width: 350.toWidth > 350 ? 350 : 350.toWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.orangeColor), + ), + child: Center( + child: Text( + 'Select file(s) to transfer', + style: TextStyle( + color: ColorConstants.orangeColor, + fontSize: 16), + ), ), ), - ), - ), - SizedBox( - height: 10.toHeight, - ), - Text( - TextStrings().welcomeRecipient, - style: TextStyle( - color: ColorConstants.fadedText, - fontSize: 13.toFont, - fontWeight: FontWeight.normal, - ), - ), - SizedBox( - height: 67.toHeight, - ), - Text( - TextStrings().welcomeSendFilesTo, - style: TextStyle( - color: ColorConstants.fadedText, - fontSize: 12.toFont, - fontWeight: FontWeight.normal, - ), - ), - SizedBox( - height: 20.toHeight, - ), - SelectContactWidget( - (b) { - setState(() { - isContactSelected = b; - }); - }, - ), - SizedBox( - height: 10.toHeight, + ); + } else { + return SizedBox(); + } + }), + SizedBox(height: 16), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isNotEmpty) { + return Wrap( + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + runSpacing: 5.0.toWidth, + spacing: 10.0.toHeight, + children: List.generate( + provider.selectedFiles.length, (index) { + return SizedBox( + width: (320) / 2, + child: Stack( + children: [ + FileCard( + fileDetail: + provider.selectedFiles[index], + ), + Positioned( + top: -10, + right: -10, + child: InkWell( + onTap: () { + provider.selectedFiles + .removeAt(index); + provider.calculateSize(); + provider.notifyListeners(); + }, + child: Container( + width: 40, + height: 40, + child: FittedBox( + fit: BoxFit.fill, + child: Image.asset( + ImageConstants.closeIcon), + ), + ), + ), + ), + ], + ), + ); + }), + ); + } else { + return SizedBox(); + } + }), + SizedBox(height: 16), + Text( + TextStrings().selectContacts, + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.bold, ), - Consumer( - builder: (context, provider, _) { - if (filePickerModel.scrollToBottom) { + ), + SizedBox(height: 16), + Consumer( + builder: (context, provider, _) { + if (filePickerModel.scrollToBottom) { + scrollToBottom(); + } + return SizedBox(); + }), + Consumer( + builder: (context, provider, _) { + if (provider.scrollToBottom) { scrollToBottom(); } - return SizedBox(); - }), - Consumer( - builder: (context, provider, _) { - if (provider.scrollToBottom) { - scrollToBottom(); - } + if ((provider.selectedContacts.isEmpty)) { + return Visibility( + visible: true, + child: SelectContactWidget( + (b) { + print(b); + setState(() { + isContactSelected = b; + }); + }, + ), + ); + } else { if ((provider.selectedContacts.isEmpty)) { return Container(); } else { @@ -158,222 +240,132 @@ class _WelcomeScreenHomeState extends State { }, ); } - }, - ), - SizedBox( - height: 20.toHeight, + } + }, + ), + SizedBox(height: 16), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ColorConstants.grey), ), - SelectFileWidget( - (b) { + child: TextField( + onChanged: (String txt) { setState(() { - isFileSelected = b; + notes = txt; }); }, - (_str) { - setState(() { - notes = _str; - }); - }, - initialValue: notes, - ), - SizedBox( - height: (_welcomeScreenProvider - .selectedContacts != - null && - _welcomeScreenProvider - .selectedContacts.isNotEmpty && - filePickerModel.selectedFiles.isNotEmpty) - ? 20.toHeight - : 60.toHeight, - ), - (_welcomeScreenProvider.selectedContacts != null && - _welcomeScreenProvider - .selectedContacts.isNotEmpty && - filePickerModel.selectedFiles.isNotEmpty) - ? Container( - decoration: BoxDecoration( - color: ColorConstants.inputFieldColor, - borderRadius: BorderRadius.all( - Radius.circular(10), - ), - ), - child: Row( - children: [ - SizedBox( - width: 10.toWidth, - ), - Expanded( - child: TextFormField( - focusNode: _notesFocusNode, - controller: _notesController, - // initialValue: notes, - decoration: InputDecoration( - hintText: TextStrings() - .welcomeAddTranscripts, - hintStyle: TextStyle( - color: ColorConstants.fadedText, - fontSize: 14.toFont, - fontWeight: FontWeight.normal, - ), - border: InputBorder.none, - fillColor: ColorConstants - .inputFieldColor, - focusColor: ColorConstants - .inputFieldColor, - hoverColor: ColorConstants - .inputFieldColor, - ), - style: TextStyle( - color: ColorConstants.fadedText, - fontSize: 14.toFont, - fontWeight: FontWeight.normal, - ), - onChanged: (String txt) { - setState(() { - notes = txt; - }); - }, - ), - ), - notes != null - ? InkWell( - onTap: () { - setState(() { - notes = null; - }); - _notesController.clear(); - }, - child: Icon(Icons.clear, - color: Colors.black), - ) - : InkWell( - onTap: () { - FocusScope.of(context) - .requestFocus( - _notesFocusNode); - }, - child: Icon(Icons.edit, - color: Colors.black), - ), - SizedBox( - width: 15, - ), - ], - ), - ) - : SizedBox(), - SizedBox( - height: 30.toHeight, + decoration: InputDecoration( + labelText: 'Send Message (Optional)', + fillColor: Colors.white, + border: OutlineInputBorder( + borderSide: BorderSide( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + ), + ), + keyboardType: TextInputType.multiline, ), - if (_welcomeScreenProvider.selectedContacts != - null && - _welcomeScreenProvider - .selectedContacts.isNotEmpty && - filePickerModel.selectedFiles.isNotEmpty) ...[ - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - CommonButton('Clear', () { - setState(() { - isFileShareFailed = false; - _welcomeScreenProvider.selectedContacts - .clear(); - _welcomeScreenProvider - .resetSelectedContactsStatus(); - filePickerModel.selectedFiles.clear(); - filePickerModel - .resetSelectedFilesStatus(); - notes = null; - _notesController.clear(); - }); - }), - Expanded(child: SizedBox()), - Visibility( - visible: ((!_welcomeScreenProvider - .hasSelectedContactsChanged && - !filePickerModel - .hasSelectedFilesChanged) && - isFileShareFailed), - child: CommonButton( - TextStrings().buttonResend, - reAttemptSendingFiles, - color: Colors.amber[800], - )), - (_welcomeScreenProvider - .hasSelectedContactsChanged || - filePickerModel - .hasSelectedFilesChanged && - !isFileShareFailed) - ? CommonButton( - TextStrings().buttonSend, - sendFileWithFileBin, - ) - : SizedBox(), - ], + ), + SizedBox(height: 40), + InkWell( + onTap: sendFileWithFileBin, + child: Container( + height: 67.toHeight > 67 ? 67 : 67.toHeight, + width: 350.toWidth > 350 ? 350 : 350.toWidth, + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(10)), + gradient: LinearGradient( + colors: [ + Color(0xffF05E3F), + Color(0xffe9a642) + ], + stops: [0.1, 0.8], + ), ), - SizedBox( - height: 60.toHeight, + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Transfer Now', + style: TextStyle( + fontSize: 20.toFont, + color: Colors.white), + ), + SizedBox(width: 10), + Icon(Icons.arrow_forward, + color: Colors.white, size: 20.toFont) + ], + ), ), - ], - ], - ), + ), + ), + SizedBox(height: 100) + ], ), ), ), - SizeConfig().isTablet(context) - ? Container( - height: SizeConfig().screenHeight, - width: 100, - child: SideBarWidget( - isExpanded: false, - ), - ) - : SizedBox(), - ], - ), - SizeConfig().isTablet(context) - ? Container( - height: 100, - width: SizeConfig().screenWidth - 100, - child: Customheading(), - ) - : SizedBox(), - SizeConfig().isTablet(context) - ? Positioned( - right: 80, - top: 100, - child: Container( - height: 50, - width: 50, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(25), - color: Colors.black, + ), + SizeConfig().isTablet(context) + ? Container( + height: SizeConfig().screenHeight, + width: 100, + child: SideBarWidget( + isExpanded: false, ), - child: Builder( - builder: (context) { - return InkWell( - onTap: () { - setState(() { - isExpanded = !isExpanded; - WelcomeScreenProvider().isExpanded = true; - }); + ) + : SizedBox(), + ], + ), + SizeConfig().isTablet(context) + ? Container( + height: 100, + width: SizeConfig().screenWidth - 100, + child: Customheading(), + ) + : SizedBox(), + SizeConfig().isTablet(context) + ? Positioned( + right: 80, + top: 100, + child: Container( + height: 50, + width: 50, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(25), + color: Colors.black, + ), + child: Builder( + builder: (context) { + return InkWell( + onTap: () { + setState(() { + isExpanded = !isExpanded; + WelcomeScreenProvider().isExpanded = true; + }); - Scaffold.of(context).openEndDrawer(); - }, - child: Icon( - Icons.arrow_back_ios, - color: Colors.white, - ), - ); - }, - ), + Scaffold.of(context).openEndDrawer(); + }, + child: Icon( + Icons.arrow_back_ios, + color: Colors.white, + ), + ); + }, ), - ) - : SizedBox(), - ], - ), - )); + ), + ) + : SizedBox(), + ], + ), + ), + ); } scrollToBottom() { @@ -417,6 +409,24 @@ class _WelcomeScreenHomeState extends State { } sendFileWithFileBin() async { + if (filePickerModel.selectedFiles.isEmpty) { + SnackbarService().showSnackbar( + context, + 'No files selected', + bgColor: ColorConstants.redAlert, + ); + return; + } + + if (_welcomeScreenProvider.selectedContacts.isEmpty) { + SnackbarService().showSnackbar( + context, + 'No atSign selected', + bgColor: ColorConstants.redAlert, + ); + return; + } + if (mounted) { setState(() { // assuming file share record will be saved in sent history. diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index 4bf0ccc0..005b601d 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -2,6 +2,7 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/file_recipients.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; @@ -42,7 +43,9 @@ class OverlayService { FLUSHBAR_STATUS flushbarStatus, { String? errorMessage, }) { - Color bgColor = _getColor(flushbarStatus); + // Color bgColor = _getColor(flushbarStatus); + Color bgColor = Colors.white; + String text = errorMessage ?? _getText(flushbarStatus); return OverlayEntry(builder: (context) { @@ -50,107 +53,90 @@ class OverlayService { return Consumer( builder: (_context, provider, _) { text = errorMessage ?? - _getText(flushbarStatus, - fileTransferProgress: provider.sentFileTransferProgress); - return Positioned( - width: size.width, - height: 100, - bottom: 0, - child: Material( + _getText( + flushbarStatus, + fileTransferProgress: provider.sentFileTransferProgress, + ); + return Scaffold( + backgroundColor: bgColor.withOpacity(0.7), + body: SafeArea( child: Container( - alignment: Alignment.center, - color: bgColor, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - flushbarStatus == FLUSHBAR_STATUS.SENDING - ? provider.sentFileTransferProgress != null - ? getProgressBar(provider.sentFileTransferProgress!) - : LinearProgressIndicator() - : SizedBox(), - Padding( - padding: - EdgeInsets.symmetric(vertical: 3, horizontal: 15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - text, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: flushbarStatus == - FLUSHBAR_STATUS.SENDING - ? Colors.black - : Colors.white, - fontSize: 16.toFont, - fontWeight: FontWeight.normal, - ), - ), - //// Not showing estimated file upload time. - // SizedBox(height: 5), - // Text( - // getFileUploadMessage( - // provider.sentFileTransferProgress, - // ), - // style: TextStyle(fontSize: 12.toFont), - // ), - ], + width: size.width, + height: SizeConfig().screenHeight, + child: Material( + color: bgColor.withOpacity(0.7), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: hideOverlay, + child: Container( + width: 105.toWidth, + height: 35, + margin: EdgeInsets.all(10), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: ColorConstants.grey), + ), + child: Center( + child: Text( + 'Close', + style: TextStyle(color: Colors.black), + ), ), ), - flushbarStatus == FLUSHBAR_STATUS.FAILED - ? TextButton( - onPressed: () { - openFileReceiptBottomSheet(context); - }, - child: Container( - padding: EdgeInsets.symmetric( - vertical: 7, horizontal: 7), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - color: Colors.white, - ), - child: Text( - TextStrings.buttonShowMore, - style: TextStyle( - color: ColorConstants.fontPrimary, - fontSize: 15.toFont, - fontWeight: FontWeight.normal, - ), - ), - ), - ) - : TextButton( - onPressed: () { - hideOverlay(); - }, - child: Container( - padding: EdgeInsets.symmetric( - vertical: 7, horizontal: 7), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.0), - color: Colors.white, - ), - child: Text( - TextStrings.buttonDismiss, - style: TextStyle( - color: ColorConstants.fontPrimary, - fontSize: 15.toFont, - fontWeight: FontWeight.normal, - ), + ), + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset(ImageConstants.sendFileIcon), + SizedBox(height: 40), + Padding( + padding: EdgeInsets.symmetric( + vertical: 3, horizontal: 15), + child: Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + children: [ + Expanded( + child: Column( + mainAxisAlignment: + MainAxisAlignment.center, + crossAxisAlignment: + CrossAxisAlignment.center, + children: [ + Text( + text, + maxLines: 2, + overflow: TextOverflow.ellipsis, + style: TextStyle( + color: Colors.black, + fontSize: 25.toFont, + fontWeight: FontWeight.bold, + ), + ), + ], ), ), - ) - ], + ], + ), + ), + SizedBox(height: 30), + flushbarStatus == FLUSHBAR_STATUS.SENDING + ? provider.sentFileTransferProgress != null + ? getProgressBar() + : getProgressBar() + : SizedBox(), + ], + ), ), - ), - ], + ], + ), ), ), ), @@ -210,14 +196,25 @@ class OverlayService { return uploadMessage; } - Widget getProgressBar(FileTransferProgress fileTransferProgress) { + Widget getProgressBar() { /// Not showing upload percent // if (fileTransferProgress.fileState == FileState.upload && // fileTransferProgress.percent != null) { // var percent = fileTransferProgress.percent! / 100; // return LinearProgressIndicator(); // } - return LinearProgressIndicator(); + return SizedBox( + width: 300.toWidth, + height: 40, + child: ClipRRect( + borderRadius: BorderRadius.all(Radius.circular(30)), + child: LinearProgressIndicator( + color: ColorConstants.yellow, + minHeight: 45, + backgroundColor: Color(0xFFE2E2E2), + ), + ), + ); } Color _getColor(FLUSHBAR_STATUS flushbarStatus) { @@ -234,9 +231,9 @@ class OverlayService { } List transferMessages = [ - 'Sending file(s) ...', - 'File(s) sent', - 'Oops! something went wrong' + 'Sending your files', + 'Success!🎉 ', + 'Something went wrong! ⚠️', ]; openFileReceiptBottomSheet(context, diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 15453dd3..d54f2b12 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -36,6 +36,7 @@ class ImageConstants { static String documentFile = '$_basePath/documentFile.png'; static String exclamation = '$_basePath/exclamation.png'; static String close = '$_basePath/close.png'; + static String closeIcon = '$_basePath/close_icon.png'; static String trustedSender = '$_basePath/trustedSendersIcon.png'; static String myFiles = '$_basePath/my_files.png'; static String groups = '$_basePath/groups.png'; @@ -59,6 +60,7 @@ class ImageConstants { static String filePreview = '$_basePath/filePreview.jpg'; // Desktop + static String sendFileIcon = '$_basePath/send_file_icon.png'; static String welcomeDesktop = '$_basePath/welcome_screen.png'; static String groupPhotoDesktop = '$_basePath/group_photo.png'; static String homeBgDesktop = '$_basePath/home_bg.png'; diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index 166cf7b4..7b1104ce 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -38,6 +38,8 @@ class TextStrings { String oopsSomethingWentWrong = 'Oops! something went wrong'; String hello = 'hello'; String reset = 'Reset'; + String selectFiles = 'SELECT FILES'; + String selectContacts = 'SELECT CONTACT(S)'; //sidebar menu texts String sidebarGeneral = 'GENERAL'; From 80c70f9d40701cded138fdd828d91fbc42438fce Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Wed, 8 Feb 2023 00:44:32 +0530 Subject: [PATCH 28/94] feat: UI updated for tablet screen --- ios/Runner.xcodeproj/project.pbxproj | 4 +- ios/Runner/Info.plist | 2 + lib/screens/common_widgets/file_card.dart | 9 +- .../widgets/group_contact_list_tile.dart | 9 +- .../widgets/overlapping_contacts.dart | 2 +- .../widgets/select_contact_widget.dart | 6 +- .../widgets/welcome_sceen_home.dart | 250 +++++--- pubspec.lock | 600 ++++++++++++------ 8 files changed, 563 insertions(+), 319 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index fc1e35ee..372ca6da 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -282,6 +282,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -296,6 +297,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 22f1584c..16bb0141 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -79,5 +79,7 @@ UIViewControllerBasedStatusBarAppearance + UIApplicationSupportsIndirectInputEvents + diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart index 1d665246..7b757274 100644 --- a/lib/screens/common_widgets/file_card.dart +++ b/lib/screens/common_widgets/file_card.dart @@ -25,7 +25,7 @@ class _FileCardState extends State { padding: EdgeInsets.fromLTRB(13, 8, 8, 13), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Column( mainAxisAlignment: MainAxisAlignment.start, @@ -35,15 +35,16 @@ class _FileCardState extends State { width: 100.toWidth, child: Text( widget.fileDetail.name, - style: TextStyle(color: Colors.black, fontSize: 12), + style: TextStyle(color: Colors.black, fontSize: 12.toFont), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), - Text(widget.fileDetail.size.toString()), + Text(widget.fileDetail.size.toString(), + style: TextStyle(fontSize: 15.toFont)), ], ), - Icon(Icons.remove_red_eye) + Icon(Icons.remove_red_eye, size: 15.toFont) ], ), ); diff --git a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart index 790508e3..0ea74389 100644 --- a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart +++ b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart @@ -73,18 +73,15 @@ class _ContactListTileState extends State { ), ), trailing: (widget.plainView) - ? Container( - height: 0, - width: 0, - ) + ? SizedBox() : (widget.isSelected) ? GestureDetector( onTap: () { widget.onRemove(); }, child: Container( - width: 40, - height: 40, + width: 40.toHeight, + height: 40.toHeight, child: FittedBox( fit: BoxFit.fill, child: Image.asset(ImageConstants.closeIcon), diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index d3c478b6..5f229ba7 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -55,7 +55,7 @@ class _OverlappingContactsState extends State { builder: (context, provider, _) { return Container( height: 80.toHeight * widget.selectedList.length, - width: 350.toWidth > 350 ? 350 : 350.toWidth, + width: 350.toWidth, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), diff --git a/lib/screens/welcome_screen/widgets/select_contact_widget.dart b/lib/screens/welcome_screen/widgets/select_contact_widget.dart index 5cfae72b..b2dab17f 100644 --- a/lib/screens/welcome_screen/widgets/select_contact_widget.dart +++ b/lib/screens/welcome_screen/widgets/select_contact_widget.dart @@ -62,8 +62,8 @@ class _ExpansionTileWidget extends StatelessWidget { selectContact(context); }, child: Container( - height: 62.toHeight > 62 ? 62 : 62.toHeight, - width: 350.toWidth > 350 ? 350 : 350.toWidth, + height: 62.toHeight, + width: 350.toWidth, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), border: Border.all(color: ColorConstants.grey), @@ -72,7 +72,7 @@ class _ExpansionTileWidget extends StatelessWidget { padding: EdgeInsets.fromLTRB(20.toWidth, 20.toHeight, 0, 20.toHeight), child: Text( 'Select atSign', - style: TextStyle(color: ColorConstants.grey), + style: TextStyle(color: ColorConstants.grey, fontSize: 15.toFont), ), ), ), diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index dfcccb01..26ca8032 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -98,36 +98,55 @@ class _WelcomeScreenHomeState extends State { padding: EdgeInsets.symmetric( horizontal: 20.toWidth, vertical: 20.toHeight), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, children: [ - Text( - TextStrings().selectFiles, - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + padding: EdgeInsets.symmetric( + horizontal: 30.toWidth), + child: Text( + TextStrings().selectFiles, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), + ), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isNotEmpty) { + return InkWell( + onTap: SelectFiles, + child: Container( + color: Colors.black, + padding: EdgeInsets.all(10), + margin: + EdgeInsets.only(right: 30.toWidth), + child: Icon( + Icons.add_circle_outline, + color: Colors.white, + size: 15.toFont, + ), + ), + ); + } else { + return SizedBox(); + } + }), + ], ), SizedBox(height: 16), Consumer( builder: (context, provider, _) { if (provider.selectedFiles.isEmpty) { return InkWell( - onTap: () { - providerCallback( - context, - task: (provider) => - provider.pickFiles(provider.MEDIA), - taskName: (provider) => - provider.PICK_FILES, - onSuccess: (provider) {}, - onError: (err) => ErrorDialog().show( - err.toString(), - context: context)); - }, + onTap: SelectFiles, child: Container( - height: - 142.toHeight > 142 ? 142 : 142.toHeight, - width: 350.toWidth > 350 ? 350 : 350.toWidth, + height: 142.toHeight, + width: 350.toWidth, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), border: Border.all( @@ -138,7 +157,7 @@ class _WelcomeScreenHomeState extends State { 'Select file(s) to transfer', style: TextStyle( color: ColorConstants.orangeColor, - fontSize: 16), + fontSize: 16.toFont), ), ), ), @@ -159,7 +178,7 @@ class _WelcomeScreenHomeState extends State { children: List.generate( provider.selectedFiles.length, (index) { return SizedBox( - width: (320) / 2, + width: (320.toWidth) / 2, child: Stack( children: [ FileCard( @@ -177,8 +196,8 @@ class _WelcomeScreenHomeState extends State { provider.notifyListeners(); }, child: Container( - width: 40, - height: 40, + width: 40.toHeight, + height: 40.toHeight, child: FittedBox( fit: BoxFit.fill, child: Image.asset( @@ -196,15 +215,45 @@ class _WelcomeScreenHomeState extends State { return SizedBox(); } }), - SizedBox(height: 16), - Text( - TextStrings().selectContacts, - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.bold, - ), + SizedBox(height: 16.toHeight), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: EdgeInsets.only(left: 30.toWidth), + child: Text( + TextStrings().selectContacts, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), + ), + Consumer( + builder: (context, provider, _) { + if (provider.selectedContacts.isNotEmpty) { + return InkWell( + onTap: () {}, + child: Container( + color: Colors.black, + padding: EdgeInsets.all(10), + margin: + EdgeInsets.only(right: 30.toWidth), + child: Icon( + Icons.add_circle_outline, + color: Colors.white, + size: 15.toFont, + ), + ), + ); + } else { + return SizedBox(); + } + }, + ), + ], ), - SizedBox(height: 16), + SizedBox(height: 16.toHeight), Consumer( builder: (context, provider, _) { if (filePickerModel.scrollToBottom) { @@ -218,16 +267,13 @@ class _WelcomeScreenHomeState extends State { scrollToBottom(); } if ((provider.selectedContacts.isEmpty)) { - return Visibility( - visible: true, - child: SelectContactWidget( - (b) { - print(b); - setState(() { - isContactSelected = b; - }); - }, - ), + return SelectContactWidget( + (b) { + print(b); + setState(() { + isContactSelected = b; + }); + }, ); } else { if ((provider.selectedContacts.isEmpty)) { @@ -243,8 +289,9 @@ class _WelcomeScreenHomeState extends State { } }, ), - SizedBox(height: 16), + SizedBox(height: 16.toHeight), Container( + width: 350.toWidth, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), @@ -258,11 +305,12 @@ class _WelcomeScreenHomeState extends State { }, decoration: InputDecoration( labelText: 'Send Message (Optional)', + labelStyle: TextStyle(fontSize: 15.toFont), fillColor: Colors.white, border: OutlineInputBorder( borderSide: BorderSide( - color: ColorConstants.grey, - ), + // color: ColorConstants.grey, + ), borderRadius: BorderRadius.all( Radius.circular(10.0), ), @@ -271,12 +319,12 @@ class _WelcomeScreenHomeState extends State { keyboardType: TextInputType.multiline, ), ), - SizedBox(height: 40), + SizedBox(height: 40.toHeight), InkWell( onTap: sendFileWithFileBin, child: Container( - height: 67.toHeight > 67 ? 67 : 67.toHeight, - width: 350.toWidth > 350 ? 350 : 350.toWidth, + height: 67.toHeight, + width: 350.toWidth, decoration: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(10)), @@ -312,62 +360,70 @@ class _WelcomeScreenHomeState extends State { ), ), ), - SizeConfig().isTablet(context) - ? Container( - height: SizeConfig().screenHeight, - width: 100, - child: SideBarWidget( - isExpanded: false, - ), - ) - : SizedBox(), + // SizeConfig().isTablet(context) + // ? Container( + // height: SizeConfig().screenHeight, + // width: 100, + // child: SideBarWidget( + // isExpanded: false, + // ), + // ) + // : SizedBox(), ], ), - SizeConfig().isTablet(context) - ? Container( - height: 100, - width: SizeConfig().screenWidth - 100, - child: Customheading(), - ) - : SizedBox(), - SizeConfig().isTablet(context) - ? Positioned( - right: 80, - top: 100, - child: Container( - height: 50, - width: 50, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(25), - color: Colors.black, - ), - child: Builder( - builder: (context) { - return InkWell( - onTap: () { - setState(() { - isExpanded = !isExpanded; - WelcomeScreenProvider().isExpanded = true; - }); + // SizeConfig().isTablet(context) + // ? Container( + // height: 100, + // width: SizeConfig().screenWidth - 100, + // child: Customheading(), + // ) + // : SizedBox(), + // SizeConfig().isTablet(context) + // ? Positioned( + // right: 80, + // top: 100, + // child: Container( + // height: 50, + // width: 50, + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(25), + // color: Colors.black, + // ), + // child: Builder( + // builder: (context) { + // return InkWell( + // onTap: () { + // setState(() { + // isExpanded = !isExpanded; + // WelcomeScreenProvider().isExpanded = true; + // }); - Scaffold.of(context).openEndDrawer(); - }, - child: Icon( - Icons.arrow_back_ios, - color: Colors.white, - ), - ); - }, - ), - ), - ) - : SizedBox(), + // Scaffold.of(context).openEndDrawer(); + // }, + // child: Icon( + // Icons.arrow_back_ios, + // color: Colors.white, + // ), + // ); + // }, + // ), + // ), + // ) + // : SizedBox(), ], ), ), ); } + SelectFiles() async { + await providerCallback(context, + task: (provider) => provider.pickFiles(provider.MEDIA), + taskName: (provider) => provider.PICK_FILES, + onSuccess: (provider) {}, + onError: (err) => ErrorDialog().show(err.toString(), context: context)); + } + scrollToBottom() { Timer( Duration(milliseconds: 200), diff --git a/pubspec.lock b/pubspec.lock index 18461567..703b7c82 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,44 +5,50 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" archive: dependency: "direct main" description: name: archive - url: "https://pub.dartlang.org" + sha256: "793964beb8e297995714326628881437d4211f10fc8843534bab54129cd896ee" + url: "https://pub.dev" source: hosted version: "3.3.1" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 + url: "https://pub.dev" source: hosted version: "2.3.1" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: c8e7571a1e9177db4c9b8de1b8f0e462dda18f397eed40b3787d90171d6251e7 + url: "https://pub.dev" source: hosted version: "1.1.1" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.8.2" + version: "2.10.0" at_backupkey_flutter: dependency: "direct main" description: @@ -56,49 +62,56 @@ packages: dependency: transitive description: name: at_base2e15 - url: "https://pub.dartlang.org" + sha256: "06ee6ffba9b3439f1c41f9bf0c01f579ce0a8b25f42da8c374ba3a14d721937f" + url: "https://pub.dev" source: hosted version: "1.0.0" at_client: dependency: transitive description: name: at_client - url: "https://pub.dartlang.org" + sha256: b0c3861b2e73eada14403328af980be43060fe14ac6ca0a7a0295e1dfb91e6b0 + url: "https://pub.dev" source: hosted version: "3.0.38" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - url: "https://pub.dartlang.org" + sha256: "082c4dcbaa72903338301721d7582634be30767998eb22f0c96fa2ab764b5e19" + url: "https://pub.dev" source: hosted version: "3.2.5" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - url: "https://pub.dartlang.org" + sha256: "6336655030a65d2ac69bc6442254facced2f45d04a98921f3cb17b39b71920be" + url: "https://pub.dev" source: hosted version: "2.0.10" at_commons: dependency: "direct main" description: name: at_commons - url: "https://pub.dartlang.org" + sha256: "739d2a4663cc3af03b93c5489d86a9f3c88c779dfe2b5c81a9c9a10841bb2f05" + url: "https://pub.dev" source: hosted version: "3.0.25" at_contact: dependency: "direct main" description: name: at_contact - url: "https://pub.dartlang.org" + sha256: "232a7dd140bd4c22f4d99c7866633338de57e50f0e1eb84e515dc1ed0f7b0fee" + url: "https://pub.dev" source: hosted version: "3.0.7" at_contacts_flutter: dependency: "direct main" description: name: at_contacts_flutter - url: "https://pub.dartlang.org" + sha256: f19d6ebff6b14aafd5bdc9fdcd654382a82526345a1c488f673230e32a6e7a42 + url: "https://pub.dev" source: hosted version: "4.0.7" at_contacts_group_flutter: @@ -114,14 +127,16 @@ packages: dependency: transitive description: name: at_file_saver - url: "https://pub.dartlang.org" + sha256: e5994383ce4583fe4e4c0f9d75216fef3442b75f48c81ab05b718d5d3db7c745 + url: "https://pub.dev" source: hosted version: "0.1.1" at_lookup: dependency: transitive description: name: at_lookup - url: "https://pub.dartlang.org" + sha256: "6ea09b17be9c66c5262f307c36e2fa325d4b292df9664e4ed18109dee86925da" + url: "https://pub.dev" source: hosted version: "3.0.30" at_onboarding_flutter: @@ -137,280 +152,320 @@ packages: dependency: transitive description: name: at_persistence_secondary_server - url: "https://pub.dartlang.org" + sha256: "256528bd491760dd4eabeea858be09612495c76e0996c603c071c24a84e734bd" + url: "https://pub.dev" source: hosted version: "3.0.35" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - url: "https://pub.dartlang.org" + sha256: "0ab5ca23353a696badc86972aba5495aa776489b9b8d0a26a6392d800d319dfa" + url: "https://pub.dev" source: hosted version: "2.0.7" at_server_status: dependency: transitive description: name: at_server_status - url: "https://pub.dartlang.org" + sha256: "01190ba0886dfafb02a7ec247faff405527e7efaa5c21f567e4f45e10699e12d" + url: "https://pub.dev" source: hosted version: "1.0.3" at_sync_ui_flutter: dependency: "direct main" description: name: at_sync_ui_flutter - url: "https://pub.dartlang.org" + sha256: "08aae8507aa625f9d45e3ec07dff7806288ac326e153ab526becd16d10e82ee5" + url: "https://pub.dev" source: hosted version: "1.0.6" at_utf7: dependency: transitive description: name: at_utf7 - url: "https://pub.dartlang.org" + sha256: c88e964e307bfe0e53e0048cff1ebf5ab60e23ceb4273f1ca664e724a9a5c5c9 + url: "https://pub.dev" source: hosted version: "1.0.0" at_utils: dependency: transitive description: name: at_utils - url: "https://pub.dartlang.org" + sha256: "57ce4684d59b58c58ee72e945a11de2c6bfdb5e0bb4011763d9ca786d0881387" + url: "https://pub.dev" source: hosted version: "3.0.11" biometric_storage: dependency: "direct main" description: name: biometric_storage - url: "https://pub.dartlang.org" + sha256: f6d7f5f4c28323797658423e4c5982c9dee42e18f59a8a8d4bc5df38eaf2e2f1 + url: "https://pub.dev" source: hosted version: "4.1.3" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - url: "https://pub.dartlang.org" + sha256: "869a3f4f2ad0e8d029d9cefd20d2cafd0a50847b74e7aab3a8eec662b0c7d2ee" + url: "https://pub.dev" source: hosted version: "4.1.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" cli_dialog: dependency: transitive description: name: cli_dialog - url: "https://pub.dartlang.org" + sha256: "47530e1c4a6190662954cefce196d35143c4ed2675ea697d6e542790bdef5641" + url: "https://pub.dev" source: hosted version: "0.5.0" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" + url: "https://pub.dev" source: hosted version: "3.0.2" coverage: dependency: transitive description: name: coverage - url: "https://pub.dartlang.org" + sha256: "17cf9a839208acaed741b1f00ac87cd1fde00548198ba57205cca45c749cb379" + url: "https://pub.dev" source: hosted version: "1.3.2" cron: dependency: transitive description: name: cron - url: "https://pub.dartlang.org" + sha256: f1b69bc71bdb6a4d0efeb0fe49a12bcb41119df4db8120dd5931c8abb2846434 + url: "https://pub.dev" source: hosted version: "0.3.2" cross_file: dependency: transitive description: name: cross_file - url: "https://pub.dartlang.org" + sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b + url: "https://pub.dev" source: hosted version: "0.3.3+2" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" crypton: dependency: transitive description: name: crypton - url: "https://pub.dartlang.org" + sha256: "17fa0d085c422447a70864a361908f0268be4c1cd8611f93826a782eefb5469e" + url: "https://pub.dev" source: hosted version: "2.0.5" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 + url: "https://pub.dev" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 + url: "https://pub.dev" source: hosted version: "0.1.3" dart_console: dependency: transitive description: name: dart_console - url: "https://pub.dartlang.org" + sha256: "1cefa721c5d951e6f11802bf555efaffacfe67a3b181395384d56db8f906bffa" + url: "https://pub.dev" source: hosted version: "1.1.1" dbus: dependency: transitive description: name: dbus - url: "https://pub.dartlang.org" + sha256: "253bfaa3d340778d8bc755e89c3af38e85ef95e65fd5d5670aa3167f8d4f6577" + url: "https://pub.dev" source: hosted version: "0.7.4" desktop_window: dependency: "direct main" description: name: desktop_window - url: "https://pub.dartlang.org" + sha256: "6256fb6feb7b5ec1311c76a3503f89202825bfe92c0458ec5fe7a728ffa216d5" + url: "https://pub.dev" source: hosted version: "0.4.0" emoji_picker_flutter: dependency: transitive description: name: emoji_picker_flutter - url: "https://pub.dartlang.org" + sha256: "41b32e6de5def3c3c06f1b1f52140e57b4d90fa4ce0719ce70476c2f712b5cf3" + url: "https://pub.dev" source: hosted version: "1.3.1" encrypt: dependency: transitive description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted - version: "1.3.0" + version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker - url: "https://pub.dartlang.org" + sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f" + url: "https://pub.dev" source: hosted version: "4.6.1" file_selector: dependency: "direct main" description: name: file_selector - url: "https://pub.dartlang.org" + sha256: "9e34368bfacdf644e2c8a59e2b241cfb722bcbbd09876410e8775ae4905d6a49" + url: "https://pub.dev" source: hosted version: "0.8.4+3" file_selector_linux: dependency: transitive description: name: file_selector_linux - url: "https://pub.dartlang.org" + sha256: c06249f2082e88aca55f4aad9e4c70ff0f2b61d753c1577d51adeab88b3f0178 + url: "https://pub.dev" source: hosted version: "0.0.3" file_selector_macos: dependency: "direct main" description: name: file_selector_macos - url: "https://pub.dartlang.org" + sha256: e87311d719039da30d26ae829aab3ae66f82deb3318cd70ffecb608c99e3da68 + url: "https://pub.dev" source: hosted version: "0.8.2+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - url: "https://pub.dartlang.org" + sha256: "92b924983d18c53d9d354b95be261af869f2a8efa125b293d2db6569c32dd9c3" + url: "https://pub.dev" source: hosted version: "2.1.0" file_selector_web: dependency: transitive description: name: file_selector_web - url: "https://pub.dartlang.org" + sha256: bf166d08f4c3f79286774cdfa39ed301e076c5a903c435f5199818288f24a66d + url: "https://pub.dev" source: hosted version: "0.8.1+5" file_selector_windows: dependency: transitive description: name: file_selector_windows - url: "https://pub.dartlang.org" + sha256: "8bbcc82fe0d3cdf5ae5c289492ddfd703ec028028d9f194dbceae04cfbde1c48" + url: "https://pub.dev" source: hosted version: "0.8.2+2" filesystem_picker: dependency: "direct main" description: name: filesystem_picker - url: "https://pub.dartlang.org" + sha256: "41bb01c65cbd8abc389509adfbd08fc4c9090d2d4d15c5fa8813d0efd980f523" + url: "https://pub.dev" source: hosted version: "2.0.1" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + url: "https://pub.dev" source: hosted version: "1.0.1" flutter: @@ -422,56 +477,64 @@ packages: dependency: transitive description: name: flutter_image_compress - url: "https://pub.dartlang.org" + sha256: "661b138ba5c20c76156378687a8e9464033ffb59c17cbc6eb3429390caf99218" + url: "https://pub.dev" source: hosted version: "1.1.2" flutter_keychain: dependency: "direct main" description: name: flutter_keychain - url: "https://pub.dartlang.org" + sha256: "777ea8d3e1f55536bc8489a9ced73a912da4065645d9a1f751aae3548825b140" + url: "https://pub.dev" source: hosted version: "2.2.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - url: "https://pub.dartlang.org" + sha256: "57d0012730780fe137260dd180e072c18a73fbeeb924cdc029c18aaa0f338d64" + url: "https://pub.dev" source: hosted version: "9.9.1" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - url: "https://pub.dartlang.org" + sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 + url: "https://pub.dev" source: hosted version: "0.5.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - url: "https://pub.dartlang.org" + sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" + url: "https://pub.dev" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b" + url: "https://pub.dev" source: hosted version: "2.0.7" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - url: "https://pub.dartlang.org" + sha256: c7607eb808cdef19c8468246e95a133308aeaeb3971cdd9edfb9d5e31cedfbe9 + url: "https://pub.dev" source: hosted version: "0.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - url: "https://pub.dartlang.org" + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + url: "https://pub.dev" source: hosted version: "1.1.6" flutter_test: @@ -483,7 +546,8 @@ packages: dependency: "direct main" description: name: flutter_toastr - url: "https://pub.dartlang.org" + sha256: "60e4af64bfba2c43ca4bedf09d2e84ba36ac242f0b13ac26681eb547ccd8489e" + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_web_plugins: @@ -495,595 +559,680 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: b528e78a4e69957bb8a33d9e8ceaa728801bb7c6ce599e811e49cf6d94d17fef + url: "https://pub.dev" source: hosted version: "8.0.9" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b" + url: "https://pub.dev" source: hosted version: "2.1.3" get_it: dependency: transitive description: name: get_it - url: "https://pub.dartlang.org" + sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" + url: "https://pub.dev" source: hosted version: "7.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 + url: "https://pub.dev" source: hosted version: "2.1.0" google_fonts: dependency: "direct main" description: name: google_fonts - url: "https://pub.dartlang.org" + sha256: e70521755a6b08c6bde14ddae27dff5bf21010033888fc61da6c595f8a9f58c1 + url: "https://pub.dev" source: hosted version: "2.3.3" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + sha256: bfef906cbd4e78ef49ae511d9074aebd1d2251482ef601a280973e8b58b51bbf + url: "https://pub.dev" source: hosted version: "0.15.0" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: db3060f22889f3d9d55f6a217565486737037eec3609f7f3eca4d0c67ee0d8a0 + url: "https://pub.dev" source: hosted version: "4.0.1" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + sha256: "9d2c5f73435a70a936d317769ee8e7ef480e37674b9f2bce95ea98969a307855" + url: "https://pub.dev" source: hosted version: "3.2.0" image_compression: dependency: transitive description: name: image_compression - url: "https://pub.dartlang.org" + sha256: "911ae4a59196ebcc33c70a38bbc1fa0e2d07243589803dd616120e1a6125bfe9" + url: "https://pub.dev" source: hosted version: "1.0.3" internet_connection_checker: dependency: transitive description: name: internet_connection_checker - url: "https://pub.dartlang.org" + sha256: "6836d1e2193b3deab615820084a69521ec245550aba6e0a91b21c3757129872e" + url: "https://pub.dev" source: hosted version: "0.0.1+4" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852" + url: "https://pub.dev" source: hosted version: "1.0.3" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.5" local_notifier: dependency: "direct main" description: name: local_notifier - url: "https://pub.dartlang.org" + sha256: cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03 + url: "https://pub.dev" source: hosted version: "0.1.5" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "293ae2d49fd79d4c04944c3a26dfd313382d5f52e821ec57119230ae16031ad4" + url: "https://pub.dev" source: hosted version: "1.0.2" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.11" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.4" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted - version: "1.7.0" + version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a + url: "https://pub.dev" source: hosted version: "1.0.2" mocktail: dependency: transitive description: name: mocktail - url: "https://pub.dartlang.org" + sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" + url: "https://pub.dev" source: hosted version: "0.3.0" msix: dependency: "direct dev" description: name: msix - url: "https://pub.dartlang.org" + sha256: "03a51353b0fe375097c291eddc5c03729f0155c66403d665e6534c5963996da9" + url: "https://pub.dev" source: hosted version: "3.6.3" mutex: dependency: transitive description: name: mutex - url: "https://pub.dartlang.org" + sha256: "9bd00c5fbb3fe0ca22508aa81dab0bab9c565f73b0c9d41adb582bfd464aa2c7" + url: "https://pub.dev" source: hosted version: "3.0.0" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" new_version: dependency: "direct main" description: name: new_version - url: "https://pub.dartlang.org" + sha256: "2eabd66e53c882dbaab4f3f8824d139a35a0521e2e04b8fd6d9fb358112691e9" + url: "https://pub.dev" source: hosted version: "0.3.1" node_preamble: dependency: transitive description: name: node_preamble - url: "https://pub.dartlang.org" + sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" + url: "https://pub.dev" source: hosted version: "2.0.1" open_file: dependency: "direct main" description: name: open_file - url: "https://pub.dartlang.org" + sha256: "5cd0288033d613ee7908aa974b7ff00805ae55d253f64d311603cf2e30613ca8" + url: "https://pub.dev" source: hosted version: "3.2.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - url: "https://pub.dartlang.org" + sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" + url: "https://pub.dev" source: hosted version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - url: "https://pub.dartlang.org" + sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" + url: "https://pub.dev" source: hosted version: "1.0.5" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - url: "https://pub.dartlang.org" + sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 + url: "https://pub.dev" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 + url: "https://pub.dev" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - url: "https://pub.dartlang.org" + sha256: d652f0a865d2da52856e2001c53e83fe34a6009cd8d8751d38cf8173c0abf906 + url: "https://pub.dev" source: hosted version: "1.0.5" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - url: "https://pub.dartlang.org" + sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 + url: "https://pub.dev" source: hosted version: "1.0.5" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted - version: "1.8.1" + version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing - url: "https://pub.dartlang.org" + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - url: "https://pub.dartlang.org" + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" source: hosted version: "1.0.1" path_provider: dependency: transitive description: name: path_provider - url: "https://pub.dartlang.org" + sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + url: "https://pub.dev" source: hosted version: "2.0.11" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: "4d5542667150f5b779ba411dd5dc0b674a85d1355e45bda2877e0e82f4ad08d8" + url: "https://pub.dev" source: hosted version: "2.0.20" path_provider_ios: dependency: transitive description: name: path_provider_ios - url: "https://pub.dartlang.org" + sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + url: "https://pub.dev" source: hosted version: "2.0.11" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 + url: "https://pub.dev" source: hosted version: "2.1.7" path_provider_macos: dependency: transitive description: name: path_provider_macos - url: "https://pub.dartlang.org" + sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" + url: "https://pub.dev" source: hosted version: "2.0.6" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "27dc7a224fcd07444cb5e0e60423ccacea3e13cf00fc5282ac2c918132da931d" + url: "https://pub.dev" source: hosted version: "2.0.4" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" source: hosted version: "2.0.7" pedantic: dependency: "direct main" description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - url: "https://pub.dartlang.org" + sha256: "5749ebeb7ec0c3865ea17e3eb337174b87747be816dab582c551e1aff6f6bbf3" + url: "https://pub.dev" source: hosted version: "9.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - url: "https://pub.dartlang.org" + sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc + url: "https://pub.dev" source: hosted version: "9.0.2+1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - url: "https://pub.dartlang.org" + sha256: "6367799be76d1fe70ffe2df7f025abfe28818b450f550621778995badbebf519" + url: "https://pub.dev" source: hosted version: "9.0.4" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - url: "https://pub.dartlang.org" + sha256: ca16451bfdc6d26693d10b37b2d81370bdf3f0318422f3eecfd6004f5bd7d21f + url: "https://pub.dev" source: hosted version: "3.7.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - url: "https://pub.dartlang.org" + sha256: "40ad5ab4d3c65d75c7f3a069065c77503aae19a1cf01ba246d43489e14f1b90c" + url: "https://pub.dev" source: hosted version: "0.1.0" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "2ebb289dc4764ec397f5cd3ca9881c6d17196130a7d646ed022a0dd9c2e25a71" + url: "https://pub.dev" source: hosted version: "5.0.0" pin_code_fields: dependency: transitive description: name: pin_code_fields - url: "https://pub.dartlang.org" + sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7 + url: "https://pub.dev" source: hosted version: "7.4.0" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" + url: "https://pub.dev" source: hosted version: "2.1.2" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 + url: "https://pub.dev" source: hosted version: "3.6.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - url: "https://pub.dartlang.org" + sha256: "8d7d4c2df46d6a6270a4e10404bfecb18a937e3e00f710c260d0a10415ce6b7b" + url: "https://pub.dev" source: hosted version: "6.0.3" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "816c1a640e952d213ddd223b3e7aafae08cd9f8e1f6864eed304cc13b0272b07" + url: "https://pub.dev" source: hosted version: "2.1.1" qr: dependency: transitive description: name: qr - url: "https://pub.dartlang.org" + sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" + url: "https://pub.dev" source: hosted version: "2.1.0" qr_code_scanner: dependency: transitive description: name: qr_code_scanner - url: "https://pub.dartlang.org" + sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + url: "https://pub.dev" source: hosted version: "1.0.1" qr_flutter: dependency: "direct main" description: name: qr_flutter - url: "https://pub.dartlang.org" + sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e + url: "https://pub.dev" source: hosted version: "4.0.0" receive_sharing_intent: dependency: "direct main" description: name: receive_sharing_intent - url: "https://pub.dartlang.org" + sha256: "912bebb551bce75a14098891fd750305b30d53eba0d61cc70cd9973be9866e8d" + url: "https://pub.dev" source: hosted version: "1.4.5" rxdart: dependency: "direct main" description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "5d22055fd443806c03ef24a02000637cf51eae49c2a0168d38a43fc166b0209c" + url: "https://pub.dev" source: hosted version: "0.27.5" share_plus: dependency: "direct main" description: name: share_plus - url: "https://pub.dartlang.org" + sha256: dac0dc7ee100c750b61cca65a2cb4fa2cba0a270481cf3f63f2ee3932d247c94 + url: "https://pub.dev" source: hosted version: "4.1.0" share_plus_linux: dependency: transitive description: name: share_plus_linux - url: "https://pub.dartlang.org" + sha256: "308853d0472048e4c9b58ccc7faee6937732dc9fee7ab8e09f28bcd8d00a7a03" + url: "https://pub.dev" source: hosted version: "3.0.0" share_plus_macos: dependency: transitive description: name: share_plus_macos - url: "https://pub.dartlang.org" + sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae" + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: "04e7c8398fdb776943bb61d7ff109c84db15d1adffaac06696fb46761939be47" + url: "https://pub.dev" source: hosted version: "3.0.3" share_plus_web: dependency: transitive description: name: share_plus_web - url: "https://pub.dartlang.org" + sha256: d53953fc009365d7256b55adeda1fff2d579057796649c7e29812c1efb442dd4 + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_windows: dependency: transitive description: name: share_plus_windows - url: "https://pub.dartlang.org" + sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4" + url: "https://pub.dev" source: hosted version: "3.0.1" shared_preferences: dependency: transitive description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" + url: "https://pub.dev" source: hosted version: "2.0.15" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: "3e128864b9cff21bdd5b3ad569953070a851d62901bee880bb052b1110b38007" + url: "https://pub.dev" source: hosted version: "2.0.13" shared_preferences_ios: dependency: transitive description: name: shared_preferences_ios - url: "https://pub.dartlang.org" + sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" + url: "https://pub.dev" source: hosted version: "2.1.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: "28aefc1261746e7bad3d09799496054beb84e8c4ffcdfed7734e17b4ada459a5" + url: "https://pub.dev" source: hosted version: "2.1.1" shared_preferences_macos: dependency: transitive description: name: shared_preferences_macos - url: "https://pub.dartlang.org" + sha256: fbb94bf296576f49be37a1496d5951796211a8db0aa22cc0d68c46440dad808c + url: "https://pub.dev" source: hosted version: "2.0.4" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 + url: "https://pub.dev" source: hosted version: "2.0.4" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: "97f7ab9a7da96d9cf19581f5de520ceb529548498bd6b5e0ccd02d68a0d15eba" + url: "https://pub.dev" source: hosted version: "2.1.1" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: "8ec607599dd0a78931a5114cdac7d609b6dbbf479a38acc9a6dba024b2a30ea0" + url: "https://pub.dev" source: hosted version: "1.3.2" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - url: "https://pub.dartlang.org" + sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 + url: "https://pub.dev" source: hosted version: "3.0.1" shelf_static: dependency: transitive description: name: shelf_static - url: "https://pub.dartlang.org" + sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c + url: "https://pub.dev" source: hosted version: "1.1.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc" + url: "https://pub.dev" source: hosted version: "1.0.2" showcaseview: dependency: "direct main" description: name: showcaseview - url: "https://pub.dartlang.org" + sha256: "09b534d806572135c38e06901de4b36b2bbd61739ec56c5fa9242d10748e19df" + url: "https://pub.dev" source: hosted version: "1.1.8" sky_engine: @@ -1095,261 +1244,298 @@ packages: dependency: transitive description: name: source_map_stack_trace - url: "https://pub.dartlang.org" + sha256: "8c463326277f68a628abab20580047b419c2ff66756fd0affd451f73f9508c11" + url: "https://pub.dev" source: hosted version: "2.1.0" source_maps: dependency: transitive description: name: source_maps - url: "https://pub.dartlang.org" + sha256: "52de2200bb098de739794c82d09c41ac27b2e42fd7e23cce7b9c74bf653c7296" + url: "https://pub.dev" source: hosted version: "0.10.10" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.0" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted - version: "1.2.0" + version: "1.2.1" test: dependency: transitive description: name: test - url: "https://pub.dartlang.org" + sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d + url: "https://pub.dev" source: hosted - version: "1.21.1" + version: "1.22.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.9" + version: "0.4.16" test_core: dependency: transitive description: name: test_core - url: "https://pub.dartlang.org" + sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" + url: "https://pub.dev" source: hosted - version: "0.4.13" + version: "0.4.20" timezone: dependency: transitive description: name: timezone - url: "https://pub.dartlang.org" + sha256: "57b35f6e8ef731f18529695bffc62f92c6189fac2e52c12d478dec1931afb66e" + url: "https://pub.dev" source: hosted version: "0.8.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "4f0d5f9bf7efba3da5a7ff03bd33cc898c84bac978c068e1c94483828e709592" + url: "https://pub.dev" source: hosted version: "6.1.5" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: "9e262cbec69233717d5198f4d0b0c4961fa027e3685ba425442c43c64f38bb9b" + url: "https://pub.dev" source: hosted version: "6.0.19" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" + url: "https://pub.dev" source: hosted version: "6.0.17" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" + url: "https://pub.dev" source: hosted version: "3.0.1" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 + url: "https://pub.dev" source: hosted version: "3.0.1" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "80b860b31a11ebbcbe51b8fe887efc204f3af91522f3b51bcda4622d276d2120" + url: "https://pub.dev" source: hosted version: "2.1.0" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" + url: "https://pub.dev" source: hosted version: "2.0.13" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 + url: "https://pub.dev" source: hosted version: "3.0.1" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "2469694ad079893e3b434a627970c33f2fa5adc46dfe03c9617546969a9a8afc" + url: "https://pub.dev" source: hosted version: "3.0.6" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" video_compress: dependency: "direct main" description: name: video_compress - url: "https://pub.dartlang.org" + sha256: e61292ee8733a7f1c11393d285df01f883e8d75d86a598da6d8cc9b9d662aa2d + url: "https://pub.dev" source: hosted version: "3.1.1" video_thumbnail: dependency: "direct main" description: name: video_thumbnail - url: "https://pub.dartlang.org" + sha256: "005bf7898bf6cddbf5f079e2618f3d3cb83dd2712714f0042b5a018c2b32e7d6" + url: "https://pub.dev" source: hosted version: "0.4.6" vm_service: dependency: transitive description: name: vm_service - url: "https://pub.dartlang.org" + sha256: e686ae49284939abc06972e25f634ccdb5007d5664c4dfa1995002e8b6aa27a9 + url: "https://pub.dev" source: hosted version: "8.3.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: e42dfcc48f67618344da967b10f62de57e04bae01d9d3af4c2596f3712a88c99 + url: "https://pub.dev" source: hosted version: "1.0.1" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd" + url: "https://pub.dev" source: hosted version: "2.2.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - url: "https://pub.dartlang.org" + sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + url: "https://pub.dev" source: hosted version: "1.2.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: ae195a03396e61a15a75b969f222ed7059ecd006d2fa52db48f63ba36dee44e7 + url: "https://pub.dev" source: hosted version: "2.10.1" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "2fae5e8b792f563bf0e45ea4b435e11a3a490ae1e96a4be4ed078ca99e239673" + url: "https://pub.dev" source: hosted version: "1.9.3" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: f085c3d595267185ab446169b6b17b5f6bc584395ff8c8623d7a379f6a869cc3 + url: "https://pub.dev" source: hosted version: "2.9.4" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f" + url: "https://pub.dev" source: hosted version: "0.2.0+2" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + url: "https://pub.dev" source: hosted version: "6.1.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" zxing2: dependency: transitive description: name: zxing2 - url: "https://pub.dartlang.org" + sha256: "4d7f5c4759968363995cadfd49a776ecb6390b55ccf55dc0fcc9832a9da2edec" + url: "https://pub.dev" source: hosted version: "0.1.0" sdks: - dart: ">=2.17.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.0.0" From 78045b1acf75682864bf76adadb2fc556b8792f0 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Wed, 8 Feb 2023 13:39:10 +0530 Subject: [PATCH 29/94] fix: padding updated fot tablet --- .../widgets/welcome_sceen_home.dart | 57 +++---------------- 1 file changed, 7 insertions(+), 50 deletions(-) diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 26ca8032..77c57b5a 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -106,7 +106,9 @@ class _WelcomeScreenHomeState extends State { children: [ Container( padding: EdgeInsets.symmetric( - horizontal: 30.toWidth), + horizontal: SizeConfig().isTablet(context) + ? 30.toWidth + : 0), child: Text( TextStrings().selectFiles, style: TextStyle( @@ -220,7 +222,10 @@ class _WelcomeScreenHomeState extends State { mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( - padding: EdgeInsets.only(left: 30.toWidth), + padding: EdgeInsets.only( + left: SizeConfig().isTablet(context) + ? 30.toWidth + : 0), child: Text( TextStrings().selectContacts, style: TextStyle( @@ -360,56 +365,8 @@ class _WelcomeScreenHomeState extends State { ), ), ), - // SizeConfig().isTablet(context) - // ? Container( - // height: SizeConfig().screenHeight, - // width: 100, - // child: SideBarWidget( - // isExpanded: false, - // ), - // ) - // : SizedBox(), ], ), - // SizeConfig().isTablet(context) - // ? Container( - // height: 100, - // width: SizeConfig().screenWidth - 100, - // child: Customheading(), - // ) - // : SizedBox(), - // SizeConfig().isTablet(context) - // ? Positioned( - // right: 80, - // top: 100, - // child: Container( - // height: 50, - // width: 50, - // decoration: BoxDecoration( - // borderRadius: BorderRadius.circular(25), - // color: Colors.black, - // ), - // child: Builder( - // builder: (context) { - // return InkWell( - // onTap: () { - // setState(() { - // isExpanded = !isExpanded; - // WelcomeScreenProvider().isExpanded = true; - // }); - - // Scaffold.of(context).openEndDrawer(); - // }, - // child: Icon( - // Icons.arrow_back_ios, - // color: Colors.white, - // ), - // ); - // }, - // ), - // ), - // ) - // : SizedBox(), ], ), ), From 7e9d892c79eaa8fc7fac3db0b64c39ddbd603ed6 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Fri, 10 Feb 2023 00:05:25 +0530 Subject: [PATCH 30/94] feat: download and upload services mapped to transfer History --- lib/data_models/file_entity.dart | 11 + lib/data_models/file_transfer.dart | 25 +- lib/data_models/file_transfer_object.dart | 3 +- .../labelled_circular_progress.dart | 3 +- .../history/transfer_history_screen.dart | 378 +++++++++++++----- .../history/widgets/filter_item_widget.dart | 2 +- .../welcome_screen/welcome_screen.dart | 2 +- lib/utils/app_utils.dart | 14 +- lib/view_models/file_transfer_provider.dart | 63 +-- lib/view_models/history_provider.dart | 137 ++++--- 10 files changed, 422 insertions(+), 216 deletions(-) diff --git a/lib/data_models/file_entity.dart b/lib/data_models/file_entity.dart index b1b2e880..5e939a24 100644 --- a/lib/data_models/file_entity.dart +++ b/lib/data_models/file_entity.dart @@ -1,5 +1,6 @@ import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_transfer_object.dart'; class FileEntity { final FileData? file; @@ -7,6 +8,12 @@ class FileEntity { final HistoryType? historyType; final String? atSign; final String? note; + final String transferId; + final FileTransferObject fileTransferObject; + + // to manage file upload + bool isUploading; + bool isUploaded; FileEntity({ this.file, @@ -14,5 +21,9 @@ class FileEntity { this.historyType, this.atSign, this.note, + required this.transferId, + required this.fileTransferObject, + this.isUploading = false, + this.isUploaded = false, }); } diff --git a/lib/data_models/file_transfer.dart b/lib/data_models/file_transfer.dart index f1fc8a81..89fa08dc 100644 --- a/lib/data_models/file_transfer.dart +++ b/lib/data_models/file_transfer.dart @@ -12,17 +12,18 @@ class FileTransfer { bool? isUpdate; bool? isWidgetOpen; String? notes; - FileTransfer({ - required this.url, - this.files, - this.expiry, - this.platformFiles, - this.date, - required this.key, - this.isUpdate = false, - this.isWidgetOpen = false, - this.notes, - }) { + String? fileEncryptionKey; + FileTransfer( + {required this.url, + this.files, + this.expiry, + this.platformFiles, + this.date, + required this.key, + this.isUpdate = false, + this.isWidgetOpen = false, + this.notes, + required this.fileEncryptionKey}) { this.expiry = expiry ?? DateTime.now().add(Duration(days: 6)); this.date = date ?? DateTime.now(); @@ -46,6 +47,7 @@ class FileTransfer { FileData file = FileData.fromJson(jsonDecode(element)); files!.add(file); }); + fileEncryptionKey = json['fileEncryptionKey']; notes = json['notes']; } @@ -63,6 +65,7 @@ class FileTransfer { }); data['expiry'] = this.expiry!.toUtc().toString(); data['date'] = this.date!.toUtc().toString(); + data['fileEncryptionKey'] = this.fileEncryptionKey; return data; } diff --git a/lib/data_models/file_transfer_object.dart b/lib/data_models/file_transfer_object.dart index 935a241e..8ad7e5de 100644 --- a/lib/data_models/file_transfer_object.dart +++ b/lib/data_models/file_transfer_object.dart @@ -8,7 +8,8 @@ class FileTransferObject { bool? sharedStatus; DateTime? date; String? error; - //// [atClientException] not saved in any key, only used to display the error in frontend + + /// [atClientException] not saved in any key, only used to display the error in frontend Exception? atClientException; FileTransferObject(this.transferId, this.fileEncryptionKey, this.fileUrl, diff --git a/lib/screens/common_widgets/labelled_circular_progress.dart b/lib/screens/common_widgets/labelled_circular_progress.dart index 19db0e0c..879dc873 100644 --- a/lib/screens/common_widgets/labelled_circular_progress.dart +++ b/lib/screens/common_widgets/labelled_circular_progress.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:flutter/material.dart'; import '../../utils/colors.dart'; @@ -18,7 +19,7 @@ class LabelledCircularProgressIndicator extends StatelessWidget { padding: EdgeInsets.only(left: 7), child: Text((value! * 100).toStringAsFixed(0) + '%', style: TextStyle( - fontSize: 10, + fontSize: 8.toFont, fontWeight: FontWeight.bold, color: ColorConstants.blueText, )), diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index c179a2fa..cd4fca1e 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -1,17 +1,32 @@ +import 'dart:io'; + +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/labelled_circular_progress.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; +import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; +import '../../data_models/file_entity.dart'; +import '../../services/backend_service.dart'; +import '../../services/navigation_service.dart'; +import '../../utils/text_strings.dart'; +import '../../view_models/file_progress_provider.dart'; +import '../../view_models/file_transfer_provider.dart'; +import '../common_widgets/confirmation_dialog.dart'; + class TransferHistoryScreen extends StatefulWidget { const TransferHistoryScreen({Key? key}) : super(key: key); @@ -168,6 +183,11 @@ class _TransferHistoryScreenState extends State { ), Expanded( child: ProviderHandler( + errorBuilder: (provider) { + return Center( + child: Text('Something went wrong'), + ); + }, load: (provider) async { await provider.getAllFiles(); }, @@ -265,6 +285,8 @@ class _TransferHistoryScreenState extends State { files[index].date!, )) : ''; + bool isDownloadExpired = + AppUtils.isFilesAvailableToDownload(files[index].date!); GlobalKey key = GlobalKey(); @@ -279,96 +301,154 @@ class _TransferHistoryScreenState extends State { top: 7, bottom: 6, ), - child: Row( - children: [ - Expanded( - flex: 2, - child: Text( - files[index].file?.name ?? '', - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textBlack, - ), - ), - ), - Expanded( - flex: 1, - child: Text( - AppUtils.getFileSizeString( - bytes: (files[index].file?.size ?? 0) - .toDouble(), - decimals: 2, - ), - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textGray, - ), - ), - ), - Expanded( - flex: 1, - child: Text( - date, - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textGrey, + child: InkWell( + onTap: () { + openFile(files[index]); + }, + child: Row( + children: [ + Expanded( + flex: 2, + child: Text( + files[index].file?.name ?? '', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), ), ), - ), - Expanded( - flex: 1, - child: Align( - alignment: Alignment.centerLeft, - child: SvgPicture.asset( - files[index].historyType == - HistoryType.received - ? AppVectors.icReceiveBorder - : AppVectors.icSendBorder, + Expanded( + flex: 1, + child: Text( + AppUtils.getFileSizeString( + bytes: (files[index].file?.size ?? 0) + .toDouble(), + decimals: 2, + ), + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textGray, + ), ), ), - ), - Expanded( - flex: 2, - child: Text( - files[index].atSign ?? '', - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textBlack, + Expanded( + flex: 1, + child: Text( + date, + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textGrey, + ), ), ), - ), - SizedBox(width: 8), - (files[index].note ?? '').isNotEmpty - ? InkWell( - onTap: () { - _onTapNoteIcon( - key: key, - note: files[index].note!, - ); - }, - child: SvgPicture.asset( - AppVectors.icNote, + files[index].historyType == HistoryType.received + ? Expanded( + flex: 1, + child: Align( + alignment: Alignment.centerLeft, + child: FutureBuilder( + future: isFilesAlreadyDownloaded( + files[index]), + builder: (_context, + AsyncSnapshot snapsot) { + if (snapsot.hasData) { + return SvgPicture.asset( + files[index].historyType == + HistoryType.received + ? AppVectors + .icReceiveBorder + : AppVectors.icSendBorder, + color: snapsot.data == true + ? Colors.green + : Color(0xFFEAA743), + ); + } else { + return SizedBox(); + } + }, + ), + ), + ) + : Expanded( + flex: 1, + child: Align( + alignment: Alignment.centerLeft, + child: SvgPicture.asset( + AppVectors.icSendBorder, + color: files[index].isUploaded + ? Colors.blue[200] + : Color(0xFFEAA743), + ), + ), ), - ) - : SizedBox(width: 16), - InkWell( - onTap: () { - _onTapMoreIcon(key); - }, - child: Padding( - padding: EdgeInsets.only(left: 8), - child: Icon( - Icons.more_vert_outlined, - size: 16, - color: ColorConstants.grey, + Expanded( + flex: 2, + child: Text( + files[index].atSign ?? '', + style: TextStyle( + fontSize: 9, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), ), ), - ), - ], + SizedBox(width: 8), + (files[index].note ?? '').isNotEmpty + ? InkWell( + onTap: () { + _onTapNoteIcon( + key: key, + note: files[index].note!, + ); + }, + child: SvgPicture.asset( + AppVectors.icNote, + ), + ) + : SizedBox(width: 16), + isDownloadExpired + ? Consumer( + builder: (_c, provider, _) { + var fileTransferProgress = + provider.receivedFileProgress[ + files[index].transferId]; + + if (fileTransferProgress != null && + fileTransferProgress.percent != + null) { + return Container( + width: 30, + height: 30, + margin: EdgeInsets.all(6), + child: + LabelledCircularProgressIndicator( + value: (fileTransferProgress + .percent! / + 100), + ), + ); + } else { + return InkWell( + onTap: () { + _onTapMoreIcon(key, files[index]); + }, + child: Padding( + padding: EdgeInsets.only(left: 8), + child: Icon( + Icons.more_vert_outlined, + size: 16, + color: ColorConstants.grey, + ), + ), + ); + } + }) + : SizedBox(), + ], + ), ), ), Container( @@ -387,12 +467,12 @@ class _TransferHistoryScreenState extends State { ); } - void _onTapMoreIcon(GlobalKey key) { + void _onTapMoreIcon(GlobalKey key, FileEntity fileEntity) async { RenderBox box = key.currentContext!.findRenderObject() as RenderBox; Offset position = box.localToGlobal(Offset.zero); final size = box.size; - showDialog( + await showDialog( barrierDismissible: true, useRootNavigator: true, context: context, @@ -433,35 +513,58 @@ class _TransferHistoryScreenState extends State { ), child: Row( children: [ - Expanded( - child: Center( - child: Text( - "Resend", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w500, - color: ColorConstants.textLightGrey, - ), - ), - ), - ), + fileEntity.historyType == HistoryType.send + ? Expanded( + child: Center( + child: InkWell( + onTap: () { + reuploadFileConfirmation(fileEntity); + }, + child: Text( + "Resend", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: ColorConstants.textLightGrey, + ), + ), + ), + ), + ) + : SizedBox(), Container( color: ColorConstants.sidebarTextUnselected, height: double.infinity, width: 1, ), - Expanded( - child: Center( - child: Text( - "Download", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w500, - color: ColorConstants.textLightGrey, - ), - ), - ), - ), + fileEntity.historyType == HistoryType.received + ? Expanded( + child: Center( + child: InkWell( + onTap: () { + if (Navigator.of(context).canPop()) { + Navigator.of(context).pop(); + } + + provider.downloadSingleFile( + fileEntity.transferId, + fileEntity.atSign, + false, + fileEntity.file!.name ?? '', + ); + }, + child: Text( + "Download", + style: TextStyle( + fontSize: 12, + fontWeight: FontWeight.w500, + color: ColorConstants.textLightGrey, + ), + ), + ), + ), + ) + : SizedBox(), ], ), ), @@ -551,4 +654,65 @@ class _TransferHistoryScreenState extends State { }, ); } + + reuploadFileConfirmation(FileEntity fileEntity) async { + await showDialog( + context: NavService.navKey.currentContext!, + builder: (context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.toWidth), + ), + content: + ConfirmationDialog(TextStrings.reUploadFileMsg, () async { + FileData fileData = FileData( + name: fileEntity.file!.name, + size: fileEntity.file!.size, + url: fileEntity.fileTransferObject.fileUrl); + + var sentItemIndex = + Provider.of(context, listen: false) + .sentHistory + .indexWhere((element) => + element.fileTransferObject?.transferId == + fileEntity.transferId); + FileHistory? sentHistory; + + if (sentItemIndex != -1) { + sentHistory = + Provider.of(context, listen: false) + .sentHistory[sentItemIndex]; + } else { + throw ('sent history not found'); + } + + await Provider.of(context, listen: false) + .reuploadFiles([fileData], 0, sentHistory); + })); + }); + } + + Future isFilesAlreadyDownloaded(FileEntity fileEntity) async { + bool isFilesAvailableOfline = false; + String path = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (fileEntity.file!.name ?? ''); + File test = File(path); + bool fileExists = await test.exists(); + + isFilesAvailableOfline = fileExists; + return isFilesAvailableOfline; + } + + openFile(FileEntity fileEntity) async { + String path = MixedConstants.RECEIVED_FILE_DIRECTORY + + Platform.pathSeparator + + (fileEntity.file!.name ?? ''); + + File test = File(path); + bool fileExists = await test.exists(); + if (fileExists) { + await OpenFile.open(path); + } + } } diff --git a/lib/screens/history/widgets/filter_item_widget.dart b/lib/screens/history/widgets/filter_item_widget.dart index 7f0159e2..a7c5ddf4 100644 --- a/lib/screens/history/widgets/filter_item_widget.dart +++ b/lib/screens/history/widgets/filter_item_widget.dart @@ -20,7 +20,7 @@ class FilterItemWidget extends StatelessWidget { return Container( height: 30, padding: const EdgeInsets.fromLTRB(12, 7, 8, 8), - margin: EdgeInsets.symmetric(vertical: 12.5,horizontal: 16), + margin: EdgeInsets.symmetric(vertical: 12.5, horizontal: 16), decoration: BoxDecoration( color: backgroundColor, border: Border.all( diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 8de40a75..7b310534 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -118,7 +118,7 @@ class _WelcomeScreenState extends State { backgroundColor: ColorConstants.scaffoldColor, floatingActionButtonLocation: FloatingActionButtonLocation.centerDocked, - floatingActionButton: Container ( + floatingActionButton: Container( width: 79, height: 79, decoration: BoxDecoration( diff --git a/lib/utils/app_utils.dart b/lib/utils/app_utils.dart index 967bb233..f73df040 100644 --- a/lib/utils/app_utils.dart +++ b/lib/utils/app_utils.dart @@ -1,6 +1,6 @@ import 'dart:math'; -class AppUtils{ +class AppUtils { static String getFileSizeString({required double bytes, int decimals = 0}) { const suffixes = ["b", "Kb", "Mb", "Gb", "Tb"]; var i = (log(bytes) / log(1024)).floor(); @@ -8,4 +8,14 @@ class AppUtils{ ' ' + suffixes[i]; } -} \ No newline at end of file + + static isFilesAvailableToDownload(String dateString) { + DateTime date = DateTime.parse(dateString); + var expiryDate = date.add(Duration(days: 6)); + if (expiryDate.difference(DateTime.now()) > Duration(seconds: 0)) { + return true; + } + + return false; + } +} diff --git a/lib/view_models/file_transfer_provider.dart b/lib/view_models/file_transfer_provider.dart index 02d5035d..b3311af3 100644 --- a/lib/view_models/file_transfer_provider.dart +++ b/lib/view_models/file_transfer_provider.dart @@ -362,36 +362,43 @@ class FileTransferProvider extends BaseModel { var uploadStatus = await FileTransferService.getInstance() .reuploadFiles([file], _sentHistory.fileTransferObject!); - if (uploadStatus is List && uploadStatus.isNotEmpty) { - if (uploadStatus[0].isUploaded!) { - var index = _sentHistory.fileDetails!.files! - .indexWhere((element) => element.name == _filesList[_index].name); - - if (index > -1) { - _sentHistory.fileDetails!.files![index].isUploaded = true; - } - - var i = _sentHistory.fileTransferObject!.fileStatus.indexWhere( - (element) => element.fileName == _filesList[_index].name); - if (i > -1) { - _sentHistory.fileTransferObject!.fileStatus[i].isUploaded = true; - } - - // sending file upload notification to every atsign - await Future.forEach(_sentHistory.sharedWith!, - (ShareStatus sharedWith) async { - await reSendFileNotification(_sentHistory, sharedWith.atsign!); - }); + if (uploadStatus.isNotEmpty && uploadStatus[0].isUploaded!) { + var index = _sentHistory.fileDetails!.files! + .indexWhere((element) => element.name == _filesList[_index].name); - Provider.of(NavService.navKey.currentContext!, - listen: false) - .updateFileSendingStatus( - isUploading: false, - isUploaded: true, - id: _sentHistory.fileDetails!.key, - filename: _filesList[_index].name, - ); + if (index > -1) { + _sentHistory.fileDetails!.files![index].isUploaded = true; + } + + var i = _sentHistory.fileTransferObject!.fileStatus.indexWhere( + (element) => element.fileName == _filesList[_index].name); + if (i > -1) { + _sentHistory.fileTransferObject!.fileStatus[i].isUploaded = true; } + + // sending file upload notification to every atsign + await Future.forEach(_sentHistory.sharedWith!, + (ShareStatus sharedWith) async { + await reSendFileNotification(_sentHistory, sharedWith.atsign!); + }); + + Provider.of(NavService.navKey.currentContext!, + listen: false) + .updateFileSendingStatus( + isUploading: false, + isUploaded: true, + id: _sentHistory.fileDetails!.key, + filename: _filesList[_index].name, + ); + } else { + Provider.of(NavService.navKey.currentContext!, + listen: false) + .updateFileSendingStatus( + isUploading: false, + isUploaded: false, + id: _sentHistory.fileDetails!.key, + filename: _filesList[_index].name, + ); } setStatus(RETRY_NOTIFICATION, Status.Done); } catch (e) { diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index cf1f7837..b0830269 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -1,26 +1,13 @@ import 'dart:convert'; import 'dart:io'; import 'package:at_client_mobile/at_client_mobile.dart'; -import 'package:at_commons/at_commons.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:atsign_atmosphere_pro/data_models/file_entity.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_object.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_apk.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_audios.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_documents.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_photos.dart'; import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_recent.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_unknowns.dart'; -import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_videos.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/apk.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/audios.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/documents.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/photos.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/unknowns.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/exception_service.dart'; import 'package:atsign_atmosphere_pro/services/file_transfer_service.dart'; @@ -36,10 +23,8 @@ import 'package:flutter/cupertino.dart'; // import 'package:at_client/src/stream/file_transfer_object.dart'; import 'package:flutter/services.dart'; -import 'package:at_client/src/service/notification_service.dart'; import 'package:provider/provider.dart'; -import 'file_download_checker.dart'; import 'trusted_sender_view_model.dart'; class HistoryProvider extends BaseModel { @@ -151,6 +136,13 @@ class HistoryProvider extends BaseModel { FileTransfer? fileTransfer = receivedHistoryLogs[i]; if ((fileTransfer.files?.length ?? 0) > 0) { for (int j = 0; j < fileTransfer.files!.length; j++) { + var fileTransferObject = FileTransferObject( + fileTransfer.key, + fileTransfer.fileEncryptionKey!, + fileTransfer.url, + '', + [], + ); listReceivedFile.add( FileEntity( file: fileTransfer.files![j], @@ -160,6 +152,9 @@ class HistoryProvider extends BaseModel { atSign: fileTransfer.sender, historyType: HistoryType.received, note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: fileTransferObject, ), ); } @@ -179,14 +174,16 @@ class HistoryProvider extends BaseModel { for (int j = 0; j < fileTransfer!.files!.length; j++) { listSentFile.add( FileEntity( - file: fileTransfer.files![j], - date: fileTransfer.date != null - ? fileTransfer.date.toString() - : '', - atSign: sentHistory[i].fileTransferObject?.sharedWith, - historyType: HistoryType.send, - note: fileTransfer.notes, - ), + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: sentHistory[i].fileTransferObject?.sharedWith, + historyType: HistoryType.send, + note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: sentHistory[i].fileTransferObject!), ); } } @@ -231,9 +228,17 @@ class HistoryProvider extends BaseModel { if (_historySearchText.isNotEmpty) { listFiles.forEach( - (element) { + //filter by atSign + (FileEntity element) { if ((element.atSign ?? '').contains(_historySearchText)) { resultsFilter.add(element); + } else { + // filter by file name + if (element.file!.name! + .toLowerCase() + .contains(_historySearchText)) { + resultsFilter.add(element); + } } }, ); @@ -771,10 +776,11 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = - await AtClientManager.getInstance().atClient.get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = await AtClientManager.getInstance() + .atClient + .get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); @@ -877,12 +883,12 @@ class HistoryProvider extends BaseModel { }); return FileTransfer( - url: fileTransferObject.fileUrl, - files: files, - date: fileTransferObject.date, - key: fileTransferObject.transferId, - notes: fileTransferObject.notes, - ); + url: fileTransferObject.fileUrl, + files: files, + date: fileTransferObject.date, + key: fileTransferObject.transferId, + notes: fileTransferObject.notes, + fileEncryptionKey: fileTransferObject.fileEncryptionKey); } updateFileSendingStatus( @@ -925,11 +931,11 @@ class HistoryProvider extends BaseModel { }); FileTransfer fileTransfer = FileTransfer( - key: fileTransferObject.transferId, - date: fileTransferObject.date, - files: files, - url: fileTransferObject.fileUrl, - ); + key: fileTransferObject.transferId, + date: fileTransferObject.date, + files: files, + url: fileTransferObject.fileUrl, + fileEncryptionKey: fileTransferObject.fileEncryptionKey); sharedWithAtsigns.forEach((atsign) { sthareStatus @@ -1058,38 +1064,40 @@ class HistoryProvider extends BaseModel { if (downloadPath == null) { throw Exception('downloadPath not found'); } - var atKey = AtKey() - ..key = transferId - ..sharedBy = sharedByAtSign; - var result = - await AtClientManager.getInstance().atClient.get(atKey).catchError((e) { - print('error in _downloadSingleFileFromWeb : $e'); - ExceptionService.instance.showGetExceptionOverlay(e); - return AtValue(); - }); - if (result == null) { - return []; - } FileTransferObject? fileTransferObject; + + var fileEntityIndex = allFiles + .indexWhere((FileEntity element) => element.transferId == transferId); + if (fileEntityIndex == -1) { + throw Exception('file object not found.'); + } + fileTransferObject = allFiles[fileEntityIndex].fileTransferObject; + String formattedFileUrl = fileTransferObject.fileUrl; + try { - var _jsonData = jsonDecode(result.value); - _jsonData['fileUrl'] = _jsonData['fileUrl'].replaceFirst('/archive', ''); - _jsonData['fileUrl'] = _jsonData['fileUrl'].replaceFirst('/zip', ''); - _jsonData['fileUrl'] = _jsonData['fileUrl'] + '/$fileName'; + formattedFileUrl = formattedFileUrl.replaceFirst('/archive', ''); + formattedFileUrl = formattedFileUrl.replaceFirst('/zip', ''); + formattedFileUrl = formattedFileUrl + '/$fileName'; - fileTransferObject = FileTransferObject.fromJson(_jsonData); - print('fileTransferObject.fileUrl ${fileTransferObject!.fileUrl}'); + print('fileTransferObject.fileUrl ${fileTransferObject.fileUrl}'); } on Exception catch (e) { throw Exception('json decode exception in download file ${e.toString()}'); } + updateFileTransferState( + transferId!, FileTransferProgress(FileState.download, 0, fileName, 0)); + var downloadedFiles = []; var tempDirectory = await Directory(downloadPath).createTemp('encrypted-files'); - var fileDownloadReponse = await FileTransferService.getInstance() - .downloadIndividualFile(fileTransferObject.fileUrl, tempDirectory.path, - fileName, transferId!); + var fileDownloadReponse = + await FileTransferService.getInstance().downloadIndividualFile( + formattedFileUrl, + tempDirectory.path, + fileName, + transferId, + ); if (fileDownloadReponse.isError) { throw Exception('download fail'); @@ -1294,10 +1302,11 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = - await AtClientManager.getInstance().atClient.get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = await AtClientManager.getInstance() + .atClient + .get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); From d74094699edbc822b4e4a607b8ffc1fae503cfb6 Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 10 Feb 2023 14:02:53 +0700 Subject: [PATCH 31/94] feat: update UI contact screen --- assets/svg/ic_activate.svg | 3 + assets/svg/ic_add.svg | 4 + assets/svg/ic_arrow.svg | 3 + assets/svg/ic_big_trust.svg | 3 + assets/svg/ic_big_trust_activated.svg | 3 + assets/svg/ic_block.svg | 3 + assets/svg/ic_contact_group.svg | 5 + assets/svg/ic_image.svg | 9 + assets/svg/ic_trash.svg | 3 + assets/svg/ic_trust.svg | 3 + lib/app.dart | 2 + .../common_widgets/app_bar_custom.dart | 2 +- lib/screens/common_widgets/avatar_widget.dart | 74 +++++ lib/screens/common_widgets/card_widget.dart | 55 ++++ .../gradient_outline_input_border.dart | 176 +++++++++++ .../gradient_text_field_widget.dart | 77 +++++ lib/screens/common_widgets/header_widget.dart | 150 ++++++++++ .../add_contact_screen.dart | 218 ++++++++++++++ .../blocked_contact_screen.dart | 280 ++++++++++++++++++ .../contact_detail_screen.dart | 260 ++++++++++++++++ .../contact_new_version/contact_screen.dart | 199 +++++++++++++ .../group_contact_screen.dart | 196 ++++++++++++ .../trusted_contact_screen.dart | 208 +++++++++++++ .../welcome_screen/welcome_screen.dart | 4 +- lib/utils/colors.dart | 5 + lib/utils/vectors.dart | 10 + lib/view_models/add_contact_provider.dart | 45 +++ pubspec.yaml | 8 +- 28 files changed, 2001 insertions(+), 7 deletions(-) create mode 100644 assets/svg/ic_activate.svg create mode 100644 assets/svg/ic_add.svg create mode 100644 assets/svg/ic_arrow.svg create mode 100644 assets/svg/ic_big_trust.svg create mode 100644 assets/svg/ic_big_trust_activated.svg create mode 100644 assets/svg/ic_block.svg create mode 100644 assets/svg/ic_contact_group.svg create mode 100644 assets/svg/ic_image.svg create mode 100644 assets/svg/ic_trash.svg create mode 100644 assets/svg/ic_trust.svg create mode 100644 lib/screens/common_widgets/avatar_widget.dart create mode 100644 lib/screens/common_widgets/card_widget.dart create mode 100644 lib/screens/common_widgets/gradient_outline_input_border.dart create mode 100644 lib/screens/common_widgets/gradient_text_field_widget.dart create mode 100644 lib/screens/common_widgets/header_widget.dart create mode 100644 lib/screens/contact_new_version/add_contact_screen.dart create mode 100644 lib/screens/contact_new_version/blocked_contact_screen.dart create mode 100644 lib/screens/contact_new_version/contact_detail_screen.dart create mode 100644 lib/screens/contact_new_version/contact_screen.dart create mode 100644 lib/screens/contact_new_version/group_contact_screen.dart create mode 100644 lib/screens/contact_new_version/trusted_contact_screen.dart create mode 100644 lib/view_models/add_contact_provider.dart diff --git a/assets/svg/ic_activate.svg b/assets/svg/ic_activate.svg new file mode 100644 index 00000000..fada1032 --- /dev/null +++ b/assets/svg/ic_activate.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_add.svg b/assets/svg/ic_add.svg new file mode 100644 index 00000000..73e8ce7f --- /dev/null +++ b/assets/svg/ic_add.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_arrow.svg b/assets/svg/ic_arrow.svg new file mode 100644 index 00000000..dde75b5f --- /dev/null +++ b/assets/svg/ic_arrow.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_big_trust.svg b/assets/svg/ic_big_trust.svg new file mode 100644 index 00000000..6578e037 --- /dev/null +++ b/assets/svg/ic_big_trust.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_big_trust_activated.svg b/assets/svg/ic_big_trust_activated.svg new file mode 100644 index 00000000..14c15f08 --- /dev/null +++ b/assets/svg/ic_big_trust_activated.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_block.svg b/assets/svg/ic_block.svg new file mode 100644 index 00000000..8385597a --- /dev/null +++ b/assets/svg/ic_block.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_contact_group.svg b/assets/svg/ic_contact_group.svg new file mode 100644 index 00000000..c24d2bf2 --- /dev/null +++ b/assets/svg/ic_contact_group.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_image.svg b/assets/svg/ic_image.svg new file mode 100644 index 00000000..e43c4ce2 --- /dev/null +++ b/assets/svg/ic_image.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/assets/svg/ic_trash.svg b/assets/svg/ic_trash.svg new file mode 100644 index 00000000..d4719184 --- /dev/null +++ b/assets/svg/ic_trash.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_trust.svg b/assets/svg/ic_trust.svg new file mode 100644 index 00000000..27103ea7 --- /dev/null +++ b/assets/svg/ic_trust.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/app.dart b/lib/app.dart index b553c55c..c070f41b 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,3 +1,4 @@ +import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/desktop_routes/desktop_routes.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; @@ -50,6 +51,7 @@ class _MyAppState extends State { ChangeNotifierProvider( create: (context) => SideBarProvider()), ChangeNotifierProvider(create: (context) => TrustedContactProvider()), + ChangeNotifierProvider(create: (context) => AddContactProvider()), ChangeNotifierProvider(create: (context) => NestedRouteProvider()), ChangeNotifierProvider(create: (context) => SwitchAtsignProvider()), ChangeNotifierProvider(create: (context) => FileDownloadChecker()), diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index 88aa02d4..2c0450dc 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -42,7 +42,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { child: Row( mainAxisSize: MainAxisSize.min, children: [ - Expanded( + Flexible( child: Text( title ?? '', textAlign: TextAlign.left, diff --git a/lib/screens/common_widgets/avatar_widget.dart b/lib/screens/common_widgets/avatar_widget.dart new file mode 100644 index 00000000..71ad2f8d --- /dev/null +++ b/lib/screens/common_widgets/avatar_widget.dart @@ -0,0 +1,74 @@ +import 'dart:typed_data'; + +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_flutter/widgets/custom_circle_avatar.dart'; +import 'package:at_contacts_group_flutter/widgets/contact_initial.dart'; +import 'package:flutter/material.dart'; + +class AvatarWidget extends StatefulWidget { + final AtContact contact; + final double? borderRadius; + final double size; + + const AvatarWidget({ + Key? key, + this.size = 40, + this.borderRadius, + required this.contact, + }) : super(key: key); + + @override + State createState() => _AvatarWidgetState(); +} + +class _AvatarWidgetState extends State { + String contactName = 'UG'; + Uint8List? image; + + @override + void initState() { + getNameAndImage(); + super.initState(); + } + + void getNameAndImage() { + try { + contactName = widget.contact.atSign ?? 'UG'; + + if (contactName[0] == '@') { + contactName = contactName.substring(1); + } + + if (widget.contact.tags != null && + widget.contact.tags?['image'] != null) { + List intList = widget.contact.tags!['image'].cast(); + image = Uint8List.fromList(intList); + } + } catch (e) { + contactName = 'UG'; + print('Error in getting image $e'); + } + } + + @override + Widget build(BuildContext context) { + return Container( + height: widget.size, + width: widget.size, + decoration: const BoxDecoration( + color: Colors.black, + shape: BoxShape.circle, + ), + child: image != null + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + borderRadius: widget.borderRadius, + size: widget.size, + initials: contactName, + ), + ); + } +} diff --git a/lib/screens/common_widgets/card_widget.dart b/lib/screens/common_widgets/card_widget.dart new file mode 100644 index 00000000..72ef70e7 --- /dev/null +++ b/lib/screens/common_widgets/card_widget.dart @@ -0,0 +1,55 @@ +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class CardButton extends StatelessWidget { + final String icon; + final String title; + final TextStyle? style; + final Function()? onTap; + final Color? backgroundColor; + final Color? borderColor; + + const CardButton({ + Key? key, + required this.icon, + required this.title, + this.style, + this.onTap, + this.backgroundColor, + this.borderColor, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: onTap, + child: Container( + height: 62, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: backgroundColor ?? ColorConstants.lightGrey, + border: Border.all( + color: borderColor ?? ColorConstants.grey, + ), + ), + padding: const EdgeInsets.symmetric(horizontal: 32), + child: Row( + children: [ + SvgPicture.asset(icon), + const SizedBox(width: 8), + Text( + title, + style: style ?? + TextStyle( + fontSize: 18, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ) + ], + ), + ), + ); + } +} diff --git a/lib/screens/common_widgets/gradient_outline_input_border.dart b/lib/screens/common_widgets/gradient_outline_input_border.dart new file mode 100644 index 00000000..280532cd --- /dev/null +++ b/lib/screens/common_widgets/gradient_outline_input_border.dart @@ -0,0 +1,176 @@ +import 'dart:math' as math; +import 'dart:ui'; + +import 'package:flutter/material.dart'; + +class GradientOutlineInputBorder extends InputBorder { + const GradientOutlineInputBorder({ + required this.gradient, + this.width = 1.0, + this.gapPadding = 4.0, + this.borderRadius = const BorderRadius.all(Radius.circular(4)), + }); + + final double width; + + final BorderRadius borderRadius; + + final Gradient gradient; + + final double gapPadding; + + @override + InputBorder copyWith({BorderSide? borderSide}) { + return this; + } + + @override + bool get isOutline => true; + + @override + EdgeInsetsGeometry get dimensions => EdgeInsets.all(width); + + @override + Path getInnerPath(Rect rect, {TextDirection? textDirection}) { + return Path() + ..addRRect( + borderRadius + .resolve(textDirection) + .toRRect(rect) + .deflate(borderSide.width), + ); + } + + @override + Path getOuterPath(Rect rect, {TextDirection? textDirection}) { + return Path()..addRRect(borderRadius.resolve(textDirection).toRRect(rect)); + } + + @override + void paint( + Canvas canvas, + Rect rect, { + double? gapStart, + double gapExtent = 0.0, + double gapPercentage = 0.0, + TextDirection? textDirection, + }) { + final paint = _getPaint(rect); + final outer = borderRadius.toRRect(rect); + final center = outer.deflate(borderSide.width / 2.0); + if (gapStart == null || gapExtent <= 0.0 || gapPercentage == 0.0) { + canvas.drawRRect(center, paint); + } else { + final extent = + lerpDouble(0.0, gapExtent + gapPadding * 2.0, gapPercentage)!; + switch (textDirection!) { + case TextDirection.rtl: + final path = _gapBorderPath( + canvas, + center, + math.max(0, gapStart + gapPadding - extent), + extent, + ); + canvas.drawPath(path, paint); + break; + + case TextDirection.ltr: + final path = _gapBorderPath( + canvas, + center, + math.max(0, gapStart - gapPadding), + extent, + ); + canvas.drawPath(path, paint); + break; + } + } + } + + @override + ShapeBorder scale(double t) { + return GradientOutlineInputBorder( + width: width * t, + borderRadius: borderRadius * t, + gradient: gradient, + ); + } + + Paint _getPaint(Rect rect) { + return Paint() + ..strokeWidth = width + ..shader = gradient.createShader(rect) + ..style = PaintingStyle.stroke; + } + + Path _gapBorderPath( + Canvas canvas, + RRect center, + double start, + double extent, + ) { + // When the corner radii on any side add up to be greater than the + // given height, each radius has to be scaled to not exceed the + // size of the width/height of the RRect. + final scaledRRect = center.scaleRadii(); + + final tlCorner = Rect.fromLTWH( + scaledRRect.left, + scaledRRect.top, + scaledRRect.tlRadiusX * 2.0, + scaledRRect.tlRadiusY * 2.0, + ); + final trCorner = Rect.fromLTWH( + scaledRRect.right - scaledRRect.trRadiusX * 2.0, + scaledRRect.top, + scaledRRect.trRadiusX * 2.0, + scaledRRect.trRadiusY * 2.0, + ); + final brCorner = Rect.fromLTWH( + scaledRRect.right - scaledRRect.brRadiusX * 2.0, + scaledRRect.bottom - scaledRRect.brRadiusY * 2.0, + scaledRRect.brRadiusX * 2.0, + scaledRRect.brRadiusY * 2.0, + ); + final blCorner = Rect.fromLTWH( + scaledRRect.left, + scaledRRect.bottom - scaledRRect.blRadiusY * 2.0, + scaledRRect.blRadiusX * 2.0, + scaledRRect.blRadiusX * 2.0, + ); + + const cornerArcSweep = math.pi / 2.0; + final tlCornerArcSweep = start < scaledRRect.tlRadiusX + ? math.asin((start / scaledRRect.tlRadiusX).clamp(-1.0, 1.0)) + : math.pi / 2.0; + + final path = Path() + ..addArc(tlCorner, math.pi, tlCornerArcSweep) + ..moveTo(scaledRRect.left + scaledRRect.tlRadiusX, scaledRRect.top); + + if (start > scaledRRect.tlRadiusX) { + path.lineTo(scaledRRect.left + start, scaledRRect.top); + } + + const trCornerArcStart = (3 * math.pi) / 2.0; + const trCornerArcSweep = cornerArcSweep; + if (start + extent < scaledRRect.width - scaledRRect.trRadiusX) { + path + ..relativeMoveTo(extent, 0) + ..lineTo(scaledRRect.right - scaledRRect.trRadiusX, scaledRRect.top) + ..addArc(trCorner, trCornerArcStart, trCornerArcSweep); + } else if (start + extent < scaledRRect.width) { + final dx = scaledRRect.width - (start + extent); + final sweep = math.acos(dx / scaledRRect.trRadiusX); + path.addArc(trCorner, trCornerArcStart + sweep, trCornerArcSweep - sweep); + } + + return path + ..moveTo(scaledRRect.right, scaledRRect.top + scaledRRect.trRadiusY) + ..lineTo(scaledRRect.right, scaledRRect.bottom - scaledRRect.brRadiusY) + ..addArc(brCorner, 0, cornerArcSweep) + ..lineTo(scaledRRect.left + scaledRRect.blRadiusX, scaledRRect.bottom) + ..addArc(blCorner, math.pi / 2.0, cornerArcSweep) + ..lineTo(scaledRRect.left, scaledRRect.top + scaledRRect.tlRadiusY); + } +} \ No newline at end of file diff --git a/lib/screens/common_widgets/gradient_text_field_widget.dart b/lib/screens/common_widgets/gradient_text_field_widget.dart new file mode 100644 index 00000000..1d0e0dc8 --- /dev/null +++ b/lib/screens/common_widgets/gradient_text_field_widget.dart @@ -0,0 +1,77 @@ +import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_outline_input_border.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class GradientTextFieldWidget extends StatefulWidget { + final String? hintText; + final TextStyle? hintTextStyle; + final TextEditingController? controller; + final Function(String value)? onchange; + final Function(String value)? onSubmitted; + final String? prefixText; + final TextStyle? prefixStyle; + + const GradientTextFieldWidget({ + Key? key, + this.hintText, + this.controller, + this.hintTextStyle, + this.onchange, + this.onSubmitted, + this.prefixText, + this.prefixStyle, + }) : super(key: key); + + @override + State createState() => + _GradientTextFieldWidgetState(); +} + +class _GradientTextFieldWidgetState extends State { + @override + Widget build(BuildContext context) { + return SizedBox( + height: 44, + child: TextFormField( + controller: widget.controller, + onChanged: (value) { + widget.onchange?.call(value); + }, + onFieldSubmitted: (value) { + widget.onSubmitted?.call(value); + }, + decoration: InputDecoration( + prefixText: widget.prefixText, + prefixStyle: widget.prefixStyle, + border: GradientOutlineInputBorder( + gradient: LinearGradient( + colors: [ + ColorConstants.orangeColor, + ColorConstants.yellow.withOpacity(0.65), + ], + ), + width: 2, + borderRadius: BorderRadius.circular(10), + ), + focusedBorder: GradientOutlineInputBorder( + gradient: LinearGradient( + colors: [ + ColorConstants.orangeColor, + ColorConstants.yellow.withOpacity(0.65), + ], + ), + width: 2, + borderRadius: BorderRadius.circular(10), + ), + hintText: widget.hintText, + hintStyle: widget.hintTextStyle ?? + TextStyle( + fontSize: 12, + fontWeight: FontWeight.w400, + color: ColorConstants.grey, + ), + ), + ), + ); + } +} diff --git a/lib/screens/common_widgets/header_widget.dart b/lib/screens/common_widgets/header_widget.dart new file mode 100644 index 00000000..5b7ef28f --- /dev/null +++ b/lib/screens/common_widgets/header_widget.dart @@ -0,0 +1,150 @@ +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class HeaderWidget extends StatefulWidget { + final Function()? onReloadCallback; + final TextEditingController? controller; + final Function(String)? onSearch; + final EdgeInsetsGeometry? margin; + + const HeaderWidget({ + Key? key, + this.onReloadCallback, + this.controller, + this.onSearch, + this.margin, + }) : super(key: key); + + @override + State createState() => _HeaderWidgetState(); +} + +class _HeaderWidgetState extends State { + bool isSearch = false; + + @override + Widget build(BuildContext context) { + return Container( + margin: widget.margin ?? const EdgeInsets.symmetric(horizontal: 28), + padding: const EdgeInsets.fromLTRB(14, 11, 8, 14), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: ColorConstants.textBoxBg, + ), + child: Row( + children: [ + _buildButton( + title: "Refresh", + icon: AppVectors.icReload, + onTap: widget.onReloadCallback, + ), + const SizedBox(width: 24), + Expanded( + child: _buildSearchWidget(), + ), + ], + ), + ); + } + + Widget _buildButton({ + String? title, + required String icon, + Function()? onTap, + }) { + return InkWell( + onTap: () { + onTap?.call(); + }, + child: Column( + children: [ + Text( + title ?? '', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + ), + const SizedBox(height: 5), + Container( + height: 48, + width: 48, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.grey, + ), + color: Colors.white, + ), + child: Center( + child: SvgPicture.asset( + icon, + color: ColorConstants.grey, + ), + ), + ) + ], + ), + ); + } + + Widget _buildSearchWidget() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Search", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: ColorConstants.sidebarTextUnselected, + ), + ), + const SizedBox(height: 5), + Container( + height: 48, + margin: const EdgeInsets.only(right: 12), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.only(left: 6, right: 8), + child: Row( + children: [ + Expanded( + child: TextField( + controller: widget.controller, + decoration: InputDecoration.collapsed( + hintText: 'Search History by atSign', + hintStyle: TextStyle( + color: ColorConstants.grey, + fontSize: 14, + fontWeight: FontWeight.w500, + fontStyle: FontStyle.italic, + ), + ), + onChanged: widget.onSearch, + ), + ), + SizedBox(width: 4), + SizedBox( + width: 20, + height: 20, + child: SvgPicture.asset( + AppVectors.icSearch, + ), + ), + ], + ), + ), + ], + ); + } +} diff --git a/lib/screens/contact_new_version/add_contact_screen.dart b/lib/screens/contact_new_version/add_contact_screen.dart new file mode 100644 index 00000000..c088df95 --- /dev/null +++ b/lib/screens/contact_new_version/add_contact_screen.dart @@ -0,0 +1,218 @@ +import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_text_field_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class AddContactScreen extends StatefulWidget { + const AddContactScreen({Key? key}) : super(key: key); + + @override + State createState() => _AddContactScreenState(); +} + +class _AddContactScreenState extends State { + late TextEditingController atSignController; + late TextEditingController nicknameController; + late AddContactProvider addContactProvider, state; + + @override + void initState() { + addContactProvider = context.read(); + atSignController = TextEditingController(); + nicknameController = TextEditingController(); + super.initState(); + addContactProvider.initData(); + } + + @override + Widget build(BuildContext context) { + return Consumer( + builder: (_c, provider, _) { + state = context.watch(); + return Scaffold( + backgroundColor: Colors.transparent, + resizeToAvoidBottomInset: false, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + margin: EdgeInsets.only(top: 120), + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + height: 2, + width: 45, + margin: const EdgeInsets.only(left: 27, top: 38), + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const SizedBox(height: 24), + Expanded( + child: Stack( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 27), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + "Add Contact", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + const SizedBox(height: 53), + GradientTextFieldWidget( + hintText: 'Enter atSign', + controller: atSignController, + prefixText: "@", + prefixStyle: TextStyle( + fontSize: 14, + color: Colors.black, + ), + onSubmitted: (value) { + _checkValid(); + }, + ), + Visibility( + visible: state.atSignError.isNotEmpty, + child: Padding( + padding: const EdgeInsets.only(top: 6), + child: Text( + state.atSignError, + style: const TextStyle( + color: Colors.red, + fontSize: 12, + fontWeight: FontWeight.w400, + ), + ), + ), + ), + const SizedBox(height: 24), + GradientTextFieldWidget( + hintText: 'Enter nickname', + controller: nicknameController, + onSubmitted: (value) { + _checkValid(); + }, + ), + const SizedBox(height: 44), + Container( + height: 1, + decoration: BoxDecoration( + color: ColorConstants.darkGray, + ), + ), + const SizedBox(height: 24), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text( + "atSign verified", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: Color(0xffCACACA), + ), + ), + const SizedBox(width: 10), + Icon( + Icons.check_circle_outlined, + color: state.isVerify + ? Colors.green + : ColorConstants.darkGray, + ) + ], + ), + ], + ), + ), + state.status['add_contact_status'] == Status.Loading + ? Center( + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), + ) + : SizedBox(), + ], + ), + ), + SafeArea( + top: false, + child: Padding( + padding: const EdgeInsets.fromLTRB(27, 0, 27, 40), + child: InkWell( + onTap: () async { + if (addContactProvider.isVerify) { + var response = await addContactProvider.addContact( + atSign: atSignController.text, + nickname: nicknameController.text, + ); + + if (response ?? false) { + Navigator.of(context).pop(true); + } + } + }, + child: Container( + height: 60, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(8), + ), + child: const Center( + child: Text( + "Create New Contact", + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ), + ) + ], + ), + ), + ), + ); + }, + ); + } + + void _checkValid() { + if (atSignController.text.isNotEmpty && + nicknameController.text.isNotEmpty) { + addContactProvider.changeVerifyStatus(true); + } else { + addContactProvider.changeVerifyStatus(false); + } + } +} diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart new file mode 100644 index 00000000..4d0c4359 --- /dev/null +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -0,0 +1,280 @@ +import 'package:at_contacts_flutter/models/contact_base_model.dart'; +import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class BlockedContactScreen extends StatefulWidget { + const BlockedContactScreen({Key? key}) : super(key: key); + + @override + State createState() => _BlockedContactScreenState(); +} + +class _BlockedContactScreenState extends State { + late ContactService _contactService; + late TextEditingController searchController; + + @override + void initState() { + super.initState(); + _contactService = ContactService(); + searchController = TextEditingController(); + + WidgetsBinding.instance.addPostFrameCallback((timeStamp) async { + await _contactService.fetchBlockContactList(); + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + height: MediaQuery.of(context).size.height - 120, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + _buildHeaderWidget(), + const SizedBox(height: 24), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 27), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + "Blocked atSigns", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + const SizedBox(height: 30), + HeaderWidget( + margin: EdgeInsets.only(bottom: 28), + onReloadCallback: () async { + await _contactService.fetchBlockContactList(); + searchController.clear(); + }, + controller: searchController, + onSearch: (value) { + setState(() {}); + }, + ), + Container( + height: 37, + padding: const EdgeInsets.only(left: 24), + alignment: Alignment.centerLeft, + decoration: BoxDecoration( + borderRadius: const BorderRadius.only( + topRight: Radius.circular(10), + topLeft: Radius.circular(10), + ), + color: ColorConstants.textBoxBg), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "atSign", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: ColorConstants.sidebarTextUnselected, + ), + ), + Icon( + Icons.arrow_downward_outlined, + color: ColorConstants.sidebarTextUnselected, + ) + ], + ), + ), + ], + ), + ), + Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 27), + child: _buildListBlocked(), + ), + ), + ], + ), + ), + ), + ); + } + + Widget _buildHeaderWidget() { + return Padding( + padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + child: Row( + children: [ + Container( + height: 2, + width: 45, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + ); + } + + _buildListBlocked() { + return StreamBuilder>( + stream: _contactService.blockedContactStream, + initialData: _contactService.baseBlockedList, + builder: (context, snapshot) { + if (snapshot.connectionState == ConnectionState.active) { + var listContact = snapshot.data!; + listContact = listContact + .where( + (element) => (element?.contact?.atSign ?? '') + .contains(searchController.text), + ) + .toList(); + return ListView.builder( + itemCount: listContact.length, + physics: ClampingScrollPhysics(), + padding: EdgeInsets.zero, + itemBuilder: (context, index) { + return Container( + height: 58, + color: Colors.white, + child: Column( + children: [ + Expanded( + child: Row( + children: [ + Expanded( + child: Padding( + padding: const EdgeInsets.only(left: 18), + child: Text( + listContact[index]?.contact?.atSign ?? '', + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(right: 24), + child: InkWell( + onTap: () async { + await _contactService.blockUnblockContact( + contact: listContact[index]!.contact!, + blockAction: false, + ); + }, + child: Container( + height: 31, + padding: const EdgeInsets.symmetric( + horizontal: 14, + vertical: 7, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(15), + color: ColorConstants.boxGrey, + border: Border.all( + color: ColorConstants.grey, + ), + ), + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Unblock?", + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + const SizedBox(width: 16), + const Icon( + Icons.block, + color: Colors.red, + size: 16, + ) + ], + ), + ), + ), + ) + ], + ), + ), + Container( + color: ColorConstants.textBoxBg, + height: 1, + width: double.infinity, + ) + ], + ), + ); + }, + ); + } else { + return const Center( + child: CircularProgressIndicator(), + ); + } + }, + ); + } +} diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart new file mode 100644 index 00000000..53239ec0 --- /dev/null +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -0,0 +1,260 @@ +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/avatar_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/card_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class ContactDetailScreen extends StatefulWidget { + final AtContact contact; + + const ContactDetailScreen({ + Key? key, + required this.contact, + }) : super(key: key); + + @override + State createState() => _ContactDetailScreenState(); +} + +class _ContactDetailScreenState extends State { + late TrustedContactProvider _trustedContactProvider; + late ContactService _contactService; + + bool isTrusted = false; + + @override + void initState() { + _trustedContactProvider = TrustedContactProvider(); + _contactService = ContactService(); + checkTrustedContact(); + super.initState(); + } + + void checkTrustedContact() { + _trustedContactProvider.trustedContacts.forEach((element) { + if (element.atSign == widget.contact.atSign) { + setState(() { + isTrusted = true; + }); + } + }); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + height: double.infinity, + width: double.infinity, + margin: EdgeInsets.only(top: 120), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Row( + children: [ + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + margin: const EdgeInsets.only(right: 27, top: 30), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + const SizedBox(height: 11), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 42), + child: Row( + children: [ + AvatarWidget( + size: 83, + borderRadius: 24, + contact: widget.contact, + ), + const SizedBox(width: 25), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, + ), + ), + const SizedBox(height: 5), + Flexible( + child: Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + ), + ), + ), + ], + ), + ) + ], + ), + ), + const SizedBox(height: 25), + Flexible( + child: SingleChildScrollView( + physics: ClampingScrollPhysics(), + padding: const EdgeInsets.symmetric( + horizontal: 36, + vertical: 25, + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + height: 63, + decoration: BoxDecoration( + gradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + Color(0xfff05e3f), + Color(0xffeaa743), + ], + ), + borderRadius: BorderRadius.circular(10), + ), + child: Center( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text( + "Transfer Now", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: Colors.white, + ), + ), + const SizedBox(width: 24), + SvgPicture.asset( + AppVectors.icArrow, + ), + ], + ), + ), + ), + const SizedBox(height: 46), + isTrusted + ? CardButton( + icon: AppVectors.icBigTrustActivated, + title: "Trusted", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.w500, + color: ColorConstants.orange, + ), + borderColor: ColorConstants.orange, + backgroundColor: + ColorConstants.orange.withOpacity(0.2), + onTap: () async { + await _trustedContactProvider + .removeTrustedContacts(widget.contact); + setState(() { + isTrusted = false; + }); + }, + ) + : CardButton( + icon: AppVectors.icTrust, + title: "Add To Trusted", + onTap: () async { + await _trustedContactProvider + .addTrustedContacts(widget.contact); + setState(() { + isTrusted = true; + }); + }, + ), + const SizedBox(height: 25), + CardButton( + icon: AppVectors.icTrash, + title: "Delete", + onTap: () async { + await _contactService.deleteAtSign( + atSign: widget.contact.atSign!, + ); + Navigator.of(context).pop(true); + }, + ), + const SizedBox(height: 25), + CardButton( + icon: AppVectors.icBlock, + title: "Block", + onTap: () async { + await _contactService.blockUnblockContact( + contact: widget.contact, + blockAction: true, + ); + Navigator.of(context).pop(true); + }, + ), + const SizedBox(height: 25), + ], + ), + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart new file mode 100644 index 00000000..9e2bf444 --- /dev/null +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -0,0 +1,199 @@ +import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/add_contact_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/blocked_contact_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/group_contact_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/trusted_contact_screen.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; + +class ContactScreen extends StatefulWidget { + const ContactScreen({Key? key}) : super(key: key); + + @override + State createState() => _ContactScreenState(); +} + +class _ContactScreenState extends State { + late TrustedContactProvider trustedProvider; + late GroupService _groupService; + + @override + void initState() { + trustedProvider = context.read(); + _groupService = GroupService(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBarCustom( + height: 130, + title: "Contacts", + description: '${_groupService.listContact.length}', + suffixIcon: Padding( + padding: const EdgeInsets.only(right: 30), + child: InkWell( + onTap: () async { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return AddContactScreen(); + }, + ); + if (result == true) { + reloadPage(); + } + }, + child: SvgPicture.asset( + AppVectors.icAdd, + ), + ), + ), + ), + body: buildBody(), + ); + } + + Widget buildBody() { + return Column( + children: [ + Padding( + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Row( + children: [ + _buildHeaderItem( + title: 'Blocked atSign', + icon: AppVectors.icBlock, + onTap: () async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return BlockedContactScreen(); + }, + ); + reloadPage(); + }, + ), + _buildHeaderItem( + title: 'Trusted Senders', + icon: AppVectors.icTrust, + onTap: () async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return TrustedContactScreen(); + }, + ); + reloadPage(); + }, + ), + _buildHeaderItem( + title: 'My Groups', + icon: AppVectors.icContactGroup, + onTap: () { + return showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return GroupContactScreen(); + }, + ); + }, + ), + ], + ), + ), + Expanded( + child: ListContactScreen( + contactsTrusted: trustedProvider.trustedContacts, + onTapContact: (contact) async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return ContactDetailScreen( + contact: contact, + ); + }, + ); + + reloadPage(); + }, + ), + ), + SizedBox(height: 80), + ], + ); + } + + Widget _buildHeaderItem({ + required String title, + required String icon, + required Function onTap, + }) { + return Expanded( + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 15), + child: InkWell( + onTap: () { + onTap.call(); + }, + child: Container( + padding: EdgeInsets.symmetric(horizontal: 4, vertical: 12), + decoration: BoxDecoration( + color: ColorConstants.fadedGreyN, + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(8), + ), + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset(icon), + SizedBox(height: 8), + Text( + title, + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + textAlign: TextAlign.center, + ) + ], + ), + ), + ), + ), + ); + } + + void reloadPage() async { + await Future.delayed(Duration(milliseconds: 500), () async { + await _groupService.fetchGroupsAndContacts(); + setState(() {}); + }); + } +} diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart new file mode 100644 index 00000000..7dd7aa3f --- /dev/null +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -0,0 +1,196 @@ +import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; +import 'package:at_contacts_group_flutter/screens/new_group/create_group.dart'; +import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class GroupContactScreen extends StatefulWidget { + const GroupContactScreen({Key? key}) : super(key: key); + + @override + State createState() => _GroupContactScreenState(); +} + +class _GroupContactScreenState extends State { + late GroupService groupService; + late TrustedContactProvider trustedProvider; + + @override + void initState() { + groupService = GroupService(); + trustedProvider = context.read(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + height: MediaQuery.of(context).size.height - 120, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + child: Row( + children: [ + Container( + height: 2, + width: 45, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 24), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Padding( + padding: EdgeInsets.only(left: 27), + child: Text( + "My Groups", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + const SizedBox(height: 30), + Expanded( + child: ListContactScreen( + showGroups: true, + showContacts: false, + isHiddenAlpha: true, + onTapGroup: (group) async { + WidgetsBinding.instance + .addPostFrameCallback((_) async { + groupService.groupViewSink.add(group); + }); + + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => GroupView( + group: group, + ), + ), + ); + }, + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.only(bottom: 24, top: 18), + child: InkWell( + onTap: () async { + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (_) => CreateGroupScreen( + trustContacts: + trustedProvider.trustedContacts, + ), + ), + ); + + if (result == true) { + await groupService.fetchGroupsAndContacts(); + setState(() {}); + } + }, + child: Container( + height: 67, + margin: const EdgeInsets.symmetric(horizontal: 27), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + gradient: LinearGradient( + colors: [ + const Color(0xfff05e3f), + const Color(0xffeaa743).withOpacity(0.65), + ], + ), + ), + child: const Center( + child: Text( + "Create Group", + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ), + ), + ], + ), + ) + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart new file mode 100644 index 00000000..ac0f22dd --- /dev/null +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -0,0 +1,208 @@ +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/screens/new_version/widget/single_contact_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class TrustedContactScreen extends StatefulWidget { + const TrustedContactScreen({Key? key}) : super(key: key); + + @override + State createState() => _TrustedContactScreenState(); +} + +class _TrustedContactScreenState extends State { + late TrustedContactProvider provider; + late TextEditingController searchController; + + List trustedContacts = []; + + @override + void initState() { + provider = context.read(); + searchController = TextEditingController(); + super.initState(); + trustedContacts = provider.trustedContacts; + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + margin: EdgeInsets.only(top: 120), + height: double.infinity, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + _buildHeaderWidget(), + const SizedBox(height: 24), + Padding( + padding: const EdgeInsets.symmetric(horizontal: 27), + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Text( + "Trusted Senders", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + const SizedBox(height: 30), + Container( + height: 48, + margin: const EdgeInsets.only(right: 12), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.symmetric(horizontal: 12), + child: Row( + children: [ + Expanded( + child: TextField( + controller: searchController, + onChanged: (value) { + setState(() { + trustedContacts = provider.trustedContacts + .where((element) => (element.atSign ?? '') + .contains(value)) + .toList(); + }); + }, + decoration: InputDecoration.collapsed( + hintText: 'Search by atSign or nickname', + hintStyle: TextStyle( + color: ColorConstants.grey, + fontSize: 14, + fontWeight: FontWeight.w500, + fontStyle: FontStyle.italic, + ), + ), + // onChanged: widget.onSearch, + ), + ), + SizedBox( + width: 20, + height: 20, + child: Icon( + Icons.search, + color: ColorConstants.grey, + ), + ), + ], + ), + ), + const SizedBox(height: 24), + ], + ), + ), + Expanded( + child: Consumer( + builder: (context, myProvider, child) { + return Scrollbar( + child: SingleContactWidget( + contacts: trustedContacts, + onTapContact: (contact) async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return Padding( + padding: const EdgeInsets.only(top: 120), + child: ContactDetailScreen( + contact: contact, + ), + ); + }, + ); + }, + ), + ); + }, + ), + ), + ], + ), + ), + ), + ); + } + + Widget _buildHeaderWidget() { + return Padding( + padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + child: Row( + children: [ + Container( + height: 2, + width: 45, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 7b310534..c90afe83 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -1,7 +1,7 @@ -import 'package:at_contacts_flutter/screens/contacts_screen.dart'; import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/transfer_history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; @@ -101,7 +101,7 @@ class _WelcomeScreenState extends State { static List _bottomSheetWidgetOptions = [ WelcomeScreenHome(), - ContactsScreen(), + ContactScreen(), MyFilesScreen(), TransferHistoryScreen(), SettingsScreen() diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 8e73c4f1..2301abe9 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -42,6 +42,11 @@ class ColorConstants { static const Color fadedGreyN = Color(0xFFF1F1F1); static const Color dividerGrey = Color(0xFFD9D9D9); static const Color grey = Color(0xFF939393); + static const Color orange = Color(0xFFF07C50); + static const Color lightGrey = Color(0xFFF1F1F1); + static const Color boxGrey = Color(0xFFEFEFEF); + static const Color darkGray = Color(0xFFC0C0C0); + static const Color buttonGrey = Color(0xFFC7C7C7); static const Color sidebarTextUnselected = Color(0xFFA4A4A5); static const Color sidebarTextSelected = Color(0xFF000000); diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index 125351d7..dcde9d8e 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -13,4 +13,14 @@ class AppVectors { static String icReceiveBorder = '$_basePath/ic_receive_border.svg'; static String icSendBorder = '$_basePath/ic_send_border.svg'; static String icNote = '$_basePath/ic_note.svg'; + static String icActivate = '$_basePath/ic_activate.svg'; + static String icAdd = '$_basePath/ic_add.svg'; + static String icBlock = '$_basePath/ic_block.svg'; + static String icContactGroup = '$_basePath/ic_contact_group.svg'; + static String icTrust = '$_basePath/ic_trust.svg'; + static String icBigTrust = '$_basePath/ic_big_trust.svg'; + static String icBigTrustActivated = '$_basePath/ic_big_trust_activated.svg'; + static String icTrash = '$_basePath/ic_trash.svg'; + static String icArrow = '$_basePath/ic_arrow.svg'; + static String icImage = '$_basePath/ic_image.svg'; } diff --git a/lib/view_models/add_contact_provider.dart b/lib/view_models/add_contact_provider.dart new file mode 100644 index 00000000..04df454e --- /dev/null +++ b/lib/view_models/add_contact_provider.dart @@ -0,0 +1,45 @@ +import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; + +class AddContactProvider extends BaseModel { + String addContactStatus = 'add_contact_status'; + ContactService contactService = ContactService(); + bool isVerify = false; + String atSignError = ''; + + void initData() { + contactService.resetData(); + isVerify = false; + } + + void changeVerifyStatus(bool verify) { + if (verify) atSignError = ''; + isVerify = verify; + notifyListeners(); + } + + Future addContact({ + required String atSign, + required String nickname, + }) async { + setStatus(addContactStatus, Status.Loading); + try { + await Future.delayed(Duration(seconds: 2)); + var response = await contactService.addAtSign( + atSign: atSign, + nickName: nickname, + ); + + if (response && (contactService.checkAtSign ?? false)) { + setStatus(addContactStatus, Status.Done); + return true; + } else { + atSignError = contactService.getAtSignError; + setStatus(addContactStatus, Status.Done); + } + } catch (e) { + setStatus(addContactStatus, Status.Error); + } + return null; + } +} diff --git a/pubspec.yaml b/pubspec.yaml index ae1a3982..3ac09218 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -54,7 +54,7 @@ dependencies: webview_flutter: ^3.0.4 http: ^0.13.4 package_info_plus: ^1.4.2 - fluttertoast: ^8.0.9 + fluttertoast: 8.1.2 file_selector: ^0.8.3 file_selector_macos: ^0.8.2 carousel_slider: ^4.0.0 @@ -85,9 +85,9 @@ dependency_overrides: biometric_storage: ^4.1.3 at_contacts_group_flutter: git: - url: https://github.com/atsign-foundation/at_widgets.git - path: at_contacts_group_flutter - ref: trunk + url: https://github.com/atsign-foundation/at_widgets + path: packages/at_contacts_group_flutter + ref: feature/new-version-contacts-group at_backupkey_flutter: git: url: https://github.com/atsign-foundation/at_widgets.git From 72f16fe156995c376dddc20d6deee26b64d44b3b Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 15 Feb 2023 15:02:54 +0700 Subject: [PATCH 32/94] feat: update contact screen --- .../add_contact_screen.dart | 10 +- .../contact_detail_screen.dart | 76 ++- .../contact_new_version/contact_screen.dart | 24 +- .../history/transfer_history_screen.dart | 17 +- lib/screens/my_files/my_files_screen.dart | 126 +++-- lib/screens/settings/settings_screen.dart | 177 +++--- .../settings/widgets/settings_buttons.dart | 4 +- .../welcome_screen/welcome_screen.dart | 189 +++---- .../widgets/bottom_navigation_widget.dart | 86 +++ .../widgets/welcome_sceen_home.dart | 521 +++++++++--------- lib/view_models/add_contact_provider.dart | 1 + .../welcome_screen_view_model.dart | 6 + 12 files changed, 670 insertions(+), 567 deletions(-) create mode 100644 lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart diff --git a/lib/screens/contact_new_version/add_contact_screen.dart b/lib/screens/contact_new_version/add_contact_screen.dart index c088df95..bd85fd9a 100644 --- a/lib/screens/contact_new_version/add_contact_screen.dart +++ b/lib/screens/contact_new_version/add_contact_screen.dart @@ -129,11 +129,10 @@ class _AddContactScreenState extends State { mainAxisSize: MainAxisSize.min, children: [ const Text( - "atSign verified", + "atSign valid", style: TextStyle( fontSize: 14, fontWeight: FontWeight.w500, - color: Color(0xffCACACA), ), ), const SizedBox(width: 10), @@ -181,7 +180,9 @@ class _AddContactScreenState extends State { height: 60, width: double.infinity, decoration: BoxDecoration( - color: Colors.black, + color: !state.isVerify + ? ColorConstants.buttonGrey + : Colors.black, borderRadius: BorderRadius.circular(8), ), child: const Center( @@ -208,8 +209,7 @@ class _AddContactScreenState extends State { } void _checkValid() { - if (atSignController.text.isNotEmpty && - nicknameController.text.isNotEmpty) { + if (atSignController.text.isNotEmpty) { addContactProvider.changeVerifyStatus(true); } else { addContactProvider.changeVerifyStatus(false); diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index 53239ec0..d37f3c73 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -1,10 +1,12 @@ import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/avatar_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/card_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -23,12 +25,14 @@ class ContactDetailScreen extends StatefulWidget { class _ContactDetailScreenState extends State { late TrustedContactProvider _trustedContactProvider; late ContactService _contactService; + late WelcomeScreenProvider _welcomeScreenProvider; bool isTrusted = false; @override void initState() { _trustedContactProvider = TrustedContactProvider(); + _welcomeScreenProvider = WelcomeScreenProvider(); _contactService = ContactService(); checkTrustedContact(); super.initState(); @@ -158,36 +162,48 @@ class _ContactDetailScreenState extends State { child: Column( mainAxisSize: MainAxisSize.min, children: [ - Container( - height: 63, - decoration: BoxDecoration( - gradient: const LinearGradient( - begin: Alignment.topLeft, - end: Alignment.bottomRight, - colors: [ - Color(0xfff05e3f), - Color(0xffeaa743), - ], + InkWell( + onTap: () { + Navigator.of(context).pop(false); + _welcomeScreenProvider.selectedContacts = [ + GroupContactsModel( + contactType: ContactsType.CONTACT, + contact: widget.contact, + ), + ]; + _welcomeScreenProvider.changeBottomNavigationIndex(0); + }, + child: Container( + height: 63, + decoration: BoxDecoration( + gradient: const LinearGradient( + begin: Alignment.topLeft, + end: Alignment.bottomRight, + colors: [ + ColorConstants.orangeColor, + ColorConstants.yellow, + ], + ), + borderRadius: BorderRadius.circular(10), ), - borderRadius: BorderRadius.circular(10), - ), - child: Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - "Transfer Now", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w700, - color: Colors.white, + child: Center( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + const Text( + "Transfer Now", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: Colors.white, + ), ), - ), - const SizedBox(width: 24), - SvgPicture.asset( - AppVectors.icArrow, - ), - ], + const SizedBox(width: 24), + SvgPicture.asset( + AppVectors.icArrow, + ), + ], + ), ), ), ), @@ -231,7 +247,7 @@ class _ContactDetailScreenState extends State { await _contactService.deleteAtSign( atSign: widget.contact.atSign!, ); - Navigator.of(context).pop(true); + Navigator.of(context).pop(); }, ), const SizedBox(height: 25), @@ -243,7 +259,7 @@ class _ContactDetailScreenState extends State { contact: widget.contact, blockAction: true, ); - Navigator.of(context).pop(true); + Navigator.of(context).pop(); }, ), const SizedBox(height: 25), diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index 9e2bf444..fce04d04 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -7,6 +7,7 @@ import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail import 'package:atsign_atmosphere_pro/screens/contact_new_version/group_contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/trusted_contact_screen.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; @@ -61,7 +62,21 @@ class _ContactScreenState extends State { ), ), ), - body: buildBody(), + body: Stack( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.welcomeBackground, + ), + fit: BoxFit.fill, + ), + ), + ), + buildBody(), + ], + ), ); } @@ -126,7 +141,7 @@ class _ContactScreenState extends State { child: ListContactScreen( contactsTrusted: trustedProvider.trustedContacts, onTapContact: (contact) async { - await showModalBottomSheet( + final result = await showModalBottomSheet( context: context, isScrollControlled: true, useRootNavigator: true, @@ -137,8 +152,9 @@ class _ContactScreenState extends State { ); }, ); - - reloadPage(); + if (result != false) { + reloadPage(); + } }, ), ), diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index cd4fca1e..c4b22528 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -11,6 +11,7 @@ import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:flutter/material.dart'; @@ -53,7 +54,21 @@ class _TransferHistoryScreenState extends State { height: 130, title: "Transfer History", ), - body: buildBody(), + body: Stack( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.welcomeBackground, + ), + fit: BoxFit.fill, + ), + ), + ), + buildBody(), + ], + ), ); } diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 1e224dbe..990b420a 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -1,12 +1,14 @@ -import 'dart:math'; +import 'dart:io'; import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; @@ -47,7 +49,21 @@ class _MyFilesScreenState extends State { title: "My Files", description: '${provider.allFiles.length}', ), - body: buildBody(), + body: Stack( + children: [ + Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage( + ImageConstants.welcomeBackground, + ), + fit: BoxFit.fill, + ), + ), + ), + buildBody(), + ], + ), ); } @@ -56,13 +72,17 @@ class _MyFilesScreenState extends State { children: [ OptionHeaderWidget( controller: searchController, - onSearch: (content){ - + onSearch: (content) { + provider.setFileSearchText(content); }, onReloadCallback: () async { await provider.getMyFilesRecords(); await provider.getAllFiles(); }, + searchOffCallBack: () { + searchController.clear(); + provider.setFileSearchText(''); + }, filterWidget: Consumer( builder: (context, provider, _) { return DropdownButtonHideUnderline( @@ -179,7 +199,15 @@ class _MyFilesScreenState extends State { functionName: 'all_files', showError: false, successBuilder: (provider) { - return (provider.displayFiles.isEmpty) + final listFile = provider.displayFiles + .where( + (element) => (element.fileName ?? '').contains( + provider.fileSearchText, + ), + ) + .toList(); + + return (listFile.isEmpty) ? Center( child: Text( TextStrings().noFilesRecieved, @@ -191,15 +219,24 @@ class _MyFilesScreenState extends State { ) : Scrollbar( child: ListView.builder( - itemCount: provider.displayFiles.length, - physics: ClampingScrollPhysics(), + itemCount: listFile.length, + physics: AlwaysScrollableScrollPhysics(), padding: EdgeInsets.only( - top: 24.toHeight, left: 28, right: 28), + top: 24.toHeight, + left: 28, + right: 28, + ), itemBuilder: (context, index) { return InkWell( onTap: () async { await openFilePath( - provider.displayFiles[index].filePath!, + listFile[index].filePath!, + ); + }, + onLongPress: () { + deleteFile( + listFile[index].filePath!, + fileTransferId: listFile[index].fileTransferId, ); }, child: Container( @@ -224,7 +261,7 @@ class _MyFilesScreenState extends State { children: [ Flexible( child: Text( - "${provider.displayFiles[index].fileName}", + "${listFile[index].fileName}", maxLines: 2, style: TextStyle( color: ColorConstants.grayText, @@ -236,9 +273,7 @@ class _MyFilesScreenState extends State { SizedBox(height: 2), Text( AppUtils.getFileSizeString( - bytes: provider - .displayFiles[index].size ?? - 0, + bytes: listFile[index].size ?? 0, decimals: 2, ), style: TextStyle( @@ -266,51 +301,26 @@ class _MyFilesScreenState extends State { ); } - Widget fileCard(String? title, String? filePath, {String? fileTransferId}) { - return InkWell( - onLongPress: () { - // deleteFile(filePath!, fileTransferId: fileTransferId); - }, - child: Column( - children: [ - filePath != null - ? Container( - width: 80.toHeight, - height: 80.toHeight, - color: Colors.purple, - // child: thumbnail(filePath.split('.').last, filePath), - ) - : Container( - width: 80.toHeight, - height: 80.toHeight, - child: ClipRect( - child: Image.asset( - ImageConstants.emptyTrustedSenders, - fit: BoxFit.fill, - ), - ), - ), - title != null - ? Container( - width: 100.toHeight, - height: 30.toHeight, - child: Padding( - padding: const EdgeInsets.only(top: 5.0), - child: Text( - title, - style: TextStyle( - color: Color(0xFF8A8E95), - fontSize: 12.toFont, - fontWeight: FontWeight.normal, - ), - textAlign: TextAlign.center, - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - ) - : SizedBox() - ], + deleteFile(String filePath, {String? fileTransferId}) async { + await showModalBottomSheet( + context: NavService.navKey.currentContext!, + backgroundColor: Colors.white, + builder: (context) => EditBottomSheet( + onConfirmation: () async { + var file = File(filePath); + if (await file.exists()) { + file.deleteSync(); + } + if (fileTransferId != null) { + await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .removeParticularFile(fileTransferId, + filePath.split(Platform.pathSeparator).last); + } + await provider.getAllFiles(); + }, + deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, ), ); } diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 4490e546..634ef008 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -3,6 +3,7 @@ import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; @@ -17,7 +18,6 @@ import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; - class SettingsScreen extends StatefulWidget { const SettingsScreen({Key? key}) : super(key: key); @@ -83,16 +83,21 @@ class _SettingsScreenState extends State { SizeConfig().init(context); return Scaffold( extendBodyBehindAppBar: true, - appBar: (SizeConfig().isTablet(context) + appBar: SizeConfig().isTablet(context) ? null - : CustomAppBar( + : AppBarCustom( + height: 130, + title: "Settings", + ), + /*CustomAppBar( showMenu: false, showBackButton: true, showLeadingicon: true, showTrailingButton: false, showTitle: true, showClosedBtnText: false, - title: 'Settings')), + title: 'Settings', + ),*/ extendBody: true, drawerScrimColor: Colors.transparent, endDrawer: SideBarWidget( @@ -111,93 +116,83 @@ class _SettingsScreenState extends State { ), ), SafeArea( - child: Padding( - padding: const EdgeInsets.all(28.0), - child: ListView( - children: [ - Text( - 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', - style: CustomTextStyles.black12, - ), - SizedBox( - height: 28, - ), - SettingsButton( - buttonText: optionTitle[0], - onPressed: switchAtsign, - image: optionIcons[0], - ), - SizedBox( - height: 12, - ), - SettingsButton( - buttonText: optionTitle[1], - onPressed: () async { - BackupKeyWidget( - atsign: AtClientManager.getInstance() - .atClient - .getCurrentAtSign()!, - ).showBackupDialog(context); - }, - image: optionIcons[1], - ), - Divider( - height: 58, - color: ColorConstants.dividerGrey, - ), - SettingsButton( - buttonText: optionTitle[2], - onPressed: () { - Navigator.pushNamed( - context, - Routes.FAQ_SCREEN, - ); - }, - image: optionIcons[2], - ), - SizedBox( - height: 12, - ), - SettingsButton( - buttonText: optionTitle[3], - onPressed: () async { - await launchUrl(Uri( - scheme: 'mailto', path: 'atmospherepro@atsign.com')); - }, - image: optionIcons[3], - ), - SizedBox( - height: 12, - ), - SettingsButton( - buttonText: optionTitle[4], - onPressed: () { - Navigator.pushNamed( - context, - Routes.WEBSITE_SCREEN, - arguments: { - 'title': optionTitle[4], - 'url': MixedConstants.PRIVACY_POLICY - }, - ); - }, - image: optionIcons[4], - ), - SizedBox( - height: 12, - ), - SettingsButton( - buttonText: optionTitle[5], - onPressed: () async { - CommonUtilityFunctions().showResetAtsignDialog(); - }, - image: optionIcons[5], - ), - SizedBox( - height: 12, - ), - ], - ), + child: ListView( + padding: const EdgeInsets.fromLTRB(31, 0, 31, 24), + children: [ + Text( + 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', + style: CustomTextStyles.black12, + ), + SizedBox( + height: 28, + ), + SettingsButton( + buttonText: optionTitle[0], + onPressed: switchAtsign, + image: optionIcons[0], + ), + SizedBox(height: 20), + SettingsButton( + buttonText: optionTitle[1], + onPressed: () async { + BackupKeyWidget( + atsign: AtClientManager.getInstance() + .atClient + .getCurrentAtSign()!, + ).showBackupDialog(context); + }, + image: optionIcons[1], + ), + Divider( + height: 58, + color: ColorConstants.dividerGrey, + ), + SettingsButton( + buttonText: optionTitle[2], + onPressed: () { + Navigator.pushNamed( + context, + Routes.FAQ_SCREEN, + ); + }, + image: optionIcons[2], + ), + SizedBox(height: 20), + SettingsButton( + buttonText: optionTitle[3], + onPressed: () async { + await launchUrl(Uri( + scheme: 'mailto', path: 'atmospherepro@atsign.com')); + }, + image: optionIcons[3], + ), + SizedBox(height: 20), + SettingsButton( + buttonText: optionTitle[4], + onPressed: () { + Navigator.pushNamed( + context, + Routes.WEBSITE_SCREEN, + arguments: { + 'title': optionTitle[4], + 'url': MixedConstants.PRIVACY_POLICY + }, + ); + }, + image: optionIcons[4], + ), + SizedBox(height: 20), + SettingsButton( + buttonText: optionTitle[5], + onPressed: () async { + CommonUtilityFunctions().showResetAtsignDialog(); + }, + image: optionIcons[5], + ), + SizedBox( + height: 12, + ), + ], ), ) ], diff --git a/lib/screens/settings/widgets/settings_buttons.dart b/lib/screens/settings/widgets/settings_buttons.dart index 4c5ca37f..8b5c2aca 100644 --- a/lib/screens/settings/widgets/settings_buttons.dart +++ b/lib/screens/settings/widgets/settings_buttons.dart @@ -37,9 +37,7 @@ class SettingsButton extends StatelessWidget { height: 27, width: 27, ), - SizedBox( - width: 12, - ), + SizedBox(width: 12), Text( buttonText.toString(), style: CustomTextStyles.greySemiBold18, diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index c90afe83..3daff737 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -6,6 +6,7 @@ import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/transfer_history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/bottom_navigation_widget.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; @@ -32,8 +33,10 @@ class _WelcomeScreenState extends State { BackendService backendService = BackendService.getInstance(); HistoryProvider? historyProvider; bool isExpanded = true; - int _selectedBottomNavigationIndex = 0; + + // int _selectedBottomNavigationIndex = 0; late FileTransferProvider _fileTransferProvider; + late WelcomeScreenProvider welcomeScreenProvider; // 0-Sending, 1-Success, 2-Error List transferStatus = [ @@ -55,6 +58,7 @@ class _WelcomeScreenState extends State { void initState() { _fileTransferProvider = Provider.of(context, listen: false); + welcomeScreenProvider = context.read(); setAtSign(); listenForFlushBarStatus(); @@ -93,12 +97,6 @@ class _WelcomeScreenState extends State { await GroupService().fetchGroupsAndContacts(); } - void _onBottomNavigationSelect(int index) { - setState(() { - _selectedBottomNavigationIndex = index; - }); - } - static List _bottomSheetWidgetOptions = [ WelcomeScreenHome(), ContactScreen(), @@ -131,11 +129,12 @@ class _WelcomeScreenState extends State { elevation: 0, backgroundColor: Colors.transparent, onPressed: () { - setState(() { - _selectedBottomNavigationIndex = 0; - }); + welcomeScreenProvider.changeBottomNavigationIndex(0); }, - child: _selectedBottomNavigationIndex == 0 + child: context + .watch() + .selectedBottomNavigationIndex == + 0 ? SvgPicture.asset( "assets/svg/plus.svg", ) @@ -166,7 +165,9 @@ class _WelcomeScreenState extends State { body: Consumer( builder: (_c, provider, widget) { if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[_selectedBottomNavigationIndex]; + return _bottomSheetWidgetOptions[context + .watch() + .selectedBottomNavigationIndex]; } else { return ErrorScreen( TextStrings.noInternet, @@ -179,105 +180,83 @@ class _WelcomeScreenState extends State { } Widget customBottomNavigationBar() { - return Container( - height: 70, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.only( - topRight: Radius.circular(20), topLeft: Radius.circular(20)), - boxShadow: [ - BoxShadow(color: Colors.black26, spreadRadius: 0, blurRadius: 10), - ], - ), - child: ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(30.0), - topRight: Radius.circular(30.0), - ), - child: Padding( - padding: const EdgeInsets.only(left: 15, right: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - bottomNavigationItem("assets/svg/contacts.svg", "Contacts", 1), - bottomNavigationItem("assets/svg/my_files.svg", "My Files", 2), - SizedBox( - width: 1, - ), - bottomNavigationItem("assets/svg/history.svg", "History", 3), - bottomNavigationItem("assets/svg/settings.svg", "Settings", 4), - ], - ), - ), - ), - ); - } - - Widget bottomNavigationItem(String assetLocation, String label, int index) { - return GestureDetector( - onTap: () { - _onBottomNavigationSelect(index); - }, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Spacer(), - SvgPicture.asset( - assetLocation, - color: _selectedBottomNavigationIndex == index - ? Color(0xffEAA743) - : Colors.black, - height: 25, - ), - SizedBox( - height: 3, - ), - Text(label, - style: TextStyle( - fontSize: 11, - color: _selectedBottomNavigationIndex == index - ? Color(0xffEAA743) - : Colors.black)), - // Spacer(), - SizedBox( - height: 10, - ), - if (_selectedBottomNavigationIndex == index) - Container( - height: 2, - width: 40, + return Consumer(builder: (context, provider, _) { + return Selector( + selector: (context, provider) => + provider.selectedBottomNavigationIndex, + builder: (context, selectedBottomNavigationIndex, _) { + return Container( + height: 70, decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.only( + topRight: Radius.circular(20), + topLeft: Radius.circular(20)), boxShadow: [ BoxShadow( - color: Color(0xffEAA743).withOpacity(0.5), - spreadRadius: 3, - blurRadius: 5, - offset: Offset(0, -1), // changes position of shadow - ), + color: Colors.black26, spreadRadius: 0, blurRadius: 10), ], ), - ) - else - SizedBox( - height: 2, - width: 40, - ), - if (_selectedBottomNavigationIndex == index) - SizedBox( - height: 4, - width: 50, - child: CustomPaint( - painter: PainterOne(), + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0), + ), + child: Padding( + padding: const EdgeInsets.only(left: 15, right: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + BottomNavigationWidget( + icon: "assets/svg/contacts.svg", + title: "Contacts", + index: 1, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + icon: "assets/svg/my_files.svg", + title: "My Files", + index: 2, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + SizedBox( + width: 1, + ), + BottomNavigationWidget( + icon: "assets/svg/history.svg", + title: "History", + index: 3, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + icon: "assets/svg/settings.svg", + title: "Settings", + index: 4, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + ], + ), + ), ), - ) - else - SizedBox( - height: 4, - width: 50, - ) - ], - ), - ); + ); + }); + }); } } diff --git a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart new file mode 100644 index 00000000..fe7cc99e --- /dev/null +++ b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart @@ -0,0 +1,86 @@ +import 'package:atsign_atmosphere_pro/screens/welcome_screen/welcome_screen.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class BottomNavigationWidget extends StatelessWidget { + final Function(int index)? onTap; + final int index; + final String icon; + final String title; + final int indexSelected; + + const BottomNavigationWidget({ + Key? key, + this.onTap, + required this.index, + this.icon = '', + this.title = '', + required this.indexSelected, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + onTap?.call(index); + }, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Spacer(), + SvgPicture.asset( + icon, + color: indexSelected == index ? Color(0xffEAA743) : Colors.black, + height: 25, + ), + SizedBox( + height: 3, + ), + Text(title, + style: TextStyle( + fontSize: 11, + color: indexSelected == index + ? Color(0xffEAA743) + : Colors.black)), + // Spacer(), + SizedBox( + height: 10, + ), + if (indexSelected == index) + Container( + height: 2, + width: 40, + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Color(0xffEAA743).withOpacity(0.5), + spreadRadius: 3, + blurRadius: 5, + offset: Offset(0, -1), // changes position of shadow + ), + ], + ), + ) + else + SizedBox( + height: 2, + width: 40, + ), + if (indexSelected == index) + SizedBox( + height: 4, + width: 50, + child: CustomPaint( + painter: PainterOne(), + ), + ) + else + SizedBox( + height: 4, + width: 50, + ) + ], + ), + ); + } +} diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 77c57b5a..dfdc545d 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -1,18 +1,13 @@ import 'dart:async'; import 'package:at_client_mobile/at_client_mobile.dart'; -import 'package:at_common_flutter/widgets/custom_app_bar.dart'; import 'package:at_contact/at_contact.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/common_button.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_heading.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/file_card.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_callback.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/overlapping_contacts.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/select_contact_widget.dart'; -import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/select_file_widget.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; @@ -23,13 +18,13 @@ import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import '../../../utils/images.dart'; import '../../common_widgets/app_bar_custom.dart'; class WelcomeScreenHome extends StatefulWidget { + @override _WelcomeScreenHomeState createState() => _WelcomeScreenHomeState(); } @@ -46,8 +41,6 @@ class _WelcomeScreenHomeState extends State { ScrollController scrollController = ScrollController(); late FileTransferProvider filePickerModel; String? notes; - FocusNode _notesFocusNode = FocusNode(); - TextEditingController _notesController = TextEditingController(); @override void initState() { @@ -85,289 +78,277 @@ class _WelcomeScreenHomeState extends State { ), width: double.infinity, height: SizeConfig().screenHeight, - child: Stack( - children: [ - Row( + child: SingleChildScrollView( + controller: scrollController, + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: 20.toWidth, vertical: 20.toHeight), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, children: [ - Expanded( - flex: 3, - child: SingleChildScrollView( - controller: scrollController, - child: Container( - width: double.infinity, + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( padding: EdgeInsets.symmetric( - horizontal: 20.toWidth, vertical: 20.toHeight), - child: Column( - crossAxisAlignment: CrossAxisAlignment.center, - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - padding: EdgeInsets.symmetric( - horizontal: SizeConfig().isTablet(context) - ? 30.toWidth - : 0), - child: Text( - TextStrings().selectFiles, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, - ), - ), - ), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isNotEmpty) { - return InkWell( - onTap: SelectFiles, - child: Container( - color: Colors.black, - padding: EdgeInsets.all(10), - margin: - EdgeInsets.only(right: 30.toWidth), - child: Icon( - Icons.add_circle_outline, - color: Colors.white, - size: 15.toFont, - ), - ), - ); - } else { - return SizedBox(); - } - }), - ], + horizontal: SizeConfig().isTablet(context) + ? 30.toWidth + : 0), + child: Text( + TextStrings().selectFiles, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), + ), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isNotEmpty) { + return InkWell( + onTap: SelectFiles, + child: Container( + color: Colors.black, + padding: EdgeInsets.all(10), + margin: + EdgeInsets.only(right: 30.toWidth), + child: Icon( + Icons.add_circle_outline, + color: Colors.white, + size: 15.toFont, + ), ), - SizedBox(height: 16), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isEmpty) { - return InkWell( - onTap: SelectFiles, - child: Container( - height: 142.toHeight, - width: 350.toWidth, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: ColorConstants.orangeColor), - ), - child: Center( - child: Text( - 'Select file(s) to transfer', - style: TextStyle( - color: ColorConstants.orangeColor, - fontSize: 16.toFont), - ), - ), - ), - ); - } else { - return SizedBox(); - } - }), - SizedBox(height: 16), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isNotEmpty) { - return Wrap( - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.start, - runSpacing: 5.0.toWidth, - spacing: 10.0.toHeight, - children: List.generate( - provider.selectedFiles.length, (index) { - return SizedBox( - width: (320.toWidth) / 2, - child: Stack( - children: [ - FileCard( - fileDetail: - provider.selectedFiles[index], - ), - Positioned( - top: -10, - right: -10, - child: InkWell( - onTap: () { - provider.selectedFiles - .removeAt(index); - provider.calculateSize(); - provider.notifyListeners(); - }, - child: Container( - width: 40.toHeight, - height: 40.toHeight, - child: FittedBox( - fit: BoxFit.fill, - child: Image.asset( - ImageConstants.closeIcon), - ), - ), - ), - ), - ], - ), - ); - }), - ); - } else { - return SizedBox(); - } - }), - SizedBox(height: 16.toHeight), - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + ); + } else { + return SizedBox(); + } + }), + ], + ), + SizedBox(height: 16), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isEmpty) { + return InkWell( + onTap: SelectFiles, + child: Container( + height: 142.toHeight, + width: 350.toWidth, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.orangeColor), + ), + child: Center( + child: Text( + 'Select file(s) to transfer', + style: TextStyle( + color: ColorConstants.orangeColor, + fontSize: 16.toFont), + ), + ), + ), + ); + } else { + return SizedBox(); + } + }), + SizedBox(height: 16), + Consumer( + builder: (context, provider, _) { + if (provider.selectedFiles.isNotEmpty) { + return Wrap( + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + runSpacing: 5.0.toWidth, + spacing: 10.0.toHeight, + children: List.generate( + provider.selectedFiles.length, (index) { + return SizedBox( + width: (320.toWidth) / 2, + child: Stack( children: [ - Padding( - padding: EdgeInsets.only( - left: SizeConfig().isTablet(context) - ? 30.toWidth - : 0), - child: Text( - TextStrings().selectContacts, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, - ), - ), - ), - Consumer( - builder: (context, provider, _) { - if (provider.selectedContacts.isNotEmpty) { - return InkWell( - onTap: () {}, - child: Container( - color: Colors.black, - padding: EdgeInsets.all(10), - margin: - EdgeInsets.only(right: 30.toWidth), - child: Icon( - Icons.add_circle_outline, - color: Colors.white, - size: 15.toFont, - ), - ), - ); - } else { - return SizedBox(); - } - }, + FileCard( + fileDetail: + provider.selectedFiles[index], ), - ], - ), - SizedBox(height: 16.toHeight), - Consumer( - builder: (context, provider, _) { - if (filePickerModel.scrollToBottom) { - scrollToBottom(); - } - return SizedBox(); - }), - Consumer( - builder: (context, provider, _) { - if (provider.scrollToBottom) { - scrollToBottom(); - } - if ((provider.selectedContacts.isEmpty)) { - return SelectContactWidget( - (b) { - print(b); - setState(() { - isContactSelected = b; - }); + Positioned( + top: -10, + right: -10, + child: InkWell( + onTap: () { + provider.selectedFiles + .removeAt(index); + provider.calculateSize(); + provider.notifyListeners(); }, - ); - } else { - if ((provider.selectedContacts.isEmpty)) { - return Container(); - } else { - return OverlappingContacts( - selectedList: provider.selectedContacts, - onChnage: (isUpdate) { - setState(() {}); - }, - ); - } - } - }, - ), - SizedBox(height: 16.toHeight), - Container( - width: 350.toWidth, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - border: Border.all(color: ColorConstants.grey), - ), - child: TextField( - onChanged: (String txt) { - setState(() { - notes = txt; - }); - }, - decoration: InputDecoration( - labelText: 'Send Message (Optional)', - labelStyle: TextStyle(fontSize: 15.toFont), - fillColor: Colors.white, - border: OutlineInputBorder( - borderSide: BorderSide( - // color: ColorConstants.grey, - ), - borderRadius: BorderRadius.all( - Radius.circular(10.0), + child: Container( + width: 40.toHeight, + height: 40.toHeight, + child: FittedBox( + fit: BoxFit.fill, + child: Image.asset( + ImageConstants.closeIcon), + ), ), ), ), - keyboardType: TextInputType.multiline, - ), + ], ), - SizedBox(height: 40.toHeight), - InkWell( - onTap: sendFileWithFileBin, + ); + }), + ); + } else { + return SizedBox(); + } + }), + SizedBox(height: 16.toHeight), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Padding( + padding: EdgeInsets.only( + left: SizeConfig().isTablet(context) + ? 30.toWidth + : 0), + child: Text( + TextStrings().selectContacts, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), + ), + Consumer( + builder: (context, provider, _) { + if (provider.selectedContacts.isNotEmpty) { + return InkWell( + onTap: () {}, child: Container( - height: 67.toHeight, - width: 350.toWidth, - decoration: BoxDecoration( - borderRadius: - BorderRadius.all(Radius.circular(10)), - gradient: LinearGradient( - colors: [ - Color(0xffF05E3F), - Color(0xffe9a642) - ], - stops: [0.1, 0.8], - ), - ), - child: Center( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - 'Transfer Now', - style: TextStyle( - fontSize: 20.toFont, - color: Colors.white), - ), - SizedBox(width: 10), - Icon(Icons.arrow_forward, - color: Colors.white, size: 20.toFont) - ], - ), + color: Colors.black, + padding: EdgeInsets.all(10), + margin: + EdgeInsets.only(right: 30.toWidth), + child: Icon( + Icons.add_circle_outline, + color: Colors.white, + size: 15.toFont, ), ), + ); + } else { + return SizedBox(); + } + }, + ), + ], + ), + SizedBox(height: 16.toHeight), + Consumer( + builder: (context, provider, _) { + if (filePickerModel.scrollToBottom) { + scrollToBottom(); + } + return SizedBox(); + }), + Consumer( + builder: (context, provider, _) { + if (provider.scrollToBottom) { + scrollToBottom(); + } + if ((provider.selectedContacts.isEmpty)) { + return SelectContactWidget( + (b) { + print(b); + setState(() { + isContactSelected = b; + }); + }, + ); + } else { + if ((provider.selectedContacts.isEmpty)) { + return Container(); + } else { + return OverlappingContacts( + selectedList: provider.selectedContacts, + onChnage: (isUpdate) { + setState(() {}); + }, + ); + } + } + }, + ), + SizedBox(height: 16.toHeight), + Container( + width: 350.toWidth, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ColorConstants.grey), + ), + child: TextField( + onChanged: (String txt) { + setState(() { + notes = txt; + }); + }, + decoration: InputDecoration( + labelText: 'Send Message (Optional)', + labelStyle: TextStyle(fontSize: 15.toFont), + fillColor: Colors.white, + border: OutlineInputBorder( + borderSide: BorderSide( + // color: ColorConstants.grey, + ), + borderRadius: BorderRadius.all( + Radius.circular(10.0), + ), + ), + ), + keyboardType: TextInputType.multiline, + ), + ), + SizedBox(height: 40.toHeight), + InkWell( + onTap: sendFileWithFileBin, + child: Container( + height: 67.toHeight, + width: 350.toWidth, + decoration: BoxDecoration( + borderRadius: + BorderRadius.all(Radius.circular(10)), + gradient: LinearGradient( + colors: [ + Color(0xffF05E3F), + Color(0xffe9a642) + ], + stops: [0.1, 0.8], + ), + ), + child: Center( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Transfer Now', + style: TextStyle( + fontSize: 20.toFont, + color: Colors.white), ), - SizedBox(height: 100) + SizedBox(width: 10), + Icon(Icons.arrow_forward, + color: Colors.white, size: 20.toFont) ], ), ), ), ), + SizedBox(height: 100) ], ), - ], + ), ), ), ); diff --git a/lib/view_models/add_contact_provider.dart b/lib/view_models/add_contact_provider.dart index 04df454e..fd10b8e2 100644 --- a/lib/view_models/add_contact_provider.dart +++ b/lib/view_models/add_contact_provider.dart @@ -10,6 +10,7 @@ class AddContactProvider extends BaseModel { void initData() { contactService.resetData(); isVerify = false; + atSignError = ''; } void changeVerifyStatus(bool verify) { diff --git a/lib/view_models/welcome_screen_view_model.dart b/lib/view_models/welcome_screen_view_model.dart index e9536e9d..0ec11a84 100644 --- a/lib/view_models/welcome_screen_view_model.dart +++ b/lib/view_models/welcome_screen_view_model.dart @@ -15,12 +15,18 @@ class WelcomeScreenProvider extends BaseModel { bool hasSelectedContactsChanged = false, authenticating = false; bool isSelectionItemChanged = false; String? groupName; + int selectedBottomNavigationIndex = 0; void resetData() { selectedContacts = []; setStatus(updateContacts, Status.Done); } + void changeBottomNavigationIndex(int index){ + selectedBottomNavigationIndex = index; + notifyListeners(); + } + void _addtoContactsList(GroupContactsModel _obj) { if (selectedContacts.indexWhere( (element) => element.contact!.atSign == _obj.contact!.atSign) == From 2c3c25a598259e2905a932b32ba77c9f47e4d43e Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Thu, 16 Feb 2023 02:17:37 +0530 Subject: [PATCH 33/94] fix: transfer history not refreshing on send and receive --- ios/Podfile.lock | 2 +- lib/services/backend_service.dart | 19 ++-- lib/services/common_utility_functions.dart | 2 +- lib/view_models/file_transfer_provider.dart | 2 - lib/view_models/history_provider.dart | 104 ++++++++++++++++++-- pubspec.lock | 50 +++++----- 6 files changed, 133 insertions(+), 46 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 17eac80f..5b125b25 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -214,7 +214,7 @@ SPEC CHECKSUMS: flutter_image_compress: 5a5e9aee05b6553048b8df1c3bc456d0afaac433 flutter_keychain: 01aabf894ffe8b01adfda1d9df21c210c1b4b452 flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743 - fluttertoast: 16fbe6039d06a763f3533670197d01fc73459037 + fluttertoast: eb263d302cc92e04176c053d2385237e9f43fad0 libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart index c82f37f5..f3212c38 100644 --- a/lib/services/backend_service.dart +++ b/lib/services/backend_service.dart @@ -56,7 +56,7 @@ class BackendService { late AtClientPreference atClientPreference; bool autoAcceptFiles = false; final String AUTH_SUCCESS = "Authentication successful"; - Timer? periodicHistoryRefresh; + // Timer? periodicHistoryRefresh; String? get currentAtsign => currentAtSign; Directory? downloadDirectory; AnimationController? controller; @@ -158,12 +158,12 @@ class BackendService { }); } - setPeriodicFileHistoryRefresh() { - periodicHistoryRefresh?.cancel(); - periodicHistoryRefresh = Timer.periodic(Duration(minutes: 1), (timer) { - refreshHistoryScreen(); - }); - } + // setPeriodicFileHistoryRefresh() { + // periodicHistoryRefresh?.cancel(); + // periodicHistoryRefresh = Timer.periodic(Duration(minutes: 1), (timer) { + // refreshHistoryScreen(); + // }); + // } Future _notificationCallBack(AtNotification response) async { print('response => $response'); @@ -199,9 +199,6 @@ class BackendService { var atKey = notificationKey.split(':')[1]; var decryptedMessage = response.value!; - //TODO: only for testing - // await sendNotificationAck(notificationKey, fromAtSign); - if (decryptedMessage != null && decryptedMessage != '') { await Provider.of(NavService.navKey.currentContext!, listen: false) @@ -334,7 +331,7 @@ class BackendService { listen: false) .checkForUndownloadedFiles(); - setPeriodicFileHistoryRefresh(); + // setPeriodicFileHistoryRefresh(); } } diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index f0a7bfdf..0f83b52f 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -302,7 +302,7 @@ class CommonUtilityFunctions { await Navigator.pushNamedAndRemoveUntil(NavService.navKey.currentContext!, Routes.HOME, (Route route) => false); } else if (atSignList == null || atSignList.isEmpty) { - BackendService.getInstance().periodicHistoryRefresh?.cancel(); + // BackendService.getInstance().periodicHistoryRefresh?.cancel(); await Navigator.pushNamedAndRemoveUntil(NavService.navKey.currentContext!, Routes.HOME, (Route route) => false); } diff --git a/lib/view_models/file_transfer_provider.dart b/lib/view_models/file_transfer_provider.dart index b3311af3..0e74c119 100644 --- a/lib/view_models/file_transfer_provider.dart +++ b/lib/view_models/file_transfer_provider.dart @@ -8,7 +8,6 @@ import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_status.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/permission_dialog.dart'; -import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/exception_service.dart'; import 'package:atsign_atmosphere_pro/services/file_transfer_service.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; @@ -23,7 +22,6 @@ import 'package:permission_handler/permission_handler.dart'; import 'package:provider/provider.dart'; import 'package:receive_sharing_intent/receive_sharing_intent.dart'; import 'package:path/path.dart' show basename; -import 'package:at_client/src/stream/file_transfer_object.dart'; class FileTransferProvider extends BaseModel { FileTransferProvider._(); diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index b0830269..f577491e 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -322,9 +322,32 @@ class HistoryProvider extends BaseModel { )); if (res) { individualSentFileId[fileHistory.fileDetails!.key] = true; - isEdit - ? updateFileEntryInSentHistory(fileHistory) - : sentHistory.insert(0, fileHistory); + if (isEdit) { + updateFileEntryInSentHistory(fileHistory); + } else { + sentHistory.insert(0, fileHistory); + + // + FileTransfer? fileTransfer = fileHistory.fileDetails; + if ((fileTransfer?.files?.length ?? 0) > 0) { + for (int j = 0; j < fileTransfer!.files!.length; j++) { + allFiles.insert( + 0, + FileEntity( + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: fileHistory.fileTransferObject?.sharedWith, + historyType: HistoryType.send, + note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: fileHistory.fileTransferObject!), + ); + } + } + } } notifyListeners(); return res; @@ -681,6 +704,25 @@ class HistoryProvider extends BaseModel { _initBackendService(); if (index > -1) { receivedHistoryLogs[index] = filesModel; + + // converting received files into single entries before displaying in transfer history + if ((filesModel.files?.length ?? 0) > 0) { + for (int j = 0; j < filesModel.files!.length; j++) { + allFiles.insert( + 0, + FileEntity( + file: filesModel.files![j], + date: filesModel.date != null ? filesModel.date.toString() : '', + atSign: filesModel.sender, + historyType: HistoryType.received, + note: filesModel.notes, + transferId: filesModel.key, + isUploaded: filesModel.files?[j].isUploaded ?? false, + fileTransferObject: fileTransferObject, + ), + ); + } + } } else { // showing notification for new recieved file switch (app_lifecycle_state) { @@ -698,7 +740,11 @@ class HistoryProvider extends BaseModel { await LocalNotificationService() .showNotification(sharedBy, 'Download and view the file(s).'); } - await addToReceiveFileHistory(sharedBy, filesModel); + await addToReceiveFileHistory( + sharedBy, + filesModel, + fileTransferObject: fileTransferObject, + ); } setStatus(UPDATE_RECEIVED_RECORD, Status.Done); } @@ -714,8 +760,12 @@ class HistoryProvider extends BaseModel { }); } - addToReceiveFileHistory(String sharedBy, FileTransfer filesModel, - {bool isUpdate = false}) async { + addToReceiveFileHistory( + String sharedBy, + FileTransfer filesModel, { + bool isUpdate = false, + required FileTransferObject fileTransferObject, + }) async { setStatus(ADD_RECEIVED_FILE, Status.Loading); filesModel.sender = sharedBy; @@ -728,6 +778,24 @@ class HistoryProvider extends BaseModel { } else { receivedHistoryLogs.insert(0, filesModel); receivedItemsId[filesModel.key] = true; + + if ((filesModel.files?.length ?? 0) > 0) { + for (int j = 0; j < filesModel.files!.length; j++) { + allFiles.insert( + 0, + FileEntity( + file: filesModel.files![j], + date: filesModel.date != null ? filesModel.date.toString() : '', + atSign: filesModel.sender, + historyType: HistoryType.received, + note: filesModel.notes, + transferId: filesModel.key, + isUploaded: filesModel.files?[j].isUploaded ?? false, + fileTransferObject: fileTransferObject, + ), + ); + } + } } setStatus(ADD_RECEIVED_FILE, Status.Done); @@ -1233,6 +1301,30 @@ class HistoryProvider extends BaseModel { sentHistory.removeAt(index); } else { sentHistory[index] = fileHistory; + + FileTransfer? fileTransfer = fileHistory.fileDetails; + if ((fileTransfer?.files?.length ?? 0) > 0) { + for (int j = 0; j < fileTransfer!.files!.length; j++) { + var fileEntity = FileEntity( + file: fileTransfer.files![j], + date: + fileTransfer.date != null ? fileTransfer.date.toString() : '', + atSign: fileHistory.fileTransferObject?.sharedWith, + historyType: HistoryType.send, + note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: fileHistory.fileTransferObject!, + ); + + var index = allFiles.indexWhere((element) => + element.transferId == + fileHistory.fileTransferObject?.transferId); + if (index != -1) { + allFiles[index] = fileEntity; + } + } + } } } } diff --git a/pubspec.lock b/pubspec.lock index 703b7c82..60282f0f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -70,34 +70,34 @@ packages: dependency: transitive description: name: at_client - sha256: b0c3861b2e73eada14403328af980be43060fe14ac6ca0a7a0295e1dfb91e6b0 + sha256: "06f52fc2eb49124be6572b44cda487a418fd19b2c6a3da7671a1e6d0d9e06a96" url: "https://pub.dev" source: hosted - version: "3.0.38" + version: "3.0.49" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - sha256: "082c4dcbaa72903338301721d7582634be30767998eb22f0c96fa2ab764b5e19" + sha256: "1a1c6ef8ebc3b29b81915a2c866efa2a877c041df3f212c53246377b74d16e61" url: "https://pub.dev" source: hosted - version: "3.2.5" + version: "3.2.7" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - sha256: "6336655030a65d2ac69bc6442254facced2f45d04a98921f3cb17b39b71920be" + sha256: "75f7b1070d9aa5d42f9878859995f2a24654733a118012b83eb552baaba8ce13" url: "https://pub.dev" source: hosted - version: "2.0.10" + version: "2.0.11" at_commons: dependency: "direct main" description: name: at_commons - sha256: "739d2a4663cc3af03b93c5489d86a9f3c88c779dfe2b5c81a9c9a10841bb2f05" + sha256: b9547bf2352f8e064d92539690af4b6c8d1e2ee5ef6313d45b860b90b06a9d31 url: "https://pub.dev" source: hosted - version: "3.0.25" + version: "3.0.35" at_contact: dependency: "direct main" description: @@ -110,19 +110,19 @@ packages: dependency: "direct main" description: name: at_contacts_flutter - sha256: f19d6ebff6b14aafd5bdc9fdcd654382a82526345a1c488f673230e32a6e7a42 + sha256: "2f826c3943cb5ae3bf6af1f70d950fb1ec2b98d66ea0342c86b6175162f29c89" url: "https://pub.dev" source: hosted - version: "4.0.7" + version: "4.0.8" at_contacts_group_flutter: dependency: "direct main" description: - path: at_contacts_group_flutter - ref: trunk - resolved-ref: "81f9827f7921386ed2fd5623008a13ac744b25a1" - url: "https://github.com/atsign-foundation/at_widgets.git" + path: "packages/at_contacts_group_flutter" + ref: "feature/new-version-contacts-group" + resolved-ref: "8f14684d7dbd804e79ff45451502546e2280b0b2" + url: "https://github.com/atsign-foundation/at_widgets" source: git - version: "4.0.9" + version: "4.0.10" at_file_saver: dependency: transitive description: @@ -135,10 +135,10 @@ packages: dependency: transitive description: name: at_lookup - sha256: "6ea09b17be9c66c5262f307c36e2fa325d4b292df9664e4ed18109dee86925da" + sha256: "8e9b21f8b7b39ff0c0f8361a3273e36614f5e9f824f00b8b25097c20bc434bb2" url: "https://pub.dev" source: hosted - version: "3.0.30" + version: "3.0.33" at_onboarding_flutter: dependency: "direct main" description: @@ -152,18 +152,18 @@ packages: dependency: transitive description: name: at_persistence_secondary_server - sha256: "256528bd491760dd4eabeea858be09612495c76e0996c603c071c24a84e734bd" + sha256: f4263138e22ab68a2bbb988e85c2c70a98171f1d9a55714fedde79bae8fbda19 url: "https://pub.dev" source: hosted - version: "3.0.35" + version: "3.0.46" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - sha256: "0ab5ca23353a696badc86972aba5495aa776489b9b8d0a26a6392d800d319dfa" + sha256: "7664d3e576936f0edef642821486594c4ab86fb2678c68998d97f778d5c2a63e" url: "https://pub.dev" source: hosted - version: "2.0.7" + version: "2.0.10" at_server_status: dependency: transitive description: @@ -288,10 +288,10 @@ packages: dependency: transitive description: name: cron - sha256: f1b69bc71bdb6a4d0efeb0fe49a12bcb41119df4db8120dd5931c8abb2846434 + sha256: d98aa8cdad0cccdb6b098e6a1fb89339c180d8a229145fa4cd8c6fc538f0e35f url: "https://pub.dev" source: hosted - version: "0.3.2" + version: "0.5.1" cross_file: dependency: transitive description: @@ -559,10 +559,10 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: b528e78a4e69957bb8a33d9e8ceaa728801bb7c6ce599e811e49cf6d94d17fef + sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" url: "https://pub.dev" source: hosted - version: "8.0.9" + version: "8.1.2" frontend_server_client: dependency: transitive description: From 7021189ad9af397c0bce23381495426d8c9af682 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Thu, 16 Feb 2023 02:53:53 +0530 Subject: [PATCH 34/94] fix: issue with reupload files --- .../common_widgets/custom_onboarding.dart | 2 +- .../history/transfer_history_screen.dart | 76 ++++++++++++------- lib/view_models/history_provider.dart | 8 ++ 3 files changed, 56 insertions(+), 30 deletions(-) diff --git a/lib/screens/common_widgets/custom_onboarding.dart b/lib/screens/common_widgets/custom_onboarding.dart index 13d0dcdc..7d2a036a 100644 --- a/lib/screens/common_widgets/custom_onboarding.dart +++ b/lib/screens/common_widgets/custom_onboarding.dart @@ -73,7 +73,7 @@ class CustomOnboarding { await initServices(); getTransferData(); await _backendService.startMonitor(); - _backendService.setPeriodicFileHistoryRefresh(); + // _backendService.setPeriodicFileHistoryRefresh(); if (showLoader != null) { showLoader(false, ''); diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index cd4fca1e..21860c7a 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -416,34 +416,40 @@ class _TransferHistoryScreenState extends State { provider.receivedFileProgress[ files[index].transferId]; - if (fileTransferProgress != null && - fileTransferProgress.percent != - null) { - return Container( - width: 30, - height: 30, - margin: EdgeInsets.all(6), - child: - LabelledCircularProgressIndicator( - value: (fileTransferProgress - .percent! / - 100), - ), - ); + if (fileTransferProgress != null) { + return fileTransferProgress.percent != + null + ? Container( + width: 30, + height: 30, + margin: EdgeInsets.all(6), + child: + LabelledCircularProgressIndicator( + value: (fileTransferProgress + .percent! / + 100), + ), + ) + : InfiniteSpinner(); } else { - return InkWell( - onTap: () { - _onTapMoreIcon(key, files[index]); - }, - child: Padding( - padding: EdgeInsets.only(left: 8), - child: Icon( - Icons.more_vert_outlined, - size: 16, - color: ColorConstants.grey, - ), - ), - ); + return files[index].isUploading + ? InfiniteSpinner() + : InkWell( + onTap: () { + _onTapMoreIcon( + key, files[index]); + }, + child: Padding( + padding: EdgeInsets.only( + left: 8), + child: Icon( + Icons.more_vert_outlined, + size: 16, + color: + ColorConstants.grey, + ), + ), + ); } }) : SizedBox(), @@ -518,6 +524,9 @@ class _TransferHistoryScreenState extends State { child: Center( child: InkWell( onTap: () { + if (Navigator.of(context).canPop()) { + Navigator.of(context).pop(); + } reuploadFileConfirmation(fileEntity); }, child: Text( @@ -532,11 +541,11 @@ class _TransferHistoryScreenState extends State { ), ) : SizedBox(), - Container( + /*Container( color: ColorConstants.sidebarTextUnselected, height: double.infinity, width: 1, - ), + ),*/ fileEntity.historyType == HistoryType.received ? Expanded( child: Center( @@ -715,4 +724,13 @@ class _TransferHistoryScreenState extends State { await OpenFile.open(path); } } + + Widget InfiniteSpinner() { + return Container( + width: 30, + height: 30, + margin: EdgeInsets.all(6), + child: CircularProgressIndicator(), + ); + } } diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index f577491e..53de4740 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -980,6 +980,14 @@ class HistoryProvider extends BaseModel { isUploaded; } } + + /// updating file entity list, allFiles + index = allFiles.indexWhere((el) => el.transferId == id); + if (index != -1) { + allFiles[index].isUploading = isUploading ?? false; + allFiles[index].isUploaded = isUploaded ?? false; + } + notifyListeners(); } From 887f8499cb429ba8f0399326a748c1e18aca9e19 Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 16 Feb 2023 15:07:09 +0700 Subject: [PATCH 35/94] feat: fix UI on tablets --- .../common_widgets/app_bar_custom.dart | 2 +- .../gradient_text_field_widget.dart | 11 +++++--- lib/screens/common_widgets/header_widget.dart | 10 ++++--- .../common_widgets/option_header_widget.dart | 13 +++++++--- .../add_contact_screen.dart | 21 ++++++++------- .../blocked_contact_screen.dart | 23 ++++++++-------- .../contact_new_version/contact_screen.dart | 3 ++- .../group_contact_screen.dart | 15 ++++++----- .../trusted_contact_screen.dart | 14 ++++++---- .../history/transfer_history_screen.dart | 8 +++--- lib/screens/my_files/my_files_screen.dart | 26 ++++++------------- lib/screens/settings/settings_screen.dart | 6 ++--- .../welcome_screen/welcome_screen.dart | 2 +- .../widgets/bottom_navigation_widget.dart | 14 +++++----- 14 files changed, 90 insertions(+), 78 deletions(-) diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index 2c0450dc..17381b49 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -59,7 +59,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { description ?? '', textAlign: TextAlign.left, style: TextStyle( - fontSize: 15, + fontSize: 15.toFont, fontWeight: FontWeight.w500, ), maxLines: 1, diff --git a/lib/screens/common_widgets/gradient_text_field_widget.dart b/lib/screens/common_widgets/gradient_text_field_widget.dart index 1d0e0dc8..09fd88e5 100644 --- a/lib/screens/common_widgets/gradient_text_field_widget.dart +++ b/lib/screens/common_widgets/gradient_text_field_widget.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_outline_input_border.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; @@ -30,8 +31,9 @@ class GradientTextFieldWidget extends StatefulWidget { class _GradientTextFieldWidgetState extends State { @override Widget build(BuildContext context) { - return SizedBox( - height: 44, + return Container( + height: 52, + alignment: Alignment.centerLeft, child: TextFormField( controller: widget.controller, onChanged: (value) { @@ -40,6 +42,9 @@ class _GradientTextFieldWidgetState extends State { onFieldSubmitted: (value) { widget.onSubmitted?.call(value); }, + style: TextStyle( + fontSize: 14.toFont, + ), decoration: InputDecoration( prefixText: widget.prefixText, prefixStyle: widget.prefixStyle, @@ -66,7 +71,7 @@ class _GradientTextFieldWidgetState extends State { hintText: widget.hintText, hintStyle: widget.hintTextStyle ?? TextStyle( - fontSize: 12, + fontSize: 12.toFont, fontWeight: FontWeight.w400, color: ColorConstants.grey, ), diff --git a/lib/screens/common_widgets/header_widget.dart b/lib/screens/common_widgets/header_widget.dart index 5b7ef28f..b54f23d1 100644 --- a/lib/screens/common_widgets/header_widget.dart +++ b/lib/screens/common_widgets/header_widget.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; @@ -63,7 +64,7 @@ class _HeaderWidgetState extends State { Text( title ?? '', style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), @@ -99,7 +100,7 @@ class _HeaderWidgetState extends State { Text( "Search", style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), @@ -121,11 +122,14 @@ class _HeaderWidgetState extends State { Expanded( child: TextField( controller: widget.controller, + style: TextStyle( + fontSize: 14.toFont, + ), decoration: InputDecoration.collapsed( hintText: 'Search History by atSign', hintStyle: TextStyle( color: ColorConstants.grey, - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w500, fontStyle: FontStyle.italic, ), diff --git a/lib/screens/common_widgets/option_header_widget.dart b/lib/screens/common_widgets/option_header_widget.dart index 683116eb..dc598af3 100644 --- a/lib/screens/common_widgets/option_header_widget.dart +++ b/lib/screens/common_widgets/option_header_widget.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; @@ -73,7 +74,7 @@ class _OptionHeaderWidgetState extends State { Text( "Delivery Type", style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), @@ -113,7 +114,7 @@ class _OptionHeaderWidgetState extends State { Text( title ?? '', style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), @@ -151,7 +152,7 @@ class _OptionHeaderWidgetState extends State { Text( "Search", style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), @@ -173,11 +174,15 @@ class _OptionHeaderWidgetState extends State { Expanded( child: TextField( controller: widget.controller, + style: TextStyle( + fontSize: 14.toFont, + color: Colors.black, + ), decoration: InputDecoration.collapsed( hintText: 'Search History by atSign', hintStyle: TextStyle( color: ColorConstants.sidebarTextUnselected, - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w500, fontStyle: FontStyle.italic, ), diff --git a/lib/screens/contact_new_version/add_contact_screen.dart b/lib/screens/contact_new_version/add_contact_screen.dart index bd85fd9a..0ea56572 100644 --- a/lib/screens/contact_new_version/add_contact_screen.dart +++ b/lib/screens/contact_new_version/add_contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_text_field_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; @@ -74,10 +75,10 @@ class _AddContactScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text( + Text( "Add Contact", style: TextStyle( - fontSize: 25, + fontSize: 25.toFont, fontWeight: FontWeight.bold, color: Colors.black, ), @@ -88,7 +89,7 @@ class _AddContactScreenState extends State { controller: atSignController, prefixText: "@", prefixStyle: TextStyle( - fontSize: 14, + fontSize: 14.toFont, color: Colors.black, ), onSubmitted: (value) { @@ -101,9 +102,9 @@ class _AddContactScreenState extends State { padding: const EdgeInsets.only(top: 6), child: Text( state.atSignError, - style: const TextStyle( + style: TextStyle( color: Colors.red, - fontSize: 12, + fontSize: 12.toFont, fontWeight: FontWeight.w400, ), ), @@ -128,10 +129,10 @@ class _AddContactScreenState extends State { Row( mainAxisSize: MainAxisSize.min, children: [ - const Text( + Text( "atSign valid", style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w500, ), ), @@ -177,7 +178,7 @@ class _AddContactScreenState extends State { } }, child: Container( - height: 60, + height: 60.toHeight, width: double.infinity, decoration: BoxDecoration( color: !state.isVerify @@ -185,12 +186,12 @@ class _AddContactScreenState extends State { : Colors.black, borderRadius: BorderRadius.circular(8), ), - child: const Center( + child: Center( child: Text( "Create New Contact", style: TextStyle( color: Colors.white, - fontSize: 16, + fontSize: 16.toFont, fontWeight: FontWeight.bold, ), ), diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index 4d0c4359..5e09496b 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_flutter/models/contact_base_model.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; @@ -59,10 +60,10 @@ class _BlockedContactScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text( + Text( "Blocked atSigns", style: TextStyle( - fontSize: 25, + fontSize: 25.toFont, fontWeight: FontWeight.bold, color: Colors.black, ), @@ -80,7 +81,7 @@ class _BlockedContactScreenState extends State { }, ), Container( - height: 37, + height: 37.toHeight, padding: const EdgeInsets.only(left: 24), alignment: Alignment.centerLeft, decoration: BoxDecoration( @@ -95,7 +96,7 @@ class _BlockedContactScreenState extends State { Text( "atSign", style: TextStyle( - fontSize: 15, + fontSize: 15.toFont, fontWeight: FontWeight.w500, color: ColorConstants.sidebarTextUnselected, ), @@ -144,7 +145,7 @@ class _BlockedContactScreenState extends State { Navigator.of(context).pop(); }, child: Container( - height: 31, + height: 31.toHeight, alignment: Alignment.topRight, padding: const EdgeInsets.symmetric( horizontal: 30, @@ -159,7 +160,7 @@ class _BlockedContactScreenState extends State { child: Text( "Close", style: TextStyle( - fontSize: 17, + fontSize: 17.toFont, fontWeight: FontWeight.w600, color: ColorConstants.grey, ), @@ -192,7 +193,7 @@ class _BlockedContactScreenState extends State { padding: EdgeInsets.zero, itemBuilder: (context, index) { return Container( - height: 58, + height: 58.toHeight, color: Colors.white, child: Column( children: [ @@ -205,7 +206,7 @@ class _BlockedContactScreenState extends State { child: Text( listContact[index]?.contact?.atSign ?? '', style: TextStyle( - fontSize: 13, + fontSize: 13.toFont, fontWeight: FontWeight.w500, color: ColorConstants.textBlack, ), @@ -222,7 +223,7 @@ class _BlockedContactScreenState extends State { ); }, child: Container( - height: 31, + height: 31.toHeight, padding: const EdgeInsets.symmetric( horizontal: 14, vertical: 7, @@ -240,7 +241,7 @@ class _BlockedContactScreenState extends State { Text( "Unblock?", style: TextStyle( - fontSize: 13, + fontSize: 13.toFont, fontWeight: FontWeight.w600, color: ColorConstants.grey, ), @@ -261,7 +262,7 @@ class _BlockedContactScreenState extends State { ), Container( color: ColorConstants.textBoxBg, - height: 1, + height: 1.toHeight, width: double.infinity, ) ], diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index fce04d04..71588d36 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; @@ -192,7 +193,7 @@ class _ContactScreenState extends State { Text( title, style: TextStyle( - fontSize: 13, + fontSize: 13.toFont, fontWeight: FontWeight.w500, color: ColorConstants.grey, ), diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart index 7dd7aa3f..7e1e6439 100644 --- a/lib/screens/contact_new_version/group_contact_screen.dart +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; import 'package:at_contacts_group_flutter/screens/new_group/create_group.dart'; import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; @@ -71,7 +72,7 @@ class _GroupContactScreenState extends State { Navigator.of(context).pop(); }, child: Container( - height: 31, + height: 31.toHeight, alignment: Alignment.topRight, padding: const EdgeInsets.symmetric( horizontal: 30, @@ -86,7 +87,7 @@ class _GroupContactScreenState extends State { child: Text( "Close", style: TextStyle( - fontSize: 17, + fontSize: 17.toFont, fontWeight: FontWeight.w600, color: ColorConstants.grey, ), @@ -103,12 +104,12 @@ class _GroupContactScreenState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Padding( + Padding( padding: EdgeInsets.only(left: 27), child: Text( "My Groups", style: TextStyle( - fontSize: 25, + fontSize: 25.toFont, fontWeight: FontWeight.bold, color: Colors.black, ), @@ -158,7 +159,7 @@ class _GroupContactScreenState extends State { } }, child: Container( - height: 67, + height: 67.toHeight, margin: const EdgeInsets.symmetric(horizontal: 27), width: double.infinity, decoration: BoxDecoration( @@ -170,12 +171,12 @@ class _GroupContactScreenState extends State { ], ), ), - child: const Center( + child: Center( child: Text( "Create Group", style: TextStyle( color: Colors.white, - fontSize: 20, + fontSize: 20.toFont, fontWeight: FontWeight.bold, ), ), diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart index ac0f22dd..8d2c4d5c 100644 --- a/lib/screens/contact_new_version/trusted_contact_screen.dart +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_group_flutter/screens/new_version/widget/single_contact_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; @@ -62,10 +63,10 @@ class _TrustedContactScreenState extends State { mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - const Text( + Text( "Trusted Senders", style: TextStyle( - fontSize: 25, + fontSize: 25.toFont, fontWeight: FontWeight.bold, color: Colors.black, ), @@ -87,6 +88,9 @@ class _TrustedContactScreenState extends State { Expanded( child: TextField( controller: searchController, + style: TextStyle( + fontSize: 14.toFont, + ), onChanged: (value) { setState(() { trustedContacts = provider.trustedContacts @@ -99,7 +103,7 @@ class _TrustedContactScreenState extends State { hintText: 'Search by atSign or nickname', hintStyle: TextStyle( color: ColorConstants.grey, - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.w500, fontStyle: FontStyle.italic, ), @@ -177,7 +181,7 @@ class _TrustedContactScreenState extends State { Navigator.of(context).pop(); }, child: Container( - height: 31, + height: 31.toHeight, alignment: Alignment.topRight, padding: const EdgeInsets.symmetric( horizontal: 30, @@ -192,7 +196,7 @@ class _TrustedContactScreenState extends State { child: Text( "Close", style: TextStyle( - fontSize: 17, + fontSize: 17.toFont, fontWeight: FontWeight.w600, color: ColorConstants.grey, ), diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index a713b5b6..50e178fd 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -108,7 +108,7 @@ class _TransferHistoryScreenState extends State { hint: Text( "All", style: TextStyle( - fontSize: 16, + fontSize: 16.toFont, fontWeight: FontWeight.w700, color: ColorConstants.grey, ), @@ -122,7 +122,7 @@ class _TransferHistoryScreenState extends State { child: Text( "All", style: TextStyle( - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.bold, color: ColorConstants.sidebarTextUnselected, @@ -177,7 +177,7 @@ class _TransferHistoryScreenState extends State { child: Text( key.text, style: TextStyle( - fontSize: 16, + fontSize: 16.toFont, fontWeight: FontWeight.bold, color: ColorConstants.grey, ), @@ -263,7 +263,7 @@ class _TransferHistoryScreenState extends State { child: Text( title, style: TextStyle( - fontSize: 9, + fontSize: 9.toFont, fontWeight: FontWeight.w600, color: ColorConstants.sidebarTextUnselected, ), diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 990b420a..f2c5e793 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -157,24 +157,14 @@ class _MyFilesScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Padding( - padding: const EdgeInsets.symmetric( - vertical: 12, - ), - child: Text( - key.text, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), + Text( + key.text, + style: TextStyle( + fontSize: 12.toFont, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, ), ), - Container( - color: ColorConstants.sidebarTileSelected, - height: 1, - width: double.infinity, - ) ], ), ); @@ -265,7 +255,7 @@ class _MyFilesScreenState extends State { maxLines: 2, style: TextStyle( color: ColorConstants.grayText, - fontSize: 12, + fontSize: 12.toFont, fontWeight: FontWeight.w600, ), ), @@ -279,7 +269,7 @@ class _MyFilesScreenState extends State { style: TextStyle( color: ColorConstants .sidebarTextUnselected, - fontSize: 9, + fontSize: 9.toFont, fontWeight: FontWeight.w500, ), ) diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 634ef008..d03ae65b 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -83,10 +83,8 @@ class _SettingsScreenState extends State { SizeConfig().init(context); return Scaffold( extendBodyBehindAppBar: true, - appBar: SizeConfig().isTablet(context) - ? null - : AppBarCustom( - height: 130, + appBar: AppBarCustom( + height: 330, title: "Settings", ), /*CustomAppBar( diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 3daff737..dde304c8 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -186,7 +186,7 @@ class _WelcomeScreenState extends State { provider.selectedBottomNavigationIndex, builder: (context, selectedBottomNavigationIndex, _) { return Container( - height: 70, + height: 70.toHeight, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( diff --git a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart index fe7cc99e..b131a6f4 100644 --- a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart +++ b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart @@ -1,3 +1,4 @@ +import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/welcome_screen.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -36,12 +37,13 @@ class BottomNavigationWidget extends StatelessWidget { SizedBox( height: 3, ), - Text(title, - style: TextStyle( - fontSize: 11, - color: indexSelected == index - ? Color(0xffEAA743) - : Colors.black)), + Text( + title, + style: TextStyle( + fontSize: 11.toFont, + color: indexSelected == index ? Color(0xffEAA743) : Colors.black, + ), + ), // Spacer(), SizedBox( height: 10, From e6cba75965be506eddae66dc59ad748e9a71c30f Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 17 Feb 2023 01:57:57 +0700 Subject: [PATCH 36/94] feat: update UI Home Screen --- assets/svg/ic_close.svg | 19 + assets/svg/ic_trust_activated.svg | 3 + .../common_widgets/contact_initial.dart | 24 +- lib/screens/common_widgets/file_card.dart | 31 +- .../contact_detail_screen.dart | 3 + .../trusted_contact_screen.dart | 3 + .../widgets/group_contact_list_tile.dart | 12 +- .../welcome_screen/welcome_screen.dart | 23 +- .../widgets/choice_contacts_widget.dart | 143 +++++++ .../welcome_screen/widgets/contact_card.dart | 134 +++++++ .../widgets/overlapping_contacts.dart | 149 ++++--- .../widgets/select_contact_widget.dart | 111 ------ .../widgets/welcome_sceen_home.dart | 366 ++++++++++-------- lib/services/overlay_service.dart | 9 +- lib/utils/vectors.dart | 2 + lib/view_models/file_transfer_provider.dart | 5 + 16 files changed, 667 insertions(+), 370 deletions(-) create mode 100644 assets/svg/ic_close.svg create mode 100644 assets/svg/ic_trust_activated.svg create mode 100644 lib/screens/welcome_screen/widgets/choice_contacts_widget.dart create mode 100644 lib/screens/welcome_screen/widgets/contact_card.dart delete mode 100644 lib/screens/welcome_screen/widgets/select_contact_widget.dart diff --git a/assets/svg/ic_close.svg b/assets/svg/ic_close.svg new file mode 100644 index 00000000..2ea64810 --- /dev/null +++ b/assets/svg/ic_close.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/assets/svg/ic_trust_activated.svg b/assets/svg/ic_trust_activated.svg new file mode 100644 index 00000000..30c41039 --- /dev/null +++ b/assets/svg/ic_trust_activated.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/screens/common_widgets/contact_initial.dart b/lib/screens/common_widgets/contact_initial.dart index b048633b..2d530486 100644 --- a/lib/screens/common_widgets/contact_initial.dart +++ b/lib/screens/common_widgets/contact_initial.dart @@ -4,20 +4,22 @@ import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; class ContactInitial extends StatelessWidget { - final double? size, maxSize, minSize; + final double? size, maxSize, minSize, borderRadius; final String? initials; int? index; Color? background; - ContactInitial( - {Key? key, - this.size = 40, - required this.initials, - this.index, - this.background, - this.maxSize, - this.minSize}) - : super(key: key); + ContactInitial({ + Key? key, + this.size = 40, + required this.initials, + this.index, + this.background, + this.maxSize, + this.minSize, + this.borderRadius, + }) : super(key: key); + @override Widget build(BuildContext context) { if (initials!.length < 3) { @@ -33,7 +35,7 @@ class ContactInitial extends StatelessWidget { color: background ?? ContactInitialsColors.getColor(initials!), // borderRadius: BorderRadius.circular(size.toWidth), // color: ContactInitialsColors.getColor(initials), - borderRadius: BorderRadius.circular((size!.toFont)), + borderRadius: BorderRadius.circular(( borderRadius ?? size!.toFont)), ), child: Center( child: Text( diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart index 7b757274..fcbd1a3d 100644 --- a/lib/screens/common_widgets/file_card.dart +++ b/lib/screens/common_widgets/file_card.dart @@ -1,10 +1,14 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import '../../utils/colors.dart'; class FileCard extends StatefulWidget { PlatformFile fileDetail; + FileCard({Key? key, required this.fileDetail}) : super(key: key); @override @@ -19,9 +23,10 @@ class _FileCardState extends State { color: Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all( - color: ColorConstants.sidebarTextUnselected.withOpacity(0.5)), + color: ColorConstants.textBoxBg, + ), ), - margin: EdgeInsets.fromLTRB(0, 5, 5, 0), + margin: EdgeInsets.fromLTRB(0, 15, 10, 0), padding: EdgeInsets.fromLTRB(13, 8, 8, 13), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -35,16 +40,30 @@ class _FileCardState extends State { width: 100.toWidth, child: Text( widget.fileDetail.name, - style: TextStyle(color: Colors.black, fontSize: 12.toFont), + style: TextStyle( + color: Colors.black, + fontSize: 13.toFont, + ), maxLines: 1, overflow: TextOverflow.ellipsis, ), ), - Text(widget.fileDetail.size.toString(), - style: TextStyle(fontSize: 15.toFont)), + Text( + AppUtils.getFileSizeString( + bytes: widget.fileDetail.size.toDouble(), + decimals: 2, + ), + style: TextStyle( + fontSize: 9.toFont, + color: ColorConstants.sidebarTextUnselected, + ), + ), ], ), - Icon(Icons.remove_red_eye, size: 15.toFont) + Icon( + Icons.remove_red_eye_outlined, + size: 15.toFont, + ), ], ), ); diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index d37f3c73..caf92952 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -12,10 +12,12 @@ import 'package:flutter_svg/flutter_svg.dart'; class ContactDetailScreen extends StatefulWidget { final AtContact contact; + final Function()? onTrustFunc; const ContactDetailScreen({ Key? key, required this.contact, + this.onTrustFunc, }) : super(key: key); @override @@ -165,6 +167,7 @@ class _ContactDetailScreenState extends State { InkWell( onTap: () { Navigator.of(context).pop(false); + widget.onTrustFunc?.call(); _welcomeScreenProvider.selectedContacts = [ GroupContactsModel( contactType: ContactsType.CONTACT, diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart index 8d2c4d5c..ae153cae 100644 --- a/lib/screens/contact_new_version/trusted_contact_screen.dart +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -143,6 +143,9 @@ class _TrustedContactScreenState extends State { padding: const EdgeInsets.only(top: 120), child: ContactDetailScreen( contact: contact, + onTrustFunc: () { + Navigator.of(context).pop(); + }, ), ); }, diff --git a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart index 0ea74389..6ded5347 100644 --- a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart +++ b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart @@ -4,8 +4,10 @@ /// all [isSelected] functionalities are disabled import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import '../../../utils/images.dart'; @@ -32,6 +34,7 @@ class ContactListTile extends StatefulWidget { this.plainView = false, this.onTileTap}) : super(key: key); + @override _ContactListTileState createState() => _ContactListTileState(); } @@ -79,13 +82,8 @@ class _ContactListTileState extends State { onTap: () { widget.onRemove(); }, - child: Container( - width: 40.toHeight, - height: 40.toHeight, - child: FittedBox( - fit: BoxFit.fill, - child: Image.asset(ImageConstants.closeIcon), - ), + child: SvgPicture.asset( + AppVectors.icClose, ), ) : Icon( diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index dde304c8..80ce17b6 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -76,14 +76,21 @@ class _WelcomeScreenState extends State { } listenForFlushBarStatus() { - FileTransferProvider().flushBarStatusStream.listen((flushbarStatus) async { - OverlayService.instance.showOverlay( - flushbarStatus, - errorMessage: flushbarStatus == FLUSHBAR_STATUS.FAILED - ? _fileTransferProvider.error[_fileTransferProvider.SEND_FILES] - : null, - ); - }); + FileTransferProvider().flushBarStatusStream.listen( + (flushbarStatus) async { + final isSuccess = await OverlayService.instance.showOverlay( + flushbarStatus, + errorMessage: flushbarStatus == FLUSHBAR_STATUS.FAILED + ? _fileTransferProvider.error[_fileTransferProvider.SEND_FILES] + : null, + ); + + if (isSuccess == true) { + _fileTransferProvider.resetData(); + welcomeScreenProvider.resetData(); + } + }, + ); } setAtSign() async { diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart new file mode 100644 index 00000000..1e50b3f0 --- /dev/null +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -0,0 +1,143 @@ +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class ChoiceContactsWidget extends StatefulWidget { + final List? selectedContacts; + final Function(List contacts)? choiceContacts; + + const ChoiceContactsWidget({ + Key? key, + this.selectedContacts, + this.choiceContacts, + }) : super(key: key); + + @override + State createState() => _ChoiceContactsWidgetState(); +} + +class _ChoiceContactsWidgetState extends State { + late TrustedContactProvider trustedProvider; + + @override + void initState() { + trustedProvider = context.read(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Align( + alignment: Alignment.bottomCenter, + child: Container( + height: MediaQuery.of(context).size.height - 120, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + _buildHeaderWidget(), + const SizedBox(height: 24), + Padding( + padding: const EdgeInsets.only(left: 27), + child: Text( + "Send To:", + style: TextStyle( + fontSize: 25.toFont, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + Expanded( + child: ChoiceContactWidget( + contactsTrusted: trustedProvider.trustedContacts, + isChoiceMultiTypeContact: true, + showGroups: true, + selectedContacts: widget.selectedContacts, + choiceMultiTypeContact: (contacts) { + widget.choiceContacts?.call(contacts); + Provider.of( + NavService.navKey.currentContext!, + listen: false) + .updateSelectedContacts(contacts); + }, + ), + ), + ], + ), + ), + ), + ); + } + + Widget _buildHeaderWidget() { + return Padding( + padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + child: Row( + children: [ + Container( + height: 2, + width: 45, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31.toHeight, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17.toFont, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + ); + } +} diff --git a/lib/screens/welcome_screen/widgets/contact_card.dart b/lib/screens/welcome_screen/widgets/contact_card.dart new file mode 100644 index 00000000..25aea267 --- /dev/null +++ b/lib/screens/welcome_screen/widgets/contact_card.dart @@ -0,0 +1,134 @@ +import 'dart:typed_data'; + +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_flutter/widgets/custom_circle_avatar.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class ContactCard extends StatefulWidget { + final AtContact contact; + final double avatarSize, borderRadius; + final Function()? onTap; + final bool isSelected, isTrusted; + + const ContactCard({ + Key? key, + required this.contact, + this.avatarSize = 40, + this.borderRadius = 18, + this.onTap, + this.isSelected = false, + this.isTrusted = false, + }) : super(key: key); + + @override + State createState() => _ContactCardState(); +} + +class _ContactCardState extends State { + String contactName = 'UG'; + Uint8List? image; + + @override + void initState() { + getNameAndImage(); + super.initState(); + } + + void getNameAndImage() { + try { + contactName = widget.contact.atSign ?? 'UG'; + + if (contactName[0] == '@') { + contactName = contactName.substring(1); + } + + if (widget.contact.tags != null && + widget.contact.tags?['image'] != null) { + List intList = widget.contact.tags!['image'].cast(); + image = Uint8List.fromList(intList); + } + } catch (e) { + contactName = 'UG'; + print('Error in getting image $e'); + } + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + widget.onTap?.call(); + }, + child: Container( + padding: const EdgeInsets.fromLTRB(20, 13, 12, 13), + margin: const EdgeInsets.only(bottom: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.textBoxBg, + ), + color: Colors.white, + ), + child: Row( + children: [ + Container( + height: widget.avatarSize, + width: widget.avatarSize, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + widget.borderRadius, + ), + ), + child: image != null + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + borderRadius: widget.borderRadius, + size: widget.avatarSize, + initials: contactName, + ), + ), + const SizedBox(width: 18), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + widget.contact.atSign ?? '', + style: TextStyle( + fontSize: 14.toFont, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: TextStyle( + fontSize: 11.toFont, + fontWeight: FontWeight.w400, + color: Colors.black, + ), + ), + ], + ), + ), + widget.isTrusted + ? SvgPicture.asset( + AppVectors.icTrustActivated, + ) + : const SizedBox(), + ], + ), + ), + ); + } +} diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index 5f229ba7..b7ff1007 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -1,26 +1,31 @@ import 'dart:typed_data'; +import 'package:at_contact/at_contact.dart'; + /// This is a custom widget to display the selected contacts /// in a row with overlapping profile pictures import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; import 'package:atsign_atmosphere_pro/screens/group_contacts_screen/widgets/group_contact_list_tile.dart'; +import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/contact_card.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:at_common_flutter/services/size_config.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import '../../../utils/colors.dart'; - class OverlappingContacts extends StatefulWidget { final List selectedList; - final ValueChanged? onChnage; + final ValueChanged? onchange; - const OverlappingContacts( - {Key? key, required this.selectedList, this.onChnage}) - : super(key: key); + const OverlappingContacts({ + Key? key, + required this.selectedList, + this.onchange, + }) : super(key: key); @override _OverlappingContactsState createState() => _OverlappingContactsState(); @@ -29,17 +34,19 @@ class OverlappingContacts extends StatefulWidget { class _OverlappingContactsState extends State { bool isExpanded = false; Map _atsignImages = {}; + late TrustedContactProvider trustedProvider; @override void initState() { - for (var index = 0; index < widget.selectedList!.length; index++) { + trustedProvider = context.read(); + for (var index = 0; index < widget.selectedList.length; index++) { Uint8List? image; - if (widget.selectedList![index]?.contact?.tags != null && - widget.selectedList![index]?.contact?.tags!['image'] != null) { + if (widget.selectedList[index]?.contact?.tags != null && + widget.selectedList[index]?.contact?.tags!['image'] != null) { image = CommonUtilityFunctions() - .getContactImage(widget.selectedList![index]!.contact!); + .getContactImage(widget.selectedList[index]!.contact!); } - _atsignImages[widget.selectedList![index]?.contact?.atSign] = image; + _atsignImages[widget.selectedList[index]?.contact?.atSign] = image; } super.initState(); @@ -47,55 +54,83 @@ class _OverlappingContactsState extends State { @override Widget build(BuildContext context) { - return GestureDetector(onTap: () { - setState(() { - isExpanded = !isExpanded; - }); - }, child: Consumer( + return Consumer( builder: (context, provider, _) { - return Container( - height: 80.toHeight * widget.selectedList.length, - width: 350.toWidth, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - border: Border.all(color: ColorConstants.textBoxBg), - ), - child: ListView.builder( - itemCount: widget.selectedList.length, - itemBuilder: (context, index) { - Uint8List? image = - _atsignImages[widget.selectedList![index]?.contact?.atSign]; + return ListView.builder( + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: widget.selectedList.length, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + Uint8List? image = + _atsignImages[widget.selectedList[index]?.contact?.atSign]; - return ContactListTile( - isSelected: provider.selectedContacts - .contains(provider.selectedContacts[index]), - onAdd: () {}, - onRemove: () { - provider.removeContacts(provider.selectedContacts[index]); - widget.onChnage!(true); - }, - name: provider.selectedContacts[index].contact?.atSign - ?.substring(1) ?? - provider.selectedContacts[index].group?.groupName - ?.substring(0), - atSign: provider.selectedContacts[index].contact?.atSign ?? - '${provider.selectedContacts[index].group?.members?.length.toString()} Members', - image: (image != null) - ? CustomCircleAvatar( - byteImage: image, - nonAsset: true, - ) - : ContactInitial( - initials: provider - .selectedContacts[index].contact?.atSign ?? - provider.selectedContacts[index].group?.groupName, + return widget.selectedList[index]?.contact != null + ? Stack( + children: [ + Padding( + padding: const EdgeInsets.only(right: 8, top: 4), + child: ContactCard( + contact: widget.selectedList[index]!.contact!, + isTrusted: _checkTrustedContact( + widget.selectedList[index]!.contact!), + ), ), - ); - }, - ), + Positioned( + top: -5, + right: -5, + child: InkWell( + onTap: () { + provider.removeContacts( + provider.selectedContacts[index]); + }, + child: SvgPicture.asset( + AppVectors.icClose, + ), + ), + ) + ], + ) + : ContactListTile( + isSelected: provider.selectedContacts + .contains(provider.selectedContacts[index]), + onAdd: () {}, + onRemove: () { + provider.removeContacts(provider.selectedContacts[index]); + widget.onchange!(true); + }, + name: provider.selectedContacts[index].contact?.atSign + ?.substring(1) ?? + provider.selectedContacts[index].group?.groupName + ?.substring(0), + atSign: provider.selectedContacts[index].contact?.atSign ?? + '${provider.selectedContacts[index].group?.members?.length.toString()} Members', + image: (image != null) + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + initials: provider + .selectedContacts[index].contact?.atSign ?? + provider + .selectedContacts[index].group?.groupName, + ), + ); + }, ); }, - )); + ); + } + + bool _checkTrustedContact(AtContact contact) { + bool isTrusted = false; + for (var element in trustedProvider.trustedContacts) { + if (contact.atSign == element.atSign) { + isTrusted = true; + } + } + + return isTrusted; } } diff --git a/lib/screens/welcome_screen/widgets/select_contact_widget.dart b/lib/screens/welcome_screen/widgets/select_contact_widget.dart deleted file mode 100644 index b2dab17f..00000000 --- a/lib/screens/welcome_screen/widgets/select_contact_widget.dart +++ /dev/null @@ -1,111 +0,0 @@ -import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; -import 'package:at_contacts_group_flutter/screens/group_contact_view/group_contact_view.dart'; -import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; -import 'package:at_common_flutter/services/size_config.dart'; -import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; -import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; -import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -class SelectContactWidget extends StatefulWidget { - final Function(bool) onUpdate; - SelectContactWidget(this.onUpdate); - @override - _SelectContactWidgetState createState() => _SelectContactWidgetState(); -} - -class _SelectContactWidgetState extends State { - String? headerText; - - @override - void initState() { - headerText = TextStrings().welcomeContactPlaceholder; - - super.initState(); - } - - @override - Widget build(BuildContext context) { - SizeConfig().init(context); - return Theme( - data: ThemeData( - dividerColor: Colors.transparent, - textTheme: TextTheme( - subtitle1: TextStyle( - color: ColorConstants.inputFieldColor, - ), - ), - ), - child: Container( - child: _ExpansionTileWidget( - headerText, - (index) { - widget.onUpdate(true); - setState(() {}); - }, - )), - ); - } -} - -class _ExpansionTileWidget extends StatelessWidget { - final String? headerText; - final Function(int) onSelected; - - _ExpansionTileWidget(this.headerText, this.onSelected); - @override - Widget build(BuildContext context) { - return InkWell( - onTap: () { - selectContact(context); - }, - child: Container( - height: 62.toHeight, - width: 350.toWidth, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all(color: ColorConstants.grey), - ), - child: Padding( - padding: EdgeInsets.fromLTRB(20.toWidth, 20.toHeight, 0, 20.toHeight), - child: Text( - 'Select atSign', - style: TextStyle(color: ColorConstants.grey, fontSize: 15.toFont), - ), - ), - ), - ); - } - - selectContact(BuildContext context) async { - List? contactSelectedHistory = []; - Provider.of(NavService.navKey.currentContext!, - listen: false) - .selectedContacts - .forEach((GroupContactsModel? element) { - contactSelectedHistory.add(element ?? GroupContactsModel()); - }); - - await Navigator.push( - context, - MaterialPageRoute( - builder: (context) => GroupContactView( - asSelectionScreen: true, - showGroups: true, - showContacts: true, - selectedList: (s) { - Provider.of( - NavService.navKey.currentContext!, - listen: false) - .updateSelectedContacts(s); - onSelected(s.length); - }, - // singleSelection: true, - contactSelectedHistory: contactSelectedHistory, - ), - ), - ); - } -} diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index dfdc545d..6fa6fe28 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -2,29 +2,31 @@ import 'dart:async'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/file_card.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_callback.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/overlapping_contacts.dart'; -import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/select_contact_widget.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import '../../../utils/images.dart'; import '../../common_widgets/app_bar_custom.dart'; +import 'choice_contacts_widget.dart'; class WelcomeScreenHome extends StatefulWidget { - @override _WelcomeScreenHomeState createState() => _WelcomeScreenHomeState(); } @@ -40,10 +42,12 @@ class _WelcomeScreenHomeState extends State { isSentFileEntrySaved = true; ScrollController scrollController = ScrollController(); late FileTransferProvider filePickerModel; - String? notes; + List listContacts = []; + late TextEditingController noteController; @override void initState() { + noteController = TextEditingController(); isContactSelected = false; isFileSelected = false; super.initState(); @@ -70,11 +74,7 @@ class _WelcomeScreenHomeState extends State { ), fit: BoxFit.fill, ), - // shape: BoxShape.circle, - // gradient: LinearGradient( - // colors: [Color(0xffF05E3F), Color(0xffe9a642)], - // stops: [0.1, 0.8], - // ), + color: Colors.white, ), width: double.infinity, height: SizeConfig().screenHeight, @@ -82,24 +82,26 @@ class _WelcomeScreenHomeState extends State { controller: scrollController, child: Padding( padding: EdgeInsets.symmetric( - horizontal: 20.toWidth, vertical: 20.toHeight), + horizontal: 30.toWidth, vertical: 20.toHeight), child: Column( - crossAxisAlignment: CrossAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.end, children: [ - Container( - padding: EdgeInsets.symmetric( - horizontal: SizeConfig().isTablet(context) - ? 30.toWidth - : 0), - child: Text( - TextStrings().selectFiles, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, + Expanded( + child: Padding( + padding: EdgeInsets.symmetric( + horizontal: + SizeConfig().isTablet(context) ? 33.toWidth : 0, + ), + child: Text( + TextStrings().selectFiles, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), ), ), ), @@ -107,12 +109,15 @@ class _WelcomeScreenHomeState extends State { builder: (context, provider, _) { if (provider.selectedFiles.isNotEmpty) { return InkWell( - onTap: SelectFiles, + onTap: selectFiles, child: Container( - color: Colors.black, + height: 40.toHeight, + width: 40.toHeight, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(10), + ), padding: EdgeInsets.all(10), - margin: - EdgeInsets.only(right: 30.toWidth), child: Icon( Icons.add_circle_outline, color: Colors.white, @@ -126,188 +131,169 @@ class _WelcomeScreenHomeState extends State { }), ], ), - SizedBox(height: 16), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isEmpty) { + const SizedBox(height: 16), + Consumer(builder: (context, provider, _) { + if (provider.selectedFiles.isNotEmpty) { + return Wrap( + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + runSpacing: 5.0.toWidth, + spacing: 10.0.toHeight, + children: List.generate( + provider.selectedFiles.length, + (index) { + return SizedBox( + width: (MediaQuery.of(context).size.width - + 50.toWidth) / + 2, + child: Stack( + children: [ + FileCard( + fileDetail: provider.selectedFiles[index], + ), + Positioned( + top: 0, + right: -5, + child: InkWell( + onTap: () { + provider.deleteFiles(index); + provider.calculateSize(); + }, + child: SvgPicture.asset( + AppVectors.icClose, + ), + ), + ), + ], + ), + ); + }, + ), + ); + } else { return InkWell( - onTap: SelectFiles, + onTap: selectFiles, child: Container( height: 142.toHeight, width: 350.toWidth, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), border: Border.all( - color: ColorConstants.orangeColor), + color: ColorConstants.orangeColor, + ), ), child: Center( child: Text( 'Select file(s) to transfer', style: TextStyle( - color: ColorConstants.orangeColor, - fontSize: 16.toFont), + color: ColorConstants.orangeColor, + fontSize: 16.toFont, + ), ), ), ), ); - } else { - return SizedBox(); - } - }), - SizedBox(height: 16), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isNotEmpty) { - return Wrap( - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.start, - runSpacing: 5.0.toWidth, - spacing: 10.0.toHeight, - children: List.generate( - provider.selectedFiles.length, (index) { - return SizedBox( - width: (320.toWidth) / 2, - child: Stack( - children: [ - FileCard( - fileDetail: - provider.selectedFiles[index], - ), - Positioned( - top: -10, - right: -10, - child: InkWell( - onTap: () { - provider.selectedFiles - .removeAt(index); - provider.calculateSize(); - provider.notifyListeners(); - }, - child: Container( - width: 40.toHeight, - height: 40.toHeight, - child: FittedBox( - fit: BoxFit.fill, - child: Image.asset( - ImageConstants.closeIcon), - ), - ), - ), - ), - ], - ), - ); - }), - ); - } else { - return SizedBox(); } }), SizedBox(height: 16.toHeight), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - Padding( - padding: EdgeInsets.only( - left: SizeConfig().isTablet(context) - ? 30.toWidth - : 0), - child: Text( - TextStrings().selectContacts, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, + Expanded( + child: Padding( + padding: EdgeInsets.only( + left: SizeConfig().isTablet(context) + ? 30.toWidth + : 0), + child: Text( + TextStrings().selectContacts, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), ), ), ), - Consumer( - builder: (context, provider, _) { - if (provider.selectedContacts.isNotEmpty) { - return InkWell( - onTap: () {}, - child: Container( - color: Colors.black, - padding: EdgeInsets.all(10), - margin: - EdgeInsets.only(right: 30.toWidth), - child: Icon( - Icons.add_circle_outline, - color: Colors.white, - size: 15.toFont, - ), - ), - ); - } else { - return SizedBox(); - } - }, - ), + Visibility( + visible: context + .watch() + .selectedContacts + .isNotEmpty, + child: InkWell( + onTap: () { + _choiceContact(); + }, + child: Container( + height: 40.toHeight, + width: 40.toHeight, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(10), + ), + padding: EdgeInsets.all(10), + child: Icon( + Icons.add_circle_outline, + color: Colors.white, + size: 15.toFont, + ), + ), + ), + ) ], ), SizedBox(height: 16.toHeight), - Consumer( - builder: (context, provider, _) { - if (filePickerModel.scrollToBottom) { - scrollToBottom(); - } - return SizedBox(); - }), + // Consumer(builder: (context, provider, _) { + // if (filePickerModel.scrollToBottom) { + // scrollToBottom(); + // } + // return SizedBox(); + // }), Consumer( builder: (context, provider, _) { if (provider.scrollToBottom) { scrollToBottom(); } - if ((provider.selectedContacts.isEmpty)) { - return SelectContactWidget( - (b) { - print(b); - setState(() { - isContactSelected = b; - }); - }, - ); - } else { - if ((provider.selectedContacts.isEmpty)) { - return Container(); - } else { - return OverlappingContacts( - selectedList: provider.selectedContacts, - onChnage: (isUpdate) { - setState(() {}); - }, - ); - } - } + + return provider.selectedContacts.isEmpty + ? _buildChoiceContact() + : OverlappingContacts( + selectedList: provider.selectedContacts, + onchange: (isUpdate) { + setState(() {}); + }, + ); }, ), SizedBox(height: 16.toHeight), Container( - width: 350.toWidth, + height: 94.toHeight, + width: double.infinity, decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), border: Border.all(color: ColorConstants.grey), ), + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4), child: TextField( - onChanged: (String txt) { - setState(() { - notes = txt; - }); - }, + controller: noteController, + maxLines: 5, + style: TextStyle( + fontSize: 14.toFont, + color: Colors.black, + ), decoration: InputDecoration( - labelText: 'Send Message (Optional)', + hintText: 'Send Message (Optional)', + hintStyle: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + border: InputBorder.none, labelStyle: TextStyle(fontSize: 15.toFont), fillColor: Colors.white, - border: OutlineInputBorder( - borderSide: BorderSide( - // color: ColorConstants.grey, - ), - borderRadius: BorderRadius.all( - Radius.circular(10.0), - ), - ), ), keyboardType: TextInputType.multiline, + textInputAction: TextInputAction.done, ), ), SizedBox(height: 40.toHeight), @@ -317,13 +303,9 @@ class _WelcomeScreenHomeState extends State { height: 67.toHeight, width: 350.toWidth, decoration: BoxDecoration( - borderRadius: - BorderRadius.all(Radius.circular(10)), + borderRadius: BorderRadius.all(Radius.circular(10)), gradient: LinearGradient( - colors: [ - Color(0xffF05E3F), - Color(0xffe9a642) - ], + colors: [Color(0xffF05E3F), Color(0xffe9a642)], stops: [0.1, 0.8], ), ), @@ -334,8 +316,7 @@ class _WelcomeScreenHomeState extends State { Text( 'Transfer Now', style: TextStyle( - fontSize: 20.toFont, - color: Colors.white), + fontSize: 20.toFont, color: Colors.white), ), SizedBox(width: 10), Icon(Icons.arrow_forward, @@ -354,7 +335,52 @@ class _WelcomeScreenHomeState extends State { ); } - SelectFiles() async { + Widget _buildChoiceContact() { + return InkWell( + onTap: _choiceContact, + child: Container( + height: 62.toHeight, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all(color: ColorConstants.grey), + ), + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 20.toWidth), + child: Text( + 'Select atSign', + style: TextStyle( + color: ColorConstants.grey, + fontSize: 15.toFont, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ); + } + + void _choiceContact() async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return ChoiceContactsWidget( + selectedContacts: listContacts, + choiceContacts: (contacts) { + setState(() { + listContacts = contacts; + }); + }, + ); + }, + ); + } + + selectFiles() async { await providerCallback(context, task: (provider) => provider.pickFiles(provider.MEDIA), taskName: (provider) => provider.PICK_FILES, @@ -434,12 +460,14 @@ class _WelcomeScreenHomeState extends State { filePickerModel.selectedFiles, _welcomeScreenProvider.selectedContacts, groupName: _welcomeScreenProvider.groupName, - notes: notes, + notes: noteController.text, ); if (mounted && res is bool) { setState(() { isFileShareFailed = !res; + listContacts.clear(); + noteController.clear(); }); } else if (res == null) { if (mounted) { diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index 005b601d..d2820107 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -14,11 +14,16 @@ import '../data_models/file_transfer_status.dart'; class OverlayService { OverlayService._(); + static final OverlayService _instance = OverlayService._(); + static OverlayService get instance => _instance; OverlayEntry? snackBarOverlayEntry; - showOverlay(FLUSHBAR_STATUS flushbarStatus, {String? errorMessage}) async { + Future showOverlay( + FLUSHBAR_STATUS flushbarStatus, { + String? errorMessage, + }) async { hideOverlay(); snackBarOverlayEntry = @@ -28,10 +33,12 @@ class OverlayService { if (flushbarStatus == FLUSHBAR_STATUS.DONE) { await Future.delayed(Duration(seconds: 3)); hideOverlay(); + return true; } else if (flushbarStatus == FLUSHBAR_STATUS.FAILED) { await Future.delayed(Duration(seconds: 5)); hideOverlay(); } + return null; } hideOverlay() { diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index dcde9d8e..f8af530a 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -23,4 +23,6 @@ class AppVectors { static String icTrash = '$_basePath/ic_trash.svg'; static String icArrow = '$_basePath/ic_arrow.svg'; static String icImage = '$_basePath/ic_image.svg'; + static String icClose = '$_basePath/ic_close.svg'; + static String icTrustActivated = '$_basePath/ic_trust_activated.svg'; } diff --git a/lib/view_models/file_transfer_provider.dart b/lib/view_models/file_transfer_provider.dart index 0e74c119..f23b35bf 100644 --- a/lib/view_models/file_transfer_provider.dart +++ b/lib/view_models/file_transfer_provider.dart @@ -134,6 +134,11 @@ class FileTransferProvider extends BaseModel { } } + void deleteFiles(int fileIndex) { + selectedFiles.removeAt(fileIndex); + notifyListeners(); + } + showNoPermissionDialog() async { await showDialog( context: NavService.navKey.currentContext!, From 3c99802c9465f4c251a85bb41accda23975bbec4 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Fri, 17 Feb 2023 15:35:06 +0530 Subject: [PATCH 37/94] fix: encryption service param --- lib/services/file_transfer_service.dart | 8 +- pubspec.lock | 366 +++++++++++------------- 2 files changed, 181 insertions(+), 193 deletions(-) diff --git a/lib/services/file_transfer_service.dart b/lib/services/file_transfer_service.dart index 4aa346dd..44dd5379 100644 --- a/lib/services/file_transfer_service.dart +++ b/lib/services/file_transfer_service.dart @@ -445,7 +445,9 @@ class FileTransferService { } void encryptFileInIsolate(Map params) async { - final encryptedFile = await EncryptionService().encryptFileInChunks( + final encryptedFile = + await EncryptionService(BackendService.getInstance().currentAtSign ?? '') + .encryptFileInChunks( params['file'], params['encryptionKey'], params['fileEncryptionChunkSize'], @@ -455,7 +457,9 @@ void encryptFileInIsolate(Map params) async { } void decryptFileInIsolate(Map params) async { - final decryptedFile = await EncryptionService().decryptFileInChunks( + final decryptedFile = + await EncryptionService(BackendService.getInstance().currentAtSign ?? '') + .decryptFileInChunks( params['file'], params['encryptionKey'], params['fileEncryptionChunkSize'], diff --git a/pubspec.lock b/pubspec.lock index 60282f0f..4159a8ec 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,42 +5,42 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + sha256: "569ddca58d535e601dd1584afa117710abc999d036c0cd2c51777fb257df78e8" url: "https://pub.dev" source: hosted - version: "47.0.0" + version: "53.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + sha256: "10927c4b7c7c88b1adbca278c3d5531db92e2f4b4abf04e2919a800af965f3f5" url: "https://pub.dev" source: hosted - version: "4.7.0" + version: "5.5.0" archive: dependency: "direct main" description: name: archive - sha256: "793964beb8e297995714326628881437d4211f10fc8843534bab54129cd896ee" + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d url: "https://pub.dev" source: hosted - version: "3.3.1" + version: "3.3.6" args: dependency: transitive description: name: args - sha256: b003c3098049a51720352d219b0bb5f219b60fbfb68e7a4748139a06a5676515 + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" url: "https://pub.dev" source: hosted - version: "2.3.1" + version: "2.4.0" asn1lib: dependency: transitive description: name: asn1lib - sha256: c8e7571a1e9177db4c9b8de1b8f0e462dda18f397eed40b3787d90171d6251e7 + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.4.0" async: dependency: transitive description: @@ -66,14 +66,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.0" + at_chops: + dependency: transitive + description: + name: at_chops + sha256: b0b3c0a80493be0e95f69cf487bfbfc0ea8c5a26b32270254f368d48d662e04d + url: "https://pub.dev" + source: hosted + version: "1.0.0" at_client: dependency: transitive description: name: at_client - sha256: "06f52fc2eb49124be6572b44cda487a418fd19b2c6a3da7671a1e6d0d9e06a96" + sha256: ef5574cbc0dbc575e6a655993aa4c9ab8edea2f81b889120801dd08d04b4bba6 url: "https://pub.dev" source: hosted - version: "3.0.49" + version: "3.0.55" at_client_mobile: dependency: "direct main" description: @@ -94,10 +102,10 @@ packages: dependency: "direct main" description: name: at_commons - sha256: b9547bf2352f8e064d92539690af4b6c8d1e2ee5ef6313d45b860b90b06a9d31 + sha256: c5b2931c024b62df9f9f45e083629e23e1efdc88544412c1e09869c1122e062e url: "https://pub.dev" source: hosted - version: "3.0.35" + version: "3.0.37" at_contact: dependency: "direct main" description: @@ -119,7 +127,7 @@ packages: description: path: "packages/at_contacts_group_flutter" ref: "feature/new-version-contacts-group" - resolved-ref: "8f14684d7dbd804e79ff45451502546e2280b0b2" + resolved-ref: f797503917abe50b35c3588dcfd2501ad8728a99 url: "https://github.com/atsign-foundation/at_widgets" source: git version: "4.0.10" @@ -127,18 +135,18 @@ packages: dependency: transitive description: name: at_file_saver - sha256: e5994383ce4583fe4e4c0f9d75216fef3442b75f48c81ab05b718d5d3db7c745 + sha256: d1d5322be265ff395b6160f8880b4ebd713b673ea739662eca463def9c588f00 url: "https://pub.dev" source: hosted - version: "0.1.1" + version: "0.1.2" at_lookup: dependency: transitive description: name: at_lookup - sha256: "8e9b21f8b7b39ff0c0f8361a3273e36614f5e9f824f00b8b25097c20bc434bb2" + sha256: "77bee8af965e1c27bb372a48f961206051de6f4da27f2226c4986e592758fe76" url: "https://pub.dev" source: hosted - version: "3.0.33" + version: "3.0.35" at_onboarding_flutter: dependency: "direct main" description: @@ -176,10 +184,10 @@ packages: dependency: "direct main" description: name: at_sync_ui_flutter - sha256: "08aae8507aa625f9d45e3ec07dff7806288ac326e153ab526becd16d10e82ee5" + sha256: "9297d27ad1219f61a13372d554d94b5610027df7bd566f08e351a7f9ea09aa17" url: "https://pub.dev" source: hosted - version: "1.0.6" + version: "1.0.8" at_utf7: dependency: transitive description: @@ -216,10 +224,10 @@ packages: dependency: "direct main" description: name: carousel_slider - sha256: "869a3f4f2ad0e8d029d9cefd20d2cafd0a50847b74e7aab3a8eec662b0c7d2ee" + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" url: "https://pub.dev" source: hosted - version: "4.1.1" + version: "4.2.1" characters: dependency: transitive description: @@ -236,14 +244,6 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.1" - cli_dialog: - dependency: transitive - description: - name: cli_dialog - sha256: "47530e1c4a6190662954cefce196d35143c4ed2675ea697d6e542790bdef5641" - url: "https://pub.dev" - source: hosted - version: "0.5.0" cli_util: dependency: transitive description: @@ -268,22 +268,30 @@ packages: url: "https://pub.dev" source: hosted version: "1.17.0" + console: + dependency: transitive + description: + name: console + sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a + url: "https://pub.dev" + source: hosted + version: "4.1.0" convert: dependency: transitive description: name: convert - sha256: "196284f26f69444b7f5c50692b55ec25da86d9e500451dc09333bf2e3ad69259" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" url: "https://pub.dev" source: hosted - version: "3.0.2" + version: "3.1.1" coverage: dependency: transitive description: name: coverage - sha256: "17cf9a839208acaed741b1f00ac87cd1fde00548198ba57205cca45c749cb379" + sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.6.3" cron: dependency: transitive description: @@ -296,10 +304,10 @@ packages: dependency: transitive description: name: cross_file - sha256: f71079978789bc2fe78d79227f1f8cfe195b31bbd8db2399b0d15a4b96fb843b + sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" url: "https://pub.dev" source: hosted - version: "0.3.3+2" + version: "0.3.3+4" crypto: dependency: transitive description: @@ -312,10 +320,10 @@ packages: dependency: transitive description: name: crypton - sha256: "17fa0d085c422447a70864a361908f0268be4c1cd8611f93826a782eefb5469e" + sha256: "886462e83bf642ba10f5382002654d27da8c2e6e1f42d928f12764cfa204f124" url: "https://pub.dev" source: hosted - version: "2.0.5" + version: "2.1.0" csslib: dependency: transitive description: @@ -332,14 +340,6 @@ packages: url: "https://pub.dev" source: hosted version: "0.1.3" - dart_console: - dependency: transitive - description: - name: dart_console - sha256: "1cefa721c5d951e6f11802bf555efaffacfe67a3b181395384d56db8f906bffa" - url: "https://pub.dev" - source: hosted - version: "1.1.1" dbus: dependency: transitive description: @@ -360,10 +360,10 @@ packages: dependency: transitive description: name: emoji_picker_flutter - sha256: "41b32e6de5def3c3c06f1b1f52140e57b4d90fa4ce0719ce70476c2f712b5cf3" + sha256: feb141b3ab9188e33c2ec35212136ecb3f79215d881aa5af3d3e0df28f84b725 url: "https://pub.dev" source: hosted - version: "1.3.1" + version: "1.5.2" encrypt: dependency: transitive description: @@ -432,10 +432,10 @@ packages: dependency: transitive description: name: file_selector_platform_interface - sha256: "92b924983d18c53d9d354b95be261af869f2a8efa125b293d2db6569c32dd9c3" + sha256: "17cdfe3d13a7d3e29e3d3978577ce840fcf94497d7de51bdea378abf9a34fc2c" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.4.0" file_selector_web: dependency: transitive description: @@ -464,10 +464,10 @@ packages: dependency: transitive description: name: fixnum - sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.1.0" flutter: dependency: "direct main" description: flutter @@ -477,10 +477,10 @@ packages: dependency: transitive description: name: flutter_image_compress - sha256: "661b138ba5c20c76156378687a8e9464033ffb59c17cbc6eb3429390caf99218" + sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" url: "https://pub.dev" source: hosted - version: "1.1.2" + version: "1.1.3" flutter_keychain: dependency: "direct main" description: @@ -567,10 +567,10 @@ packages: dependency: transitive description: name: frontend_server_client - sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" get_it: dependency: transitive description: @@ -583,10 +583,10 @@ packages: dependency: transitive description: name: glob - sha256: c51b4fdfee4d281f49b8c957f1add91b815473597f76bcf07377987f66a55729 + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" google_fonts: dependency: "direct main" description: @@ -607,10 +607,10 @@ packages: dependency: transitive description: name: html - sha256: bfef906cbd4e78ef49ae511d9074aebd1d2251482ef601a280973e8b58b51bbf + sha256: d9793e10dbe0e6c364f4c59bf3e01fb33a9b2a674bc7a1081693dba0614b6269 url: "https://pub.dev" source: hosted - version: "0.15.0" + version: "0.15.1" http: dependency: "direct main" description: @@ -631,18 +631,18 @@ packages: dependency: transitive description: name: http_parser - sha256: db3060f22889f3d9d55f6a217565486737037eec3609f7f3eca4d0c67ee0d8a0 + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" url: "https://pub.dev" source: hosted - version: "4.0.1" + version: "4.0.2" image: dependency: transitive description: name: image - sha256: "9d2c5f73435a70a936d317769ee8e7ef480e37674b9f2bce95ea98969a307855" + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" url: "https://pub.dev" source: hosted - version: "3.2.0" + version: "3.3.0" image_compression: dependency: transitive description: @@ -655,10 +655,10 @@ packages: dependency: transitive description: name: internet_connection_checker - sha256: "6836d1e2193b3deab615820084a69521ec245550aba6e0a91b21c3757129872e" + sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" url: "https://pub.dev" source: hosted - version: "0.0.1+4" + version: "1.0.0+1" intl: dependency: "direct main" description: @@ -671,10 +671,10 @@ packages: dependency: transitive description: name: io - sha256: "0d4c73c3653ab85bf696d51a9657604c900a370549196a91f33e4c39af760852" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" url: "https://pub.dev" source: hosted - version: "1.0.3" + version: "1.0.4" js: dependency: transitive description: @@ -695,10 +695,10 @@ packages: dependency: transitive description: name: logging - sha256: "293ae2d49fd79d4c04944c3a26dfd313382d5f52e821ec57119230ae16031ad4" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.1.1" matcher: dependency: transitive description: @@ -727,10 +727,10 @@ packages: dependency: transitive description: name: mime - sha256: dab22e92b41aa1255ea90ddc4bc2feaf35544fd0728e209638cad041a6e3928a + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.4" mocktail: dependency: transitive description: @@ -743,18 +743,18 @@ packages: dependency: "direct dev" description: name: msix - sha256: "03a51353b0fe375097c291eddc5c03729f0155c66403d665e6534c5963996da9" + sha256: e3de4d9f52543ad6e4b0f534991e1303cbd379d24be28dd241ac60bd9439a201 url: "https://pub.dev" source: hosted - version: "3.6.3" + version: "3.7.0" mutex: dependency: transitive description: name: mutex - sha256: "9bd00c5fbb3fe0ca22508aa81dab0bab9c565f73b0c9d41adb582bfd464aa2c7" + sha256: "03116a4e46282a671b46c12de649d72c0ed18188ffe12a8d0fc63e83f4ad88f4" url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" nested: dependency: transitive description: @@ -831,10 +831,10 @@ packages: dependency: transitive description: name: package_info_plus_web - sha256: d652f0a865d2da52856e2001c53e83fe34a6009cd8d8751d38cf8173c0abf906 + sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b url: "https://pub.dev" source: hosted - version: "1.0.5" + version: "1.0.6" package_info_plus_windows: dependency: transitive description: @@ -871,50 +871,42 @@ packages: dependency: transitive description: name: path_provider - sha256: "050e8e85e4b7fecdf2bb3682c1c64c4887a183720c802d323de8a5fd76d372dd" + sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.0.12" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "4d5542667150f5b779ba411dd5dc0b674a85d1355e45bda2877e0e82f4ad08d8" + sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e url: "https://pub.dev" source: hosted - version: "2.0.20" - path_provider_ios: + version: "2.0.22" + path_provider_foundation: dependency: transitive description: - name: path_provider_ios - sha256: "03d639406f5343478352433f00d3c4394d52dac8df3d847869c5e2333e0bbce8" + name: path_provider_foundation + sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" url: "https://pub.dev" source: hosted - version: "2.0.11" + version: "2.1.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: ab0987bf95bc591da42dffb38c77398fc43309f0b9b894dcc5d6f40c4b26c379 - url: "https://pub.dev" - source: hosted - version: "2.1.7" - path_provider_macos: - dependency: transitive - description: - name: path_provider_macos - sha256: "2a97e7fbb7ae9dcd0dfc1220a78e9ec3e71da691912e617e8715ff2a13086ae8" + sha256: "2e32f1640f07caef0d3cb993680f181c79e54a3827b997d5ee221490d131fbd9" url: "https://pub.dev" source: hosted - version: "2.0.6" + version: "2.1.8" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "27dc7a224fcd07444cb5e0e60423ccacea3e13cf00fc5282ac2c918132da931d" + sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.0.5" path_provider_windows: dependency: transitive description: @@ -951,34 +943,34 @@ packages: dependency: transitive description: name: permission_handler_apple - sha256: "6367799be76d1fe70ffe2df7f025abfe28818b450f550621778995badbebf519" + sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" url: "https://pub.dev" source: hosted - version: "9.0.4" + version: "9.0.7" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: ca16451bfdc6d26693d10b37b2d81370bdf3f0318422f3eecfd6004f5bd7d21f + sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" url: "https://pub.dev" source: hosted - version: "3.7.0" + version: "3.9.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: "40ad5ab4d3c65d75c7f3a069065c77503aae19a1cf01ba246d43489e14f1b90c" + sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b url: "https://pub.dev" source: hosted - version: "0.1.0" + version: "0.1.2" petitparser: dependency: transitive description: name: petitparser - sha256: "2ebb289dc4764ec397f5cd3ca9881c6d17196130a7d646ed022a0dd9c2e25a71" + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" url: "https://pub.dev" source: hosted - version: "5.0.0" + version: "5.1.0" pin_code_fields: dependency: transitive description: @@ -999,10 +991,10 @@ packages: dependency: transitive description: name: plugin_platform_interface - sha256: "075f927ebbab4262ace8d0b283929ac5410c0ac4e7fc123c76429564facfb757" + sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.3" pointycastle: dependency: transitive description: @@ -1031,18 +1023,18 @@ packages: dependency: "direct main" description: name: provider - sha256: "8d7d4c2df46d6a6270a4e10404bfecb18a937e3e00f710c260d0a10415ce6b7b" + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f url: "https://pub.dev" source: hosted - version: "6.0.3" + version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver - sha256: "816c1a640e952d213ddd223b3e7aafae08cd9f8e1f6864eed304cc13b0272b07" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.3" qr: dependency: transitive description: @@ -1079,26 +1071,26 @@ packages: dependency: "direct main" description: name: rxdart - sha256: "5d22055fd443806c03ef24a02000637cf51eae49c2a0168d38a43fc166b0209c" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" url: "https://pub.dev" source: hosted - version: "0.27.5" + version: "0.27.7" share_plus: dependency: "direct main" description: name: share_plus - sha256: dac0dc7ee100c750b61cca65a2cb4fa2cba0a270481cf3f63f2ee3932d247c94 + sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a url: "https://pub.dev" source: hosted - version: "4.1.0" + version: "4.5.3" share_plus_linux: dependency: transitive description: name: share_plus_linux - sha256: "308853d0472048e4c9b58ccc7faee6937732dc9fee7ab8e09f28bcd8d00a7a03" + sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4 url: "https://pub.dev" source: hosted - version: "3.0.0" + version: "3.0.1" share_plus_macos: dependency: transitive description: @@ -1111,18 +1103,18 @@ packages: dependency: transitive description: name: share_plus_platform_interface - sha256: "04e7c8398fdb776943bb61d7ff109c84db15d1adffaac06696fb46761939be47" + sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" url: "https://pub.dev" source: hosted - version: "3.0.3" + version: "3.2.0" share_plus_web: dependency: transitive description: name: share_plus_web - sha256: d53953fc009365d7256b55adeda1fff2d579057796649c7e29812c1efb442dd4 + sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935 url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.1.0" share_plus_windows: dependency: transitive description: @@ -1135,42 +1127,34 @@ packages: dependency: transitive description: name: shared_preferences - sha256: "76917b7d4b9526b2ba416808a7eb9fb2863c1a09cf63ec85f1453da240fa818a" + sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9" url: "https://pub.dev" source: hosted - version: "2.0.15" + version: "2.0.17" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "3e128864b9cff21bdd5b3ad569953070a851d62901bee880bb052b1110b38007" + sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7" url: "https://pub.dev" source: hosted - version: "2.0.13" - shared_preferences_ios: + version: "2.0.15" + shared_preferences_foundation: dependency: transitive description: - name: shared_preferences_ios - sha256: "585a14cefec7da8c9c2fb8cd283a3bb726b4155c0952afe6a0caaa7b2272de34" + name: shared_preferences_foundation + sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.3" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "28aefc1261746e7bad3d09799496054beb84e8c4ffcdfed7734e17b4ada459a5" - url: "https://pub.dev" - source: hosted - version: "2.1.1" - shared_preferences_macos: - dependency: transitive - description: - name: shared_preferences_macos - sha256: fbb94bf296576f49be37a1496d5951796211a8db0aa22cc0d68c46440dad808c + sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874 url: "https://pub.dev" source: hosted - version: "2.0.4" + version: "2.1.3" shared_preferences_platform_interface: dependency: transitive description: @@ -1191,18 +1175,18 @@ packages: dependency: transitive description: name: shared_preferences_windows - sha256: "97f7ab9a7da96d9cf19581f5de520ceb529548498bd6b5e0ccd02d68a0d15eba" + sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9" url: "https://pub.dev" source: hosted - version: "2.1.1" + version: "2.1.3" shelf: dependency: transitive description: name: shelf - sha256: "8ec607599dd0a78931a5114cdac7d609b6dbbf479a38acc9a6dba024b2a30ea0" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c url: "https://pub.dev" source: hosted - version: "1.3.2" + version: "1.4.0" shelf_packages_handler: dependency: transitive description: @@ -1223,10 +1207,10 @@ packages: dependency: transitive description: name: shelf_web_socket - sha256: "6db16374bc3497d21aa0eebe674d3db9fdf82082aac0f04dc7b44e4af5b08afc" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 url: "https://pub.dev" source: hosted - version: "1.0.2" + version: "1.0.3" showcaseview: dependency: "direct main" description: @@ -1244,18 +1228,18 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "8c463326277f68a628abab20580047b419c2ff66756fd0affd451f73f9508c11" + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" source_maps: dependency: transitive description: name: source_maps - sha256: "52de2200bb098de739794c82d09c41ac27b2e42fd7e23cce7b9c74bf653c7296" + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" url: "https://pub.dev" source: hosted - version: "0.10.10" + version: "0.10.12" source_span: dependency: transitive description: @@ -1340,74 +1324,74 @@ packages: dependency: "direct main" description: name: url_launcher - sha256: "4f0d5f9bf7efba3da5a7ff03bd33cc898c84bac978c068e1c94483828e709592" + sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b url: "https://pub.dev" source: hosted - version: "6.1.5" + version: "6.1.9" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "9e262cbec69233717d5198f4d0b0c4961fa027e3685ba425442c43c64f38bb9b" + sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" url: "https://pub.dev" source: hosted - version: "6.0.19" + version: "6.0.23" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "6ba7dddee26c9fae27c9203c424631109d73c8fa26cfa7bc3e35e751cb87f62e" + sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" url: "https://pub.dev" source: hosted - version: "6.0.17" + version: "6.1.0" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "360fa359ab06bcb4f7c5cd3123a2a9a4d3364d4575d27c4b33468bd4497dd094" + sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: a9b3ea9043eabfaadfa3fb89de67a11210d85569086d22b3854484beab8b3978 + sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.2" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "80b860b31a11ebbcbe51b8fe887efc204f3af91522f3b51bcda4622d276d2120" + sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "5669882643b96bb6d5786637cac727c6e918a790053b09245fd4513b8a07df2a" + sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" url: "https://pub.dev" source: hosted - version: "2.0.13" + version: "2.0.14" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: e3c3b16d3104260c10eea3b0e34272aaa57921f83148b0619f74c2eced9b7ef1 + sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 url: "https://pub.dev" source: hosted - version: "3.0.1" + version: "3.0.3" uuid: dependency: transitive description: name: uuid - sha256: "2469694ad079893e3b434a627970c33f2fa5adc46dfe03c9617546969a9a8afc" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" url: "https://pub.dev" source: hosted - version: "3.0.6" + version: "3.0.7" vector_math: dependency: transitive description: @@ -1420,10 +1404,10 @@ packages: dependency: "direct main" description: name: video_compress - sha256: e61292ee8733a7f1c11393d285df01f883e8d75d86a598da6d8cc9b9d662aa2d + sha256: "407693726e674a1e1958801deb2d9daf5a5297707ba6d03375007012dae7389a" url: "https://pub.dev" source: hosted - version: "3.1.1" + version: "3.1.2" video_thumbnail: dependency: "direct main" description: @@ -1436,26 +1420,26 @@ packages: dependency: transitive description: name: vm_service - sha256: e686ae49284939abc06972e25f634ccdb5007d5664c4dfa1995002e8b6aa27a9 + sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 url: "https://pub.dev" source: hosted - version: "8.3.0" + version: "9.4.0" watcher: dependency: transitive description: name: watcher - sha256: e42dfcc48f67618344da967b10f62de57e04bae01d9d3af4c2596f3712a88c99 + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" url: "https://pub.dev" source: hosted - version: "1.0.1" + version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: "3a969ddcc204a3e34e863d204b29c0752716f78b6f9cc8235083208d268a4ccd" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b url: "https://pub.dev" source: hosted - version: "2.2.0" + version: "2.3.0" webkit_inspection_protocol: dependency: transitive description: @@ -1476,26 +1460,26 @@ packages: dependency: transitive description: name: webview_flutter_android - sha256: ae195a03396e61a15a75b969f222ed7059ecd006d2fa52db48f63ba36dee44e7 + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" url: "https://pub.dev" source: hosted - version: "2.10.1" + version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "2fae5e8b792f563bf0e45ea4b435e11a3a490ae1e96a4be4ed078ca99e239673" + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" url: "https://pub.dev" source: hosted - version: "1.9.3" + version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: f085c3d595267185ab446169b6b17b5f6bc584395ff8c8623d7a379f6a869cc3 + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 url: "https://pub.dev" source: hosted - version: "2.9.4" + version: "2.9.5" win32: dependency: transitive description: @@ -1508,18 +1492,18 @@ packages: dependency: transitive description: name: xdg_directories - sha256: "11541eedefbcaec9de35aa82650b695297ce668662bbd6e3911a7fabdbde589f" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 url: "https://pub.dev" source: hosted - version: "0.2.0+2" + version: "0.2.0+3" xml: dependency: transitive description: name: xml - sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" url: "https://pub.dev" source: hosted - version: "6.1.0" + version: "6.2.2" yaml: dependency: transitive description: @@ -1532,10 +1516,10 @@ packages: dependency: transitive description: name: zxing2 - sha256: "4d7f5c4759968363995cadfd49a776ecb6390b55ccf55dc0fcc9832a9da2edec" + sha256: "1913c33844c68b62573741134ef5f987f1e15e331c95ac7dc327afbb9896e9ec" url: "https://pub.dev" source: hosted - version: "0.1.0" + version: "0.1.1" sdks: - dart: ">=2.18.0 <3.0.0" - flutter: ">=3.0.0" + dart: ">=2.19.0 <3.0.0" + flutter: ">=3.3.0" From 6c0a90bfc82ceb8c8cefb897f4f175a79ff04a4a Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Fri, 17 Feb 2023 17:35:55 +0530 Subject: [PATCH 38/94] fix: download progress UI --- ios/Podfile.lock | 24 ++++++++++--------- .../history/transfer_history_screen.dart | 18 +++++++++++--- .../widgets/overlapping_contacts.dart | 3 +++ .../widgets/welcome_sceen_home.dart | 10 ++++++-- linux/flutter/generated_plugin_registrant.cc | 4 ++++ linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 4 ++-- .../flutter/generated_plugin_registrant.cc | 3 +++ windows/flutter/generated_plugins.cmake | 1 + 9 files changed, 50 insertions(+), 18 deletions(-) diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 5b125b25..a29c3bd4 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -77,8 +77,9 @@ PODS: - Flutter - package_info_plus (0.4.5): - Flutter - - path_provider_ios (0.0.1): + - path_provider_foundation (0.0.1): - Flutter + - FlutterMacOS - permission_handler_apple (9.0.4): - Flutter - qr_code_scanner (0.2.0): @@ -94,8 +95,9 @@ PODS: - SDWebImage/Core (~> 5.10) - share_plus (0.0.1): - Flutter - - shared_preferences_ios (0.0.1): + - shared_preferences_foundation (0.0.1): - Flutter + - FlutterMacOS - SwiftyGif (5.4.3) - Toast (4.0.0) - url_launcher_ios (0.0.1): @@ -124,12 +126,12 @@ DEPENDENCIES: - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) - open_file (from `.symlinks/plugins/open_file/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_ios (from `.symlinks/plugins/path_provider_ios/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_ios (from `.symlinks/plugins/shared_preferences_ios/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - video_compress (from `.symlinks/plugins/video_compress/ios`) - video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`) @@ -178,8 +180,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/open_file/ios" package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" - path_provider_ios: - :path: ".symlinks/plugins/path_provider_ios/ios" + path_provider_foundation: + :path: ".symlinks/plugins/path_provider_foundation/ios" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" qr_code_scanner: @@ -188,8 +190,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/receive_sharing_intent/ios" share_plus: :path: ".symlinks/plugins/share_plus/ios" - shared_preferences_ios: - :path: ".symlinks/plugins/shared_preferences_ios/ios" + shared_preferences_foundation: + :path: ".symlinks/plugins/shared_preferences_foundation/ios" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" video_compress: @@ -220,17 +222,17 @@ SPEC CHECKSUMS: MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e - path_provider_ios: 14f3d2fd28c4fdb42f44e0f751d12861c43cee02 + path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_ios: 548a61f8053b9b8a49ac19c1ffbc8b92c50d68ad + shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 - url_launcher_ios: 839c58cdb4279282219f5e248c3321761ff3c4de + url_launcher_ios: fb12c43172927bb5cf75aeebd073f883801f1993 video_compress: fce97e4fb1dfd88175aa07d2ffc8a2f297f87fbe video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1 webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 50e178fd..76428d4c 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -378,7 +378,7 @@ class _TransferHistoryScreenState extends State { : AppVectors.icSendBorder, color: snapsot.data == true ? Colors.green - : Color(0xFFEAA743), + : Color(0xFF939393), ); } else { return SizedBox(); @@ -395,7 +395,7 @@ class _TransferHistoryScreenState extends State { AppVectors.icSendBorder, color: files[index].isUploaded ? Colors.blue[200] - : Color(0xFFEAA743), + : Color(0xFF939393), ), ), ), @@ -431,7 +431,19 @@ class _TransferHistoryScreenState extends State { provider.receivedFileProgress[ files[index].transferId]; - if (fileTransferProgress != null) { + bool _showDownloadProgress = false; + if (fileTransferProgress != null && + files[index] + .file + ?.name + ?.toLowerCase() == + fileTransferProgress.fileName + ?.toLowerCase()) { + _showDownloadProgress = true; + } + + if (_showDownloadProgress && + fileTransferProgress != null) { return fileTransferProgress.percent != null ? Container( diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index b7ff1007..ed2eb99f 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -71,6 +71,9 @@ class _OverlappingContactsState extends State { Padding( padding: const EdgeInsets.only(right: 8, top: 4), child: ContactCard( + key: Key( + widget.selectedList[index]!.contact!.atSign ?? + ''), contact: widget.selectedList[index]!.contact!, isTrusted: _checkTrustedContact( widget.selectedList[index]!.contact!), diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 6fa6fe28..9adcb76b 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -337,7 +337,9 @@ class _WelcomeScreenHomeState extends State { Widget _buildChoiceContact() { return InkWell( - onTap: _choiceContact, + onTap: () { + _choiceContact(clearSelectdContact: true); + }, child: Container( height: 62.toHeight, width: double.infinity, @@ -361,7 +363,11 @@ class _WelcomeScreenHomeState extends State { ); } - void _choiceContact() async { + void _choiceContact({bool clearSelectdContact = false}) async { + if (clearSelectdContact) { + listContacts.clear(); + } + await showModalBottomSheet( context: context, isScrollControlled: true, diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index a8c9797b..ff485532 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -9,6 +9,7 @@ #include #include #include +#include #include #include #include @@ -23,6 +24,9 @@ void fl_register_plugins(FlPluginRegistry* registry) { g_autoptr(FlPluginRegistrar) desktop_window_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "DesktopWindowPlugin"); desktop_window_plugin_register_with_registrar(desktop_window_registrar); + g_autoptr(FlPluginRegistrar) emoji_picker_flutter_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "EmojiPickerFlutterPlugin"); + emoji_picker_flutter_plugin_register_with_registrar(emoji_picker_flutter_registrar); g_autoptr(FlPluginRegistrar) file_selector_linux_registrar = fl_plugin_registry_get_registrar_for_plugin(registry, "FileSelectorPlugin"); file_selector_plugin_register_with_registrar(file_selector_linux_registrar); diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index c01290d4..914f3f71 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -6,6 +6,7 @@ list(APPEND FLUTTER_PLUGIN_LIST at_file_saver biometric_storage desktop_window + emoji_picker_flutter file_selector_linux local_notifier url_launcher_linux diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index c8822bad..a153d5bd 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -13,9 +13,9 @@ import file_selector_macos import flutter_local_notifications import local_notifier import package_info_plus_macos -import path_provider_macos +import path_provider_foundation import share_plus_macos -import shared_preferences_macos +import shared_preferences_foundation import url_launcher_macos import video_compress diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8ef889c0..304229a5 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -8,6 +8,7 @@ #include #include +#include #include #include #include @@ -18,6 +19,8 @@ void RegisterPlugins(flutter::PluginRegistry* registry) { registry->GetRegistrarForPlugin("FileSaverPlugin")); DesktopWindowPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("DesktopWindowPlugin")); + EmojiPickerFlutterPluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("EmojiPickerFlutterPluginCApi")); FileSelectorWindowsRegisterWithRegistrar( registry->GetRegistrarForPlugin("FileSelectorWindows")); LocalNotifierPluginRegisterWithRegistrar( diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index 6a9445a3..fc681e5d 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -5,6 +5,7 @@ list(APPEND FLUTTER_PLUGIN_LIST at_file_saver desktop_window + emoji_picker_flutter file_selector_windows local_notifier permission_handler_windows From 0bc2fc7e398d6f67e87592b9590b73fa0d3fa3f0 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 20 Feb 2023 14:43:17 +0530 Subject: [PATCH 39/94] fix: showing individual entity for multiple atSign --- .../history/transfer_history_screen.dart | 6 ++ lib/view_models/history_provider.dart | 62 +++++++++++-------- lib/view_models/my_files_provider.dart | 28 +++++++++ 3 files changed, 69 insertions(+), 27 deletions(-) diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 76428d4c..9ad7aa1e 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -745,6 +745,12 @@ class _TransferHistoryScreenState extends State { Platform.pathSeparator + (fileEntity.file!.name ?? ''); + if (fileEntity.historyType == HistoryType.send) { + path = MixedConstants.SENT_FILE_DIRECTORY + + Platform.pathSeparator + + (fileEntity.file!.name ?? ''); + } + File test = File(path); bool fileExists = await test.exists(); if (fileExists) { diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 53de4740..fd8737fc 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -19,6 +19,7 @@ import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; import 'package:flutter/cupertino.dart'; // import 'package:at_client/src/stream/file_transfer_object.dart'; @@ -172,19 +173,21 @@ class HistoryProvider extends BaseModel { FileTransfer? fileTransfer = sentHistory[i].fileDetails; if ((fileTransfer?.files?.length ?? 0) > 0) { for (int j = 0; j < fileTransfer!.files!.length; j++) { - listSentFile.add( - FileEntity( - file: fileTransfer.files![j], - date: fileTransfer.date != null - ? fileTransfer.date.toString() - : '', - atSign: sentHistory[i].fileTransferObject?.sharedWith, - historyType: HistoryType.send, - note: fileTransfer.notes, - transferId: fileTransfer.key, - isUploaded: fileTransfer.files?[j].isUploaded ?? false, - fileTransferObject: sentHistory[i].fileTransferObject!), - ); + for (int k = 0; k < sentHistory[i].sharedWith!.length; k++) { + listSentFile.add( + FileEntity( + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: sentHistory[i].sharedWith![k].atsign, + historyType: HistoryType.send, + note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: sentHistory[i].fileTransferObject!), + ); + } } } } @@ -331,20 +334,22 @@ class HistoryProvider extends BaseModel { FileTransfer? fileTransfer = fileHistory.fileDetails; if ((fileTransfer?.files?.length ?? 0) > 0) { for (int j = 0; j < fileTransfer!.files!.length; j++) { - allFiles.insert( - 0, - FileEntity( - file: fileTransfer.files![j], - date: fileTransfer.date != null - ? fileTransfer.date.toString() - : '', - atSign: fileHistory.fileTransferObject?.sharedWith, - historyType: HistoryType.send, - note: fileTransfer.notes, - transferId: fileTransfer.key, - isUploaded: fileTransfer.files?[j].isUploaded ?? false, - fileTransferObject: fileHistory.fileTransferObject!), - ); + for (int k = 0; k < fileHistory.sharedWith!.length; k++) { + allFiles.insert( + 0, + FileEntity( + file: fileTransfer.files![j], + date: fileTransfer.date != null + ? fileTransfer.date.toString() + : '', + atSign: fileHistory.sharedWith![k].atsign, + historyType: HistoryType.send, + note: fileTransfer.notes, + transferId: fileTransfer.key, + isUploaded: fileTransfer.files?[j].isUploaded ?? false, + fileTransferObject: fileHistory.fileTransferObject!), + ); + } } } } @@ -1115,6 +1120,9 @@ class HistoryProvider extends BaseModel { .checkForUndownloadedFiles(); if (files is List) { + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .saveNewDataInMyFiles(receivedHistoryLogs[index]); setStatus(DOWNLOAD_FILE, Status.Done); return true; } else { diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index 9cf57a5c..dd7cd6be 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -505,6 +505,34 @@ class MyFilesProvider extends BaseModel { ); if (res) { + await Future.forEach(fileTransfer.files!, (FileData file) async { + String filePath; + + if (Platform.isMacOS || Platform.isLinux || Platform.isWindows) { + filePath = MixedConstants.RECEIVED_FILE_DIRECTORY + + Platform.pathSeparator + + fileTransfer.sender! + + Platform.pathSeparator + + (file.name ?? ''); + } else { + filePath = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (file.name ?? ''); + } + + FilesDetail fileDetail = FilesDetail( + fileName: file.name, + filePath: filePath, + size: double.parse(file.size.toString()), + date: fileTransfer.date?.toLocal().toString(), + type: file.name!.split('.').last, + contactName: fileTransfer.sender, + fileTransferId: fileTransfer.key, + ); + + allFiles.insert(0, fileDetail); + }); + myFiles.insert( 0, FileTransfer.fromJson( From 5444860ec81325ee1b3c30eadee1933cceae4cea Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 20 Feb 2023 15:21:10 +0530 Subject: [PATCH 40/94] fix: my files data not showing --- lib/screens/my_files/my_files_screen.dart | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index f2c5e793..e4d7bc8d 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -184,6 +184,7 @@ class _MyFilesScreenState extends State { Expanded( child: ProviderHandler( load: (provider) async { + await provider.getMyFilesRecords(); await provider.getAllFiles(); }, functionName: 'all_files', From e71832cd4c89f8707499b659ed5bac6ddc0dd629 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 20 Feb 2023 15:48:31 +0530 Subject: [PATCH 41/94] fix: added toLowerCase check while comparing file --- lib/screens/my_files/my_files_screen.dart | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index e4d7bc8d..32a54c99 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -190,13 +190,13 @@ class _MyFilesScreenState extends State { functionName: 'all_files', showError: false, successBuilder: (provider) { - final listFile = provider.displayFiles - .where( - (element) => (element.fileName ?? '').contains( - provider.fileSearchText, - ), - ) - .toList(); + final listFile = provider.displayFiles.where( + (element) { + return (element.fileName?.toLowerCase() ?? '').contains( + provider.fileSearchText.toLowerCase(), + ); + }, + ).toList(); return (listFile.isEmpty) ? Center( From 8bed31f40954950a1f50c5e69bec820c746603f1 Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 20 Feb 2023 18:09:15 +0700 Subject: [PATCH 42/94] feat: change linear gradient progress --- .../common_widgets/linear_progress_bar.dart | 196 ++++++++++++++++++ lib/services/overlay_service.dart | 13 +- pubspec.yaml | 11 +- 3 files changed, 206 insertions(+), 14 deletions(-) create mode 100644 lib/screens/common_widgets/linear_progress_bar.dart diff --git a/lib/screens/common_widgets/linear_progress_bar.dart b/lib/screens/common_widgets/linear_progress_bar.dart new file mode 100644 index 00000000..fc138258 --- /dev/null +++ b/lib/screens/common_widgets/linear_progress_bar.dart @@ -0,0 +1,196 @@ +import 'package:flutter/material.dart'; + +/// Instantly animating progress bar. +/// Requires [duration] to set filling duration timer +/// [color] or [gradient] to fill the progress bar. Only one parameter is allowed. +/// Optional [backgroundColor], defaults to transparent +/// Optional [width] defaults to 200.0 +/// Optional [height] defaults to 10.0 +/// Optional [curve] defaults to [Curves.linear] + +const int _kIndeterminateLinearDuration = 1800; + +class ProgressBarAnimation extends StatefulWidget { + const ProgressBarAnimation({ + Key? key, + this.width = double.infinity, + this.height = 10.0, + this.color, + this.gradient, + this.backgroundColor = Colors.transparent, + this.curve = Curves.linear, + this.value, + }) : super(key: key); + + final double? value; + + ///progress bar width + final double width; + + ///progress bar height + final double height; + + ///progress bar color + final Color? color; + + ///progress bar gradient + final Gradient? gradient; + + ///progress bar backgroundColor + final Color backgroundColor; + + ///progress bar animation curve + final Curve curve; + + @override + State createState() => _ProgressBarAnimationState(); +} + +class _ProgressBarAnimationState extends State + with SingleTickerProviderStateMixin { + late AnimationController _controller; + late Animation _progressAnimation; + + @override + void initState() { + super.initState(); + _controller = AnimationController( + vsync: this, + duration: Duration(seconds: 3), + ); + + _progressAnimation = Tween(begin: 0.0, end: 1.0) + .animate(CurvedAnimation(parent: _controller, curve: widget.curve)); + + _controller.repeat(); + } + + @override + void dispose() { + _controller.dispose(); + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: _controller.view, + builder: (context, _) { + return CustomPaint( + size: Size(widget.width, widget.height), + foregroundPainter: ProgressPainter( + value: widget.value, + color: widget.color, + gradient: widget.gradient, + animationValue: _controller.value, + ), + painter: BackgroundPainter( + backgroundColor: widget.backgroundColor, + ), + ); + }, + ); + } +} + +class BackgroundPainter extends CustomPainter { + const BackgroundPainter({required this.backgroundColor}); + + ///progress bar backgroundColor + final Color backgroundColor; + + @override + void paint(Canvas canvas, Size size) { + Paint paint = Paint()..color = backgroundColor; + canvas.drawRRect( + RRect.fromRectAndRadius( + Offset.zero & size, Radius.circular(size.height / 2)), + paint); + } + + @override + bool shouldRepaint(covariant BackgroundPainter oldDelegate) => false; +} + +class ProgressPainter extends CustomPainter { + const ProgressPainter({ + this.value, + this.gradient, + this.color, + required this.animationValue, + }); + + ///current progress bar value + final double? value; + + ///progress bar gradient infill + final Gradient? gradient; + + ///progress bar gradient color + final Color? color; + + final double animationValue; + + static const Curve line1Head = Interval( + 0.0, + 750.0 / _kIndeterminateLinearDuration, + curve: Cubic(0.2, 0.0, 0.8, 1.0), + ); + static const Curve line1Tail = Interval( + 333.0 / _kIndeterminateLinearDuration, + (333.0 + 750.0) / _kIndeterminateLinearDuration, + curve: Cubic(0.4, 0.0, 1.0, 1.0), + ); + static const Curve line2Head = Interval( + 1000.0 / _kIndeterminateLinearDuration, + (1000.0 + 567.0) / _kIndeterminateLinearDuration, + curve: Cubic(0.0, 0.0, 0.65, 1.0), + ); + static const Curve line2Tail = Interval( + 1267.0 / _kIndeterminateLinearDuration, + (1267.0 + 533.0) / _kIndeterminateLinearDuration, + curve: Cubic(0.10, 0.0, 0.45, 1.0), + ); + + @override + void paint(Canvas canvas, Size size) { + Paint paint = Paint(); + if (gradient != null) { + paint.shader = gradient?.createShader(Offset.zero & size); + } + + if (color != null) { + paint.color = color!; + } + + void drawBar(double x, double width) { + if (width <= 0.0) { + return; + } + + canvas.drawRRect( + RRect.fromRectAndRadius( + Offset(x, 0.0) & Size(width, size.height), + Radius.circular(size.height / 2), + ), + paint); + + // canvas.drawRect(Offset(x, 0.0) & Size(width, size.height), paint); + } + + final double x1 = size.width * line1Tail.transform(animationValue); + final double width1 = size.width * line1Head.transform(animationValue) - x1; + + final double x2 = size.width * line2Tail.transform(animationValue); + final double width2 = size.width * line2Head.transform(animationValue) - x2; + + drawBar(x1, width1); + drawBar(x2, width2); + } + + @override + bool shouldRepaint(covariant ProgressPainter oldDelegate) { + return value != oldDelegate.value || + animationValue != oldDelegate.animationValue; + } +} diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index d2820107..b84e71b9 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -1,9 +1,9 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/file_recipients.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/linear_progress_bar.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; -import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; @@ -215,9 +215,14 @@ class OverlayService { height: 40, child: ClipRRect( borderRadius: BorderRadius.all(Radius.circular(30)), - child: LinearProgressIndicator( - color: ColorConstants.yellow, - minHeight: 45, + child: ProgressBarAnimation( + height: 45, + gradient: const LinearGradient( + colors: [ + Color(0xFFF05E3F), + Color(0xFFEAA743), + ], + ), backgroundColor: Color(0xFFE2E2E2), ), ), diff --git a/pubspec.yaml b/pubspec.yaml index 3ac09218..0519d54f 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -81,6 +81,7 @@ dev_dependencies: flutter_test: sdk: flutter msix: ^3.3.1 + dependency_overrides: biometric_storage: ^4.1.3 at_contacts_group_flutter: @@ -88,16 +89,6 @@ dependency_overrides: url: https://github.com/atsign-foundation/at_widgets path: packages/at_contacts_group_flutter ref: feature/new-version-contacts-group - at_backupkey_flutter: - git: - url: https://github.com/atsign-foundation/at_widgets.git - path: at_backupkey_flutter - ref: fix_flutter_qr_reader - at_onboarding_flutter: - git: - url: https://github.com/atsign-foundation/at_widgets.git - path: at_onboarding_flutter - ref: fix_flutter_qr_reader # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 9cb0620ae49125093e85c9131214febefce61880 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 20 Feb 2023 19:22:00 +0530 Subject: [PATCH 43/94] build : release changes for 1.0.10+51 --- ios/Flutter/AppFrameworkInfo.plist | 2 +- ios/Runner.xcodeproj/project.pbxproj | 24 ++++++++++++------------ ios/Runner/Info.plist | 4 ++-- pubspec.lock | 28 +++++++++++++--------------- pubspec.yaml | 3 ++- 5 files changed, 30 insertions(+), 31 deletions(-) diff --git a/ios/Flutter/AppFrameworkInfo.plist b/ios/Flutter/AppFrameworkInfo.plist index 25fb7fb6..c5ff5d37 100644 --- a/ios/Flutter/AppFrameworkInfo.plist +++ b/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 9.0 + 13.0 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 372ca6da..b84e6ffd 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -417,7 +417,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "Share Extension/Info.plist"; @@ -427,7 +427,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro.ShareExtension"; @@ -450,7 +450,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "Share Extension/Info.plist"; @@ -460,7 +460,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro.ShareExtension"; PRODUCT_NAME = "@mosphere-pro"; @@ -480,7 +480,7 @@ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CODE_SIGN_ENTITLEMENTS = "Share Extension/Share Extension.entitlements"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = "Share Extension/Info.plist"; @@ -490,7 +490,7 @@ "@executable_path/Frameworks", "@executable_path/../../Frameworks", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro.ShareExtension"; PRODUCT_NAME = "@mosphere-pro"; @@ -562,7 +562,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -579,7 +579,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -710,7 +710,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -727,7 +727,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -749,7 +749,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 48; + CURRENT_PROJECT_VERSION = 51; DEVELOPMENT_TEAM = 5XUSS6C2DF; ENABLE_BITCODE = NO; FRAMEWORK_SEARCH_PATHS = ( @@ -766,7 +766,7 @@ "$(inherited)", "$(PROJECT_DIR)/Flutter", ); - MARKETING_VERSION = 1.0.8; + MARKETING_VERSION = 1.0.10; PRODUCT_BUNDLE_IDENTIFIER = "com.atsign.atmosphere-pro"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 16bb0141..aeb15328 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -60,6 +60,8 @@ Enable atmospherePro to save images and videos in photos after being downloaded. NSPhotoLibraryUsageDescription Enable atmospherePro to access your photos to upload the ones you choose in file transfer. + UIApplicationSupportsIndirectInputEvents + UIFileSharingEnabled UILaunchStoryboardName @@ -79,7 +81,5 @@ UIViewControllerBasedStatusBarAppearance - UIApplicationSupportsIndirectInputEvents - diff --git a/pubspec.lock b/pubspec.lock index 4159a8ec..49395ccf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -52,12 +52,11 @@ packages: at_backupkey_flutter: dependency: "direct main" description: - path: at_backupkey_flutter - ref: fix_flutter_qr_reader - resolved-ref: ce984971ea1ba653b5d23334e339311044eba90f - url: "https://github.com/atsign-foundation/at_widgets.git" - source: git - version: "4.0.5" + name: at_backupkey_flutter + sha256: "63a8fb9ba7b091aa8ff1a300509eb6933aeff02621bfbdabd738f42230f7b306" + url: "https://pub.dev" + source: hosted + version: "4.0.8" at_base2e15: dependency: transitive description: @@ -75,13 +74,13 @@ packages: source: hosted version: "1.0.0" at_client: - dependency: transitive + dependency: "direct overridden" description: name: at_client - sha256: ef5574cbc0dbc575e6a655993aa4c9ab8edea2f81b889120801dd08d04b4bba6 + sha256: "179bea8c4ecb5cf719887f2f5b806719dd6458736cbb824c29cf928129203bf5" url: "https://pub.dev" source: hosted - version: "3.0.55" + version: "3.0.56" at_client_mobile: dependency: "direct main" description: @@ -150,12 +149,11 @@ packages: at_onboarding_flutter: dependency: "direct main" description: - path: at_onboarding_flutter - ref: fix_flutter_qr_reader - resolved-ref: ce984971ea1ba653b5d23334e339311044eba90f - url: "https://github.com/atsign-foundation/at_widgets.git" - source: git - version: "5.0.2" + name: at_onboarding_flutter + sha256: "57f5753460487129a306ffb523f4800146bae885968e9f3f1ec52598867998e9" + url: "https://pub.dev" + source: hosted + version: "5.0.5" at_persistence_secondary_server: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index 0519d54f..67584e06 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -17,7 +17,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # Mobile version -version: 1.0.8+48 +version: 1.0.10+51 # Desktop version macos # version: 1.0.1+19 @@ -83,6 +83,7 @@ dev_dependencies: msix: ^3.3.1 dependency_overrides: + at_client: ^3.0.56 biometric_storage: ^4.1.3 at_contacts_group_flutter: git: From dafeb662a0946308ac45a33b08964b5ee236aa41 Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 10 Mar 2023 08:31:50 +0700 Subject: [PATCH 44/94] fix: update and select files --- lib/screens/my_files/my_files_screen.dart | 3 ++- lib/screens/welcome_screen/widgets/welcome_sceen_home.dart | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 32a54c99..20444a5a 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -47,7 +47,7 @@ class _MyFilesScreenState extends State { appBar: AppBarCustom( height: 130, title: "My Files", - description: '${provider.allFiles.length}', + description: "${context.watch().allFiles.length}", ), body: Stack( children: [ @@ -216,6 +216,7 @@ class _MyFilesScreenState extends State { top: 24.toHeight, left: 28, right: 28, + bottom: 100, ), itemBuilder: (context, index) { return InkWell( diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 9adcb76b..e2b7dd07 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -388,7 +388,7 @@ class _WelcomeScreenHomeState extends State { selectFiles() async { await providerCallback(context, - task: (provider) => provider.pickFiles(provider.MEDIA), + task: (provider) => provider.pickFiles(provider.FILES), taskName: (provider) => provider.PICK_FILES, onSuccess: (provider) {}, onError: (err) => ErrorDialog().show(err.toString(), context: context)); From 283eb620176d9076ae5c0df9865a053491edf29b Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 13 Mar 2023 10:19:33 +0700 Subject: [PATCH 45/94] feat: fix bug notification routes to history screen --- lib/routes/routes.dart | 10 +++++++++- lib/screens/welcome_screen/welcome_screen.dart | 11 +++++++++++ lib/services/backend_service.dart | 8 ++++++-- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/lib/routes/routes.dart b/lib/routes/routes.dart index 2f597cfc..1e8b01c2 100644 --- a/lib/routes/routes.dart +++ b/lib/routes/routes.dart @@ -25,7 +25,15 @@ class SetupRoutes { ModalRoute.of(context)!.settings.arguments as Map; return WebsiteScreen(title: args["title"], url: args["url"]); }, - Routes.WELCOME_SCREEN: (context) => WelcomeScreen(), + Routes.WELCOME_SCREEN: (context) { + Map args = + (ModalRoute.of(context)!.settings.arguments ?? {}) + as Map; + + return WelcomeScreen( + indexBottomBarSelected: args['indexBottomBarSelected'], + ); + }, Routes.FAQ_SCREEN: (context) => WebsiteScreen( title: 'FAQ', url: '${MixedConstants.WEBSITE_URL}/faqs', diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 80ce17b6..4321824b 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -24,6 +24,13 @@ import 'package:provider/provider.dart'; import '../../utils/text_strings.dart'; class WelcomeScreen extends StatefulWidget { + final int? indexBottomBarSelected; + + const WelcomeScreen({ + Key? key, + this.indexBottomBarSelected, + }) : super(key: key); + @override _WelcomeScreenState createState() => _WelcomeScreenState(); } @@ -67,6 +74,10 @@ class _WelcomeScreenState extends State { await initPackages(); }); + if (widget.indexBottomBarSelected != null) { + welcomeScreenProvider + .changeBottomNavigationIndex(widget.indexBottomBarSelected!); + } super.initState(); } diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart index f3212c38..13211bed 100644 --- a/lib/services/backend_service.dart +++ b/lib/services/backend_service.dart @@ -580,9 +580,13 @@ class BackendService { onNotificationClick(String payload) async { if (Platform.isAndroid || Platform.isIOS) { - await Navigator.push( + await Navigator.pushNamedAndRemoveUntil( NavService.navKey.currentContext!, - MaterialPageRoute(builder: (context) => HistoryScreen(tabIndex: 1)), + Routes.WELCOME_SCREEN, + (route) => false, + arguments: { + "indexBottomBarSelected": 3, + }, ); } else if (Platform.isMacOS) { DesktopSetupRoutes.nested_push(DesktopRoutes.DESKTOP_HISTORY); From 4524d9448d07c777040f1f87159b97002bd7bef2 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 22 Feb 2023 11:30:02 +0700 Subject: [PATCH 46/94] feat: update UI Welcome Screen --- lib/screens/home/home.dart | 2 +- .../widgets/choice_contacts_widget.dart | 48 +++++-- .../widgets/welcome_sceen_home.dart | 131 ++++++++++-------- 3 files changed, 112 insertions(+), 69 deletions(-) diff --git a/lib/screens/home/home.dart b/lib/screens/home/home.dart index 73d7d76c..9ec56245 100644 --- a/lib/screens/home/home.dart +++ b/lib/screens/home/home.dart @@ -267,7 +267,7 @@ class _HomeState extends State { await _backendService .checkToOnboard(); }), - // SizedBox(height: 15.toHeight), + SizedBox(height: 24.toHeight), CustomButton( onPressed: () { CommonUtilityFunctions() diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index 1e50b3f0..e053f246 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -1,20 +1,16 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; -import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; -import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; class ChoiceContactsWidget extends StatefulWidget { final List? selectedContacts; - final Function(List contacts)? choiceContacts; const ChoiceContactsWidget({ Key? key, this.selectedContacts, - this.choiceContacts, }) : super(key: key); @override @@ -23,10 +19,12 @@ class ChoiceContactsWidget extends StatefulWidget { class _ChoiceContactsWidgetState extends State { late TrustedContactProvider trustedProvider; + late List listContact; @override void initState() { trustedProvider = context.read(); + listContact = widget.selectedContacts ?? []; super.initState(); } @@ -74,16 +72,46 @@ class _ChoiceContactsWidgetState extends State { contactsTrusted: trustedProvider.trustedContacts, isChoiceMultiTypeContact: true, showGroups: true, - selectedContacts: widget.selectedContacts, + selectedContacts: listContact, choiceMultiTypeContact: (contacts) { - widget.choiceContacts?.call(contacts); - Provider.of( - NavService.navKey.currentContext!, - listen: false) - .updateSelectedContacts(contacts); + setState(() { + listContact = contacts; + }); }, ), ), + SafeArea( + top: false, + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 44, + vertical: 24, + ), + child: InkWell( + onTap: () { + Navigator.of(context).pop(listContact); + }, + child: Container( + width: double.infinity, + height: 44, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.black, + ), + child: Center( + child: Text( + "Select (${listContact.length})", + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ), + ), + ) ], ), ), diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index e2b7dd07..4f2f44b8 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -82,7 +82,9 @@ class _WelcomeScreenHomeState extends State { controller: scrollController, child: Padding( padding: EdgeInsets.symmetric( - horizontal: 30.toWidth, vertical: 20.toHeight), + horizontal: 30.toWidth, + vertical: 20.toHeight, + ), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, @@ -134,41 +136,50 @@ class _WelcomeScreenHomeState extends State { const SizedBox(height: 16), Consumer(builder: (context, provider, _) { if (provider.selectedFiles.isNotEmpty) { - return Wrap( - alignment: WrapAlignment.start, - runAlignment: WrapAlignment.start, - runSpacing: 5.0.toWidth, - spacing: 10.0.toHeight, - children: List.generate( - provider.selectedFiles.length, - (index) { - return SizedBox( - width: (MediaQuery.of(context).size.width - - 50.toWidth) / - 2, - child: Stack( - children: [ - FileCard( - fileDetail: provider.selectedFiles[index], - ), - Positioned( - top: 0, - right: -5, - child: InkWell( - onTap: () { - provider.deleteFiles(index); - provider.calculateSize(); - }, - child: SvgPicture.asset( - AppVectors.icClose, + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Wrap( + alignment: WrapAlignment.start, + runAlignment: WrapAlignment.start, + children: List.generate( + provider.selectedFiles.length, + (index) { + return SizedBox( + width: (MediaQuery.of(context).size.width - + 60.toWidth) / + 2, + child: Stack( + children: [ + FileCard( + fileDetail: provider.selectedFiles[index], + ), + Positioned( + top: 0, + right: -5, + child: InkWell( + onTap: () { + provider.deleteFiles(index); + provider.calculateSize(); + }, + child: SvgPicture.asset( + AppVectors.icClose, + ), + ), ), - ), + ], ), - ], - ), - ); - }, - ), + ); + }, + ), + ), + SizedBox( + height: provider.selectedFiles.length < 3 + ? 71.toHeight + : 0, + ) + ], ); } else { return InkWell( @@ -178,16 +189,26 @@ class _WelcomeScreenHomeState extends State { width: 350.toWidth, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - border: Border.all( - color: ColorConstants.orangeColor, + gradient: LinearGradient( + colors: [ + ColorConstants.orangeColor, + ColorConstants.yellow.withOpacity(0.65), + ], ), ), - child: Center( - child: Text( - 'Select file(s) to transfer', - style: TextStyle( - color: ColorConstants.orangeColor, - fontSize: 16.toFont, + padding: EdgeInsets.all(2), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: Colors.white, + ), + child: Center( + child: Text( + 'Select file(s) to transfer', + style: TextStyle( + color: ColorConstants.orangeColor, + fontSize: 16.toFont, + ), ), ), ), @@ -242,12 +263,6 @@ class _WelcomeScreenHomeState extends State { ], ), SizedBox(height: 16.toHeight), - // Consumer(builder: (context, provider, _) { - // if (filePickerModel.scrollToBottom) { - // scrollToBottom(); - // } - // return SizedBox(); - // }), Consumer( builder: (context, provider, _) { if (provider.scrollToBottom) { @@ -338,10 +353,10 @@ class _WelcomeScreenHomeState extends State { Widget _buildChoiceContact() { return InkWell( onTap: () { - _choiceContact(clearSelectdContact: true); + _choiceContact(clearSelectedContact: true); }, child: Container( - height: 62.toHeight, + height: 61.toHeight, width: double.infinity, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), @@ -363,12 +378,12 @@ class _WelcomeScreenHomeState extends State { ); } - void _choiceContact({bool clearSelectdContact = false}) async { - if (clearSelectdContact) { + void _choiceContact({bool clearSelectedContact = false}) async { + if (clearSelectedContact) { listContacts.clear(); } - await showModalBottomSheet( + final result = await showModalBottomSheet?>( context: context, isScrollControlled: true, useRootNavigator: true, @@ -376,14 +391,14 @@ class _WelcomeScreenHomeState extends State { builder: (BuildContext context) { return ChoiceContactsWidget( selectedContacts: listContacts, - choiceContacts: (contacts) { - setState(() { - listContacts = contacts; - }); - }, ); }, ); + + if (result != null) { + listContacts = result; + _welcomeScreenProvider.updateSelectedContacts(result); + } } selectFiles() async { From 5de583f976e1c36296ca6cb41323dadfef55cddc Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 24 Feb 2023 11:34:34 +0700 Subject: [PATCH 47/94] feat: update contact screen --- .../blocked_contact_screen.dart | 7 +- .../contact_new_version/contact_screen.dart | 6 +- .../group_contact_screen.dart | 7 +- .../trusted_contact_screen.dart | 80 +++---------------- .../widgets/choice_contacts_widget.dart | 9 ++- 5 files changed, 27 insertions(+), 82 deletions(-) diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index 5e09496b..9beee258 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -223,10 +223,9 @@ class _BlockedContactScreenState extends State { ); }, child: Container( - height: 31.toHeight, - padding: const EdgeInsets.symmetric( - horizontal: 14, - vertical: 7, + padding: EdgeInsets.symmetric( + horizontal: 14.toWidth, + vertical: 7.toHeight, ), decoration: BoxDecoration( borderRadius: BorderRadius.circular(15), diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index 71588d36..76f7747b 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -1,5 +1,5 @@ import 'package:at_common_flutter/services/size_config.dart'; -import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; +import 'package:at_contacts_group_flutter/screens/group_contact/group_list_contact.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/add_contact_screen.dart'; @@ -139,8 +139,8 @@ class _ContactScreenState extends State { ), ), Expanded( - child: ListContactScreen( - contactsTrusted: trustedProvider.trustedContacts, + child: GroupListContact( + trustedContacts: trustedProvider.trustedContacts, onTapContact: (contact) async { final result = await showModalBottomSheet( context: context, diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart index 7e1e6439..12ba7e85 100644 --- a/lib/screens/contact_new_version/group_contact_screen.dart +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -1,7 +1,7 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contacts_group_flutter/screens/group_contact/group_list_contact.dart'; import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; import 'package:at_contacts_group_flutter/screens/new_group/create_group.dart'; -import 'package:at_contacts_group_flutter/screens/new_version/contact_screen.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; @@ -117,10 +117,11 @@ class _GroupContactScreenState extends State { ), const SizedBox(height: 30), Expanded( - child: ListContactScreen( + child: GroupListContact( showGroups: true, showContacts: false, - isHiddenAlpha: true, + isShowAlpha: false, + isOnlyShowSearchBar: false, onTapGroup: (group) async { WidgetsBinding.instance .addPostFrameCallback((_) async { diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart index ae153cae..f59cc6e7 100644 --- a/lib/screens/contact_new_version/trusted_contact_screen.dart +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -1,6 +1,6 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contact/at_contact.dart'; -import 'package:at_contacts_group_flutter/screens/new_version/widget/single_contact_widget.dart'; +import 'package:at_contacts_group_flutter/screens/group_contact/group_list_contact.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; @@ -59,79 +59,23 @@ class _TrustedContactScreenState extends State { const SizedBox(height: 24), Padding( padding: const EdgeInsets.symmetric(horizontal: 27), - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - "Trusted Senders", - style: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - const SizedBox(height: 30), - Container( - height: 48, - margin: const EdgeInsets.only(right: 12), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Row( - children: [ - Expanded( - child: TextField( - controller: searchController, - style: TextStyle( - fontSize: 14.toFont, - ), - onChanged: (value) { - setState(() { - trustedContacts = provider.trustedContacts - .where((element) => (element.atSign ?? '') - .contains(value)) - .toList(); - }); - }, - decoration: InputDecoration.collapsed( - hintText: 'Search by atSign or nickname', - hintStyle: TextStyle( - color: ColorConstants.grey, - fontSize: 14.toFont, - fontWeight: FontWeight.w500, - fontStyle: FontStyle.italic, - ), - ), - // onChanged: widget.onSearch, - ), - ), - SizedBox( - width: 20, - height: 20, - child: Icon( - Icons.search, - color: ColorConstants.grey, - ), - ), - ], - ), - ), - const SizedBox(height: 24), - ], + child: Text( + "Trusted Senders", + style: TextStyle( + fontSize: 25.toFont, + fontWeight: FontWeight.bold, + color: Colors.black, + ), ), ), + const SizedBox(height: 30), Expanded( child: Consumer( builder: (context, myProvider, child) { return Scrollbar( - child: SingleContactWidget( - contacts: trustedContacts, + child: GroupListContact( + isOnlyShowContactTrusted: true, + trustedContacts: trustedContacts, onTapContact: (contact) async { await showModalBottomSheet( context: context, diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index e053f246..718f409d 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -68,12 +68,13 @@ class _ChoiceContactsWidgetState extends State { ), ), Expanded( - child: ChoiceContactWidget( - contactsTrusted: trustedProvider.trustedContacts, - isChoiceMultiTypeContact: true, + child: GroupListContact( + trustedContacts: trustedProvider.trustedContacts, + isSelectMultiContacts: true, showGroups: true, + isShowFilterBar: true, selectedContacts: listContact, - choiceMultiTypeContact: (contacts) { + onSelectContacts: (contacts) { setState(() { listContact = contacts; }); From 9f25efa465484de6c8360c4cd9acc908010b9b8e Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 14 Mar 2023 15:39:22 +0700 Subject: [PATCH 48/94] feat: add contact group widget --- assets/images/img_empty_box.png | Bin 0 -> 5435 bytes .../enums/contact_filter_type.dart | 14 + lib/data_models/enums/contact_type.dart | 1 + lib/screens/common_widgets/avatar_widget.dart | 2 +- .../contact_new_version/contact_screen.dart | 4 +- .../create_group_screen.dart | 352 ++++++++++++++++++ .../group_contact_screen.dart | 6 +- .../trusted_contact_screen.dart | 4 +- .../widget/contact_card_widget.dart | 137 +++++++ .../widget/contacts_widget.dart | 328 ++++++++++++++++ .../widget/group_card_widget.dart | 124 ++++++ .../widget/list_contact_widget.dart | 315 ++++++++++++++++ .../widgets/choice_contacts_widget.dart | 3 +- lib/utils/images.dart | 2 + lib/utils/text_strings.dart | 5 + pubspec.yaml | 4 +- 16 files changed, 1290 insertions(+), 11 deletions(-) create mode 100644 assets/images/img_empty_box.png create mode 100644 lib/data_models/enums/contact_filter_type.dart create mode 100644 lib/data_models/enums/contact_type.dart create mode 100644 lib/screens/contact_new_version/create_group_screen.dart create mode 100644 lib/screens/contact_new_version/widget/contact_card_widget.dart create mode 100644 lib/screens/contact_new_version/widget/contacts_widget.dart create mode 100644 lib/screens/contact_new_version/widget/group_card_widget.dart create mode 100644 lib/screens/contact_new_version/widget/list_contact_widget.dart diff --git a/assets/images/img_empty_box.png b/assets/images/img_empty_box.png new file mode 100644 index 0000000000000000000000000000000000000000..f4bb93da1de11698e01c94697785a9c82b3acf00 GIT binary patch literal 5435 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 ZI|c+seLr;#5DQN_^mUA`S7 { ), ), Expanded( - child: GroupListContact( + child: ListContactWidget( trustedContacts: trustedProvider.trustedContacts, onTapContact: (contact) async { final result = await showModalBottomSheet( diff --git a/lib/screens/contact_new_version/create_group_screen.dart b/lib/screens/contact_new_version/create_group_screen.dart new file mode 100644 index 00000000..e0d573ca --- /dev/null +++ b/lib/screens/contact_new_version/create_group_screen.dart @@ -0,0 +1,352 @@ +import 'dart:io'; +import 'dart:typed_data'; + +import 'package:at_commons/at_commons.dart'; +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_toast.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:flutter/material.dart'; +import 'package:image_picker/image_picker.dart'; + +class CreateGroupScreen extends StatefulWidget { + final List? trustContacts; + + const CreateGroupScreen({ + Key? key, + this.trustContacts, + }) : super(key: key); + + @override + State createState() => _CreateGroupScreenState(); +} + +class _CreateGroupScreenState extends State { + List listContact = []; + late TextEditingController groupNameController; + Uint8List? selectedImageByteData; + late GroupService _groupService; + bool isLoading = false; + + @override + void initState() { + groupNameController = TextEditingController(); + _groupService = GroupService(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: SafeArea( + bottom: false, + child: Container( + height: double.infinity, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.white, + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + child: Row( + children: [ + Container( + height: 2, + width: 45, + decoration: BoxDecoration( + color: Colors.black, + borderRadius: BorderRadius.circular(20), + ), + ), + const Spacer(), + Align( + alignment: Alignment.topRight, + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + height: 31, + alignment: Alignment.topRight, + padding: const EdgeInsets.symmetric( + horizontal: 30, + ), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(28), + ), + child: Center( + child: Text( + "Close", + style: TextStyle( + fontSize: 17, + fontWeight: FontWeight.w600, + color: ColorConstants.grey, + ), + ), + ), + ), + ), + ), + ], + ), + ), + const SizedBox(height: 24), + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + const Padding( + padding: EdgeInsets.only(left: 27), + child: Text( + "New Group", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + const SizedBox(height: 18), + Container( + height: 48, + margin: const EdgeInsets.symmetric(horizontal: 27), + decoration: BoxDecoration( + border: Border.all( + color: ColorConstants.grey, + ), + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + padding: const EdgeInsets.symmetric(horizontal: 12), + child: Center( + child: TextField( + controller: groupNameController, + decoration: InputDecoration.collapsed( + hintText: 'Group Name', + hintStyle: TextStyle( + color: ColorConstants.grey, + fontSize: 14, + fontWeight: FontWeight.w500, + fontStyle: FontStyle.italic, + ), + ), + onChanged: (value) { + setState(() {}); + }, + ), + ), + ), + _buildImage(), + Padding( + padding: const EdgeInsets.only( + top: 8, bottom: 15, left: 27), + child: Text( + "Select Members ${listContact.isNotEmpty ? listContact.length : ''}", + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + color: Colors.black, + ), + ), + ), + Flexible( + child: ListContactWidget( + trustedContacts: widget.trustContacts, + isSelectMultiContacts: true, + onSelectContacts: (contacts) { + setState(() { + listContact = []; + for (var element in contacts) { + listContact.add(element.contact!); + } + }); + }, + ), + ), + ], + ), + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.only(bottom: 24, top: 18), + child: InkWell( + onTap: () { + createGroup(); + }, + child: Container( + height: 67, + margin: const EdgeInsets.symmetric(horizontal: 27), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: ColorConstants.buttonGrey, + gradient: groupNameController.text.isNotEmpty && + listContact.isNotEmpty + ? LinearGradient( + colors: [ + ColorConstants.orange, + ColorConstants.yellow.withOpacity(0.65), + ], + ) + : null, + ), + child: const Center( + child: Text( + "Create Group", + style: TextStyle( + color: Colors.white, + fontSize: 20, + fontWeight: FontWeight.bold, + ), + ), + ), + ), + ), + ), + ), + ], + ), + isLoading + ? Align( + alignment: Alignment.center, + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), + ) + : const SizedBox(), + ], + ), + ), + ), + ); + } + + Widget _buildImage() { + return InkWell( + onTap: () async { + var image = await ImagePicker().pickImage( + source: ImageSource.gallery, + ); + if (image != null) { + setState(() { + selectedImageByteData = File(image.path).readAsBytesSync(); + }); + } + }, + child: Container( + height: 117, + width: double.infinity, + margin: const EdgeInsets.symmetric( + horizontal: 27, + vertical: 15, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: ColorConstants.textBoxBg, + image: selectedImageByteData != null + ? DecorationImage( + image: Image.memory(selectedImageByteData!).image, + fit: BoxFit.cover, + ) + : null, + border: Border.all( + color: ColorConstants.grey, + ), + ), + child: selectedImageByteData != null + ? const SizedBox() + : Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Insert Cover Image", + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ), + const Icon( + Icons.image_rounded, + size: 60, + ), + ], + ), + ), + ), + ); + } + + void createGroup() async { + if (groupNameController.text.isNotEmpty) { + setState(() { + isLoading = true; + }); + + var group = AtGroup( + groupNameController.text.trim(), + description: 'group desc', + displayName: groupNameController.text.trim(), + members: Set.from(listContact), + createdBy: _groupService.currentAtsign, + updatedBy: _groupService.currentAtsign, + ); + + if (selectedImageByteData != null) { + group.groupPicture = selectedImageByteData; + } + + var result = await _groupService.createGroup(group); + + setState(() { + isLoading = false; + }); + + if (result is AtGroup) { + if (!mounted) return; + Navigator.of(context).pop(true); + } else if (result != null) { + if (result.runtimeType == AlreadyExistsException) { + if (!mounted) return; + CustomToast().show(TextStrings().groupAlreadyExists, context); + } else if (result.runtimeType == InvalidAtSignException) { + CustomToast().show(result.message, context); + } else { + if (!mounted) return; + CustomToast().show(TextStrings().serviceError, context); + } + } else { + if (!mounted) return; + CustomToast().show(TextStrings().serviceError, context); + } + } else { + if (!mounted) return; + CustomToast().show(TextStrings().groupEmptyName, context); + } + } +} diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart index 12ba7e85..8afe7e9a 100644 --- a/lib/screens/contact_new_version/group_contact_screen.dart +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -1,8 +1,8 @@ import 'package:at_common_flutter/services/size_config.dart'; -import 'package:at_contacts_group_flutter/screens/group_contact/group_list_contact.dart'; import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; -import 'package:at_contacts_group_flutter/screens/new_group/create_group.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; @@ -117,7 +117,7 @@ class _GroupContactScreenState extends State { ), const SizedBox(height: 30), Expanded( - child: GroupListContact( + child: ListContactWidget( showGroups: true, showContacts: false, isShowAlpha: false, diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart index f59cc6e7..5be3558e 100644 --- a/lib/screens/contact_new_version/trusted_contact_screen.dart +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -1,7 +1,7 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contact/at_contact.dart'; -import 'package:at_contacts_group_flutter/screens/group_contact/group_list_contact.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; @@ -73,7 +73,7 @@ class _TrustedContactScreenState extends State { child: Consumer( builder: (context, myProvider, child) { return Scrollbar( - child: GroupListContact( + child: ListContactWidget( isOnlyShowContactTrusted: true, trustedContacts: trustedContacts, onTapContact: (contact) async { diff --git a/lib/screens/contact_new_version/widget/contact_card_widget.dart b/lib/screens/contact_new_version/widget/contact_card_widget.dart new file mode 100644 index 00000000..88d0419b --- /dev/null +++ b/lib/screens/contact_new_version/widget/contact_card_widget.dart @@ -0,0 +1,137 @@ +import 'dart:typed_data'; + +import 'package:at_contact/at_contact.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class ContactCardWidget extends StatefulWidget { + final AtContact contact; + final double avatarSize, borderRadius; + final Function()? onTap; + final bool isSelected, isTrusted; + + const ContactCardWidget({ + Key? key, + required this.contact, + this.avatarSize = 40, + this.borderRadius = 18, + this.onTap, + this.isSelected = false, + this.isTrusted = false, + }) : super(key: key); + + @override + State createState() => _ContactCardWidgetState(); +} + +class _ContactCardWidgetState extends State { + String contactName = 'UG'; + Uint8List? image; + + @override + void initState() { + getNameAndImage(); + super.initState(); + } + + void getNameAndImage() { + try { + contactName = widget.contact.atSign ?? 'UG'; + + if (contactName[0] == '@') { + contactName = contactName.substring(1); + } + + if (widget.contact.tags != null && + widget.contact.tags?['image'] != null) { + List intList = widget.contact.tags!['image'].cast(); + image = Uint8List.fromList(intList); + } + } catch (e) { + contactName = 'UG'; + print('Error in getting image $e'); + } + } + + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + widget.onTap?.call(); + }, + child: Container( + padding: const EdgeInsets.fromLTRB(20, 13, 12, 13), + margin: const EdgeInsets.only(bottom: 12), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: widget.isSelected + ? ColorConstants.orange + : ColorConstants.textBoxBg, + ), + color: widget.isSelected + ? ColorConstants.orange.withOpacity(0.2) + : Colors.white, + ), + child: Row( + children: [ + Container( + height: widget.avatarSize, + width: widget.avatarSize, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + widget.borderRadius, + ), + ), + child: image != null + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + borderRadius: widget.borderRadius, + size: widget.avatarSize, + initials: contactName, + ), + ), + const SizedBox(width: 18), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w400, + color: Colors.black, + ), + ), + ], + ), + ), + widget.isTrusted + ? SvgPicture.asset( + AppVectors.icTrustActivated, + ) + : const SizedBox(), + ], + ), + ), + ); + } +} diff --git a/lib/screens/contact_new_version/widget/contacts_widget.dart b/lib/screens/contact_new_version/widget/contacts_widget.dart new file mode 100644 index 00000000..2eeedb3c --- /dev/null +++ b/lib/screens/contact_new_version/widget/contacts_widget.dart @@ -0,0 +1,328 @@ +import 'package:at_common_flutter/at_common_flutter.dart'; +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_card_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/group_card_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class ContactsWidget extends StatefulWidget { + final bool showGroups, + showContacts, + isShowAlpha, + isSelectMultiContacts, + isOnlyShowContactTrusted; + + final Function(AtContact contact)? onTapContact; + final Function(AtGroup group)? onTapGroup; + final Function(List contacts)? onSelectContacts; + final List? selectedContacts; + final List? trustedContacts; + final List contacts; + final String searchValue; + final Function? onRefresh; + final EdgeInsetsGeometry? padding; + + const ContactsWidget({ + Key? key, + required this.contacts, + this.showGroups = false, + this.showContacts = true, + this.isShowAlpha = true, + this.isSelectMultiContacts = false, + this.isOnlyShowContactTrusted = false, + this.searchValue = '', + this.onTapContact, + this.onTapGroup, + this.onSelectContacts, + this.trustedContacts, + this.selectedContacts, + this.onRefresh, + this.padding, + }) : super(key: key); + + @override + State createState() => _ContactsWidgetState(); +} + +class _ContactsWidgetState extends State { + List listContactSelected = []; + + @override + void initState() { + if ((widget.selectedContacts ?? []).isNotEmpty) { + listContactSelected.addAll(widget.selectedContacts!); + } + super.initState(); + } + + @override + Widget build(BuildContext context) { + return RefreshIndicator( + onRefresh: () async { + widget.onRefresh?.call(); + setState(() {}); + }, + child: ListView.builder( + padding: const EdgeInsets.symmetric(horizontal: 18), + physics: const ClampingScrollPhysics(), + itemCount: 27, + shrinkWrap: true, + itemBuilder: (context, alphabetIndex) { + List contactsForAlphabet = []; + List trustedContacts = []; + var currentChar = + String.fromCharCode(alphabetIndex + 65).toUpperCase(); + + if (alphabetIndex == 26) { + currentChar = 'Others'; + } + + if (widget.isOnlyShowContactTrusted) { + for (var element in (widget.trustedContacts ?? [])) { + trustedContacts.add( + GroupContactsModel( + contact: element, + ), + ); + } + } + + final listContact = widget.isOnlyShowContactTrusted + ? trustedContacts + : widget.contacts; + + contactsForAlphabet = getContactsForAlphabets( + listContact, + currentChar, + alphabetIndex, + ); + + if (contactsForAlphabet.isEmpty) { + return const SizedBox(); + } + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.isShowAlpha) ...[ + Padding( + padding: const EdgeInsets.only( + left: 9, + right: 8, + bottom: 10, + top: 14, + ), + child: Row( + children: [ + Text( + currentChar, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), + SizedBox(width: 16.toWidth), + Expanded( + child: Divider( + color: ColorConstants.dividerGrey, + height: 1.toHeight, + ), + ), + ], + ), + ), + ], + contactListBuilder(contactsForAlphabet) + ], + ); + }, + ), + ); + } + + Widget contactListBuilder( + List contactsForAlphabet, + ) { + return ListView.builder( + itemCount: contactsForAlphabet.length, + padding: widget.padding ?? EdgeInsets.zero, + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + final contact = contactsForAlphabet[index]!.contact; + return (contactsForAlphabet[index]!.contact != null) + ? ContactCardWidget( + contact: contact!, + isTrusted: _checkTrustedContact(contact), + isSelected: _checkContactSelected( + contactsForAlphabet[index]!, + ), + onTap: () { + widget.isSelectMultiContacts + ? _onSelectContact( + contactsForAlphabet[index]!, + ) + : widget.onTapContact?.call(contact); + }, + ) + : GroupCardWidget( + group: contactsForAlphabet[index]!.group!, + isSelected: _checkContactSelected( + contactsForAlphabet[index]!, + ), + onTap: () { + widget.isSelectMultiContacts + ? _onSelectContact( + contactsForAlphabet[index]!, + ) + : widget.onTapGroup?.call( + contactsForAlphabet[index]!.group!, + ); + }, + ); + }, + ); + } + + // creates a list of contacts by merging atsigns and groups. + List getAllContactList( + List allGroupContactData) { + var _filteredList = []; + for (var c in allGroupContactData) { + if (widget.showContacts && + c?.contact != null && + (c?.contact?.atSign ?? '').toString().toUpperCase().contains( + widget.searchValue.toUpperCase(), + )) { + _filteredList.add(c); + } + if (widget.showGroups && + c?.group != null && + c?.group?.displayName != null && + (c?.group?.displayName ?? '').toUpperCase().contains( + widget.searchValue.toUpperCase(), + )) { + _filteredList.add(c); + } + } + + return _filteredList; + } + + /// returns list of atsigns, that matches with [currentChar] in [_filteredList] + List getContactsForAlphabets( + List _filteredList, + String currentChar, + int alphabetIndex) { + var contactsForAlphabet = []; + + /// contacts, groups that does not starts with alphabets + if (alphabetIndex == 26) { + for (var c in _filteredList) { + if (widget.showContacts && + c?.contact != null && + !RegExp(r'^[a-z]+$').hasMatch( + (c?.contact?.atSign?[1] ?? '').toLowerCase(), + )) { + contactsForAlphabet.add(c); + } + } + for (var c in _filteredList) { + if (widget.showGroups && + c?.group != null && + (c?.group?.displayName ?? '').isNotEmpty) { + if (!RegExp(r'^[a-z]+$').hasMatch( + (c?.group?.displayName?[0] ?? '').toLowerCase(), + )) { + contactsForAlphabet.add(c); + } + } + } + } else { + for (var c in _filteredList) { + if (widget.showContacts && c?.contact != null) { + if (c?.contact?.atSign?[1].toUpperCase() == currentChar) { + contactsForAlphabet.add(c); + } + } + } + + for (var c in _filteredList) { + if (widget.showGroups && + c?.group != null && + (c?.group?.displayName ?? '').isNotEmpty) { + if (c?.group?.displayName?[0].toUpperCase() == currentChar) { + contactsForAlphabet.add(c); + } + } + } + } + + return contactsForAlphabet; + } + + void _onSelectContact(GroupContactsModel contact) { + if (listContactSelected.isEmpty) { + listContactSelected.add(contact); + } else { + bool isAdd = true; + GroupContactsModel? contactExists; + + for (var element in listContactSelected) { + contactExists = element; + if (contact.contactType == ContactsType.CONTACT) { + if (contact.contact?.atSign == element.contact?.atSign) { + isAdd = false; + break; + } + } else { + if (contact.group?.groupId == element.group?.groupId) { + isAdd = false; + break; + } + } + } + + if (!isAdd) { + listContactSelected.remove(contactExists); + } else { + listContactSelected.add(contact); + } + } + + widget.onSelectContacts?.call( + listContactSelected, + ); + + setState(() {}); + } + + bool _checkContactSelected(GroupContactsModel contact) { + bool isSelected = false; + for (var element in listContactSelected) { + if (contact.contactType == ContactsType.CONTACT) { + if (contact.contact?.atSign == element.contact?.atSign) { + isSelected = true; + } + } else { + if (contact.group?.groupId == element.group?.groupId) { + isSelected = true; + } + } + } + + return isSelected; + } + + bool _checkTrustedContact(AtContact contact) { + bool isTrusted = false; + for (var element in (widget.trustedContacts ?? [])) { + if (contact.atSign == element.atSign) { + isTrusted = true; + } + } + + return isTrusted; + } +} diff --git a/lib/screens/contact_new_version/widget/group_card_widget.dart b/lib/screens/contact_new_version/widget/group_card_widget.dart new file mode 100644 index 00000000..738dd734 --- /dev/null +++ b/lib/screens/contact_new_version/widget/group_card_widget.dart @@ -0,0 +1,124 @@ +import 'dart:typed_data'; +import 'package:at_contact/at_contact.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/contact_initial.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class GroupCardWidget extends StatefulWidget { + final AtGroup group; + final double size; + final double borderRadius; + final Function()? onTap; + final bool isSelected; + + const GroupCardWidget({ + Key? key, + required this.group, + this.size = 44, + this.borderRadius = 10, + this.onTap, + this.isSelected = false, + }) : super(key: key); + + @override + State createState() => _GroupCardWidgetState(); +} + +class _GroupCardWidgetState extends State { + String groupName = 'UG'; + Uint8List? image; + + @override + void initState() { + getNameAndImage(); + super.initState(); + } + + getNameAndImage() { + try { + if (widget.group.groupPicture != null) { + image = Uint8List.fromList(widget.group.groupPicture?.cast()); + } + + groupName = widget.group.displayName ?? 'UG'; + } catch (e) { + groupName = 'UG'; + print('Error in getting image $e'); + } + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: const EdgeInsets.only(bottom: 12), + child: InkWell( + onTap: () { + widget.onTap?.call(); + }, + child: Container( + padding: const EdgeInsets.fromLTRB(17, 10, 12, 10), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: widget.isSelected + ? ColorConstants.orange + : ColorConstants.textBoxBg, + ), + color: widget.isSelected + ? ColorConstants.orange.withOpacity(0.2) + : Colors.white, + ), + child: Row( + children: [ + Container( + height: widget.size, + width: widget.size, + decoration: const BoxDecoration( + color: Colors.black, + shape: BoxShape.circle, + ), + child: image != null + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + borderRadius: widget.borderRadius, + size: widget.size, + initials: groupName, + ), + ), + const SizedBox(width: 20), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + (widget.group.displayName ?? widget.group.groupName) ?? + '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + Text( + '${widget.group.members?.length ?? 0} Members', + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w400, + color: Colors.black, + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart new file mode 100644 index 00000000..6f0ff8e4 --- /dev/null +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -0,0 +1,315 @@ +import 'package:at_common_flutter/at_common_flutter.dart'; +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_filter_type.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contacts_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:flutter/material.dart'; + +class ListContactWidget extends StatefulWidget { + final bool showGroups, + showContacts, + isShowHeader, + isOnlyShowSearchBar, + isShowFilterBar, + isShowAlpha, + isSelectMultiContacts, + isOnlyShowContactTrusted; + final Function(AtContact contact)? onTapContact; + final Function(AtGroup contact)? onTapGroup; + final Function(List contacts)? onSelectContacts; + final List? trustedContacts; + final List? selectedContacts; + + const ListContactWidget({ + Key? key, + this.showGroups = false, + this.showContacts = true, + this.isShowHeader = true, + this.isOnlyShowSearchBar = true, + this.isShowFilterBar = false, + this.isShowAlpha = true, + this.isSelectMultiContacts = false, + this.isOnlyShowContactTrusted = false, + this.onTapContact, + this.onTapGroup, + this.onSelectContacts, + this.trustedContacts, + this.selectedContacts, + }) : super(key: key); + + @override + State createState() => _ListContactWidgetState(); +} + +class _ListContactWidgetState extends State { + late GroupService _groupService; + late TextEditingController searchController; + + ContactFilter selectedContactType = ContactFilter.all; + bool showContacts = true; + bool showGroups = false; + + @override + void initState() { + _groupService = GroupService(); + searchController = TextEditingController(); + showContacts = widget.showContacts; + showGroups = widget.showGroups; + _groupService.fetchGroupsAndContacts(); + + super.initState(); + } + + @override + Widget build(BuildContext context) { + SizeConfig().init(context); + return Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (widget.isShowHeader) ...[ + !widget.isOnlyShowSearchBar + ? HeaderWidget( + controller: searchController, + onReloadCallback: () { + searchController.clear(); + _groupService.fetchGroupsAndContacts(); + }, + onSearch: (value) { + setState(() {}); + }, + margin: + const EdgeInsets.only(bottom: 15, left: 27, right: 27), + ) + : Container( + height: 44.toHeight, + margin: EdgeInsets.symmetric( + horizontal: 32.toWidth, + vertical: 18.toHeight, + ), + child: TextFormField( + controller: searchController, + onChanged: (value) { + setState(() {}); + }, + decoration: InputDecoration( + enabledBorder: OutlineInputBorder( + borderSide: const BorderSide( + width: 1, + color: Color(0xFF939393), + ), + borderRadius: BorderRadius.circular(10), + ), + focusedBorder: OutlineInputBorder( + borderSide: const BorderSide( + width: 1, + color: Color(0xFF939393), + ), + borderRadius: BorderRadius.circular(10), + ), + contentPadding: const EdgeInsets.only(top: 12, left: 14), + hintStyle: TextStyle( + fontSize: 14.toFont, + color: ColorConstants.grey, + fontWeight: FontWeight.normal, + ), + suffixIcon: const Icon( + Icons.search, + color: Colors.grey, + ), + hintText: 'Search by atSign or nickname', + ), + textInputAction: TextInputAction.search, + style: TextStyle( + fontSize: 14.toFont, + color: ColorConstants.fontPrimary, + fontWeight: FontWeight.normal, + ), + ), + ), + ], + if (widget.isShowFilterBar) ...[ + Padding( + padding: const EdgeInsets.only(left: 31, bottom: 8), + child: Text( + "Filter By", + style: TextStyle( + fontSize: 12.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ), + ), + Container( + height: 38, + margin: const EdgeInsets.symmetric(horizontal: 27), + child: ListView.builder( + padding: EdgeInsets.zero, + scrollDirection: Axis.horizontal, + physics: const ClampingScrollPhysics(), + itemCount: ContactFilter.values.length, + itemBuilder: (context, index) { + final type = ContactFilter.values[index]; + return InkWell( + onTap: () { + setState(() { + selectedContactType = type; + if (type == ContactFilter.contacts) { + showContacts = true; + showGroups = false; + } else if (type == ContactFilter.groups) { + showContacts = false; + showGroups = true; + } else { + showContacts = true; + showGroups = true; + } + }); + }, + child: Container( + margin: EdgeInsets.only(right: 5.toWidth), + padding: EdgeInsets.symmetric( + horizontal: 10.toWidth, + vertical: 8.toHeight, + ), + decoration: BoxDecoration( + color: selectedContactType == type + ? ColorConstants.orange.withOpacity(0.2) + : ColorConstants.textBoxBg, + borderRadius: BorderRadius.circular(16), + border: Border.all( + color: selectedContactType == type + ? ColorConstants.orange + : ColorConstants.grey, + ), + ), + child: Center( + child: Text( + ContactFilter.values[index].display, + style: TextStyle( + fontSize: 15.toFont, + color: selectedContactType == type + ? ColorConstants.orange + : ColorConstants.grey, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + ); + }, + ), + ), + ], + Flexible( + child: StreamBuilder>( + stream: _groupService.allContactsStream, + initialData: _groupService.allContacts, + builder: (context, snapshot) { + if ((snapshot.connectionState == ConnectionState.waiting)) { + return const Center( + child: CircularProgressIndicator(), + ); + } else { + // filtering contacts and groups + var _filteredList = []; + _filteredList = getAllContactList(snapshot.data ?? []); + + if (_filteredList.isEmpty) { + return widget.showGroups + ? Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: 122, + width: 226, + child: Image.asset( + ImageConstants.emptyBox, + ), + ), + const SizedBox(height: 32), + Text( + "No Groups Created", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: ColorConstants.grey, + ), + ) + ], + ), + ) + : Center( + child: Text( + TextStrings().contactEmpty, + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.normal, + ), + ), + ); + } + + // renders contacts according to the initial alphabet + return Scrollbar( + radius: const Radius.circular(11), + child: ContactsWidget( + contacts: _filteredList, + searchValue: searchController.text, + showGroups: widget.showGroups, + showContacts: widget.showContacts, + isShowAlpha: widget.isShowAlpha, + isSelectMultiContacts: widget.isSelectMultiContacts, + isOnlyShowContactTrusted: widget.isOnlyShowContactTrusted, + onTapContact: widget.onTapContact, + onTapGroup: widget.onTapGroup, + onSelectContacts: widget.onSelectContacts, + onRefresh: () async { + await _groupService.fetchGroupsAndContacts(); + }, + padding: const EdgeInsets.only(left: 24, right: 6), + selectedContacts: widget.selectedContacts, + trustedContacts: widget.trustedContacts, + ), + ); + } + }, + ), + ), + ], + ); + } + + // creates a list of contacts by merging atsigns and groups. + List getAllContactList( + List allGroupContactData) { + var _filteredList = []; + + for (var c in allGroupContactData) { + if (showContacts && + c?.contact != null && + (c?.contact?.atSign ?? '').toString().toUpperCase().contains( + searchController.text.toUpperCase(), + )) { + _filteredList.add(c); + } + + if (showGroups && + c?.group != null && + c?.group?.displayName != null && + (c?.group?.displayName ?? '').toUpperCase().contains( + searchController.text.toUpperCase(), + )) { + _filteredList.add(c); + } + } + + return _filteredList; + } +} diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index 718f409d..1b9604de 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -1,5 +1,6 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; @@ -68,7 +69,7 @@ class _ChoiceContactsWidgetState extends State { ), ), Expanded( - child: GroupListContact( + child: ListContactWidget( trustedContacts: trustedProvider.trustedContacts, isSelectMultiContacts: true, showGroups: true, diff --git a/lib/utils/images.dart b/lib/utils/images.dart index d54f2b12..34e2d188 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -73,4 +73,6 @@ class ImageConstants { static String sidebarSelectedTile = '$_basePath/selected_sidebar.png'; static String sidebarSettings = '$_basePath/settings.png'; + + static String emptyBox = '$_basePath/img_empty_box.png'; } diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index 7b1104ce..8961f4c2 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -368,4 +368,9 @@ class TextStrings { static const noInternetMsg = 'No internet available'; static const permissionRequireMessage = 'This action cannot be completed because the app does not have permission to access the required items. Please change the app permission settings to continue.'; + String noContactsFound = 'No results'; + String contactEmpty = 'Empty contact'; + String serviceError = 'Something went wrong, please try again.'; + String groupAlreadyExists = 'Group with this name already exists.'; + String groupEmptyName = 'Add a group name'; } diff --git a/pubspec.yaml b/pubspec.yaml index 67584e06..30ce46d1 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -76,7 +76,7 @@ dependencies: showcaseview: ^1.1.5 biometric_storage: ^4.1.3 flutter_svg: ^1.1.5 - + image_picker: 0.8.6 dev_dependencies: flutter_test: sdk: flutter @@ -89,7 +89,7 @@ dependency_overrides: git: url: https://github.com/atsign-foundation/at_widgets path: packages/at_contacts_group_flutter - ref: feature/new-version-contacts-group + ref: trunk # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From e27409318712dc107c87fa3c694e03f660d2d3da Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 20 Mar 2023 14:30:46 +0700 Subject: [PATCH 49/94] feat: update UI SendFileScreen --- assets/images/2x/icon_success.png | Bin 0 -> 21441 bytes assets/images/2x/icon_warning.png | Bin 0 -> 5330 bytes assets/images/3x/icon_success.png | Bin 0 -> 40604 bytes assets/images/3x/icon_warning.png | Bin 0 -> 9308 bytes assets/images/icon_success.png | Bin 0 -> 7046 bytes assets/images/icon_warning.png | Bin 0 -> 2137 bytes .../common_widgets/linear_progress_bar.dart | 40 ++- .../widget/list_contact_widget.dart | 2 +- .../welcome_screen/welcome_screen.dart | 250 ++++++++++------ .../widgets/welcome_sceen_home.dart | 24 +- lib/services/overlay_service.dart | 273 ++++++++++-------- lib/utils/images.dart | 2 + .../welcome_screen_view_model.dart | 8 + pubspec.yaml | 1 + 14 files changed, 366 insertions(+), 234 deletions(-) create mode 100644 assets/images/2x/icon_success.png create mode 100644 assets/images/2x/icon_warning.png create mode 100644 assets/images/3x/icon_success.png create mode 100644 assets/images/3x/icon_warning.png create mode 100644 assets/images/icon_success.png create mode 100644 assets/images/icon_warning.png diff --git a/assets/images/2x/icon_success.png b/assets/images/2x/icon_success.png new file mode 100644 index 0000000000000000000000000000000000000000..a6fcf4f557483b882b5014d66208cb16b01ff33d GIT binary patch literal 21441 zcmV(>K-j;DP)&)|S1oB-*%>yu zW|?J{CGx2P^gsM?={4L--?V1U4q-gPeb8OG?CZ`zoI`xuw z-}nn(MNKtmDmVlo=*?;EdVlQh=OCIVFPgK!jT<*|FQz`ySS+u)IqWOHj+I!BlMSPo zi}ofDZ~LY&dFa>4;fK@kCXVKeBjWbC*U$$#dI<&*G%YXBa4ZNM6Kbld|6JG==vbAk zziHjxd;5>|IcqlV@FiHGR-cOX4tAaUXS3F?`j!Q*Tyf^A?)b>g_w9W+4ktOvL-mVg zUoZqb+L^}#5Dr1v^5rY88y~*jx1ag%PS~%or5Eo>-_YVIZ~u3PH++rgWI53bkWUXk zm+ss88D+fh=ZBxU`Ar3njG3ZhsJdnV{%>j;kgE<<+;rXA@HtjhIbXnck=Gsk#7+JN z|I0oEFGMZOf6%wI<&Hu{@KX3Qjqg=24qdW%#Eo4CnFqmozvl z@{Ovx>yOzfmAqu}mG_3KLRWo8ZfO0i?2%hVw__Dwaq(>GjE^6J?%NG`YXUq1M5Jea-nV`1WIpJH)I{<^UtM`^q-rfE@GKM%2BipWHt%s2 zi#@oxYtfu3JP+dLmTKhm_78Xet46|M%c)8Hig?yuUh=&`e60dJkLAGemf#%esmtf z?8uQP_ZE{UG5f-R|l%l$U5FA#*H1t4EgoQav4-1kOz{El0+>??~rRcHPO=l0iu zgzu1wx%iP$9CF2&aIB-V)&)N?@^Xz2rLpjYDb#vlk2g4C} z$#9s}lxiP`%j1_g-uJL{+8=#qy!#uz`iAQ{UXY1fVJYeiBfF%K;10hn6^B2m)6cxA z8T1F6oVDvCi@(w2i@bwlS)RH*62A~VS9M)Wo#>zCdY*l;dqElSYD4A{nKj<}+8?ey6^dlIyu}gAc6v81$P3Z$eU0YIPwfPzUNl}-EXQ#xnt&V`VX_c zzZ_1_yoiC?dXns`!vWLj$wPYwU%Wl8efdqH&^i}w2%mYz`Tw_~Y4JM@wIGr}ZIVFk zbT~qsxH_yujE&|G?1F@<#0mp#kqEEOHJMI#KM@N&tZRiaXTX29 zOXgjv-o3xf4UT{L=?6BxCE%6DhCq4DgLP-_ja*Z_pFQQH-Rkl7 z?wp3!^U7-)HiDr_W}!gi8-p%F$6)OZN6LehRp&;g4?hG^nCyaR=BjM!KkG#A5=?5! zIE)1(pbMJm@Os0S?RfN~zhb)K!4)%K&Uhnj%`xWCFZOThRNyTh|J>i5>|EvO?4K|m zzJJTXM>b)>4X<%rUsdI-Fu0X`zUVN`3|_EUPGWwfWb@kd+RO;gkB(31&La;9Qn-WR zd`?g}E5?u%h8Ja%5t|r?r%7;)Dc()oI4s*^;eRI%oyqzhi9F1`#c5o)7^4Z~?iC911+xy*OxIFuvfWz0yhn8If;Fdtg0L+?T z(Cfwk9nXVFAu+%($)_+_>hmiEsiGrLcNz#a8*d&R-IOnV>DHgLd7dw4-h0ZqzHgwl zLNYn)zW(|(x7~jG%PsN7eNT;iHk1F<<*CHvsms>gU@|Cw#>*yWvO&D7+E5l@y zHPyaM^ugPqKSk5(nP=`u`_8EQTv1bc1b^doyj(>YDyOpNtRfI=u7aLq|4m>wHPgL>_-OHq&*A9QmZ5;~gUI z4}*c7$84s#wyq7vp4|n1fn)ZWf#pl(vVU!KxzCe%w+|$A7P?6ZHi~?kk8#$L*AaRVNDeLW5KY9kjK*hf$4BOz8WA7q%5qhw?ZkRzr%{*@ zF$J&YS<%TLnM_=#iE&B81MxeT6?s!F^bzkBy8EZ_4j=K7At`IA(0E zcDV~H<%$1EbMj2o`6f|>YRqT*lF_ZGAlMY7{Ny*HA)6Z5}2|RW^&2CiOKOB zw@#k6mmKF&g>AI!#ta6V%}5A$RrW5baru_6mz-sbdEV2(vO>9D%zO20x*~6KA!nc- zBIN;9?|tO=Lqor$Szi0HvUSyM;hQ-@cR>j~!kid98>x|(tz8e_`T8f+D|f%ZMX$Ti zv(Z^JHw?z~plTX3zhR(9Q+Gc9EIj{c^7O=TXZP{hicOQf(f5a&_9>!wr4uHA|c-TND`j2n8!3wxV(>30Xt zb9~n1u-q|ONiv$AsC!7@MgN6DdCNZs%fppEcOjnXdGu?sBhTDExa-@A(n~-8)kCwm zeeU@`o$FnBy6b&{n8C1yAR>`|;Mv6e+qz~ytEBbjmR83XL|{T%HUlk^ism9fOyeXJ zi|RuRUw@WcK5yLACP#+Dzx?X8=B7By9QyhlGe^l;hGF()uy70+x`R+lq<(bxy?&4E z^uS-(UwonnMtc9!?=v0#B0wj>^W z_L2BMKD#SA^R~t1p9zUf6_S)tAv0j$L8+VpvnmTin4@O#NIXsvHVDp&9;NWBBQd5D-+;d$2*=iYi<*w;qr5Gnb`v~ z&wOMY-lCzY>Atj~%mz3|IE~35>IJ@fPP*wbsQSZ$F#fta3yuk3)tVhL6UnR)J#{xb z{FP_&Zq_dfxwIbL^^@G#-dhz=`bM{X>$n=>$G^05;>$O-f05Q&K7hvg`7kg&6Y6^N(?V|$Ti38-dcR+&qIoL=|?JCIzF46 zp8gG&{>JC0_Ix%ACpdOAo#%rT*Ni1ttzbe?XPJRCq{r0`A%AXH*DG?YP2>He(Qxw% zWrAxFlG}`d$5|zar+=bm$yJr*mA}2c`}jo1tBscdSiSzPMRHZ>2Hw5sYS!ne;>={m z$PE52H+A3+d917JK=p&W;6v7rVd0UVOii@PHu_pG{2QAn3ta-Y`!%oRUOeZEn#56 zZ{o&a9MlVW2{lCLOZTU4{SN}J+PB@pgd!VtUh=vtsy?hNKjRSW>AVdKlUJ2?u0`eF zt4ZIgc6kX8>%*+vP&7T7Q-wXT7qfr-k*nj*zt8TQI^O#`@qoUTFZ_1aQMl00No7TJ z`57p(jp5+U@0>KpZ-dS*<^=ZRSYr;rmW#h58RoLJ&QR;;9f69sF?eqCxzXL}vF;zG zhhMmNrdz}vJULan^VYs;fIj;BhW3a%5@65cQ2)qk9JF{Pv@~=t8B~yqIgmKg24m8! zSwky~qN|xfAPYz+5LtmI+yb(>4gt>fyV*rkr^hxIwg=rhX}ds^FiAZ)*vC7^h9t^! z+r@m-Wp~&4t2;gok;)GkEGH777t0Q}w{`ia8m?gv4&K%IB)mf5-??D}f6gFxMWZYH zcf7${J*pVc1WvEf7}G6Be9JE=1m3%H*C87t?4uSQ#T+B*o+#QbOJmA3d%HU@jqL?cd3V-Wwaw16;OdDCjA%r=RYt^O2TXO>s9=G3ggX*n1Kh*FqewTkSIFQ_M;wFel zjA%3Wsl)#|vtdPdLvzEsLLC1tyv&kKiG2TNc)9AnZFVA8ExAVh4(Ayx$CYOd6{d?> z)PR^~q&6lOXNRBZdJPQHTvLYM|5pi$=?{}Pv%(+mrFf*>?XQwrzrVbL(ZHc|V*#>XW z`0$xwS5;8BRF*iuhTsWqC&mB)rdbin${6q$b;ytDz~KQYq;5nPrJDpOp!qeiKp8MXn8l*80)d8->}2DSmvK7hRLnh?q*Tpp_@5g2JB`rX{yuyKy(k=_VT3Xhy9)h- z*B<`;2lu|xzSlYZLBZt?Kq!D;DqA~(*Gw*#9L~Ye%^-XVqt}gZU=p{aCG{;_}NeCb3v{h<~3{3PQaUL;yYE3MjboB`4ka zHwU1edisFktof51Z26FpO)oOM7rnRatgH8fl27x#7WC^LFt{9R#0Gdn2w`35r0$p1 z;;8)yIU_d|TkKmF@9H}DWf_?vYt3bDX@!AjUPP{($1;HwwF%5nIL-}`3I#bq6^v+t zS|Cx?2@{(qXPdR$1nGoftcQR}EVxA;iagDhN-7C(qUoL}+jma!%IYq-Z;ZOd@$s&i z`oq7!S@-!@n~~Zj9zj#x>B*;O4?KC(woUJUMesWD>wFH`%}WjuJZO0?x7FH5IEwMH z?CmyzLB?GphsPWIkxv%N&F=Pw@=q=D_wExbZCD+_KSiEeY(@s)42X`f}Z)(4# zTyxe(9PUe2S1x77_8iC#LHsp!{>=e6xa^F7+_vrC##Yyz`fom; z^JYh4;)Uput>4@6`+qq6>Zhj@6P_NP;U$&===G9THyWwj9xuIi7QXsxd$-2FQ{(wz zGLhf8B2xDc4gPh1cgeummGRWx2d>JUzd2dR_vUpo<4_?;DsBUo0dB zXCU>O`fiUZBPRBJ{h%mEJ|iqX?aGKhj2vtsY-m}DAs4@)A)_fN2&iW0SaccW%&~Za zIZ0;>FXNVLd2je#YBKmPL(7~#oQT|lAG!U!HQ=oa@t255k7JSnf-F*>NZ2nzpyU-D zq6&{{iVUu572*RrmJ$l;fe4yu0Y^4!eI)i_`QdeocpgPea+o=-f(AJZlrF)P8ob=q zZdqRD6w_b$1oGtHMFk}G{4;;>72`vx{OG`r$37i{6CFBU86?BPBnf1+K#bd@Xq|PF zyx9t=3t#@pM;;-T^yI&+yK>*z4UHGKEUx%KDCxhJkEcFZ$mIs`pr(1hn{Tf0wdImA zp=V+^+Y8xk-Q;?Gy#SIi^ulKcgwS`s&!>HEKAVw|?BGn1XNsw;=?zqCjN4}_siMJ2 z1yq=LMrB#f%x5LBVsWL;555!pORqJZ{!68-pKEX5_@0RK(PgzkezA#)fy3iKHz!c5 zB0Wi@Jpiu@C?JqiniFb#2DqyMQay3%O3BU{jO{w@IOsw1bR&QQX{XQ$QEnRo$u9AQ z0`G)?Ysv z4oPZwjpLY1Oz$I~Bv%pHPG&k+e?!By-Ry?zJ-oa2qkP(VdC^qQ>S*NG`CPo$ME5DV z9aLK)=bQj&*c)+_84Y!$m=hW+IS8Z`$c|@8c}IgxDFbyNd*j86z=6de-8=Hf()Evk z8u%iW$G^M$;MB9=6bp;pqV{>WQ(w_oSNWM6zdtd|oJ6YLiLX7gn9J9inDbLv2ftUu zV{p2_EVAhjNw2 zp}W6zL*y&)!|2l|aY(p(W*!W+Xt@mA6^Ih3ZrQsD_7m18f1)3DZYNFfs8X_N=T3Md z1`BWCIFjB_C3$PtIMgg{s;vuV&i2c&#>6XE_Q^DPDfPOVB>=&y&vYcDRb(e7N&l+q zhN>n%_}v2S?IdM`3zg`APXY-+q*q-L-WoIiqDJ~M@%sdq6Ai}6 zwpNH2U9epK)%R|UTyp(oRq}}*(}0r76^n%|Z6r2z%XQ$z;&i%v7x*fD@Mj)xB!G;2 z={aXOcz26aOJZ8DnJpE?4 zspazEafu+J3uX!UDng~;s}+O~U7E>QsjAK!$l|Dw!>mZdFT%_hLly@PCsJ@O0Yn6# zTFO=W-Q2$%b`}HQ`9$@%Vxh6|%;WU~ z*xAX}J?(8MZ$10d&UDtL7m<3*$EH1r$+#$lmq>mMnHRx=hXAJAmS+V&uz!I$08MK) zE_o_}APVR|y~sTpGfBuKRq*jZE!M!=5o?&aY1kyqH#lT;Fb0yh6S+zht%fIZzMW1w z(*=Doaph^R)+#)%N%to6f&WRYs9J!+;BqZdCs-aQv z2uK7#p0$d7)386B#Z=Xa^{C$sPQSy^QZJr;<>{{5&+$%Na;)R)8XPQ66mtELMes5i zFmtE@lUYKl!m(}{+3ijS{*2>w0~o1pxT-Q#{~>*9l2eLFNG3*~touW_`ucZyY)e(BxyHB0|X zpGpKWGedZc!_OCT;~#I;GdK9X{x;Ux0{#XcxI$U1+Y&Se66VEXPKfmxHh`q{iMBsk zXOGU`F=?9x%UUj1#l(d(u*k1x0RQ zh@goG9wS*?ob~C9&C8KCb)K>-tXE>(ZpIfD^~*0_?dDH!3GaTWd!Ag5Bm(1Q0X`ex z*u-o$z9XZh9vhlE{LAgTpTGOG*w|Y#{rq_2HOD}4_1jKwZ0-1*lvIMznF(~A@pLvj z{!Q-4BYAiIy49?R8lUKc$sR9+o67N0nZ$ZHYsEo|p_P47>zj*%_9@1q9`g=7$5wJk zye=sVk{N|etpby@Q{$mEps!13Q)lK1zGs_M{mqVS~+8VnrZIy+7FXI(!N`Ra1fVFaC;WI7Ge<#5PO znG@WeLM9pz+(ECQ=6t+>BBvnBx|)-;+_Zz`B@6++)b!yOfAg9EG;|MRq?JrGJCICg zC-a%yz)xordw=9%dIQzowHJtzixFKu(hvz+k%Pe5*SAuCCf?MgW3s92}s7y zU(jWifLj=hEW!n2B7#T~n*e@xcqI!n+!Ul9LQxdsEbAy>;=<6`J9c2D@3j_2upcwF zJ1u=7eF1A{#Q4L9bIuw-@gcM@M2`=v|?Ltrqbx?6c~vn%~cNhr9VyQSr8r`_E9s?*Lpv7~x% z{8BEN)trLM>tfVg9V`3V(YV`rf3S@aE@5|FK-_!Z>N`> zouieGpFB-MH{mM%mE~oxH3ph5+;Asq|kF-Cvmjib^ykE^;OeWn&OL;DLQ^qlt?p z8d_G#z?{-y+5`gSsSW!Zbt{HS<+7`mW8QamA{qbIwf_J7$Dbvv)_1hFrQ23DF~N$p zQgz+MqT92QK~4VTEBRZ*VrQ2iN5Wxa&1Bx?2?b;d9{Bu4$v`{Ytsv;nhBC)QK>8QZ0m z;^4fyEV+%+`Ja0X^B|HwIu9Pj-;wE~?6*-qGD}2!Kci zv&upKVwZ~-9W_&sIDnw3JOz-{eWp>W_Y9aiQ~~Zl3Yyl&L60K4f$@+%+S!%Dm-Tbr zm(ClL4W>1LjR6h6CsQz}+V86fgE1C`*w8G5Tg&lkw@O_iQXt1pFDS`HCfpDS%DPgh zs!v?KZpC7{kN`=h7=?y`=}b9njlWZPS~>L^wS4(SZowD9m?hFr#`ke}d;}oD?wTWi zARPtVTsNKV7P(Se2#{t^W4^_?s!80eEJ?o!@JKB-!8e_5Uh@YXL=B3N86|yD(QZu%#*m)!Dm|_P=!_! zA%Uz9_dYkDg;K!Gg-Il3TbQHVDr3LideWd1SQ*G>$)b2z&s9et6OF-ae-zwU8aR+p z&m>JMD3Et}$?{iz`x3CN52*Vzs2Q@H3NuA793DRvwvMldeesnroeSgZ94<_fTx8}P zwF(j`Y3m0P1_U_P>Zl_?5dm7Tt&OrpMpJQA%>7zwwq~Z8$Xp@!l!m{ShqaWhxqzt38)RE0mFjbJ(PU zMlLQLt*!vcq6>CRoDG|YFMxybcE~7x%UZwyyFJ+Q7^NfxpOQ!`B>t4~g@Qc|fYHeG zX+_B@xhYM_j}(jQP(e|8lw6@dnHU?zOVloayoI>kH)af!8ozH-LT5y2Fbr zxQm=F6v&Y2R}B$@Wd|W%-VEc1SK(Ew%oEpUNo_D7GwFpxk1m6bOLdU_=&F)~)=9Lp zPL^TjaI!s}UB4}ii;SJ8*r;NHqN63|3nrah>MJitcbSB-zA-R8Ran}%C^bjeyduU; z(g{xDE;6ggugdUP@8!@n`gRydH{dQv)SU{YH30yu`pdNVT-Gi{(0h|!9FrIDQq{Cf zwwO!hGPC;<$>|+RcJf7!qhfziO2sBdri;StR^_tGs`SnuzH}nXN8z=O*9~CE?Wpm) zg)?QJ%&^Ey>a-QG0M)Hez*K)5>UM%1W8kQ?ox^A!9|*&tKdgY|S85>o@FXP$=t-Lg z&zuA4DDYsu5NB+Tvt+5{D+oXZ#h|Zscmq(^F2dO1Nd(pl-f)O6zs2)9wfbl#1dkqh z2W%ZZ6Z%t&@cT$SBcSOt5iJQPrC7yMGM>Za31b<8E5Wofo5^lYv&Qy9YU26i?AQ?| z-8bId-FeJ;f88h97x!x8RRO%U=G0cdBFNWFZ{2;YzdHnDwa+ayN@#r~RU!wdYb-ci zQ7CVC4n_~0MNa@*()t!=R(KKN^9Bem4^+0A5FLm@X4ZhJ20uQh!xOz5;16hZduBRlrXet@B{J)F>xW^^ zrMoma#gLF!1k5xQs1NkPS=CQKGyjZs>qGrNeBt0b{x~?;`IfH^{EBMCPfoeK?Xq*O z_))c6{+CNMIkcV$9)74Wku3eap#dCcFY^9tORaaQt13t-0#cuo%#&z;-cTPDGd{@9 zRzOLtwW~8b^Thw~L??$spyp(VELAa+MAoP`WPS+b3gWR*Z5S{um{(W7Gd+{ZUJpWix>GLxokL7aggD00TNyDA4 zS%?jH;E53DB_p#0-u$Y9*{FvWxc&we9~a5Q!8ssa3L^Q1WnsbJSsOTZ4#3ikCdMYO z>FcqklOrBr3mGUx$6!QR0tu}Q7z$pg&CvpoWXpvjTAP}KR_AVb-=aIArss{jV#xj0Pw%TQ@|K*b7;HtmC&v0N{^z`9DnvCLd~!7`RIZ&6a#-$=bh3T$ev z>^!)PQvzpo2kHY_OuMq9%~TQlv#-72hD8axza3!^PtUv3d~V}T5~B_dqNCr zF~x)_;VqD@ikb&L5&*wkfJSW#GC2%P6q+Gj@PK5b;GFQ|aQ(6$!sTs`K&58}_f8`D z=sc%IK0{#V6%9OIHKUV;sRl#Q(vriuXHQ@DHP3rLnQ_b{=KW3U7k9L@UzP6NLwi$5 z=d^}yhO|XY6>~fBLjC=v<*pTF9_LEc>tt2l0?*V-MZ2*eov_sQ=9Q0P{pUh$a5XXz zDxN3}Pm2yH(b9g=Ild3K!;dXP7bZZh0{hz(BFcfT}Wq<_hVvYa5mEUzl(g!@T+N@R$~OiLcdgsf7Tq>B|^HlZr|Ktx$!u zl21IHnE3KHqlcgT`{mx7mR5T<#Or)a3aMM2x=-B(P@mKL<}41S9$(oACN$Mxqyiu# z6-!>DF#>v4i@9Z)c`J$yl;K4oL8uk8NGF*Kk)kJXAxKAo#aLi56fkQYQ34#DnvK7+ zyv<)(e3r#BOUR-4-QY%-TIU>u2IWBrxMslX!+KE?s1KP_El7Y@4V#>|VmLWgMy2`| zh7Tm{6_b3QJK*M8fAT}|>8?H5Y4~#hc;D2aY-=&UU1A+6lz-c>j`Nc>(hetLPd+q0 z`X5|Fj=8Qa_@7lZzVgWm7v!k>G$?>p!EPL7eH>#I)}mMdzkdqUXcZV48B`<#RRpl4 z6qF>Rl6y=|259mVYAFEkz+EjSY~_NT2aw{z(cdXh)NR^U$B{Yp*5jjqxvoKEL*C?xs8r(I6Q z8;}^ex0vi28G$!-z0%_*F^?rC3qK#-x9tpP=nn$0fka+`tutdc-BTPHeD`wi1%J0B z_^C{jpNYy660l^U9jn`#0La3;^-<47S$UHtEg^3dDk_h_#K3CE>txpNywJ*kokgfg4B<8voFN&^LV~pITR_=aCbz&{(rMVdWqmx)S(Zl|MQvhI;N~TQl3OK< zcH&;`epH9Z z3IP|_>SBfI2cOIAfIkO-rE%{}e{7X2v~@(wJtaB(`_j!J=Az2t4Q*}y)1#Fh$m7+o zt9Gj(S+B*K{by-f)cP#&cybpHa?vBmvWy^jb1*f&1dD!$-9o|6)pw=Lk=Ay&hxxc0 zaxo7?7G=Td!_-~L&;*Ai!~tU^DHeFFWrdv87s{3<)bk5AvObMygGsd=#cQ~CHYhWIKvwr{IxUv^qnD81RH9kei%@*^#AqGBDfY%msxx zdsM>0@kDiUz;sU)$N>X_Eu58N=xN)1TJeszUFpj#kHkQs1YqegXDOvn+Da-To@>4a z#K=3qhXfOo>xIG5ETr;e@dX3js!j>lx#Py4nyTS3=+rXFybmlH!E2xk_Hxy!LjIY@ zcjksk$$Rn7JC--B7XGDnssHA1t#@58!gcf=Oh0$meaY9i(9emCw(yzm*7C9&mY?c6 zP4*f{U@&x{0#i5a(!r!$D9czb)5DYX%XEviUvPyJ5G~1wtd};82bqB6bSvnJ%W|g+ ztdA)b=_D?a2`fbrX8J0Sq-HQfMXQsr09R9%H+-qv6c%o_1!BfL2Od)bjt5)wfO(B7 zOQ)>y{`GjlV2q6Jg;X*Rv6M!wO%@G$fpR8U9!1B{U|p;-66G=#RERRd0`ddyXjYHC z?d`!H_U49bm!1{*k6@kWB8Q6)5-N(UfZ^baQZAl*qI;im(pGp<050{eZmAE}|J%y* zLqV2HB5R>h_em9ZYIRoePCy_FvHEz0W}pRww^DLjGGLhbg$u|o_`+joiQ|x%Tm)(n zDK*}-EpQ+@D_qd zJl+(3_Ym-I9vpHJ)R`nYe{_-PCI@F#jC(pbB^@Nm0A9dy2iXZpG%1KgkiTgL9rJGw#b%+#I#LF1DS*w$2xHo3Yjv;M?kNo11pP%NPJ;rA2CYA~k5RLY?38KM&?fQ)@Ec-$PMHv$37>Wuqf zf9CGWdao8L7uRtD%a*_+gWM#G0{w1Y)1&bXV4fbspPs-pgz65XB`yXf7qV$F zW{wu4ujM#er1OGRoEH;5)D^415kgYA5k*)6l9` za$$(HMp33oU`$HeBCK6H;5i^oBcuq{OpaO?ZH=?c?kF|AREU>;lHHMZL}f(;7d}p9G)N(Gs&2_xB;@8%b{dT#F+K}0o-!epXJD$p zLSK@BBU5@|EUEqI$=^j^TyN>(QXU`tDjv`B1wUw!@3OXYAan@l0Yw|8*Mk zc(g!=%^&I|zLF^w_l)HxOW7uresXxCvQXL5jXGQavWZ%1HT(ifjBMmSWhAvncLV~N z2Z&l!x~BmO)8!!7h`|E|UOwkKVDtm(aMTGhTJ7J8!qQlWKZvl8FTAe}Wz>`g}=NsBhnpsq0CbJMd9D{-WBuvZ{sP&P8 zomil%o3uAoQSHqt5$Q2$x;dLjn%~c+)vx{PDb*6f-Qir2R}X?BZyDS>`Rz-t+q%E2 zYw)-YO{aad<@8h9!Z$ZIm3=xC_Oyh9{EBA_@%y@Zl-Uyo@T}IwXG8+6|KP7|b!oal z7Z^}792C<6gd4JWA~TrE=PbI6P>pDfUfkU1Mhgtd4cWOOo@!_e99`$J7CFq>6q@yu zqxnX#vLBP1NhoBiK|zZoU=eF1*2hyTM73N%@C3rOT65r8WOuZQGPEQwa84u%37 zxwuPH`B)1$Dk&6bTO*x^O|t1y*@1PPF`I*Qe;S65WT1Z>Gs-lFMLOvSC+^d>J{v^( zy9K0?SIp^HO1(dx(mx-Y2B4pB8}=|E0E ztUnCXb#+j`Jc)4#)dF%ABLHOm4i{eWDuP0SJ)zHtg_V{xqHwVb+9kjS(H3jxEYjvU zE1Py=nURE^9q)nI*b2II8P8jc3mzDqi7TQ+PBv1=BcAvZv)|r2fOrs`?I92wJO~Ww zw;^lX*%nE71d`fMrP9Wo@woZu&$<%FT!EhH?6gkcD-84|t7@wPH~BnL6YW4QtyHVB z5Ge~>+1`-s!bkVMss*mE^99zd3f$~+pHrvlK|EfAQb>e>U~tFtF&FqM3*ZW)JcO>4 zRD3QH2l4v~_7@AJlM7F*PFs@a=`qT%EYR_|QmJ4|K^DhJk^~Nm{S=fn9K`oKvHnA0 zn31vOVyO!iv9_brsYTW*0|jd%)EbA9lo9pePY+5&E;=7Ohkf^Gd$=r(LEPpKo)V(F!RVJ);3;$D@ zN^k#mSK)Q7M!%}wZ`22zi_0UfWl&mk)1G(7Ns*5&(5-fdo7f*|e+(Sv=5+B{@tciohW&;z0MQFjnu2gVc$5f{1iPKxFK=$IZD< z)=p|{Re@}T%Ou1!&&;Xm99op%R3Oy63*=A<eS0IUl-A%kl&o2W{|pD{m3(-wC)} z(gWrw?!Q6SJ45zHBK08p1h#0koTUqpKRgT5hvLxJpM#;e9}=3MEKd)rf+bOI28`SU zT3f*a&2pQ$qH1ldEKBM;p@H{W0mY;f zFJ=kKJBTufN2d_U2Q@Xa3^KkbhbK_ACkf1#56oN&UW$iD>vgf+g6%QP2eYmP3L)!-t5+IV`}(0yI7{493O)DjU25%;*%P_fJ6I zff*RVEHjF+J*T@c#m|C{nyir0lAc=H8fvSra4jb*PALwzHWbyj?An|7*v_qR@6Elv+AGGuaIn}~T^ZaU2b`QK z?Z=aS3I=S4-QUT~^?8z*G`Y71yrCR4pMfXYD1e-e(i|_3XH?_3`4XbU#w-A{WO*EC zHzW~@A&H7zHZVN<5_*gUcg-Nk_1}kV&$*D@b19fu_*+tv1z@T4qbp;e#~_(ADScRS zr`duJl;=8Nx?2RTTtQ0;z{ErvVzCq^q6OqS(-;<$H0I64Icu4eLaw0oPbbyyP0bpc z?(9m>z?(S88lpp!%769E6cJ<4EcQ*fxUKNA03x5Ma z$>%aKHZcK*dneK2(AtbTaFom7sdoeCKz50ZVQrU2M?-G7Z1syK(^_|~p#OTdSbVtp zzI5-m;q|-86B$F}yY^L0o_oWQ>FMInzw-FOP4*fdrNJEUjbze_CtCaP+B54fmUzz6JT2OWgO}CdX3O^@XOvhK zI`bc0DaOVAGeI9(hg@_e%|wArE{)B?_~aDq?-@X)eHIe&EEEbBa4IPe=t_s0J&{T` z6f<{NWApdM)aae{k<;IJ<<;I0 zU8GL4m)6A-6{*<^naL&;R#)RgV$Jj5adv%I$UETBmUiGh22?I}psVBY#7@}t-aPw4 z%LKMmHdqBZSBiOp4OmHtl@%++?@j%B6tX?J$&kFVJ(H@1U#so>qEJ4RbWJ0AIvw=QK^yTcr-BuJ>8uOU>jW`Qf!@>m+A zAc=L|P=6faW)319JV-SGh>q4mDjr5MK&FJdY8LbHOzxMO%KUQDNOy0WzVBt_KzsW} zQEXiIPtN+q9|yOuj4K*zku^)e9{4W2#t{^QEp-t`2U!Ui>r}a>Qof`R6xW0TjvbFi z;HHay5Iv#0=DZBR4GrL^s&rjkR_UuC3=_@bNTV)eP0*z05BbpY`dwImX>ef6`!PPc ztbP_Kwfb>$wH|Sq15YmjHQ|S4m+l8|jR%?iA+*LM)%3_5c3Ndnm&x0fx1jl`R6>;8 z=E9l(bHhdzfisfGr1W6C>rKG$SO!w4o>SF8C)3x`P_}pgf*KJVgn?Mfyl-+=xo6Yv z*t5qxI~zLrRrM;6HfbHsI)X4aA{lVmT% z;>Zf)k=p&xxN-~h@3;j2&QYr?twUDIJn6&}(S+&4HLzQiVf97<0#$BgvW@_&CT#F{ z+u|5Iaj_rIfydZ@EtnyCl%k;1#aNZ08Hn{IU}P`})3E}iDR|}_?M2>`E0~F*Vm^_{ z6>psyjy?C&XO4fno0id8j$3`!MQlamWd?6eRU`XDvTjVYg2A>^Kc@-q==AIvVR@?`*4`s5WgHJ&r*?Ewnf+|+1Ow{F(K zked$MnjSfM4a+y93p8Nx#f#8dU6wA$&QJ52<2~`4l4Ir2efN53J*OY)PW1q%pe5#~ z@xzpPiz{WGM_C=S!0HwzFT`CIK%YrN8pXFkbeYlFJj64k@kpmDI+1xDWK$GlDxNl; z%A}RsL=|5A+QZ2Nyh`TR+xy*O&7xE971N7Oal68ol1koMxR%I^JS)4rbzY~u2#?^T z09;xVae2I9Q^T~L=TZ)Oe|VAw1EY-26rLVcXHNKb4=+t(m`l#Ae1Atr=pvI9Xqz0F zw@$K59g`B0#7KfpS7s=)MMM?-}&MLxkD%VSw{i5 zp=CqOc^3r!sk};PP>R;#C3Iy$oud{g2^uo~`hxXOY&8KtC0x@(#aGf!pR-aG>i$pcVZHtbJ2Q(tt#YbV5#xmWnP(s1?pcVB`;B&`zy@;POEP6Gd1Z zi!O5tXnbHw>bV{73O$xog$ zAThB5dbYnC(zDGVI5ax%ovP=erQMO=9g;|89)Y*|T^!*w1XuN-TOCB*ZUpxT<2aLm zxp=1*z!*!w)PX3L2KbXCDYnJww6zgPvr%_C2S1-yjC*Hcc5>6Eqj|&EJ5E3SADt5u zadU9+XKy*3cDykM;CmK*ctw5vnqRKIFtn_0*=A5C57Ej01VEZokmWZxd(AJlq#%GD z;}}YjSq@XpCcwqjHJ4ZGp0G0b%KR7#Dpg_!2i=dPaoteGSmK zd=j|$0jpi!*74>VZA;)W3uo1q=H@Y0fsW=XNGdd~+6?}>C`=x@0*bS3ctMD?yNqgo zjHM-#+o_UH2TG@*FU+O$Fx3--BmH@pn2{j|b)Y+C;II%kxlBRPQ+=A5{6#{EKByGb zkvktxzojcfyqV*^h7JBDwJmjb9op948QuS?$3+3$=kKk#DscXpz&NPtFuAuHs#@#7 zE2A6BM~_;RbZ$OgsZeK2cbB##ASwy*R_8RwTLpQz85x*{DTwuNfaIa`QQZz(IVHwR z(#Jv)8oE?6sshPW5{~p7f}Xx17#*9zxK^MmNEkxcGmw=7|CkMd(?vZ(FD8k2 zJ);vd|EA^7I+q4&FR3i6{a|qQX=jRc%|6!WV^<_IAG<3)xeLah8hNG9;4eP~oJ-rv z&J_fotmLfuZlrLJ^_0QL_6}$~6;E(_KawRWm|wnwv9r_Zo(N z?{AOXu?JqGX7-ml_D8-iUl6(Si%ZYA_#d1#wJvgFNqUI+9C((tpWd?SjEfP#+h6H3 z`07e$psKFep=KDKcAHV57U)dW;pdycmo)WanL`75l7WeNMX* zOBFv@J4P245NPL-5S&0uy%*IEaxZlTCJW@&dGj)d}$9&R1yP;H#>Gb@hu!>j!rx zk@)pcMV%___dMi5&eYlACRawxU38L(SU&mQ)_m zR?!KFD5&Q8XJBGq6b1$oFpW8gSYzlFWyWZ(!2fY-ws328dvf=WI^nM-#vN;X7kY~a zx>G-1zGU51wJX=Hrq)ARJFKOincCH7oY!1??xirYk1f0sS{;vcWv)s=X)_ww0{x)-VYG@fg3b;}N5kqH@m{+)E$ z4>BjgnwxI1CnVDx+tUo`saja|zH$gQO#l=JaGNGmQmt4=X2v?KmOqWS%Of*zWX~iF zPGrqY!AK@@+K#D&en%#yK3cvunY^|0t?94)OCH}E9nE*RdVgSgr3ccpqa)kSXwG;3 zw(Eq>3-h`6Ro9%ezIId4%bzMTDkCr)jO@m^x#xUZh|{Gz$lL=$LX(Yfn1Tb`eiq7? zMWJe4FSyDFP_RHpZ6fh6VC|MIKxQD0g!VXcml>E&s@YUd+ng;Jcg7Ohqu;(ik$}IA zH)L?_Vmj}y4q~iyoG!4YLqK&sP%%a)iKM2NSd&T|L`gsr8o`qsA~A!9-#k%p?xNRBkX=KONC4$6gY>WXI8wuiswa&lE= ze*Sd3!4sNS{|Q1hGcd5{8YpHO=-s7h$v}t|a+6^Mk~a$wpBaPwd-g)_(3m-!&-NBM z=k4G$9{Kt9`wqZgVFCV^G>$4SZn~0MV;|3_uWah1d~4#^=PyF*0W089;^3)B7Q zq0(MXbv=nk={qq22lnrTf#KoYbZ(|+QW^PPCOduK=CREu+?4aT@%qNg>ccz#v!k{w z;{L~`2G8|AuizpRC!H>|IwuEty%M##WiY$H4)$)xnr>iBACD!s&SYc1n<-8_{P@s= zgYY+tdrQYL3;dtl(&q7T&bPNM3jSM7mAh5;h;C#`nPN5zv5|z*cPN(Kbr4>hn0DM7 zPqaPCW&@*d#^jH`jaMJcEB*17kJnZ$ZSt=1xt;6PVzDM3&EzMe`NQK$ZAU_7w*O#L g^sh!p{r`3RKNn)f|9x>)tN;K207*qoM6N<$f``<_1ONa4 literal 0 HcmV?d00001 diff --git a/assets/images/2x/icon_warning.png b/assets/images/2x/icon_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..cdd5636387b8f53fbfabd9b5ebb567ee15660ed3 GIT binary patch literal 5330 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 kkw+eRt!vFvP07*qoM6N<$g2d7*%K!iX literal 0 HcmV?d00001 diff --git a/assets/images/3x/icon_success.png b/assets/images/3x/icon_success.png new file mode 100644 index 0000000000000000000000000000000000000000..febc56c1d1b37864c138c778d5233553bc12fab9 GIT binary patch literal 40604 zcmV)0K+eC3P)Hf?j+>?S0e-E4pq8$ySG zMKi`W#_bwc*;cWvuB)rt+v$DI)c^gynK|d&Ya7e9Y;4w_Jv!%}I%npYw>)nHcy+zH zUR|%QSJ(4f4E&m}&&75|`hwEBjeJbbY2}R3Xv|)h+gpNH*ROp2d-C#-nbEY5!9L@e zUh|v*x_h_7Jq!$`aE+Hmr1n*+(+K|zrW!z|Pd<3z4jdVIEA z*k7Da9=sm*Sn%q4sTcd>D}Vb9+as&qQkXb3lBV=e(X;c@g)wtjMm=_pPzb@I`F}6HTHp+64}53!vn(@ zhHaNE+n(19eJool-<_@GAG~bx_5<+hdP&wt0fg6H{h_z)y5u)L7_rz3?1@QzcH-3c zkDWUCrQgileTrFuBmUVwFtzKZpdzQXOX2>jSS9)zMwA9PfsZnhV;FI1+H|tt0vP@> zz}U-5nr;?S8OP;-+cRfxL@{x z-LLz>U@)@&-GRjFkMg0!n?yCRMMAU+K|bJcmS8msd42xy0hTaz9<=ApX;n2TWU^tQIVuC2H4u!&-I)zZ@h6+DWw=@UI;L@MT7>392aJ4jkwsbCt?|H>LFNc+NA8$e$?*W-0+)!u_M;8 z<9C!;-$(dB9*XKm3hV(H)QP{HOr`kFI-n?Rr+N`h3<1o`~M$ zz%{Yn)tfm0uYNrq_cBlJf7UOqa(7W{e4f_nc+8mUUF)iE|cPGepd{{ zcCnJ&#R?3|iR9I$scXf#YIgFc`uy?lIki)VmJWZR057wZYy^@_fbZcMR&9ckVO&A# zFz$V_2v8lowm1huvfL%5IzAMTl+MSePW{78eU~1-e&*r&vwhc^-+r(I40X85h{c8f z*n9+D!D}Qw+_yp4arF<^ho*|%<%fP}bX0?LwEhZ@^!H3#hkD(Ca1^nG02M_Sq>2J! zM@mgBrQWcmbLhm#((&;TNLR@FmZ|vR;WtTK*Kc2?##j9(G2C&DAWI2OWEdVn?r@sc zs4VWUFP;8QW$f{x2MZIU&w2uX6>Dd_w_}|YzBI;(+hm7h9Rw&tKx%tnrOR>6 zamKw1HcC@bkkBq&0~{O7I*pl)8EI)0($8SJI84vgJp+;MHSY=Z4Sj@D0~@&1+b60g z{(T8vVe1CiDO}x?T6@jVj*s`O+4Qkktn>WBc=qU3nc%`tVg8($JD)8>)M$VT83ty*6Jg9KKbXCyw_rfHI-2e|ll4d;3QboUi93G0Y*z z83ee^*6WS(;^Ff2;jdRt-uZ*My?;IqFEg*beQg$FuqqH5j)1r=!0;*sC+;o*s^i(9 zO(_b@G82^*1)i7WLC#_tImSG6Yw1iCR{Yl8yKmyG;khogYt1_XT|K|2Boddfg0QO5 z&QDA>+mIZ1|LRo#hr+4OzHq8*pjxRE4VigjQ|4H0^c$tXSvKn=s&bYM-JtCuUlR4d0;<%Ls3I5Yv;zwo{4Cvj|R(NKU~p>bc3i#WRn7HNE#=evm!!%>{UwuQyj0>t>|elz~?ShG81E$=VJh zAr4srP}@`a3;`=W^lhRP?NV6{$^j`bsGIfqRW=+St)+GUvv;C>Iv2QXo!H&^Znbad z_r+LZJN^G4bJ42jyF_!>h|31IbmqhP}4gML%*bV?NyQ*j^L?bz{EpqB0w8Dm8N{Xp|W*t z_GEtM=v`*INCDc@vr`oZ-u%JX(5~NQMJdV%3=o@>L5HYOE6kP09{$(T!EgQ~KmGGG zyaLuJ!fdV5ovxUb(|JpuGaMT)O9nAYoI*!JSaLSF>Yix|P#>V~T~Sp-b;}SFw)n)Z zpq9V6P%wAxx|d%J_NivKmi>@VJCW}gtWzidzScSzC3no)`teN3&Mst^PX0ujouB}f``&tK_r~A;OEDbnLi-Di zPCVcNe2-PH70*2Owe0bGzmYld&3SkQtw%~T<{gFUh3{uiABZ%f51h6ZpIk7jvpibV z0>_6@?JMA^ewIknHjPg~%5xA8MtV)7u_)B|sV7%|rkw2xZkGGjeMs)^`4ED0hmpgZ$O|h^jM%- z2m(Tas9s5eROi6zOru=Zh0@W>mQGhj&w;8xu9xc@nLyXZ&cX9!MUFD^BnJ9WekFo#4|Vq0C`N;f$QkxWlrql>Wx!;tug+i z>Y@SXVD$6F zi`B~ie4?8B@`7DY>nKVaXm^^Z)*M0{JFXo{Ju6)4n$@clno)0nt3=#I@7wMjax98j z=Z@(_@R7#c89IH;{HBVDluXNxxs>`LHO;{jwrOS%*!cM-?5i zFjj5ievwPWz$4wL<}&!$QK2%MgICBR;OyKmIl?GPxsp-4>Cyc39fn0B z7DNx&&;%>_?JS4K!?7yG*~OYunVB*3=j?Zw)umjzke<*>#X3}x?yT3SFrWa%W6!d@ zEC^z9Pzoowa2Sb>+}a`JLDs6sx>a_4sh;~fm^*(lTw6~PRv#*&sk^~mwZ|Lqq? z_kZ=TruLsR9|S+heqYzxode3-gE7{;)WdLf$| zq^1G{kGR6Hwg|6~^>_dDjnHc@xb}T(F1UPmAQDa4wK4{Yke2N349Ctt?=AiHQnhp8 zC;x~qJ?X#ak0(Zpn*shcA}G7wo>=pC9e+4A!_aUi3<#KbAT$kxXk4~g=HhFj-9OuZ z=vzNk)L0ifS|1Pe^{pmqotkinR9SFdGB@vqV8GhCy)zCl4QlG6%C;woLT?+H)ZDc{q$ukMgMbW zXW)J3zwJM7c4xkq#boJ`j{qmaf~t1lLvOrk*?u^(I}0cdV>d zJGwQJ`pr&J4HBM|r(Qj}O;nQN!BAv0fKYC-!v3X$-#RicTyTt&;zdDJw~JvpO#BLo zw;VQ`KRvnk(Z6}a8 zSP?6C{q6DNRd^BB`;%)g?^hF-iL4N!5k7Kp(8!WaIZ+e2(0o39FES$iniAjoPDV+E z9qNOUlY<_t$a6xXYpdL`YFD)$-V_;rXHQ`0?P6%?8YZ;qBWC%;cTD)~XW>`9-URXR z`_6yUf7<-UcYa(=r21{GhTv?p{a}MiQb|#zj#z5&JT|<(y0m!spj~bT9A=E_QlG4b z&kJ?DmPIv!M}d+V&8ro?T1g265Xh&;GWkZ7lRj%5~v^UggeHk9_NU_uc)mwNt~#KRAEaiA(&t~8Y%8rGKf z-T1MWM7_Ox?UwBqU-X8z%b`fzHX0P1j%B#uMBB#kL5c@K2nOVMZ~v;UHxZbhF^p|#3FHFCfl?J~N8Ho0<(hzUh zl0zd%c$|qfPd4HQ>4u}3M(vc5FL4tS6Sf@gFG-QjyBHxDV<>ISx{M$}wuyd&#fpy2 z1sqO_p=Hnma&SEtifxx-U6%^cuGfJYd6N)My;Vr`yfxUh`mL6*`trn<5BJ#N%jPd0 zI)p&dR?pL%lSv|$ey{GQZHShbCAUP&0qobud4j*zDA%@}aZV*Bn zxNzz<=&W2cm&?p_t{F^3( z4=pYl-yVCi@nRcoACC;gemlJG&w9k@`2ui3>SRJ&7!PrltCS`u^Ygb)W`uiaKIquk z?Tu7o=N=({Y@?XiavjUY;_lgF-KYvdHe-7X^u(W0qq zHa&sl)^XYb5_lEZ2C?7dfS`1~!PM<<4iA4KJ2v)(W#zs%?cOYQ?w-G5czf)RQUl`E zf@p?pi*x$cgsyzs`#M({I`{7^W(Lly<38@%T&cOcz>rd46J&(ou-*yQXcvC>&hY(L8bR>E2+9kBPj%UBN+Oe~mXwBu5#j&58 zS5ERapH^6>s-q*IGE&fH%=KML==BL9a6!NkJ7^6C3O%|J91#K^6&4~tnnlJ~QqZF9 zSFe8kn_?5!9WZaa?ICUQ*$(852%+7FetvQduYT9Ioj_MZd$S^N(R?<2KYD{-KR7cz zb_C{rsTv-^-TstT++Q*q8WPy}6EVV0NMy1hKxwpyvSnrAV^j{V3{BW-n zd~+0}bt1Z%tc+S&Qh`b>5;w<~z13(qlBVmbq1S^T6uX3A0b>|di*a;<2mw#2#c&B3 zBfz4=D{ig>cu^}a+lB}eP0LrRrMqYI*?aduo~A1S{ZJx}T_=P@$}9tS5>KFMXkhC#WB~GDRCA!lIzi@YrZIc)`<9kF zRZ2fX)6Yge+M{0Zj?nA-HU>W#?~<+(6^Og3ZjATYXw6ED5{z&|+t>1eh-f|e&_Ux_ z9T2oDt#$Lq)21Ao;#g*(Tqz$}%A{}Je{gK{b1+tevsnFX%p49zu1N?|N=Da`_ia!@ zb_Rk_XPH{Vu^um<>N|22j{e%Jb_`&M@9f<0`c4!zS zfJiKFj+ilMhZ2qsi2@8f$(;bB3cmam>9wEDx~OY-xH}ko7c0waEMDMkIRH*Htmh>A z_6ec(BQ}x9h2@Ye0v{6$v!B(pHM|)c3~HTguiZ4mtX>T|dLxBq=b*&~G1Q-ecwaxLcCMDooVcx6o19#jdAOOC zT`oZk7^#<~)lRxsCgi8Pc|yr1ksRREu+%rWD)6@9f!aOz=+XyXr}SRe18?hR)eEh% z(?98$Qc-t|322m9%Sp3k=aj9~PjDOWoXmhT*;rSs!E-2O8-p=@v5^>WU>wcj#3(Ue znl(+xr;4%=h;VXpt(pu$E&Xc?&=4c6R~5C-=6MB~MxbmE#=h&t(#a@HJ_Jq?vtE!$>i8Bf>NqK|!}ftQyGk^IZMvow3LzTf{%?i%IWO%g{Yu(S`Y%0cDipcyXZC za15k}aw6-@@H{&yGS2?`iP)h}z1KcsC5p3O_yU|w>4LMMS5DV0y@m`L?z9cOZ-=5e zBQlIEOHy)eM`r{kj=iFixSz|aGFCUw@*=SUEj%9v+MAMT3Y=ke_k_YBSb+5Pd#)#9 zvF>dPcp*Reg-?F+zJQZR^n{|xL_$m{rW9f8Vl-;n3e*~$rq#__O)D3R`QmgbJ!jMl zQ=6h&@^3l%y{8TAJl7g%=g6Kt#L>vYu90F#DVDH;Ylpa0-zHHGuL?vGY&fcdWX&#` zi)X%{J$e7XM9#0Bg2$Hk-1*bb9iQ0LmG}xq4wT+C!rSAWa=*i1>>SBe8f0YM^sh$6 ztjwIKKfeEw%0E5$kaBqAK=mENz2fi16)stvZ@^-)g21$B_K|}$g=RBCgJC)YxCJ?O zdne0Y*)K2?70242E+-!Rv-et077StRU-tZR$*0-oRNXepc&*zuW3xnxGBiijAWj^| zv3w*d2E*`cyiAODTVx}O1GPsT%{Z~45tX;2GZI-n0=uSG_EKUPDpiOOnDaKe?j0H7 z#cZ6LVaiO0&DqD~S?l^+_IQb>WIgnZ`|&)A^c^O(Yfpe@BI}t{@)A)Byj2KwTr7t} zkzl~o1v@jXEgt=8_V7<`nB4y_$6)W%f6CiF_27xW`;*Pzy87B~SyrWYs$qybY#qoE zA^8AW%_%QT>W}OlEqwF4KbXHOQx7YbZk6Ak4D(4^L5v({k~1KIY^9EvE?W##kfx~G zZY)ehAa(OXD#9_TDsUSkrnMu@GY2A;b?0CFc4QyV#pXx8Hu1FO7#LUfY%&h5&9?k~t%4ML*4R^g=WLb7}WGH_NJn!NnxP(Zn>&kAn5j1`o(qD^|f7>f0)DwrZy%5X;hU}fsy4;GH!^~1$O z|Msl);h*{YBm2G@mRLzi1qRlMZw$pCiNSQxszzycTz}}+@8$mOf${m(Iq1A)52oHal< zZypirgBK1}N(<)FCUY8IqCABcvUI~dU9rtvl(pjx)KMG?M-Cm~7}9KUhPifIqU+?& z%+A~Qy~rtrX9ZBwZKPptNHB6@2f8iSNTKALxIlP~r1BuihQ`~)DLa4qk^Gr`Uq5kK zb`);_kjEDx@e-^jBzzj&s4_y^xu`uCgu@7!(s(Et0u>qDWg z2=|7*C>LPSlg6t71eJrJ%%hcn$478OLlOx{kc43q!HE*D!dOt{1V|!CyB!YW@r;0P zU&q;2KN4mai#&S^bJ5K0f3vyw)SrE0HtX+{$g*YKwsWZ9b%%9iHxSWk{2-!fl9H9P z0w@6|tiNKL5=*|vi6;tOi@6^x>>4=20Gk)w2vYjGRW#%sFe026Q>+-A+ z6mnNhJogqhKboD*4h!A)_R66RGRFrAkwH8JLML``LQ>(FYqx~E4t?IK-u%hj*o)Q> z_!$8@eDUYQ50%2Jol@`2<#7$v-hQ)QKxESt59d8;tqbBB{}mES$L_2K0D&_+&rSBz(WE6#^@pe`XDR9GVQb<0{T zS;om#cKEScw(fN~!=(`&orWd8W`f1xQuD<%th#`bttAtm5T!{|8Ukt|vg&-%eqS=5(Zl*r7 z|F-h@&%a>R=l6`?|KHCE)v|A2*|_teOztOlFXcx^-IGqToP=yJ8V~Wmx2;#%M&Q6B zH5@_pZn18v3fnMfREtI>z4~9)%ZNuA3lib)@UzMY%Mu>gGUCA`i7qsi&aH;K|<`*+wri$*Fw147u;wJxn}KB*2qyi`5?qvveHk-dLH`PVDn80h;# zml)nG^J0MKkci`WJW0GLb3#1A3TsthF2_T(v(A{RZ3xA8Cp&WM%OA5wVf3snimqxQ zn+kVy$3%4}{{8^bCFI!E@mSU!lNB5%6+xo3Y!~V1L4 z=08>9J+F~4&V`q~?J$)}ZSl#`;<20m*~sqwm)VE^*RjIH=!@ERF;wnRIK^1Mu0#Ix zs<;p>>ZqQB67->WMC1RcvQ50KNofZaM7#?+!tm3qR>n={A_yoVI*Rz31_ImkYJ_R# zJSoifwvfU_q5=L=^tHA)7Q4Eq6dlAEw2C$-a6ADgdSto=dU~;FWU^1>a>Cv{ZOz3< zj{zb1hKSI;?Op2N_P=AgyEl?rFuE5^OWcZ)SdWDf7>5Z@^ly0meER5~=cMY>sqY8h z6CM1=^}((kEaBKli77{mp53B1{M|Z+_X-kQb5ikWA`-bQ%5s-jb=C<7PR?wot*M_) z57Y_NVhM@QbjhKe2>Kxs;4>Veg-j@;tU@|YL8;w?Q5R=|dGx?&BYn<0sVr0RyLOH6 z({|wPN^I~`Vlc6em3Uy#`e@WMOO?43Kg=Ax`=4_MMvlTuv>3S%4YT5vy)nL@Bx;y= z@O4%|CrO47f)TlUDCr6`Fr3ENTC;(INRm$Qj^!n`R1iWH1gA#qRHjw1=~rU1UU-2|1$yQD8edMDZ;Htoj&!^G}#_oO-ydf$iZlb15;_|8`Ln z2RMwAvMM2It6F8@$^Xb4_|{7bPO`eBA zW|dW|F$UPjwC`^qkPM1)X4HNJA?*?!+cnWfw2>*c-34VMW!LV5_)@zSrLBrP}wXq?^EF9)|@1w#^? z2T;_5^ZNvLE<_$G(t&AsT~)Qtk-VQm!J$a1-x5N znsUUx$Yto-|44y zlk3Gx1fzXhllVuyJn^_Sb>9gXyZt$tN^66$O|$}2MnIAtnXDguV<_)YGqr4^!k(U} z7K?ixxRt2gZ~gVfZ`hlTbp6rRMDP37UbyYG?+HYEqooz#r)jKGm!nud6wvXJgi zi(kC9Yh5%fD{nB-;&0%wsL>)fVqHnWAS(?7!A#)G&nfM+OoEz?GYficY0@+*4FgY3 z1B0fvZv4VNarbF>iPw&PHHIAirM)q+nvDx<(@?T5*enz*NM%A_|$!Fx*t(f4TS0Qx6|` z?7!bT{^WnVzdmzJ-Lh)kJI;H}-(L}o{_|I*jccFndw;St_25J?_oaeXJ7VB5(D8yL z;ZMR1M}z<`@ltRQ#B<)}XBj|?AHKR+%N>8rHY+76Eox<*X=t@7A9_g#BoO+hCnP09 z0e)LVVK7RBk_e+hq9ULT$Wn{|Ksk1SyN^jXW=TP1*=RIqD3#l97O< z+3*Y8OnG05`j3;Ecv(Qcly?h{Tg`2~ZebYnN2i`;1HhMu`KQ=h6UaGQdhtH<_-+3n zU^L(Hvhqo}H)+S7(2LdL@dy6Z$ej7SIeX$1JcmX0;Od>46cN-AkUS0wQnbT@2+~jp zHw0=h1a*nmkgY)4XL+&W(q&rDF`HSMj{pRY9)a94HZugb(b)Wwlx9NQ& zFeLx7@1HFTcg^OiMw08#@mkJ(- z2@fVDfeC08;{#&%RRf9cYfmDFF=sU@B~A`%LU4%aJ1{sA4@H(U3Ny%bs5~nNc~Z5D zZ~`J29KC`t(lv&Ys#aw-XZQ4`uaX+IJ#Hq<)2?gI>r~GZjg1{4ZkvK&X%PDoRlA5b zr-L2_0Vt7Zb^PR9oyV|e5JGWOJgD2XMbbJ&qqZdR(ggxm#{~$5B-8S!T{>#H%I8sp zsxn>#q^^^7Df(u=A}U2`W8XwMIDJ+5itOP(*_6EH?|+h6)~t5yz!%cP7mxgN@Zb+N zaF@RO13G?q1hEv?3z_nnBmcrw%io&J-#0Zj`i1Az81}O;!VL3!d6g9vY9|mCPf$<9 zG7-O!}IOj-tzlH8~?pg)V{ zS$@zV5g+`I!*k9x8y7nm&IZDxn^wco^pay}Q~Rn5r+Z(2%R>f~?_aw6x0Y6t)k?G! zXL;qKM37I>k3qOAsNPwTr#hHcu~57?P{nsH*&-yl0KN~YCp=HIfH!T{@G}3cwOp(otFfP)6>~w5ByJubAHx1QJEXt_l4&b!=A2{ zxr;*`0v$p?z^S5ECH5%s>WEYo4Tz~hhf_jN>rK<}=P3O(2mgHA>;7_HE8dlj_5Z=T z&Apdz>P)?B=+x^9@#(f{pe4+@Q*$xp)V{)OZWPaa#e!kd1$ee34FZL8Mz z^fVZ8Du1$8WQ{oynAst z(jyO~kBrbL2MMYD-rM9@SmAa?(0eDIyMvB^sEDXqIqI$3j$dd>@<0)!HsL*Gi1Q5u zsR%Zqo(jYxx2ObV9j`tMTwO-Mlc@Fp#`lr=1sx@5o%QTa+in#Ol9FtEJ37iz zOlDSz3jglFWo-ZYKJH6@_Kn=b?MJfr$zxNc)RDhu$A#VXYI=0x*!~~)$Ah_t_Px+J zJnKqJ0!j=VP)SN|>EsLxN;1#PI1ckHAL5)`mssdrfICZ;Ht}e2>NkcXskioS8QQXb zDgNfQ`NGB9in;Mpy>|R|{n8T_81o5UGDKO92Uc}o78@MgE;$xgnwf=cwOpD9W9A{4 z(Vp!~pX++sQ0Msgjm7ms^wz2<918H(2FA#(5jZZ1+;7-6>N2WV9>pgLBn&>K3r3Nr87r4HkP+ROBJJe7}s3%G>@PLf%B zSnU?NqakkSe}6RfuM^YO9bdRTM`P0%SuxMcT<~)zn|NYjZgT1Lp?|2nP;WC{m2D^J zxLwXj(=9s61;HsP?kygdnk@2V#o>NgD3&au@-Y&Y{`~NpO67!bS{hXE$O!B;ksj%F z$&Stq(OP04UT<77pw)@+sI!t_+i_L4LQ1S|>B_>w0+&gr>!+>ilc$X0{&UTNlJ$(S z_!B4oz6>YeINDM(YH#nOpsR|bmn2Qk@jNTAw#lKKtb*0htZ=l);?y3JmSJ%gYd0Dt z#HHnsf>Rp}SG_VPfgs6Zv^UPy@>?MoztWM0F1IBq!ScbKBCozH655!}!^oYz%-?p2 zY;apVz(w4a#UhF2kP$IdJvUh&FT053kCKF12c=!Xg=LPrjKj;g zE5Qv`h2(d>@{^#ZScFRM-OjvjefvFKjimtrT!JOH6Pe#LJy%zC}%*kt{TUs*QTJ zm@Us`>Xqq|-8i!37xCU*T?iwhHEuLR$BE`$IrV zR6UWVWJACzN4+$5v@@JY@r)fW*DGpG zuQP^TuUd|t%h=A+lvPb1%4Zhtf|(a(V8n|u_U@V2h&}Zr#8q!QD%|$iC{G$zZce4lO{tXe z!N-66qSKErF+iKkLKu)v;|^st-6F&oecv;_n|a#;e2b{S}N3ua0bn5*z<{wUwU|4G=sQ{9oNj*PtE zUjGhCQR`0Isgn9A@H)FRuOOBVYywA?vF#Cmbny?Fh^ueusz-5=Jl4p|SzZXK)&f=lMe` zsLuKl6ambd^gAuT(HhBkl1Qfja_KQll(htOyk3V?SG+T3_3t~@@zdSAmnQb?d0|tb zi3$7z6FCYpvW5H@KabB3`s4m_lBDp081AHoDZDIaHJ$DHl>k)jUcZW$LhD7t3G%iE zHYL@Ka92p*f>f`fsgfLwX5M7D~8qGzgu# zNlk-v$)Ng{sC&tyl~e_#r^vgZPs^pR9CBKTn)hv9DyUq5lKr*tQ#_xZcB~>Bjpeh% zOd$NJg%Vna)g8?Ckji~pbbvb#aHPfhM{LwA6i=W*FRHAq! zMN$MgvbrlG!pnXx;4fbg?H5_R0lb=$Q)DXoNn zB2tfKyTho)6rt425>vo%2Ndg9@<%UgJ;#8wU$Drsm@iUl)4qZGmfOhTs zkk;TamiGPIJ~8~zbzc~J-s1&v4>Go{)1IevT#jiq8}`!UBcj(N^1-?xzhY(#Jkxr~ z0lMhCWiXyvcctj?{Q^maL=TujeHxZ4QfIg!6Nkknfl{9g95yX>@G>L#Slx(j?CppF-La>xb4AwU^})+yD= z3@RE$bH~?67TUfT<)HyIQYwOylsI{&rbCKMN)+waX@pTo3(#2TdwgWq@Z!kmbE{0q z7R-U&NDIrWS|1ATWWgnZb^mfAnBl^xj^hu8pr3| zY$*-xRvF(Xdy~E#q{=w7b2*I%v!X$e)nUt^^g2Z}qS+99GY}fPbtJWUa%9huv+mGb z)*I=Xq17S{1gJlVl>im*BS}dwj2akGCrmP!U)k$<@np|uCD(sA6y5ZOcZZeKg|emx z1aw3>2i3b-sY=ycCT8k2Nelv~DwLS#C4nevPo;xzfO@pE=M>q_GKYz*R(70AUs11` zbSgo0Uo2usw2qfPleb$lPuwr(Vh&Zxo20S42e3h+T0lmHLw`@|i?UECk{cEI~q^%OUJ zXxA@Kb!%S-%tE@T*Yc!3%F%VYx#I*I?!-1^Mj{Lw8BkvZ=vl4ZyLWSe!L1i2`YyOm z*105CN88gN>b+)}wd}l7%`FH9l8Jl-_&|W#pTMzAwZ1HAxVc*HHS;vLKCkZPgAl-= zXRo2-R53woa3DoO5KahCscKNGnv_R%X#$dyjNff?ZN1aIMeGJzJ&K?}De8LdZs8qA z=pDQmh=WAFUDt@o;Iv47V!DuoYXm5VzfY7|=dx1 z$C;HZ9?KenW9f`h7&{a-P0i6Fp{gE1DU$$RbuWBB4bxwa2UI^c&NRX3srB}=;fH{T z2}>$KEz-vnB`JcmP}HGXMuI*Wfn=Wuxnd1%Qr$fmh-jmM0M-1;P|pUXBshYPsBIPj zfFPydq-mIp3r-T6WxXbnUWG_&XUOLeX(|E}kbxx>8ah#ZoqX4&8^k|)%~ttOH^cnJ zpZ~=0v)YZZ{LV^F*JklbLz|+8Oo2OohfKvIn}d#$jX^kDlB7Mb`z6zoFUES&cYgKN zp9{w~zwtk%V%@KkYK^c}$w5P_KwYoajB5IhSaoqcEC@;43JT?F0wqi*s=zR5%n zo~n4S5m{@LG4IyjGa7=^pra2(fu;5*Ei&|K@&$aogc6dGnC0?|>^g$jAz4Qx`yV$V zO=B@GvbJ0J&C54(e-RfeZ@G8mm#h0du*VuRO2>)xB+1!i7%QXI-Jz_t3f`}Q;MlCp zk+|7Q8TUE&>qU2x9Ioqat2gfWEv0NFONBJjH)RA0O0ep}Bh~!)gF7Yl;(#Rd*|vbf zAcaCk0zO2vR*hyVH9_fq8Z2{*{JTsumBYh>(+X2Ad$|K%a}ZjU$QB!@nq`P~$I0+0 z$V?#c)DTKq1d&hD`=3FaDWn%2j#P)D^h8fSAak@dgcRu!a-JlekR)kI#@EWEOvUy7 z!CqcDLhV@+fFRPAb!*zgtS)Zkoi`?fT=@7@D+DGFW<*c3SplH8p7^BADFFcF!4V%jWq@}krFwF zQF*(YWt^?U-BM|7XZ6IRV^1F%?d1Yb)_gRA0Vok6=*3k!!=y6 z6T1^txxji!_oTjrrx`HNl9`N`L+b4pf3(y&6jY zp)IFEVKD-k=_J~35#&Q7-ng6A)=c2>LFo%6SZ?n5kx8mSn`0nbKyFG<-0B!XD&;jW z&~XaJVla3K55YH=!0gf8UipsKQitRSa0pPraJ4DtI!!j2G%qrq1Lf~Yi>Gzz*;X!T zi(X)<^X0fx=iP}Hi4d?IA?WNB2QJzmefaIW0v~<*u4we>j`Lp~IbxJUrQ;=~bRaSi zIzA5h`L}N$D($@Ch8MLZ(M!3`wFG5gXqPm2!3RFGZPU7I^qDfBou5M*Cy&vVI%r1e zdl;ntidZ~#q9d4in=FWHBn-Hds!Ul8W5h**dP#tVF5nb z1}+I0rCEh@kZ=npWk-z3EGx@eVM5kRGa_n6ffGZPqeM%l!;H;8dDnq+3(#G=IAv@g zF|=yuZob6GvvUi?SV!Wzg5k#FKQ>MMA2q(~RAA|-7>}I4Q|6>zftMIw3V?tc5p$Nw zLUA^VAnk^M08K!$zw=ALhU;KvP6KV2Kx>3rQjjdhfv2>wX@b;Ck#rw(o+4%4V+oXk zBE@-CT5PXFm_eH~9s}ofImmLeVD04~T26t0k2`!BZBi2fK?Sv?>kgpHIVzK zx5s{=A*}H3-9Tx}#wK?oDryl9x}{3*RU-TQok4D3ZAAR5Km6+4H2jL!u918B!*`A= zHpfI2B^sAIdJ}j-B{4*t!1L50{-^O6dtPsdQ$o?sRZ7UV)l$XQ zUau|QhrH(v<;L`}xqW}Cy{3D|#*i#;Li;nui82VXiqcaA%Y&X}@UV0$1>w#m2&bwj zMbXQyErMJ2*5W|hz4~S99oi)4N<_MlS$5awTZvw*>li05=@4K9RQE`CT~vZ9KL_Pw z2?%4Ph~aJASHq3l)^3Z-reR z7+__!XI@VB_gr*QFUzBd69m$bO2w#|jK2+4GlMY+q(2zi;D@E%5WuC?yhf1C#e0W} z9AnOFH?&fl(R>E)ywM;B>Q$2@4Z^u!&gqB#%hKuHH)RJ3$Hx@MHpkwmR$=5Hsq?&g zHAE6&cAI3gc-WEil!)|{X;Ot-&f&@&LuVm7kpMN;1wC6(tp>ZmD%5Cr#y{Cj&)r!r z#M(@|Wx#ZAJXA0%HM2u64ziPk%-7H+<%-CsqgoFnRIt|~NGBeKhNFUnbd=a^2gWuj zSEkJ>_N8XKQ{+nwkBVpl+559~#u&HO&GB+f9i*e!u)?9z@942>Z{!&x_vMeQ`n%u# z_cN35Jl5{r4)>&acNER!UO@?VI>Np|A#!0aqXbrQlGKY|7sD?OIh+t;Sx!Z9ry#H} z{@@zjez9S*g{1>c(D^Y9|2|o~Z~wQw&Oh$7n!-Cze(x+dpn+^IyKI>3IbM6Nx2C+J zD|oQ=@TM+)Q+LALE>s|jza7Y! zBogFxB7^p%W~N2P`(aN{iZ-RCw?|IXNcA!6i{X|ycD(!m+LSjSa^WF}v26XfcGPR^ zKfY(^bG`4Fn7;n{UtUJCYuCN}DJ~z0hJyWeykpgg;P^lwuzd|m##Ic@b)syDF&rOe zSRsU3SQc2f^{;z;z0L6?BjaxEW|Xf?*tX}$KNN6n0>iJG@#8N3Yb{T}_>z{s7B|s; z=@XWj)g8h`$yjZT$ymJU1V{xUm7Wxww1Foy`AhO2QS~$X2SI*K4P=z2hKc08p7U&$ zmc8Z!aJlMmp1K3jCPlpm+ymMYVFXNc>I@#aTEn8RR6_!Uk|Dg7%1DJ(p^Ctj0ufME z@hP9)x;lJG?;#MHEUg!+ZM!l&u=?0!{OUe>(c13*k+X}j{Lmm1UE|pA(J>x7_KVmT zZ@MXebR|g7d*dAeJ)ri2!mY|jlIyyH>(_9SycTW!ZWL2dG!tW}Y=bBvc?vA>O(YCT zd4H4r;TTxfDv0w`v47ls>DVq+{pZ@d1`@=RpGH2{Pvzy>fXlU+0c2U0n@skS0`!Wl zk!UKyYzu|!$%ccHNXO_5C%ZL0bg#V=>HPw7IxPfk_Dli-@g5kus195RRehdBn2hDp z658%F&;sv@=iAWxjLU~A0V(NF!k~ALUM5OX0n~7qhCwUHo0fA(=p%nC2gK&QQTP2! z6Phj9w@Fcemd{a5w#XeGp48{^!ALz7bp|!fl2UyNL6)P zyUKRZk#}-_JIi(f!L+Gq@0ub!wBxkizfzO61Jz$z!#2tlU4Kad8j@uLb%USj} z({@$+>gTBvmwAfEPcIS2?TklkQYfR(5IfrnWmi@El9FMX z7<3Hp1bJer30mJH@YTG3aoUcj{vBGt*W78xx6$!MF%~*Dh)G9Cy+2>rX8&mR9S8f) zyRbtFsOO>Yyb5jmLA32tcmO5VGc~9X_Gb~u`vMWHydhaFq3T#VhH3KPr#JWwPL8D>lr9$!a93n4Z%{!f>6{Cia4e%FB{pm+U4i0E9_;QI0#~Icj%owX7PUzZan1cH zqBc}aOWU8cOkd_j6c|#HqQFAE52lKJFj4P|?`5|Cb|t>a zdLX8eW6`oL(=;91Fz{1!%XSRMF%8Qy@HxZeIEgfDMtNl6DK!k+u^aWeF}sw>{^HWWBGntfll(33}ylBTh^ zzs038l;#Ummj$9S9V|vHe~YAOR^2pBf5|k1$^C6k``1t~G0k+sRzpexN|RnFRb7Rw z7KN$GI(Ra>6^>=r!AxZUDpoSVC~QLVm;v$`6qIb6M-46@{l2Nb^z%JulK4+w(Qux@B7$!cH@7yUqY#*HH>Oj#YCUu3oEGYGBo?q7bT} zBB~pD1)r@NcB9tdc+~_^H8owg>g7e<(D2okIa8UN8&5y>sl}HJph3pjk_d5|WRVXF z3Q{#;6CyAHh5R5i%29WchHW>~>-@O8Cq(h2y8V&op6CZPT7|ytsD{EiI3$gtkzFSG zT6f#HQfO24^uCJ0LU(MJ(;-z7bvqk2vAxI+;T2r5!%|m`F4Q3+-A&jRx zI)fozhi1ZAp8G<;!(l96q&l@_cRKAV&hO{L7*t}K77v+P3KpxKa4NSMj%GK(@xlgJ z(t6QhWZiNT0wlZ5SOxb&BMm4xwq7it(K zDqDtG$74`NSywR(y=>}Q)-cR$qoHMWy^*hL)k?WEUzEjYsZy=f2-*ZbR9~7LtrzPH zje%{ysiihwXr^Sxo}Jt8?E6v-cl!F}JHBGQBmmvL8#uMdpC^l4rzG>N+v`(6kS;+e zIt}H;0pvYp((KlgpwPNxJ(`6|1l~fag!brTt5Mb0p>w^7{3v-3qQI=R8Fyr@3~l;i zs$JDHZJ=eE?`ZvSWz5=14}#MVETL*E3Ai-5ut$zQvM|3 z@nF3Dp>|cp(8#T=i8SiNoTPd1dyg~S1e1f z)a#Wcy7KgiDU%X?_edg277k!fa^GSFy)=L7=Scu)3 z46|DlnU|%YM7xGqG?~|iV0ac{okyTn3_`UK2O1G?YiC1Y;k0Z~@;?T_pgbQzkgf&h zat0DZ_-WK>T0qU{c9n5S_!TOiepVY-=fBSXdl`tC7BCrDZX-DEec}|5s$U8)bkTVQ zCFuaE=g&fBF@rXv32Hovp;6wQI^uy;N7{;)SkD8tC^#GFC}yfD7|#yF1GASQICns{ z(Luw%WGF;{v%G$&4DE*sUgV4Jp<_ck$Ip6kecJKMi;l58v7#)C)s3p=SY;Dcvr#Wj zRjS3YLT>h?R?AJK=MGNr>fqei-cLRy|MUR-YSxPmQ0l!u#$6#xd|Xl_RPU0TR|&+} zCgZd<2q#Zrgr*Cs`It+iJWX4hHqA{{94}gsJKX_1syU+W!ztQt4s1$487?@RAcH14 z*)~ITnd$iqpoKQ)scE}5-^jS}dlHgF&`G3akE%eVKM8`6fw{>HR5A_{{K)o*q@d2G z_8*OY(bO25mN1v=VHiuVgL@}mOMy94?WNx-bL2OeR8sn#rKxk}+vT1-_o*7Uz<}`> zdxmnzWJUmoIvKyIq?x5fy*7VDt1KQZm&ylpZRS|eg87FZ{`AYX!Ps*K=;J#-Djc18 zMBLPOiGIPp8=p06`|exR&TF;^S4a{Ymx3Z4#zm5J$<^<2o*V*f0h0X(pqTE4O12Xv zK*Qt4JjvPS)Vr;@!Iek|&dkX!I3t^|_Vve+NN1?}gX+9XKCZAp+f{bEvAI0-x$KoK z;kj({)xEomw9bjx$ml!?sJ;nEg9CjqAT7e&SQg3)I&!!PP|(AdL{#y(zqWu;DqVyl z3)|tY@i!nax1;0JLH9-Bh<>qXRjAeGK+)Dej_Xpp7qaadBi?JMv?LN1_d^5?;!+yp z$*1eJ!pXajo=*QrGh%!BNMrKQ&;QFgpT_ZGt>*;LkzKp^*;099SJ#@$mNL_m-{?H= z7vqcXsE_=Tx#w|(yQC}3uTy1F6;*d!3Y9`08Eup99Y~&q<7c2_U>|6utI!iBU5@SL z60XS}`6V5$M@#@R|70Ik`-7KEKq%&p&2s8XC`ol_^_Yj2^V9N@T=JNlY{qHXs=kT` zAGDqnWte5)Zb8{q_hjU@L%>l(fGOzVclW@6D8k&SMJT5m_|sGPm;yCcffKW9;en~w z!b7uHz@nC<0SSq7B|nvzPK&tr%v2AkwtInk&Lr(FZE@7W6dWBAQU?0FCg8l@gRm{~ zIHZ^{ZgFwmyo<@toEEF6ZoCm*QKcZy3849t>7MROE_v5*F!7niGbhKEo}BwiBlO*` zVT9!wTU2#~*vocUjModI4XdxzL5%cL1qw*y6FLaIT*HRnWL%<6_j`!z^*4F&?I;ey^r;L_noVcn`T5KrZSt)b@5+fr0iuN9EJ z|NHOjOL!SQ0k5ES)>WOm5X^sY#e3e;+tK@>P(bcA^NXoYHFya+&}-J1fiu4_(og9` zxf%t?>$gPy^Keof2qZ(S5LMmgU{n=3baVU&3W@_!Dx*WufO;u~+-RKEo--@etUq~! ze1UfoIRa9HMO7N1-y7+zBZVc-c$JiB2fcyDuBm}{T0=!m+%v=qgm_aU6+W|ToK+4CRcW>FP;F;U%lW8_e^T~V4 z!8Hp0YpB7ZL>LjI>rMbZ7Ak7 z4O%ETh*P zPmMd2Cp8QK$~6g)Du;FI6Y%a;UxPo`{(1P#O*g~3?h|-uiJzn5F(rI5?;a(=Qvn#F zm046QA+~S0OXOxt_Q5l=`YWRI@>v0NcPbV9;HA6Y(iKnbW*W6qv;=_Bv}Prfb^x5;RC2DEporfj@pjM{t{(3JLYN3YH*Ho748e>4j&UW|jn@Lky4= zjMHlYC}#&eK-iw-beEgc8yg3DR~o{!Ac* z<&UkfMcI|_W7{Mv9S_w8U_bGZ41|b;(Ft-OX&i!xeG!;a`)c*m;m!Us2g4K5ve5K`d+G6Oum2Z8Ab-XH~bStbWPW|o`$ECM5m zJR1v&7)#Wv`{(Ch{!Jau3ZS1@^_r_TZ`|>|ATR7J&rh;et%|>yBrTX2Eis6{N%H^0 zBF_)*E2pQX?E3y)o1`@#SrZvq9}7gw-66IbMsl9CF0|ScLI9iSKY6DLgPez5hpkzHg zLKp}FPFiQrG?P1-_P_$N3r5X>dc!7{Nira^-3{G7^5kS=4qnFVSpoXzJKnZy{hBTB zmmGVro}OcEy@8U`@_=blNlH|G)zIq?<`%v*UuJ&Vv$G8E=!|^&g0ApZJ)uA@DT78; zQA>K#Gah6_&9qIsEh)2N-SWTsXp$vg~qah+XLn!BYXtwmDKw>DiK;RLYZ-Hb05d zm!b^Q%JL<#co`#Up#VB_0SL+##LUys!y$i}+zS`>AA{aRi4Ku-IMEx*+e*S@z-vqf zUh7F>O_C6jm-x;2-aid>xg@Pcq$qBL1|tpl0utMiim_@rPYIX-Und^yJ#W*(S}J zsp`uTF-a>t0T@LAE*Jz^avG-H&yTJ6_ zNI$cff|g9pvuOaq!dqhRnzSh}LkiV{VU>+?8b5LO6Sb4@GF;CJ&>zj8EN*3_GpN!} zI+oSIH=xVGB#4S9s=a15O4F6%-FFnT|FYLC7k2Fe`MP-cGne#6wwN6%WD+t|NZago zTFIl9TDd_hHpT;~2M$6zMH90a?+!p?u^V`jFiRYBG#g9`POc4DjDH%N4iCYFi6AX6 zxi)Dq)j&x~KqkAjO;+7g%PkL|^`tS&F6TIxsdC>5YCh(68{sK9p(Qzefcg@({gwii zfK&w`8UZ;R02bNzQmzKM5}HwrK&Rk|Gzr>v)wS-0t!lOlPR38>WPm1mlF#-NSWWk} zX2YgE^&1FKDlC9pM8F0VHXIGG$?2?h@XUgqhL_noD=+@`+*BceV%)i}KI`i1hoxlgpz@`rmh5od&BNQz51|S;{@FHhC$H-~XOUs<2 zR_3=4PPPdYH`!JZtB{J#fLRSgCDTJCr%6Y`aISyfRPQb63GMbI30Y%Eu$qoQqb7qG zup!iq27(x%4MQ19=mTw|$avD&t>tNVhM;L*Hq|`0(lPSw&NdJ(OTJ{5SDUeHb7O=6 zaG@y1>_Z@afP>tua!lHkE&cE9$-Vqi{;UD8qRu{!%MNwny7yia@L;o>D=qX7^(nk zkvQQMLpP?Y)nEK#Vdguhp;~#<>SQ1#!Ed~4AoMP_E6Ao%f)eRzxp`kr^-h=LEVDhE zPLgNqyMo7Q@|~peFoYz&s+OQ!>OoI8j^~G{zV=8D__A}E%?K+%O4PkxM&dlCgPO$e zz<9Ys#<-A~O>`ex(WPaPB43)et98y}7I=1<`hQxf$+bPkv28Xf>+T#m9W1JJB@AK^ zL5eo2T|*}^UxRX$NJLkX61$YVmo~tqnaiw4F@bxPds35v)O3f8(T>%g1pvO!MhO5k zc6g8?0lqh#v5!7_LOTI3qxGB{*#0PgVy0HR_iNQtXYeWJwVT7; z!$JNN=l2IT=KI5t4@szzT<+8M018eku*|IR-hIjGgVSqDND~I=hHq0M8Q{WYsMJzW zK?=%oxF+q_vO#_6*#^=!8pt-$amt6Fj?R-HyONZ&;2~EMtrR8J?FyB@(o^@r>ECi( zOWn7?$u#-Trrp^r0`jG*_Zp^+!(d4d`#6ZPE(iqCKE+6wRw_caf@}!}B6u?VmSp6U zgCcmJ?K?|E8W^p(DNUUr_B!JyHM`@>$t)EA1Xa+u+kF- z121(t6w9m9r0I3OXa*WDapoNtxoMl&(PO>eE z$^V<$pIq}-y30Q*@fbN1_e4@|l>PRY|99jjdRkS_HC>fKg zc5v-a+pXI4+a|J2$>{-=fD<=~wcUmS& z5~otpw>6ikdZtClgHNz~9y*!xPC#0mOVX39#2uueP_2rRtL`163C{KyJ00E4x}UY& z0cx{5+kx4>wa3iq&b9-z9jI>RJunfBK5YdtaUKLB5{T9u{@x;FN)}WaWCv_YyO96} zm7tav2qD0<+{YN(jsBUYMW3@R%gZLSiHe6H+5iIXM=;EGF67Nj#Eu+(;Ao}p?FIAt z8#Z5k5t22}(<{|I7&f#Id~Zol_tsVG#2K|+fHDpRqUFg}BB7kN&9yht_Cz8- z5XsVpvejZIn1)KTmzp#Yv%(8+g1t@M<9z~By(&X_Ax6uaLmfJZVTslf(asBu?K#}8 z8Ww#~7(7ejV`9&B%>bK-A|*sX3IY zCKSYgwpU}T9ToyC(@149c#18q_U!C2dco;7lAi1^o$GyY0ZQZjeR&njwp^1iBX0n|^M zBPWR?g9B|2it|aR=0YF^EeLd?Qx*(Ro0TOXMX<0>i3+s=v*`>mZo7_Us@+rX%N!yO zmIJdLpzW%j(33=iP63(n#D|c}#f#D^Rxx60fXcg?CsVN?TeawzaFWO^2<|O8Mx^mB zFF14~qjShiCz0-=Tiabh5a;o(AhXOu&cvv;@rw&COT2gW1&Q5(xD@6qe?Uvoi zxVJ=llB=44Q$%u_T<<#WmhQNup3jRecY>CC=#uV%p>CEN$&g=o>8;fl4}tAk{%mp`8{9xO64$1ZFJv(wE)(ju5xp=4>`MY6o9C zIG;{(`isan0#MRJ2SI9&qt;)dHCaqegKA!*4pB%1DiI5H8|I2=pXx5~Bn+W)61Zb> zJfZEd-Z@}g+f}4(b8M&(X9~Z&*09xyjQLYe6oug}!Hbm;A6agCwBNFT6jeBpu$6<4 zRUf=>zn=LloSXGR0m`h6T+kg<)c5qn`mTs{^+9qSkwjI{i+O5$I_bbNVFM& zNhK%&uYtfcY@cy%0n*p)zE9F3&b{Y7swo_w2Q`wz@0OvCcByR%^de}E)nx0u?-m zen$|@Qtk7#%0tgIfb6-h7X;9qJ9i3wde{1JDE86Lj=?S|)DJ?~fpB*jj8XwrPaXWJ zS&Y{Z%a@$wH1M9+u5zw{Z#pamD0$YGn!Y-QWvadXZ^rY;TPHghTY^wx4#BBF9l25q zohKq~d~mW%ThxbYXIJXEl9Y9+Bob2>Nv)Fv<=G@OF#04X3=orO-v&Y`jS#^${yt(e z``x$NJ8|(|(9Ca^!r8A zIe22ys&BtAd|@z1`qZ<`aum4x?AW}`*rFMfS@Y2Svv=Nq49*EJ`hoyD&=?2?mDp9O zNca2VsUCq>Ix*(ULvnQvReK%C;Mk@l1efb<&M*RE{}4kR4R^-9*oay;iCXqPp8}Ni zoFiDN-n|TarY*yrzQ+ZC94Js4iU6&W8A6aEb;MgO_3nH3Tx+VaA4_lYn|PlL>>}@} zEyh91L@+FhjzuTh%Ap|8VM#UuhSfcA@-3Tm8417A)?8_CGO!$+1em_mY`A@=8h9~O z5vUkVqTdnVfenfv#bgKuB?w}4iNxqDnn?$fnYI^#CG$gh_ku=q6=rh|%w!!3S~9bg zc4~2;Ny8E8Iay&~Dr>=fR=*X$?#QDL)z4h_`q)l2D)mb$*EWsW@%CB9fQeFFnq;4N z`0mVC_V1rRaPSXk9AW}n9?NUk9*5lI7u z0%hx);A&Iv0_#SPT=I#dSxXY-=YXQnYTBJl(`$DD+HQX`D>i7_mEZ^nNCQE72Gnp7 zZORU)p3H8M!h(QyiBuUsv;*lg1 zv{5W^M4F1ON@rGjGx3@v~Ey(NQ^lP>%z2UgJQ3(ZALkn0lr|c&VKA5@TLV=U`>^1K0>3a(0aMiQ^kGX9C z$>4zks+|N%(XKj%wKcb*(x3e1eW}aDIBloQ1t;+)iApDv-)v|Bw4EMmN>lGaUp=*l zIGa_M#Gb_qAsEd-D87K2GKrC=E;8B2^@3T>i>d2Z-b(+5QdPZIJIbry}4KJV{HayRr_> zQXR_kHCSAzKst*t`clI$>2Txk9?R#(;-LvvFJajQfM*5>^de;FYv(fNf0Ro0KmGWj z^0c>ukWSZ()hWs79g3~3SNO`(q_HPITmE0=3jfn5X4%Z>=)_rvIY)K@|B(y(-gwFR zegAcMUFxmLzUW$pF%w|{o^13Nr;zM#<^eqK=3$+YK##-eJaUl|wLwnLd zDLVCdKSX*+=1~_qOL!5QRbZR6kSj^)kOGDjU@)jGFoHwcTLU3f+y+=pYn*|m3U7jx zZ8=dsU|Z6*zXI#lu*q}tZ@vgRoT?PW9B(5z&zJ!;x^+R`5h zwN$sxOfDK?15#mb!Ty$+k0qq@za4sowH19VSsJqulv}(=hRB)AAh5J zz|hd-Mo3T*e`Zo5eX*W z+tIN$C501sKtx*e;%CiQvnmqF8brD^H}qyyyyOeN{j@7lX)-e2C*Z^YDasGzK^Zsx z;mRJT6%}FtmURMQTN1P7_`ouLll3`J)-6_6!#Rj`ok4!H29?4PMxRJFlex_HxG zkPl9(hHTf#@>u}#dLm6xLOR(76ei0sKU;^ntcme>GAf6MhRIP&z_MB(bvG|z#PX!5 z2VU|u-fNKSx27f*^zT(QbEHuaZ~4+gg~I65WHUWFmb1Qp#mBSXy=5x%`(M1j(tE-D zSyM?L-x`U1?yWr^xpZ64pAD@_{f4aa9UM9J9woyF0v=jB)fwWJ&|x^dZ{F=8^}GOj z>FQcCCJ($d85+7a9A6`_Vi3WJD%o%ib#j0$1A$hOAe<_J8aLgRh$ux#xQ+GIJ^mwk z;8Ynh&=q4OXuFZ-+Js{CN1?dRlFKD7cZ@uBzYLr$V6tsM_Gu^*KNcko`O*a>_KO%$ zNP&j7DRsbk*J0w9fzy?$K0pP&?LLvLyz6+d2GZT7AlT&~s(bv6L2_sbP>JDM^T65; zPRmp2x?6T)m@Y7V?v#L&ViO;$pgKnt-avJpo7a#6wPCTyqwOf6Kvihd2WoR-*prrm zJFT2gH=D`tz~@g-p`f*@b$d2fvFn4kOZIY@4kt8X^PrqKwoB2eG~~hymOmvyMR3!0+8jOez_H8DMM* zMx97cZ;UmmdH4BFcc!{;d%8gN%>@?x$6M5qp9SAu)YeqvjH|Lm$)Ge;yn6yqRv7ux zejtqy=p1<7%~o=O>Pt?-D{@qt5|DDV_6YZrcQ^7k%>k&YU>7jxLS{e(8Om(9KqZTu zd!qJDue_DiLz!L^d&dPQQR!qOz^vo*1!P0!s!*D#!~B8+vl$VxX#W`@iW!CW zC9u%WxA6E{w9k_(Et?Y5OSdEH9YJcLow|_Do425~@Wq;8e|2g)aNwqgGD}BiUZl#- zAz-(KQop-%W8yU&IjGcG^PI>gt%}E75(wQN6&O3qR_bGq%@JeqIj-Shkhb@$m!+az z?+U2rB^KY8YRBLQ}yJFiQP}sJ1MClaU{cW=Mwo; z6LFSomZ2RLGTL~Ee2Qo`VXfgmN4kkCO4@$$*VhXA$9F3Il? zKA^lC+ZwS!^lwQ68@=)>f-^JQfcZ27OSK?+(?O`&Dq!dvj~7a9Q^%kd21TqgZbnmL z+Rb@WF4hsGcD-RQl#=J7$0RUNuFp|=}s&<3-dRcnslqfU_rPTqEDCX01BPy$f5R{_&>kbE|v`P-P~ zae8*8jq2O5EGz@DD{UQ!b)!uh-2;)1MM#fdfqdtnYagSRPr%udrao|?SxDKedE;8i zOdLr((G_535U8l~olbO~IuNW;@&XbRCu)BIZ#7EAdHj|)#nu3)fa)9_plXKDM>;Ix zF)o=ZXlw{Ij7TGHq+y0_Xvjt(*!2R?*$1TCi|-sct|~{*-PRG94a?rwXjpfZbmxIw z&Yt>@(Q*b}y5-z)tZ>_w{@m?vj;U{vBu;5rxNU3((N=O4Z7_)HkWY|jpDRF_-d>?E zsPH>dU8Y<^iY%XVwN!gavERbmZN6Y(yf^^UkFJ71M1y!gX@!Wdp{=^>;Pw)BlkiAG z28kp#-IjhPk&y~js2w(jQ#r^r5yYU*26QU+^vUmH=MsZx_NMQbR)+)tP4`x zJy@~=6@$-J($0ZGp1G-D2@f;y9H$+>@jOsFL*lAPNLm|;qm9@|BjH^IyGH8E&9(tt zt>s2)khWV0!`#6>RH+&SLME-CwChVK4NTfrkz{pCZpRCxo`9AVTMXM)n9Q_)s!K7g z_}Bfu<Rf@qpUyEP5^YzfLpA7zku&lYs3)X_t? z1Zd#?8K`G$yM~7uJ$V97v^O0C|HhEA?U>EsD5%PvhHj^ktUrjM%zJdxdbCitp1kpv zGHEjGz^`!KKURPI$;r~sd%A;zoPvA@Ic1UnCM%ewDm$Jl8+T^X+C9@V)rUTMwD=_X1SMF99pJ8r5iUnZ4O;wd8@5I7-y)@P4~(y8I*Q=3#sN%h@VA zPtzf=^GUFhbKoTAfF(1BnL5V#k!+t~AiIcC6GJ;SO{a5~45Xk;Kq*O7x=Bna9YKh< zL?F;QcUP5@3jqoGc?@+vQLP&f7E9Ksu5pLII$9_)zhYqeYb=*5-E%DX?M;J`*AA?T zY!($+s#?N)u?hzk7i%}49xvQ;^ytLQ$mm3KHs5mrDBBt4*98LNj&M9EkwIL%lZQy+ z1mvcB!Dx_BrPVfp0-Ei+X*`EV>IwO}xq|~VdNFjdg@Cu|eWALDpJh^&-oUf16GzV* z9{F@J_vQE7`ObE5E-wpidGpYg4z~iJf+rI3i^XsW_)QOj+_?za^bXLcwxI;8SF{(-9~+b*M`@aO5BYF#^>F{*A0t10}YB z9>0MEzDcEI*=^Y7xLv7fjXV8pH+-oz?0Ma^j}jYmsbu~lqrr)7cbD@cxGP_Sm)Fwj zsY8z(%YIMki2NpNvUag--aebDk4{bHp7_XD9xShX{aFKa*XESk5o6XzBH~&(D7(BQ zgWh>!9HrtG(5rnY@eI%YY+bYM3YtNXHcAT2KiLavqz*&p8R+37NC|(}$m2;tl9@Dm zV7-Z&UiiqPa-Ra!W@O6S{G{V$T|nBUCd)MQK3mNcJfOB`!*ewK0zGgWp#v^@K zR?}Y^0sBYr@?1CW+h^!7^pka)%uHD;YvYTh2j)-mb0ebFuJ9Z@cxu+Fq~j>uqv)5NKQ| z56ZgxK}b%6F}n>M;y_iCz@ihyy4BDwg8@DfZqrU9{ysRQ(QjRYa=5HQ-sNl43KY~Nvtt*Mi&S>!T}oZisJ3MK8H zQdz%mv1UIaqzdIdw;-19hL`>N+P;b7*L~)~Q@f9Dc9{hs@+glu)iu-UO!ay!ii7*WQBaVi;!j4}nB@>CL2b z07}j>Nf0i$su0>DLB3jtHV>U?0l3-8xXmHrn(1;bNLtmFE7iMypJ{nGJliJrT~?OC zi%IA>jbP1y9bG_>ZUxA!2B#iD2SxA-R$ZHhhCo@D!Xi?$R;xg%RD^|07M9X^3eIe{ z4ArWJ&bvuERMQcN20Brt0yh5$N8tN*UOphrvmm0%vY3 z*t1(*wcj8KGaQ`FxBGYGocb44uxaw#^z9o7EN@PVIqmt$G(1WPg6k$@?gec`N+N7IVW#ck=Tmv)rcC zgmL|zb6algud|9Ioxh6NvSC%|oqdCm3j?trV_GC~WH;M*6DcaI$jKQJl$M5QC$?si zhYPKi1oi%-IKbO_S%pd=M1c|Lz^GDyccrgcqv2A9^)uetWxS>@HGyfVaz9nB*;K&? z=(2V*UTKEFwPN1weUqAqZwF`l@|-uZ2uySWqnJ|wYMzvhA+{tEu%oRGt5viwmzH2+ zb_T{K=U`$6g8=Cw1*fJpKsUVB>D2i#UHg(anWVaaWd5@#0yw>FIJMI#F@J{k+6`&F z{O@F2$#sE>}GTgKp7B`BG-nSET` z91O{8f+2+%hs!E8U2RN~d27(QdLLBMgXq<-r}K{706~kZY{tqRuWJbJhC~Z;Q9SJrpw`SX`{Y?9u|vEv6y8RDc>OZ1X`$n*Wl7 z8bTe>d7ZB0biA2zXgoD^M^9Jv%8{ko^!E|KKYK89=QH+_-?{Ung1!3c=%OY&bGPhA zBL1&@qVGjp9HaNA;)##;rr4`WW#!TOK>2&YnU1|T?M~%)-*kjzQJ$0Ue|8Bv5shr! zBEPS%FLY(RE25HqoNij3O`QR@t$mHG79kkPKw*9ZnDwBW5DZ>74^Ksd2U1^!`c90F zWPfQPMw>o_do&P2A==2x?b~U2pk$lF2^i15q^jIYl_No<1;} zZD_!gobLWMLva3LR-Siq_yqSg62|jG2Z0eDgHrY+Oia(gsnZ2mm~TJ@BSae7nnr8j zgqzes=c9PwWNC~Tsm#VwNiW>LSegCjC2jhP4`=VbZ@M;Kex}p2bLWVvMK*3@gPniK zu=2abE@n|tZ_d`zqc2*YPa>BV@9(^9{rb>v4Xp}nPDI$P9Wn9s631*eouYm0`)c}w zTSLz9JF3fqZ?dPqFzrVXLvOx|77@9|D+RXu6v|7_Egd-moLI*++49L%} zM=ziE&U>5m^xY?>Js$2R0ULFh4&pLu3PyA)=*eO{n~>*J-J8wAwpNe$_SzxW_G3vY z!^)mW0^7>16xgQ$rzdIM9rMltv7F!M05!h*A>AZK=D=!43&#L0P6Vj$=T<%gs3WcH5 zOx1Rv*(KSZ2TeyD3edaZL8xQ~Ve;VXXq1F>wP+Ie?V6KWZt8LPIx>}G>d|3*9|s%W zcnkua7z*P_cF;JU$Ev69nO1=t+lms=ewocE5wvlg%yPi8ZB7vjPc<`1+;HV%%?EsN zI&Qk0u7Q)UA(3B#%v1#y(i-H-CTMyClz0ZZBPSr#ABJ*10mW`h=f9N=_6`kyI zViLS4bC3q3&Ok6IYz(Pf+^sxy+}7j_={hI`hu4PR(qA>MLKEhO>OS~y;3mXAuk}j- z`udAPiNUVG1;L2YBak^qGy&F|Zv<{v3ctsa=WnCx7g7DzVf`gPK=MA0p86KjjsaSe z*xI~sVA~|AmjzG4q80}ekE}&MDF7SZa2%3@JeYw9ddny9jAjvELMw#Hc}X1YJ(8Z% z?r^2lWc;|P&tG}9KP&A||HAiC?5li}wr7N54UCx*6lW2bbGYS6h!Vj`+HPAY^G%t0 z>A)8t*pUM@g?6fi6rCwTwZ=7y74xyhy#95zz}|A}v86>g%at1b^!a_~UH!MA4Lh!J z6on=!6Z6%?-@v273H1%W%QQ;!wd$XIv3}_9&kFF*Wv%WBZDbUFSd?k@O6wSUf{UD2 zJ|K!+32EcuC)(A`b6>v{piINu7*DEO!%-yV$eg2w-=)rN?d98^bP;EWbwO(zGDvb2 zw!HRRaEy5$ES=tlA4WY>?}Hie%QD%fP0BRGmJBiLFk~`!XaK6|7@YUkC!qg)v5V&Wm+fX^PEoy#`bQ;TpKvO{L&^M9mdlD&I-r99hhXSciDTtA6~Pm#~_(aq$@PIzn#)~ctI!uRkeH9e%Ll%H=iy~f46$(Kh7Hb&$fn! zK)zsoWJ@^64bj76KntKOG#hnThE>1giPGpNM_*V2hhGLzX7ifB=1@$=$dO1pRM`Fq zL&xp0!=5X3<&URaKh16`I zIxo~PHebZwQ-#HaDr8Fys1m8Eqj^Fb#QF_m{ch6kSJxZ1U8H;U%CX;uv2UMM zTkmIEZ%QTydpp%F(EyjC;WN70jwws>)osV9o0Yk|{(?t;KckcMri+!n^EX6)tFJ$H zsS;5|+FFv@pOz;*J=XzM8Ig7*Ihiz`rCs2B9M~KL!dVE#mO!hf+?sTzm2u>E`S2%e z_>PayeY$l*EILgpkV`J}IBFW%tG{+cf>bM2>;2%@NwyX2A+Tow? zt^D);C8PR6zV8_Ux^rFPs%@JhZ|m%dtY!p(v1mz$+W?iSc9H>)Ub<~EUX;+GTU!pW z7y02pMd~TiF$48d7fQk|N@mlvHKtW{*-Ve~AM?-H)6tsjQJ*NJpwz7uZam#@#Rj}quP(GD|d8CbI(B53c z_<6BvKvhSTZg{}-Dk}X(enh=5<;@2VpQ-(wEpdNaDhm&O>DKJh1E(6=zJ2r0+q*7I zjGAKi6$hQ%LPG4>dI9Tpxo9QU5VJ=_jaRP~8}pMttS(M|C#dW@k{f&UoOtx-Cxg{c zC|Y;eFfXgIB(JC{>2^&`AKPs(QEAwj$BvYKR=YU&lNW_%B0WC`LfLn%ULD*OO9o@4 z*F23JS)TNyCxJ}w;HdNzNb@h+htgh_1I&7Aha5aI7&Z_=%B2=ZIw^)$0!CdZpj#7x znI_lS3R$`>5nYax{H>QmP+dyU@zbO&BAIu|kXc8xbi$=>yfk=NHlxVL9m_1&-gL3v zp=eX*rYkkIi6Z3AATaTEAzgz)1%XLh%h)bB&6dO@7(rl~`LcB&SGK;^s2g9HnsXlf z?%l=3L#M0fjF+rU-=#~@t!G#{wMB@;QyBZFaadO1@h9`(l*_Y?g~{(|i^pz+M)}a# z?f>pFiFK`Q+m3Tkz?}|prqzq6ig6!cPa+UJawZI6Q3hx6~TC# zwxp?*I%(qsDoOn?CBwFO&i4LD1h5D?L3HcV%}NmJOGz*)5#Y!awixoQqT{ zbivx2E1BO!DE^;ZP5b$xP#L@VZv91>eo>iA=Hz&MTnKb-C^+A^|4jA$cGu!8*Er4y^1({QK3=ZiK^G%oK@KSC zbotPpyB5B5AZ@+i@{*@@lA@BbwWBLMpo9$x&0Q)vDSgoFk_^;IBKD@hxE*{s-}dxg z&}!)A-V%vRz#Quw_tZHL>2VAVq60;|dq2kBOf>fTCApFm-1xe`;cKkA3i)G$V3nd^ zZHq#5-5hW-k_}7{_mx}(XmT++G(qUAc&GIXmUEgWZ8u}1)U3@QIMD&h5GM#dbZTcJ z!>*ex58YSg_*kW`*{7-v=e|X!xe!d^j@ zLq@4|uTv>~yD%}ecVaY_9*2*;C`3J3SB;LEFbdg`UAu~_`}NtLq1f@7&g_(A*t)dD zJW(n&X5k#HrvP*_Y!;Kz&Pzk_L`n$cSiPE|)q>P>XIl0r?Jduvd^D}eM`8JepWg(`*X4@sUy;E!=Rj|j<#k2`OGwKxk3XU zGAOS})VVu^)$!&Jkwza*RcqKMYKDDpwQ4`Sl(7yjO%-QuA0y3`UYa#GH&Tlp_|VOA zC@8Q>AYj%jkLpvoCnrX)e^I3N)2$H#RDh+McJIy}?V5TbX7b&I*;;uIx*Tv0)>8oL zgr$K*VD%1`LuOncMt`nZsmXfeJOvy{lps?gh~3FLO%O63&9t%%!!H4*ZMhNbq4+GU z-gY-cFxoP6;i1{ zB`O*6MYIelP9x!LuR%i72|{4jG_aN`P)5Q%JzauqPJ?_|hbnTKWH5o@@tS^*eZ#b? zNGTmN40s4_uzS%vKd5Pig|Cl-2ET$;nD|;DKHRydyvVRAF;_XV@5UEdazFjLeh9c;7KK{xz}HwEZ5I)JBJWpQq|73nRm^9y?bpj_hwr} zS}+0VG-Z&`e;fqKfrT>{Lt$|PS`s29;adqH-bTDrzD>>3zdfR!d_UT?MkWSjjOUxh z04RM?-8HthEHqIKs8>#Fy+#G6_!ZJFKGZvymQl?$Yy&) zkfA#$Ozknla1LPL{N6&{-e1*}(>MNX?pL1rHh$ON(YA+E@awmh0d#0+m)tG)Um`0V z$2;xOwP*wNiNsvJ5By`B&nAJNv%NN`n?cAi8nWf zQfy{B7+Q=*rDz+P_U;~S_gx9fdbX<@03a8VrAg43?m^KK2PTsOsXGrmh8fuqN>YjB z_+sG3m;+;>0HxCz$jxCiXsHVMl1CePlh|l$FWO|wsWo(GB44o{uGXx3(3U>H@XEwL z?wP5(Q#W2+FXmbX&|s#tDtUhIPDu@i^RpNUN<^WfKY_d&N*_&!)=W(=4&Tn$P$tLm zq$D(fvl6V$)-=A#M`_B7CM0@KK_FT|pk`6kUI3N+YWy4#!DypecO@oK^KO46&jxLC z(rE`h*5&JIgD+DBXAz}o87Zm75;)NeSit~TB54&UIirqFiRMW_XSq|<PSSM%sPrMfE;)Lf~g!VoO(S} zGwXqL4yCjvY0^bKcvpJDGKuZDjue^uBewNUB8aVv?$Fqi7%#{0YlW4OzYHKC(HtP{ zvMm*XSwm1ZkkTc+jZDKd^%>o496~bw-dv_~U%DoY{pf-6OXhg|I;{~HVR3ujHB(K1 z4i67Y-QvJ&)IdDJuq1MX3T!e8`R)|-tU(p2V%)pxww7g~%{yn?z{&WWCbYp4HX*~WFc^+Rq#g%U18cl=QZcc&q9=Cx3oMJlS&1$0m!3WGDM0JOdijosmDE7`mVf;$aNUf6zu%NZD&v(Y8u9_ z(Ok$Z!Su`=%+F^aU#LI@siS(G6sk!y;=~H7&5C-)WUJ%piuIG(a^>gBJpaTfJn-VQ zBK$R8H<77>56?tW$-aR=FnE5vXVtZQC_XeWJ^lHS@x%Wy@;s_fn*iY*qH*9r|l-myiFY{nfvK}cy&GJg=9Uy>9`de zp5z8${r1;{lU;924z1Z4S+_L_$xb*gll_C!OULen%IPI|j*9|x7k)u1*L_(a(xsBQ z!*1N&p&9N*S%SsGy=aG;(6<@YVHlq)&r^GpgfRVbUsvU}9H1sJy)30>);rg#TVEzQ z{qo;st*>3RFDIr!PR>AZ;7KTtUkr`8^MTc(xbq>}vy*&2nvS4rM4hKGG&uwFi)pIT zOXWJ$wFXK|(=F>2EyH1rGy-$7u9t4fYUO)woA~ad@G|LN^h#R0VK;Z>@Kj)ZF}%HR zbMLjWRQF}kRqJ*rLu*42OSlcIBoPKK-*r*nWB0$=shs{Q^Bj*e1t^z!EYa8Zk@I;j z$dhq;j_HLqNfQDjUd7`qK}#~5z2(8wOcSot? zKGUMk4ps0^{kDsw z{y_!eDHoWAPCFiwC9GS=uimib-Jdn)Z-Vp@V$+{BNGU*L5p73zx4I6`qCj#bNI{%C z%h3y2;%f?%Ntk-nq| z7&YClj%TV%qhqCG-&?=9=CPY!1?CH0fks*C?;cp)GrajiX~R~9o+~ojiIkwwc7J%{ z4E#G1gY$M>vup1Yzj)*SflF`yG(3FPVNjB{&iqlAbV=8s9$uP4Kg4X+yR#lPNHPdm zEToThqy35G`ZW$jk__0qh#;M%wja}$bi5pxOsh{39WCfePnroYFi&ls;894;(3Icp z!!IEwI-j(fA^kC{NAP$&2sIWZWf-4N1weub1ga{?rf8ZLQ`fC_OPMq-VjA7ePgPHISMDA$oewR8HJfk&gUdIhgy_*YAIPG7U#xm73>vId-km z*x9wZqca%2RE(u~SM7S|%CBG`Kn;Z;Vlw?FP8~k*8|lW$o1t)4ED4v`2whiP-1}ep zRtd@CQZHM}W0=u&yMMSFOMy!JuG8l6JX9AWU^QgqDjN{&lBskh^b<=7bAFiv#Ca0b z2Pi|b-9>K`+OysPmc>oUHGvd}N?>z$s;3WQyhK& zIw(T#Ag_&`Qq`Dx$JghMo)y2$cg2*UXf)Cz3UxNovmeUyN#qdYG;`i5z9cn_FVGOoyYr^|8g z3+*Z$TIq1(IhZ+-gNfM^WXcBA47br1Y3N$6TW9hm>u33l{>`Og}5@%AZJAOJ`kOzz2eSQj!G4 zFnBha8iRP(5G)oiq7A_Ou5!?Xr}v**U;vr1ZaDEX7B*dT0+NGh7b2x#m1odSEx9di zh}87dJL9*UX@ZYw1=9U1jyxu{sdJKtT0@G6BoI#)V0xkmvrFg%)lJZCH$Su9u;)s3 z>-JjR`~hPzhf`W2ow{a1-}5lMx?Z9c+mOhX3fYIoX2%b08(ecCNV0qWNQlodp*sFV zc5Lj>UFoH%A7(NW5B%=YJ4u$!S=pexC5YOSnka zo;f%^F?IYtzEu6Op=yuL6i!w?a$uAsbe}!VWLQvQ z90#pVhePLwiNvR1aMLf~O!@7gSHm>ReOc(z_tw3BN`wn7OsC+;ZBb~H;;`m5;}BRC z04ODasm$Q6)V;D`u2rv2g|gGCXZP(<0$L1X*|{22C-X3WD({x}lIB|`>DFOGrEblS z&uKrhSoWt3BR!sou~q0nV15~Gl3U=_^($IO0_C~R;`}Y)V|yjvq??$mX=m@k`m)ph4br3O5bVU>kjZu!+G3%|PDwdcqYV>hFh|Gzu{#pe&#-{N@OUI+^%m?ncsd%tZc){!mhjgO3p`T~huZ~?I@PKr;L+2OBN)3Y190jRX z>Ox04gkW^Ms!Ffi!ixrRf;Y=jB6ciKXA0F9I#6(?FxrLj@{kCu8URLCQCdo_)Fj3J z7!I@2WhfnAf*AznsS{b4UaUc`Y*@L9wU8+qKdDr$e=+OkzfYIhegFES%)+75)mMS} zGG3#oOvyB4I7f>Xgs<*#a-H$umd*}!m_r6F06lsYKE60)%h==C^QM%d#u89FF{ z&Q&MiB%4UUDS(I|6%nMYBY;^6AV|Ytl#zn6g1|{ZU}co3yh6ia+I$`|C$lhlDhIO* zHCQZ}cClhF6sy+##j5?CV%^?TH;lcXyQw&T;6&|3YsmWQdigF2(8J?KWqqHN@9hd) zq{?KJ0ny@aJY5NvAsovf5!(PmOCnbuL4XPfNQSC*9>p$^n(iiGtX`lE7BC7*eIZ*X z)Ke6!ToUX;66!e#%5x4Zoh~BTUcvae1yf6`y;Ks?`5JR?rD1;6m3%m(o+}F zdLaiS+JTO$cORsJpB)d>OXmc)o?S%y)TuC#$yOm-v>=CpoqSn_vX*o-M#>s|;7OY+ z@6}l6o?L@_;@`e~<~ipLzPf%rS2JPxu6_C9V5jr-cxYJc?NmM(l(`jHEnlbKHG+IUM`iV?SGjSMxGoU2SVwZ>9sMwBm4=Iw>oh5DE!{qR0k# z48pq&zIc?PCIn+yh;}Z35^f*}MYK;Nw6KlCKs|}o6K9=BQ%NMT^C}cFvoJY+62?!D z!I|kPXTCT;S2S{umd*Tkm(00u%;%SWcJrz49X&XA^wqfJtLrK2Db2%v@kB1)8J1@H zx@A?Cgrp>LVRVW(%7JnMP4iR36^JC$5KLsKqyz*gDbe6KQYOsPfd`FB9+qY&;LPb$ zaO%t%XEDFDl&uw>C|QMDa{9vei}u1Tcbxv|$*IcNt3_$Au4i1#Gd=MSf4FLJ?b^g! z`nr{OCnNItlEemRcR92v@jjht#G#bbtvHnO>yeLN58Bco=y@5ki-c$=neFpdzFb+% z)k~)}yZ%60Te#0LE05hVa|dar`idLh_v(7-*E2S-{rO{sVs9)sj&c7|C?tjuoGL5u zGTNHx#0%&EVT_%qbyWj7J_o_jY2-DJK_UGFoSu53F*$!KovEcyRLt`2)5VD!D~xioWPE^FOaY;gDR{n5i;_`=vr*75Dt_3O3%e?2E(W+V6qng9R* M07*qoM6N<$g1FA>RsaA1 literal 0 HcmV?d00001 diff --git a/assets/images/3x/icon_warning.png b/assets/images/3x/icon_warning.png new file mode 100644 index 0000000000000000000000000000000000000000..592e4ae0c2d36c9df8f9d99b71bf7659ed05f6ae GIT binary patch literal 9308 zcmV-iB%|AjP)`$nx+~wj_wrC?sw7vHN~JpT zi+C=%&aBEWzu)=Z11wmuV8Ma~3l=O`uwcQ01q&7|Sg>Hhf&~ks1_2g^4MP6efsVuk zM59$8c7j@052|155(Ghlg<-)W=rBN<{=NdS<~z}SZ7vdI0Z3vZ1d%|nx1ehLMbyr} zB24|eMp(!i7D2NFIrX1wfv$CkH10q=undXNEJ*PR5c-qa9KCRjYk3NJgCyMS8i@!6=vv)gs!t45DKRY&BES z^7lW1(|v;w(r1x0Ggt)85ajaDsuB9^N%UTS1L3v@A=&_EB_QgbMO9RyJd|QKcn`fm zf95f8PyO$h_~se{$l)y}7 z{og$Yv0@_v(Xp_QHY|dsjRP*U|7It`OGSOiT2R6Rx9y0{Adv(F&mo5M}FO=rq&CKE3z_lqil8EMA=y_Xjwdh<`w zbae(Sqy>whX`#LvUHi6!^vwlhFRHhy*{4yx6m-y3)$?fIyT}TdhK5DZq0qi}1$>8| z1_{olsUlG`*P>`5CyYg7{rzS_^I)n%K;M-WNOU{{Pt%>SFeog74gx}2E8%_XMQYmT zP|0&~^Ddf9dMa|N7>cBJnmq=ZG#6d-{sb?|(!3-Ru`)U?~Rw2>(E z`;}=of|>kO^?jH>i=+$DwhizfeS`$|*TKR7SOiUlu05O3*YE)Sb;ii4A~8i^g!DLS zF!kssDUa}Jz!dMChFJG{cv!$htn*=l^@Er|+V;_ zio}jc(^~j1Y(ePIWLPl3BB%~j!EEq<@H|2{meIgyEN}AA6Lhes{dO?CPH*M~Sw#~) zlMwSfhFiaTh#rFj7BpA{)x)#rUi6&W4ku4TJB%hh3-L5SZ|1qFXBPowYSKR! zq3i3=`t#Yapur-j0@6fNJzbyu0FlP~sOfcRWlB+>gjb%N4N1*uCw=nX?qnsav53%! zzU!;agjjWY6&68NNPAYJi*>&zs$n;oc1=Zv;VYHlUbR^#45?5cDdpB=3hI zi$uOq#VgoqUeE!RN%#>Pe$)pFfFa zZxr2q$&5`;l9KJtIy>&1;(&{}5-AmxeKwJgg%y$5`poPiO45T&gvX)jtv@0DQ%8hx z%eqk}C?5rF{R6GDM>eDH`WouniQ2q%b8s}6f;t79ycEID-|fPYQ=yEDOKdg9*IpQh zAHH0NDb=FPSUvRbr|-HaO7fmaE(A}nN6)^O=)M1lGC^4ol&Yr_XJ2~|;cL&)D$N+U zDs_u4h{meUU|@nqO|w6cM2jbmY!Id9J&}~;0BEQWVk*i>O5|f?X;6{oM&o^TX#3y| z;{W<%Vce>lCQMt;dk;nat<^45Ja5k<&Je z)(xjio?bsB^eSqePtRV=R&0(m&OqCTFR`>!skh{nG(kz*#}g5}v=*V}4K(5Hl+8OZ zaF%9zVCJ2XG@I@__EAo1p~ZB5aRGx9l_l>5nh)*z>P2`zT#1VpOL~%B$r6;esRj0} zK(uo^;{Iv!vWbFmdBk+pQwg~3G!N=4CJsOJs@&%KOrnGlQlk3f-;h3rJ$6YOhL1FsY&s5!{%bUhg6~O@(wur z=9A<9TyiQ}QUv8Gm(c0O2wmF5SEggE&>BKu?7PhT-KmMs(2vxC5!+4ksJ2Xham^PM zjAdDM%NrY4(FYK`@f;>glS(b^RALJHQ3Zl$A4Rll84z=6NqPM&P1QbUdK!rwBsrbg z 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 KMNUMnLSTXufa?YT literal 0 HcmV?d00001 diff --git a/assets/images/icon_success.png b/assets/images/icon_success.png new file mode 100644 index 0000000000000000000000000000000000000000..69af58ed9514fe5562fa5ba2a8a07c240d9d21ac GIT binary patch literal 7046 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 with SingleTickerProviderStateMixin { late AnimationController _controller; - late Animation _progressAnimation; @override void initState() { @@ -59,9 +58,6 @@ class _ProgressBarAnimationState extends State duration: Duration(seconds: 3), ); - _progressAnimation = Tween(begin: 0.0, end: 1.0) - .animate(CurvedAnimation(parent: _controller, curve: widget.curve)); - _controller.repeat(); } @@ -168,24 +164,40 @@ class ProgressPainter extends CustomPainter { return; } - canvas.drawRRect( + if (value != null) { + canvas.drawRRect( + RRect.fromRectAndCorners( + Offset(x, 0.0) & Size(width, size.height), + topRight: Radius.circular(16), + bottomRight: Radius.circular(16), + ), + paint, + ); + } else { + canvas.drawRRect( RRect.fromRectAndRadius( Offset(x, 0.0) & Size(width, size.height), Radius.circular(size.height / 2), ), - paint); - - // canvas.drawRect(Offset(x, 0.0) & Size(width, size.height), paint); + paint, + ); + } } - final double x1 = size.width * line1Tail.transform(animationValue); - final double width1 = size.width * line1Head.transform(animationValue) - x1; + if (value != null) { + drawBar(0.0, value!.clamp(0.0, 1.0) * size.width); + } else { + final double x1 = size.width * line1Tail.transform(animationValue); + final double width1 = + size.width * line1Head.transform(animationValue) - x1; - final double x2 = size.width * line2Tail.transform(animationValue); - final double width2 = size.width * line2Head.transform(animationValue) - x2; + final double x2 = size.width * line2Tail.transform(animationValue); + final double width2 = + size.width * line2Head.transform(animationValue) - x2; - drawBar(x1, width1); - drawBar(x2, width2); + drawBar(x1, width1); + drawBar(x2, width2); + } } @override diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index 6f0ff8e4..52865a3f 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -235,7 +235,7 @@ class _ListContactWidgetState extends State { ), const SizedBox(height: 32), Text( - "No Groups Created", + "No Result", style: TextStyle( fontSize: 20, fontWeight: FontWeight.w700, diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 4321824b..d8d78500 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -1,19 +1,19 @@ import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/error_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/linear_progress_bar.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/history/history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/history/transfer_history_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/my_files_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/settings_screen.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/bottom_navigation_widget.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/welcome_sceen_home.dart'; -import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; @@ -41,8 +41,6 @@ class _WelcomeScreenState extends State { HistoryProvider? historyProvider; bool isExpanded = true; - // int _selectedBottomNavigationIndex = 0; - late FileTransferProvider _fileTransferProvider; late WelcomeScreenProvider welcomeScreenProvider; // 0-Sending, 1-Success, 2-Error @@ -63,12 +61,9 @@ class _WelcomeScreenState extends State { @override void initState() { - _fileTransferProvider = - Provider.of(context, listen: false); welcomeScreenProvider = context.read(); setAtSign(); - listenForFlushBarStatus(); WidgetsBinding.instance.addPostFrameCallback((_) async { WelcomeScreenProvider().isExpanded = false; await initPackages(); @@ -86,24 +81,6 @@ class _WelcomeScreenState extends State { super.dispose(); } - listenForFlushBarStatus() { - FileTransferProvider().flushBarStatusStream.listen( - (flushbarStatus) async { - final isSuccess = await OverlayService.instance.showOverlay( - flushbarStatus, - errorMessage: flushbarStatus == FLUSHBAR_STATUS.FAILED - ? _fileTransferProvider.error[_fileTransferProvider.SEND_FILES] - : null, - ); - - if (isSuccess == true) { - _fileTransferProvider.resetData(); - welcomeScreenProvider.resetData(); - } - }, - ); - } - setAtSign() async { currentAtSign = await backendService.getAtSign(); setState(() {}); @@ -127,72 +104,169 @@ class _WelcomeScreenState extends State { Widget build(BuildContext context) { return Container( color: ColorConstants.scaffoldColor, - child: SafeArea( - child: Scaffold( - bottomNavigationBar: customBottomNavigationBar(), - key: _scaffoldKey, - backgroundColor: ColorConstants.scaffoldColor, - floatingActionButtonLocation: - FloatingActionButtonLocation.centerDocked, - floatingActionButton: Container( - width: 79, - height: 79, - decoration: BoxDecoration( - shape: BoxShape.circle, - gradient: LinearGradient( - colors: [Color(0xffF05E3F), Color(0xffe9a642)], - stops: [0.1, 0.8], - )), - child: FloatingActionButton( - elevation: 0, - backgroundColor: Colors.transparent, - onPressed: () { - welcomeScreenProvider.changeBottomNavigationIndex(0); - }, - child: context - .watch() - .selectedBottomNavigationIndex == - 0 - ? SvgPicture.asset( - "assets/svg/plus.svg", - ) - : SvgPicture.asset( - "assets/svg/home.svg", - ), + child: Stack( + children: [ + SafeArea( + child: Scaffold( + bottomNavigationBar: customBottomNavigationBar(), + key: _scaffoldKey, + backgroundColor: ColorConstants.scaffoldColor, + floatingActionButtonLocation: + FloatingActionButtonLocation.centerDocked, + floatingActionButton: Container( + width: 79, + height: 79, + decoration: BoxDecoration( + shape: BoxShape.circle, + gradient: LinearGradient( + colors: [Color(0xffF05E3F), Color(0xffe9a642)], + stops: [0.1, 0.8], + )), + child: FloatingActionButton( + elevation: 0, + backgroundColor: Colors.transparent, + onPressed: () { + welcomeScreenProvider.changeBottomNavigationIndex(0); + }, + child: context + .watch() + .selectedBottomNavigationIndex == + 0 + ? SvgPicture.asset( + "assets/svg/plus.svg", + ) + : SvgPicture.asset( + "assets/svg/home.svg", + ), + ), + ), + // appBar: _selectedBottomNavigationIndex == 0 + // ? (SizeConfig().isTablet(context) + // ? null + // : CustomAppBar( + // showLeadingicon: true, + // )) + // : CustomAppBar( + // showMenu: true, + // showBackButton: false, + // showTrailingButton: true, + // showTitle: true, + // showClosedBtnText: false, + // title: 'Received Files', + // ), + extendBody: true, + drawerScrimColor: Colors.transparent, + endDrawer: SideBarWidget( + isExpanded: true, + ), + body: Consumer( + builder: (_c, provider, widget) { + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[context + .watch() + .selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }), ), ), - // appBar: _selectedBottomNavigationIndex == 0 - // ? (SizeConfig().isTablet(context) - // ? null - // : CustomAppBar( - // showLeadingicon: true, - // )) - // : CustomAppBar( - // showMenu: true, - // showBackButton: false, - // showTrailingButton: true, - // showTitle: true, - // showClosedBtnText: false, - // title: 'Received Files', - // ), - extendBody: true, - drawerScrimColor: Colors.transparent, - endDrawer: SideBarWidget( - isExpanded: true, + Consumer( + builder: (_c, welcomeProvider, _) { + return !welcomeProvider.isShowOverlay + ? SafeArea( + bottom: false, + child: Container( + height: 24, + width: double.infinity, + child: StreamBuilder( + stream: FileTransferProvider().flushBarStatusStream, + builder: (context, snapshot) { + final flushbarStatus = + snapshot.data ?? FLUSHBAR_STATUS.SENDING; + + if (flushbarStatus == FLUSHBAR_STATUS.DONE) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider + .changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.successGreen, + child: Center( + child: Text( + 'Success!🎉 ', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, + ), + ), + ), + ), + ); + } else if (flushbarStatus == + FLUSHBAR_STATUS.FAILED) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider + .changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.redAlert, + child: Center( + child: Text( + 'Something went wrong! ⚠️', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, + ), + ), + ), + ), + ); + } else { + return Consumer( + builder: (_c, provider, _) { + var percent = (provider + .sentFileTransferProgress + ?.percent ?? + 30) / + 105; + return ProgressBarAnimation( + value: percent, + gradient: const LinearGradient( + colors: [ + Color(0xFFF05E3F), + Color(0xFFEAA743), + ], + ), + // backgroundColor: Colors.red, + ); + }, + ); + } + }, + ), + ), + ) + : SizedBox(); + }, ), - body: Consumer( - builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[context - .watch() - .selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }), - ), + ], ), ); } diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 4f2f44b8..6edee5af 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -11,6 +11,7 @@ import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/overlapping import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; @@ -47,6 +48,8 @@ class _WelcomeScreenHomeState extends State { @override void initState() { + _welcomeScreenProvider = context.read(); + filePickerModel = context.read(); noteController = TextEditingController(); isContactSelected = false; isFileSelected = false; @@ -55,11 +58,6 @@ class _WelcomeScreenHomeState extends State { @override Widget build(BuildContext context) { - filePickerModel = Provider.of(context); - _welcomeScreenProvider = Provider.of( - context, - ); - return Scaffold( appBar: AppBarCustom( height: 130, @@ -95,8 +93,9 @@ class _WelcomeScreenHomeState extends State { Expanded( child: Padding( padding: EdgeInsets.symmetric( - horizontal: - SizeConfig().isTablet(context) ? 33.toWidth : 0, + horizontal: SizeConfig().isTablet(context) + ? 33.toWidth + : 0, ), child: Text( TextStrings().selectFiles, @@ -134,7 +133,8 @@ class _WelcomeScreenHomeState extends State { ], ), const SizedBox(height: 16), - Consumer(builder: (context, provider, _) { + Consumer( + builder: (context, provider, _) { if (provider.selectedFiles.isNotEmpty) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -153,7 +153,8 @@ class _WelcomeScreenHomeState extends State { child: Stack( children: [ FileCard( - fileDetail: provider.selectedFiles[index], + fileDetail: + provider.selectedFiles[index], ), Positioned( top: 0, @@ -477,6 +478,8 @@ class _WelcomeScreenHomeState extends State { } _welcomeScreenProvider.resetSelectedContactsStatus(); filePickerModel.resetSelectedFilesStatus(); + OverlayService.instance.showOverlay(); + var res = await filePickerModel.sendFileWithFileBin( filePickerModel.selectedFiles, _welcomeScreenProvider.selectedContacts, @@ -485,6 +488,9 @@ class _WelcomeScreenHomeState extends State { ); if (mounted && res is bool) { + filePickerModel.resetData(); + _welcomeScreenProvider.resetData(); + setState(() { isFileShareFailed = !res; listContacts.clear(); diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index b84e71b9..10a3a66e 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -1,5 +1,6 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; +import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/file_recipients.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/linear_progress_bar.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -7,6 +8,7 @@ import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'navigation_service.dart'; @@ -20,137 +22,157 @@ class OverlayService { static OverlayService get instance => _instance; OverlayEntry? snackBarOverlayEntry; - Future showOverlay( - FLUSHBAR_STATUS flushbarStatus, { - String? errorMessage, - }) async { + void showOverlay() { hideOverlay(); - - snackBarOverlayEntry = - _buildSnackBarOverlayEntry(flushbarStatus, errorMessage: errorMessage); + snackBarOverlayEntry = _buildSnackBarOverlayEntry(); NavService.navKey.currentState?.overlay?.insert(snackBarOverlayEntry!); - - if (flushbarStatus == FLUSHBAR_STATUS.DONE) { - await Future.delayed(Duration(seconds: 3)); - hideOverlay(); - return true; - } else if (flushbarStatus == FLUSHBAR_STATUS.FAILED) { - await Future.delayed(Duration(seconds: 5)); - hideOverlay(); - } return null; } - hideOverlay() { + void hideOverlay() { snackBarOverlayEntry?.remove(); snackBarOverlayEntry = null; } - OverlayEntry _buildSnackBarOverlayEntry( - FLUSHBAR_STATUS flushbarStatus, { - String? errorMessage, - }) { - // Color bgColor = _getColor(flushbarStatus); + OverlayEntry _buildSnackBarOverlayEntry() { Color bgColor = Colors.white; - String text = errorMessage ?? _getText(flushbarStatus); + return OverlayEntry( + builder: (context) { + return StreamBuilder( + stream: FileTransferProvider().flushBarStatusStream, + builder: (context, snapshot) { + final flushbarStatus = snapshot.data ?? FLUSHBAR_STATUS.SENDING; + return Consumer( + builder: (_context, provider, _) { + String text = _getText( + flushbarStatus, + fileTransferProgress: provider.sentFileTransferProgress, + ); - return OverlayEntry(builder: (context) { - final size = MediaQuery.of(context).size; - return Consumer( - builder: (_context, provider, _) { - text = errorMessage ?? - _getText( - flushbarStatus, - fileTransferProgress: provider.sentFileTransferProgress, - ); - return Scaffold( - backgroundColor: bgColor.withOpacity(0.7), - body: SafeArea( - child: Container( - width: size.width, - height: SizeConfig().screenHeight, - child: Material( - color: bgColor.withOpacity(0.7), - child: Column( - children: [ - Align( - alignment: Alignment.topRight, - child: InkWell( - onTap: hideOverlay, - child: Container( - width: 105.toWidth, - height: 35, - margin: EdgeInsets.all(10), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20), - border: Border.all(color: ColorConstants.grey), - ), - child: Center( - child: Text( - 'Close', - style: TextStyle(color: Colors.black), + String icon = getImage(flushbarStatus); + return Scaffold( + backgroundColor: bgColor.withOpacity(0.7), + body: SafeArea( + child: Material( + color: bgColor.withOpacity(0.7), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: Padding( + padding: EdgeInsets.only(top: 24, right: 14), + child: InkWell( + onTap: () { + hideOverlay(); + WelcomeScreenProvider() + .changeOverlayStatus(false); + }, + borderRadius: BorderRadius.circular(20), + child: Container( + width: 105.toWidth, + height: 35, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: + Border.all(color: ColorConstants.grey), + ), + child: Center( + child: Text( + 'Close', + style: TextStyle( + color: ColorConstants.grey, + fontSize: 17, + fontWeight: FontWeight.w600, + ), + ), + ), + ), ), ), ), - ), - ), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.asset(ImageConstants.sendFileIcon), - SizedBox(height: 40), - Padding( - padding: EdgeInsets.symmetric( - vertical: 3, horizontal: 15), - child: Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - children: [ - Expanded( - child: Column( - mainAxisAlignment: - MainAxisAlignment.center, - crossAxisAlignment: - CrossAxisAlignment.center, - children: [ - Text( - text, - maxLines: 2, - overflow: TextOverflow.ellipsis, - style: TextStyle( - color: Colors.black, - fontSize: 25.toFont, - fontWeight: FontWeight.bold, - ), - ), - ], + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset(icon), + SizedBox(height: 40), + Padding( + padding: EdgeInsets.symmetric( + vertical: 3, + horizontal: 15, + ), + child: Text( + text, + maxLines: 2, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.black, + fontSize: 25.toFont, + fontWeight: FontWeight.w400, ), ), - ], - ), - ), - SizedBox(height: 30), - flushbarStatus == FLUSHBAR_STATUS.SENDING - ? provider.sentFileTransferProgress != null + ), + SizedBox(height: 30), + flushbarStatus == FLUSHBAR_STATUS.SENDING ? getProgressBar() - : getProgressBar() - : SizedBox(), - ], - ), + : _buildHistoryButton(), + ], + ), + ), + ], ), - ], + ), ), - ), - ), - ), + ); + }, + ); + }, + ); + }, + ); + } + + Widget _buildHistoryButton() { + return Padding( + padding: EdgeInsets.only(top: 80), + child: InkWell( + borderRadius: BorderRadius.circular(20), + onTap: () { + hideOverlay(); + Navigator.pushNamedAndRemoveUntil( + NavService.navKey.currentContext!, + Routes.WELCOME_SCREEN, + (route) => false, + arguments: { + "indexBottomBarSelected": 3, + }, ); }, - ); - }); + child: Container( + width: 160.toWidth, + height: 36.toHeight, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + border: Border.all(color: ColorConstants.grey), + ), + child: Center( + child: Text( + 'See History', + style: TextStyle( + color: ColorConstants.grey, + fontSize: 17, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ), + ); } String _getText(FLUSHBAR_STATUS flushbarStatus, @@ -160,11 +182,11 @@ class OverlayService { String sendingMessage = transferMessages[0]; if (fileTransferProgress != null) { if (fileTransferProgress.fileState == FileState.encrypt) { - sendingMessage = 'Encrypting ${fileTransferProgress.fileName}'; + sendingMessage = 'Encrypting your files'; } else if (fileTransferProgress.fileState == FileState.upload) { - sendingMessage = 'Uploading ${fileTransferProgress.fileName}'; + sendingMessage = 'Sending your files'; } else if (fileTransferProgress.fileState == FileState.processing) { - sendingMessage = 'Uploading ${fileTransferProgress.fileName}'; + sendingMessage = 'Sending your files'; } } return sendingMessage; @@ -177,6 +199,19 @@ class OverlayService { } } + String getImage(FLUSHBAR_STATUS flushbarStatus) { + switch (flushbarStatus) { + case FLUSHBAR_STATUS.SENDING: + return ImageConstants.sendFileIcon; + case FLUSHBAR_STATUS.DONE: + return ImageConstants.iconSuccess; + case FLUSHBAR_STATUS.FAILED: + return ImageConstants.iconWarning; + default: + return ImageConstants.sendFileIcon; + } + } + String getFileUploadMessage(FileTransferProgress? fileTransferProgress) { String uploadMessage = ''; @@ -204,12 +239,6 @@ class OverlayService { } Widget getProgressBar() { - /// Not showing upload percent - // if (fileTransferProgress.fileState == FileState.upload && - // fileTransferProgress.percent != null) { - // var percent = fileTransferProgress.percent! / 100; - // return LinearProgressIndicator(); - // } return SizedBox( width: 300.toWidth, height: 40, @@ -229,7 +258,7 @@ class OverlayService { ); } - Color _getColor(FLUSHBAR_STATUS flushbarStatus) { +/* Color _getColor(FLUSHBAR_STATUS flushbarStatus) { switch (flushbarStatus) { case FLUSHBAR_STATUS.SENDING: return Colors.amber; @@ -240,12 +269,12 @@ class OverlayService { default: return Colors.amber; } - } + }*/ List transferMessages = [ 'Sending your files', - 'Success!🎉 ', - 'Something went wrong! ⚠️', + 'Success!', + 'Something went wrong,\nplease try again!', ]; openFileReceiptBottomSheet(context, diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 34e2d188..340c9b03 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -44,6 +44,8 @@ class ImageConstants { static String settings = '$_basePath/settings.png'; // TEST FILE DELETE WHEN IN PRODUCTION static String test = '$_basePath/test.jpg'; + static String iconSuccess = '$_basePath/icon_success.png'; + static String iconWarning = '$_basePath/icon_warning.png'; // New UI Settings Screen static String switchAtSign = '$_basePath/switch_atsign.png'; diff --git a/lib/view_models/welcome_screen_view_model.dart b/lib/view_models/welcome_screen_view_model.dart index 0ec11a84..30abe921 100644 --- a/lib/view_models/welcome_screen_view_model.dart +++ b/lib/view_models/welcome_screen_view_model.dart @@ -4,7 +4,9 @@ import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; class WelcomeScreenProvider extends BaseModel { WelcomeScreenProvider._(); + static WelcomeScreenProvider _instance = WelcomeScreenProvider._(); + factory WelcomeScreenProvider() => _instance; List selectedContacts = []; String updateContacts = 'update_contacts'; @@ -16,6 +18,7 @@ class WelcomeScreenProvider extends BaseModel { bool isSelectionItemChanged = false; String? groupName; int selectedBottomNavigationIndex = 0; + bool isShowOverlay = true; void resetData() { selectedContacts = []; @@ -108,6 +111,11 @@ class WelcomeScreenProvider extends BaseModel { } } + void changeOverlayStatus(bool overlayStatus) { + isShowOverlay = overlayStatus; + notifyListeners(); + } + void resetSelectedContactsStatus() { hasSelectedContactsChanged = false; } diff --git a/pubspec.yaml b/pubspec.yaml index 30ce46d1..39133d2e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -85,6 +85,7 @@ dev_dependencies: dependency_overrides: at_client: ^3.0.56 biometric_storage: ^4.1.3 + file_picker: ^4.5.1 at_contacts_group_flutter: git: url: https://github.com/atsign-foundation/at_widgets From 9239d082c5e2e905cda0f72321c928482d72c58a Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Thu, 30 Mar 2023 13:02:41 +0530 Subject: [PATCH 50/94] feat: home screen components updated --- assets/images/upload_image.png | Bin 0 -> 548 bytes ios/Podfile.lock | 6 + .../common_widgets/app_bar_custom.dart | 2 + .../widgets/welcome_sceen_home.dart | 226 ++++++++---------- lib/utils/colors.dart | 1 + lib/utils/images.dart | 1 + pubspec.lock | 62 ++++- 7 files changed, 165 insertions(+), 133 deletions(-) create mode 100644 assets/images/upload_image.png diff --git a/assets/images/upload_image.png b/assets/images/upload_image.png new file mode 100644 index 0000000000000000000000000000000000000000..253b2f5c74381b07f1e6232180ce1e2e096f3ae1 GIT binary patch literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^zCdin!3HG1>RmYrq&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+maX917`tK|AQ2Xk8A~;>AMq4Cb%Yx{L*m~YFgWAztHP%t=Oz^r$gp% zf9tPx>^k_g?ygjE4v*FkL-Ah0?d5*I1i22K(Z5s9H=A!=E2~$XepOZ9>fOEn1XvTE zizgi^)tS-Ac}jX)XVVXn+)wNqdCtw@vr6n>+Hhjx^F8m*y6$MG{Z#%`N_S_E_S4e! z-Jvz|Y5isH2O{i24)b{N|KtmVG#-Nbq#yhGIRX3(VmS8ry;-Z~a9!dCs+ z`{%n%)`b}?uF5lZpKJ8C{hami{yNpihac?U++SB;^~NpZM`XN?>udvku5XHSOKt^a#BqYYxTETAYZ`Kzp{Ym$|zcRm-dt-l~ zLG_}Ny;qx;oT_Q5t_Ulh5F*6_v?;~?a>&^!lDao9n1lxV?5g>xciwrmSi+Rw(Z}nj g_h;-b72V5t-XU-T!~46|z({5AboFyt=akR{0Qnl&{r~^~ literal 0 HcmV?d00001 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a29c3bd4..a9e27155 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -60,6 +60,8 @@ PODS: - fluttertoast (0.0.2): - Flutter - Toast + - image_picker_ios (0.0.1): + - Flutter - libwebp (1.2.1): - libwebp/demux (= 1.2.1) - libwebp/mux (= 1.2.1) @@ -124,6 +126,7 @@ DEPENDENCIES: - flutter_keychain (from `.symlinks/plugins/flutter_keychain/ios`) - flutter_local_notifications (from `.symlinks/plugins/flutter_local_notifications/ios`) - fluttertoast (from `.symlinks/plugins/fluttertoast/ios`) + - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - open_file (from `.symlinks/plugins/open_file/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) @@ -176,6 +179,8 @@ EXTERNAL SOURCES: :path: ".symlinks/plugins/flutter_local_notifications/ios" fluttertoast: :path: ".symlinks/plugins/fluttertoast/ios" + image_picker_ios: + :path: ".symlinks/plugins/image_picker_ios/ios" open_file: :path: ".symlinks/plugins/open_file/ios" package_info_plus: @@ -217,6 +222,7 @@ SPEC CHECKSUMS: flutter_keychain: 01aabf894ffe8b01adfda1d9df21c210c1b4b452 flutter_local_notifications: 0c0b1ae97e741e1521e4c1629a459d04b9aec743 fluttertoast: eb263d302cc92e04176c053d2385237e9f43fad0 + image_picker_ios: 4a8aadfbb6dc30ad5141a2ce3832af9214a705b5 libwebp: 98a37e597e40bfdb4c911fc98f2c53d0b12d05fc Mantle: c5aa8794a29a022dfbbfc9799af95f477a69b62d MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index 17381b49..29a395ef 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -1,4 +1,5 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -26,6 +27,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { @override Widget build(BuildContext context) { return Container( + color: ColorConstants.welcomeScreenBG, padding: EdgeInsets.symmetric(vertical: 24), child: Row( mainAxisAlignment: MainAxisAlignment.start, diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 6edee5af..fdc0d86c 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -66,13 +66,7 @@ class _WelcomeScreenHomeState extends State { ), body: Container( decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - ImageConstants.welcomeBackground, - ), - fit: BoxFit.fill, - ), - color: Colors.white, + color: ColorConstants.welcomeScreenBG, ), width: double.infinity, height: SizeConfig().screenHeight, @@ -93,9 +87,8 @@ class _WelcomeScreenHomeState extends State { Expanded( child: Padding( padding: EdgeInsets.symmetric( - horizontal: SizeConfig().isTablet(context) - ? 33.toWidth - : 0, + horizontal: + SizeConfig().isTablet(context) ? 33.toWidth : 0, ), child: Text( TextStrings().selectFiles, @@ -106,35 +99,10 @@ class _WelcomeScreenHomeState extends State { ), ), ), - Consumer( - builder: (context, provider, _) { - if (provider.selectedFiles.isNotEmpty) { - return InkWell( - onTap: selectFiles, - child: Container( - height: 40.toHeight, - width: 40.toHeight, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(10), - ), - padding: EdgeInsets.all(10), - child: Icon( - Icons.add_circle_outline, - color: Colors.white, - size: 15.toFont, - ), - ), - ); - } else { - return SizedBox(); - } - }), ], ), const SizedBox(height: 16), - Consumer( - builder: (context, provider, _) { + Consumer(builder: (context, provider, _) { if (provider.selectedFiles.isNotEmpty) { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -146,40 +114,31 @@ class _WelcomeScreenHomeState extends State { children: List.generate( provider.selectedFiles.length, (index) { - return SizedBox( - width: (MediaQuery.of(context).size.width - - 60.toWidth) / - 2, - child: Stack( - children: [ - FileCard( - fileDetail: - provider.selectedFiles[index], - ), - Positioned( - top: 0, - right: -5, - child: InkWell( - onTap: () { - provider.deleteFiles(index); - provider.calculateSize(); - }, - child: SvgPicture.asset( - AppVectors.icClose, - ), + return Stack( + children: [ + FileCard( + fileDetail: provider.selectedFiles[index], + ), + Positioned( + top: 0, + right: -5, + child: InkWell( + onTap: () { + provider.deleteFiles(index); + provider.calculateSize(); + }, + child: SvgPicture.asset( + AppVectors.icClose, ), ), - ], - ), + ), + ], ); }, ), ), - SizedBox( - height: provider.selectedFiles.length < 3 - ? 71.toHeight - : 0, - ) + SizedBox(height: 10.toHeight), + _buildAddFilesOption() ], ); } else { @@ -187,15 +146,9 @@ class _WelcomeScreenHomeState extends State { onTap: selectFiles, child: Container( height: 142.toHeight, - width: 350.toWidth, + width: double.infinity, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - gradient: LinearGradient( - colors: [ - ColorConstants.orangeColor, - ColorConstants.yellow.withOpacity(0.65), - ], - ), ), padding: EdgeInsets.all(2), child: Container( @@ -204,12 +157,23 @@ class _WelcomeScreenHomeState extends State { color: Colors.white, ), child: Center( - child: Text( - 'Select file(s) to transfer', - style: TextStyle( - color: ColorConstants.orangeColor, - fontSize: 16.toFont, - ), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + ImageConstants.uploadIcon, + width: 77.toWidth, + height: 57.toHeight, + ), + SizedBox(height: 10.toHeight), + Text( + 'Upload your file(s)', + style: TextStyle( + color: ColorConstants.textLightGrey, + fontSize: 16.toFont, + ), + ), + ], ), ), ), @@ -236,31 +200,6 @@ class _WelcomeScreenHomeState extends State { ), ), ), - Visibility( - visible: context - .watch() - .selectedContacts - .isNotEmpty, - child: InkWell( - onTap: () { - _choiceContact(); - }, - child: Container( - height: 40.toHeight, - width: 40.toHeight, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(10), - ), - padding: EdgeInsets.all(10), - child: Icon( - Icons.add_circle_outline, - color: Colors.white, - size: 15.toFont, - ), - ), - ), - ) ], ), SizedBox(height: 16.toHeight), @@ -270,16 +209,17 @@ class _WelcomeScreenHomeState extends State { scrollToBottom(); } - return provider.selectedContacts.isEmpty - ? _buildChoiceContact() - : OverlappingContacts( + return provider.selectedContacts.isNotEmpty + ? OverlappingContacts( selectedList: provider.selectedContacts, onchange: (isUpdate) { setState(() {}); }, - ); + ) + : SizedBox(); }, ), + _buildChoiceContact(), SizedBox(height: 16.toHeight), Container( height: 94.toHeight, @@ -287,7 +227,6 @@ class _WelcomeScreenHomeState extends State { decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(10), - border: Border.all(color: ColorConstants.grey), ), padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4), child: TextField( @@ -302,7 +241,7 @@ class _WelcomeScreenHomeState extends State { hintStyle: TextStyle( fontSize: 15.toFont, fontWeight: FontWeight.w500, - color: ColorConstants.grey, + color: ColorConstants.textBlack, ), border: InputBorder.none, labelStyle: TextStyle(fontSize: 15.toFont), @@ -317,9 +256,9 @@ class _WelcomeScreenHomeState extends State { onTap: sendFileWithFileBin, child: Container( height: 67.toHeight, - width: 350.toWidth, + width: double.infinity, decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(10)), + borderRadius: BorderRadius.all(Radius.circular(247)), gradient: LinearGradient( colors: [Color(0xffF05E3F), Color(0xffe9a642)], stops: [0.1, 0.8], @@ -334,9 +273,6 @@ class _WelcomeScreenHomeState extends State { style: TextStyle( fontSize: 20.toFont, color: Colors.white), ), - SizedBox(width: 10), - Icon(Icons.arrow_forward, - color: Colors.white, size: 20.toFont) ], ), ), @@ -360,19 +296,65 @@ class _WelcomeScreenHomeState extends State { height: 61.toHeight, width: double.infinity, decoration: BoxDecoration( + color: Color(0xFFF6DED5), borderRadius: BorderRadius.circular(10), - border: Border.all(color: ColorConstants.grey), ), alignment: Alignment.centerLeft, child: Padding( - padding: EdgeInsets.only(left: 20.toWidth), - child: Text( - 'Select atSign', - style: TextStyle( - color: ColorConstants.grey, - fontSize: 15.toFont, - fontWeight: FontWeight.w500, - ), + padding: EdgeInsets.only(left: 20.toWidth, right: 20.toWidth), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Add atSigns', + style: TextStyle( + color: ColorConstants.orange, + fontSize: 18.toFont, + fontWeight: FontWeight.w500, + ), + ), + Icon( + Icons.add_circle_outline, + size: 27, + color: ColorConstants.orange, + ) + ], + ), + ), + ), + ); + } + + Widget _buildAddFilesOption() { + return InkWell( + onTap: selectFiles, + child: Container( + height: 61.toHeight, + width: double.infinity, + decoration: BoxDecoration( + color: ColorConstants.yellow.withOpacity(0.19), + borderRadius: BorderRadius.circular(10), + ), + alignment: Alignment.centerLeft, + child: Padding( + padding: EdgeInsets.only(left: 20.toWidth, right: 20.toWidth), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Text( + 'Add Files', + style: TextStyle( + color: ColorConstants.yellow, + fontSize: 18.toFont, + fontWeight: FontWeight.w500, + ), + ), + Icon( + Icons.add_circle_outline, + size: 27, + color: ColorConstants.yellow, + ) + ], ), ), ), diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 2301abe9..3a111dfe 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -53,6 +53,7 @@ class ColorConstants { static const Color sidebarTextHeading = Color(0xFFE7E7E7); static const Color sidebarTileSelected = Color(0xFFF5F5F5); static const Color grayText = Color(0xFF424242); + static const Color welcomeScreenBG = Color(0xFFF8F8F8); } class ContactInitialsColors { diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 340c9b03..30bbccc3 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -77,4 +77,5 @@ class ImageConstants { static String sidebarSettings = '$_basePath/settings.png'; static String emptyBox = '$_basePath/img_empty_box.png'; + static String uploadIcon = '$_basePath/upload_image.png'; } diff --git a/pubspec.lock b/pubspec.lock index 49395ccf..572d94b0 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -85,10 +85,10 @@ packages: dependency: "direct main" description: name: at_client_mobile - sha256: "1a1c6ef8ebc3b29b81915a2c866efa2a877c041df3f212c53246377b74d16e61" + sha256: f056674b02bdf13e5442725934e834f7757abcd7062d302ec2e65e46432ca134 url: "https://pub.dev" source: hosted - version: "3.2.7" + version: "3.2.9" at_common_flutter: dependency: "direct main" description: @@ -101,10 +101,10 @@ packages: dependency: "direct main" description: name: at_commons - sha256: c5b2931c024b62df9f9f45e083629e23e1efdc88544412c1e09869c1122e062e + sha256: "3361a1114d8f7263e7a0e6f299247bceed7e6c9e81e9cde01525cd10085eee60" url: "https://pub.dev" source: hosted - version: "3.0.37" + version: "3.0.43" at_contact: dependency: "direct main" description: @@ -117,19 +117,19 @@ packages: dependency: "direct main" description: name: at_contacts_flutter - sha256: "2f826c3943cb5ae3bf6af1f70d950fb1ec2b98d66ea0342c86b6175162f29c89" + sha256: "159656f0387d17471dfe90337d767a989f067de3da0bf74af0894191a4460cea" url: "https://pub.dev" source: hosted - version: "4.0.8" + version: "4.0.9" at_contacts_group_flutter: dependency: "direct main" description: path: "packages/at_contacts_group_flutter" - ref: "feature/new-version-contacts-group" - resolved-ref: f797503917abe50b35c3588dcfd2501ad8728a99 + ref: trunk + resolved-ref: "8bed2c021e1f8d0884ec86fe7ea5283c34530185" url: "https://github.com/atsign-foundation/at_widgets" source: git - version: "4.0.10" + version: "4.0.11" at_file_saver: dependency: transitive description: @@ -198,10 +198,10 @@ packages: dependency: transitive description: name: at_utils - sha256: "57ce4684d59b58c58ee72e945a11de2c6bfdb5e0bb4011763d9ca786d0881387" + sha256: a244ea7f6411b177ba2f011d36d23ec786b0d41b0e62b58bb0e8bf9ad61cf530 url: "https://pub.dev" source: hosted - version: "3.0.11" + version: "3.0.12" biometric_storage: dependency: "direct main" description: @@ -649,6 +649,46 @@ packages: url: "https://pub.dev" source: hosted version: "1.0.3" + image_picker: + dependency: "direct main" + description: + name: image_picker + sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd + url: "https://pub.dev" + source: hosted + version: "0.8.6" + image_picker_android: + dependency: transitive + description: + name: image_picker_android + sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7 + url: "https://pub.dev" + source: hosted + version: "0.8.6+6" + image_picker_for_web: + dependency: transitive + description: + name: image_picker_for_web + sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" + url: "https://pub.dev" + source: hosted + version: "2.1.12" + image_picker_ios: + dependency: transitive + description: + name: image_picker_ios + sha256: d4cb8ab04f770dab9d04c7959e5f6d22e8c5280343d425f9344f93832cf58445 + url: "https://pub.dev" + source: hosted + version: "0.8.7+2" + image_picker_platform_interface: + dependency: transitive + description: + name: image_picker_platform_interface + sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + url: "https://pub.dev" + source: hosted + version: "2.6.3" internet_connection_checker: dependency: transitive description: From d1e1e8e4e8efc356659a9ac8ed4781407306572b Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 31 Mar 2023 11:20:31 +0700 Subject: [PATCH 51/94] feat: update UI HomeScreen --- assets/images/2x/ic_attach_activate.png | Bin 0 -> 4706 bytes assets/images/2x/ic_attach_inactivate.png | Bin 0 -> 1422 bytes assets/images/2x/ic_history_activate.png | Bin 0 -> 4472 bytes assets/images/2x/ic_history_inactivate.png | Bin 0 -> 1580 bytes assets/images/2x/ic_send_activate.png | Bin 0 -> 3623 bytes assets/images/2x/ic_send_inactivate.png | Bin 0 -> 971 bytes assets/images/2x/ic_setting_activate.png | Bin 0 -> 5140 bytes assets/images/2x/ic_setting_inactivate.png | Bin 0 -> 2045 bytes assets/images/2x/ic_user_activate.png | Bin 0 -> 3725 bytes assets/images/2x/ic_user_inactivate.png | Bin 0 -> 1499 bytes assets/images/2x/img_upload.png | Bin 0 -> 937 bytes assets/images/3x/ic_attach_activate.png | Bin 0 -> 7943 bytes assets/images/3x/ic_attach_inactivate.png | Bin 0 -> 2078 bytes assets/images/3x/ic_history_activate.png | Bin 0 -> 8009 bytes assets/images/3x/ic_history_inactivate.png | Bin 0 -> 2233 bytes assets/images/3x/ic_send_activate.png | Bin 0 -> 6339 bytes assets/images/3x/ic_send_inactivate.png | Bin 0 -> 1332 bytes assets/images/3x/ic_setting_activate.png | Bin 0 -> 8952 bytes assets/images/3x/ic_setting_inactivate.png | Bin 0 -> 2984 bytes assets/images/3x/ic_user_activate.png | Bin 0 -> 6644 bytes assets/images/3x/ic_user_inactivate.png | Bin 0 -> 2223 bytes assets/images/3x/img_upload.png | Bin 0 -> 1327 bytes assets/images/ic_attach_activate.png | Bin 0 -> 1914 bytes assets/images/ic_attach_inactivate.png | Bin 0 -> 749 bytes assets/images/ic_history_activate.png | Bin 0 -> 1850 bytes assets/images/ic_history_inactivate.png | Bin 0 -> 865 bytes assets/images/ic_send_activate.png | Bin 0 -> 1532 bytes assets/images/ic_send_inactivate.png | Bin 0 -> 588 bytes assets/images/ic_setting_activate.png | Bin 0 -> 2094 bytes assets/images/ic_setting_inactivate.png | Bin 0 -> 1079 bytes assets/images/ic_user_activate.png | Bin 0 -> 1555 bytes assets/images/ic_user_inactivate.png | Bin 0 -> 833 bytes assets/images/img_upload.png | Bin 0 -> 537 bytes assets/images/upload_image.png | Bin 548 -> 0 bytes ios/Podfile | 2 + ios/Podfile.lock | 46 +- lib/screens/common_widgets/file_card.dart | 80 +- .../widget/contact_card_widget.dart | 9 +- .../widget/list_contact_widget.dart | 24 +- .../widgets/group_contact_list_tile.dart | 2 - .../welcome_screen/welcome_screen.dart | 208 +++--- .../widgets/bottom_navigation_widget.dart | 59 +- .../widgets/choice_contacts_widget.dart | 47 +- .../welcome_screen/widgets/contact_card.dart | 13 + .../widgets/overlapping_contacts.dart | 42 +- .../widgets/welcome_sceen_home.dart | 96 +-- lib/services/overlay_service.dart | 34 +- lib/utils/colors.dart | 1 + lib/utils/images.dart | 15 +- lib/utils/text_strings.dart | 2 +- pubspec.lock | 705 +++++++----------- 51 files changed, 573 insertions(+), 812 deletions(-) create mode 100644 assets/images/2x/ic_attach_activate.png create mode 100644 assets/images/2x/ic_attach_inactivate.png create mode 100644 assets/images/2x/ic_history_activate.png create mode 100644 assets/images/2x/ic_history_inactivate.png create mode 100644 assets/images/2x/ic_send_activate.png create mode 100644 assets/images/2x/ic_send_inactivate.png create mode 100644 assets/images/2x/ic_setting_activate.png create mode 100644 assets/images/2x/ic_setting_inactivate.png create mode 100644 assets/images/2x/ic_user_activate.png create mode 100644 assets/images/2x/ic_user_inactivate.png create mode 100644 assets/images/2x/img_upload.png create mode 100644 assets/images/3x/ic_attach_activate.png create mode 100644 assets/images/3x/ic_attach_inactivate.png create mode 100644 assets/images/3x/ic_history_activate.png create mode 100644 assets/images/3x/ic_history_inactivate.png create mode 100644 assets/images/3x/ic_send_activate.png create mode 100644 assets/images/3x/ic_send_inactivate.png create mode 100644 assets/images/3x/ic_setting_activate.png create mode 100644 assets/images/3x/ic_setting_inactivate.png create mode 100644 assets/images/3x/ic_user_activate.png create mode 100644 assets/images/3x/ic_user_inactivate.png create mode 100644 assets/images/3x/img_upload.png create mode 100644 assets/images/ic_attach_activate.png create mode 100644 assets/images/ic_attach_inactivate.png create mode 100644 assets/images/ic_history_activate.png create mode 100644 assets/images/ic_history_inactivate.png create mode 100644 assets/images/ic_send_activate.png create mode 100644 assets/images/ic_send_inactivate.png create mode 100644 assets/images/ic_setting_activate.png create mode 100644 assets/images/ic_setting_inactivate.png create mode 100644 assets/images/ic_user_activate.png create mode 100644 assets/images/ic_user_inactivate.png create mode 100644 assets/images/img_upload.png delete mode 100644 assets/images/upload_image.png diff --git a/assets/images/2x/ic_attach_activate.png b/assets/images/2x/ic_attach_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..82f9f65a54b75860244e5ce167f06abcc92ccc88 GIT binary patch literal 4706 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 literal 0 HcmV?d00001 diff --git a/assets/images/2x/ic_send_inactivate.png b/assets/images/2x/ic_send_inactivate.png new file mode 100644 index 0000000000000000000000000000000000000000..f4583c28f5c8c536aee811c23414603253958d6d GIT binary patch literal 971 zcmV;+12p`JP)002t}1^@s6I8J)%00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yP1wOxTc4UwNB9TZW5@|Xu)8b~c86S_w$>nlM@Sn4GyZx=-?=PUCXl1R} z>jWkJ#4mf-x8rTorb=rY)+X?eD5BMBJ)^Msa=CmVq0k_-vQS9R^o>oFW|H*_ENGH6 z?VdHC&wJf&_csU$c~3K54Ogqx8-7Z`fe@v&3)X*tBO&H#oGjNARfI5Ut)e>^QrzYr z2?+36T2Y3CHpTsZ{{eIRf?qDc5})%dl!Zd3nx$T+)A@uGG93&Cqb5iz%#bjon4zeT z*Eir3Ckb@=Pe6bVdD>)1=u#ZhMd12|kSEPbR#A$og%G7#Wk^U;R1rd+wiy!EDXIuz z(yV3WDQ*=@+7wmzEX_JY;?@*Z_>`w4L;C5yYL={0RN>R4iDd0|yYFy^6jk^jO_U)~ zMv5xxn5Ss6h%!=CQO8LW%PKQP6?Kv(mNgoUNR;x-h2#GjN}>+Z#CsNj|7nU3;7zf# z#q-!G7g{Qh*we(5MPQ0Es4ztpkC-$kS&vFl#g#O=5@)vG=OWE1L&A`vmr$OE!{MuG z3vrq(!jPhu(4^suGZWK&oMq8Z;Cw#6LRdVT7M*1gPft(pAuNoC>YHR?=P3jP?OUdG zXIZqtgYb+~b22)AneOlo+|eBovi$5*DW}sZ#V0F1q{83FONZ2~=#I{^bP3X?KO7Dh zP!ahNW`d$pkYO!}agvokz(lo%n|=lrz>*yHO|c}#b+WVxmi=qqM@V9vWSJ6#l6a&f zMl7r91nVG)aha@260DOXMl7rB1nVe?5y>hu!8%J~q?2{`1bvXih-BR}L7yZs*0S!E zppTLm$zpwE&RYgw)dh9HTtlI4(|G!zHagrEg tXZhcwp@ZibKW0sp6p2J4kw_%sz#q*1Gew{-x!nK&002ovPDHLkV1m8%s=xpM literal 0 HcmV?d00001 diff --git a/assets/images/2x/ic_setting_activate.png b/assets/images/2x/ic_setting_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..b775748485a870d6b948754b9d5cb0ad2fde668f GIT binary patch literal 5140 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 literal 0 HcmV?d00001 diff --git a/assets/images/2x/ic_user_inactivate.png b/assets/images/2x/ic_user_inactivate.png new file mode 100644 index 0000000000000000000000000000000000000000..f18f4ad337860caf26bff14d738a0df4cacfbba3 GIT binary patch literal 1499 zcmV<11tj{3P)002t}1^@s6I8J)%00009a7bBm000&x z000&x0ZCFM@Bjb+0drDELIAGL9O(c600d`2O+f$vv5yPIzX!O-)Tr&7aN!Rm}bUee&_~v4hvQg@pw^Zt?p# z9^)Usel?rTbai$0k}9S$v2Jc|dW}Zo2M)WQmt^nn?}LqvjS*Eubg^JbU3B^gmh+va zqcYK=iUpw#;bwgb!*G3l{eU78O)Lm?0-<^o5PaU{^Yim|r_&iz1R4|pV^KW{47>93 z^708qLfx_+9v=2F#tc19P4PN6vmlvSaSN{2W2^d(o~ z&%il7h!YL`NYnv2N6U%h&N@yNKs7(l! zQSr|d1=F@JwE_O^?d_-32DdsWDip)lur*pf_XjDWCKjUeEukqb6HpqkUo>a z)ToGcb#=u9dTxY{r+-Q%fhZ%PsrC5yIPJ>7iHcY&D=Xp+W9B=fk{IjCojnnx&X-t| z%s~!Wz-T)+3&EKSQbI*6+^{GXh2xqc6J@#ciG;%O7ez+P4JB7=Q8-${cW0!8mK#c0 z%@*ggs3aVmk}%sYE-q%Igo;=u;LP&c0tJqTmhVnU3AHf`qMYZw53B2yv93wZUT989 z5jC;k4q`lo&YqaSwJ>-H|Bx_Vg$Q_UsAe7R?(TTe+s$j^EGL#kyS{5g78k+pku8gX ztV4$sQ4Jm7asx}-cg`U2E)O|iw?#(u!j^62O$<^-JyQxXhOnT0$7vZ}$7UAgV|L@# z>+5S5hkuh}y9^?Z+U@opDHCPG0`AD!Qmr*xX7X4WDHA1vM`v~^>{4e!G@+O%VsU4l zo}M--;MC3&L`l4J#$x&M(=6wLt7#IP%QGp@q6zsEWLY$|SRPd^pBZyvjuV2Rrh5)U z5XEy5?<7WZQChI6#3~>ZPwl)k8EOWUxSt-r=g{MRN(ok2EaQ3?t{Za|scCR~d)s#v zy-^9l3X6rooX4mg$Ia};j;<&8SpBqxyM?k2Tu4h6q4*{^6;qW^%%^maxOrg;cU>0v z^*Y}Z9hH31%dCBX7mUcB+1M?zO!BrYW7<;N%n8Lnh#pxi3>+2NlJgSF?7$>KbH-a* zvnJF8xFiS5QvNGhT3YfBroG${=FIMwb;H*s|d$F&{(Fj?cq(T9(bKI6Rnj zp%@b;Na^gBuXQ;s%VJegcUD4R>5G?jSuG1zC9c6>)~E9%6l2*TZ`tZ#C%D|OCtlcS zjA+il!yS=OxQijh>55jdq*`{~E}u86n!sz-y!T;sTdr$Gv24|Kob#qR1qP4`P0p%B zQ7k+G(T6b@rZlJ6YUpi!W~LDdbd6HJx)oo=}E_EX4lNz+7V!tFnE+3Q25@HnHY?5T6F?I@c!FG5uj+EVjmv zqF9_kG(WMO`K&?!GQ1Aj?RKAPYHDg~YHDi2@E^e(z=yY}<|hCE002ovPDHLkV1j20 Bwr>Cc literal 0 HcmV?d00001 diff --git a/assets/images/2x/img_upload.png b/assets/images/2x/img_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..814a00c1cdb39f1b065ddd44abda2d1887f16b1d GIT binary patch literal 937 zcmeAS@N?(olHy`uVBq!ia0vp^vw*mmgAGU~Y>|!yQk(@Ik;M!QVyYm_=ozH)0Vv2= z9OUlAuy(G+Gm?_xsCg3FAR z)@#q_UpBM!z4hefnK?hzc~>QTK6>Tmy?5uPIPF;?aX#z7qC-)?WVFSX#h125asSne zsW+=M*UdY+qLIC<;p&vTcYfaX=62HkDtgQ9`K{&^H-gT-J!(;1ShZ63ieF~NYya8P zr#@Y8%G0!MN^1DI`!ze2u6TuQQ+V=|nYa7VmVM&SyR$tPhIu)62L&HiId(eUzFumc z{PFrlCMH)uKl;BusptEp($wG;y`L_$h1}Xxz_oVbL|)y@FJ;^1xwjgeS}2-kXET3~ zGS8hA?bFN_X62WyGjC~>`gx)2tdIZR%ESeAcQ@#kWg5OX#%O#-vbW*O-Cc^yq<8&L z@3Jhm^3t8Zd+&}r=YPpBTwAWz9sj4Nq05QmZSi)o^wZZ;kIDqQv^i_Ni`@4zz>wCJ_QsIvl)WEo|IQ&8!O#DlPdKd_}Qk zuJEaC{u(vH3;sO5ap?W}?~AToI{fL#;&(+Ke+4Xjn(wc9UrIPYjb-b3n>Xje_;lm# zSJouQIP4EfD4x3hqETPU3Juw-??U)=zx?_q&iY{a3bx&TXcjeHNN~*9fMNfj7hc4X z8+yR-^tYrMr3W)o#g|XN6`1IEz>w>=|Gm;#y)nsWH<|bBx3tw?uqdE#@3wdTu8g7^ zU$+257R_f@ox9Jt1>W>}dLc<3#fug%?gS|g#a)6oxO;IAh2mal`}lso zbKd(gJG=X5&)%IoXJ&7-wx%*J76ldn0KipMQP6$%(Ekhr{5%eBU8_GkOsI;n2LM1P z@}B_})A=l)H-R3y%5s33NvfaE3p9IK4Osx7J^}m53IqVqz*H4v^?iUR=9q~vWv@@Q z%EzdT>MLoS(Q}r`_pd;z2$|4{$x-xTT~GxIEgFi@a)ahrLw%L$C6jT(=@>dF4J-O2 zSQYWYNHwIH122U@g(OW4MfEcZu!D1=#zs`^W0?h{=dR;lkhlF_)`Hpw$yM=s?(VjT4AcQ4*u;_vN1KZOF@5398|7*9 z12-c#JS9UEok6lg2QOrF3rKYel(xnfFu!lSxO4LdO`_!L0X|MR=c?l&FU<*inA*kn zk`$LE4+^ns2W-XTdjW^j4bol1eHYR^L}sxnJ=l|9uqLh;FP`#LY7vc~0d?zF11$c- z540Bx-e2-JXMpxmljH!9gu>qts3D{Lp?0v15YAbT^hcK=mLtcj^M;W#4*%?tLpXjL zZZ6JRayK5vip40v^Eb_m&MVgNbSQq%4X%a5?}K~Me@!pJNt2j>PCMc=`|#70PWPn8 zX>i&L;dpAVZQEw(b}f>0^FyESJ*ya8O;pW_A`l{5~=WdzI~>8~t^GGDP(6Q0>A-9|&Q}<4}kshka{UWQFEw z+^)fttv>QBkzBA1QS|=!aY+MuP^EctL0^JAu8kc_NnnCQA_Rj=ej3Y1`S7a3P@LchKSFXLhrV6`j^Jv4U=N*;Ov>bNI7+{3bz9W%_lG{gk|1gU|YFjRz z4@i3P0_z^tBNw&02{lt9xPpNar+@yim+ZI{#M4%e7debC*B&If-6yEIP+KQOOS1f3 zq=VG1$-M{2J{_}Oq(s@IjTx`1Y*2o@OuOj8rloTXYAPecTS!szE69ozf|zDNPSpoq z^cGxYq8?b;IUXG*84k$BMPbk=R$T=CTSSm*cLH<9|`F>+F72^rE&& zhe(N(kRjU|~ax0FPs>dhuI^Ac(K%-I>E)HY zd!|qVR~67%+QhZhX$F{4(NWhN7ZV`TB#gQ{G0H+auY_*=qegnZFb9rkt7gl;E1BFE z5q-k?$Sf&kv<1SlPU3ljndx(<mHx6?!nPx<>hLU?iIG!a$1@9Jt_1FrlA zW|f4OBywbgt{#6_|K7Ussx8>QCREKbbVJiyLIN6Q{MmGn>tq=vOoQPGughjn%*zxW zTTht;WWc97&NA{y;SDbrC}~Ta$;59bFuKguT^=owi7X(mn!tVA`^-V;=QdQfiEv_S zHhgfoFz6k=E4}#8iVnwa^WxQ9qmfiXw@_F>*`d0@^=}me=tde4VE{PAS>BQud+3 z7o0uDvqVxO6xZ%PUr1I2Dcw@M<&pK=SYTx`610=|w>^hQ{uKoBc=XbN3sp>7k6~s=-#LpVvoyHNtvjTb>0G2B0F{RX*wHsvn%& zf@6}hZa$Wk9Y_>#Xt?P@7{3}Fj(Iik}mGh#6V?6_dVhKp#flr4Hjk=T4&k57KZUx%5fG3?cmb)w6 zOo8wkLoJD+cTn3&zb}*Zz(@jgjVtev`acH;V$TN^x?lxPpxN8HbTM)2HR zo(BEC$=K2raNM;%ryg(aWsM${7f$^sawt*wd4D5>LoH~Up8ma23PnlXhc|-f@ihO$ z?3Zeyw)x`l+6Mx5XYz?Z914B$_gP{t4}*Ma@?nXzE6seNnUrG0Pd6C*@GY6u9pz-{ zv1Ncf?Jnw%GZO2i2`I!X-R$eRM|sj@CFRUR`y%4`rLC*KnnbV-qF4^9PcxBjA}pf~ zz&z92hVha^a8Hn(?1=zZLovHrvr1VS zJ8ARz_!!geB5Kh__fcgJo1N$2H#xC#{rJ*3dcJeo89AL>+7D6@07^f>| zs7}ZXf$-T~7ur1!R}5AA=)lr9T|yKmK)it`@p)N$s@{Rt7Vs9SJPzYKZcx_4`&5L8 zVolZijkODhl3Tn9$MxRf&0<1c{H{Wd`kIlWp57{rctO`HN{IuBGjfSBOy(Ig=m@6a zgfg3mHrRp?j%w;kHS%}!8fvM+CYnL{@#SN+B)7N^;ZXrUmL(Etno*}@@ghXl>r|I& z4)3_6^L{w(89mrsONiIB#?L2S|Dv<Kc%xBKq7vDgtF>ElkN zGVC1ioj4#Nt>%5qm3M-WTQwN6CDFlVk`pefl-M#)PhU6ur3oo4Bt5G`iHQ+D;P5;a$b1zh$kkr1_th`0NCnMz%?}kbu)bX9qr<)KZ}VplGc4$*pb1lNK7W&DH%#?lM){F#yZfRw z=o|M1CKRmTfUKr985M3(VCLOFCF8PqH>k9uI3ZqDg|+c(hdB>Nn8{GnN%b{SBGewQ zlSxf@9+$=g0^nIp7vm32-e#f`nMbj(mvsuKPV4J*XY^}Le>l-?Hh*g(i)m-a z4aRW&+_^g*TEyJwi)7Z?)jNv|9Q!W*Jqsn7XZXk{6k=I#j0vX?^LC)#{lK;t*NBm& z7pp!-!{r?{NzF$54VH(mlFhHs&_^IKb1PMa~8 zMiic(NoC@bV>OXrgw6R8aSl4IbI#bXcopKQ+&3B=AMQqb{-_<))PQod~ zk-dg)Pa@p-&8x9AabC3y;u0%QjoQ2M`tI1&z^f`!>~IUUdTyGe)Y#<<@wytqv-?y( z6pz~-hoj!@IoCn+Ooyob3_Y!;v3$9{lg6YcA6u5w+<>x$>*LGSnZ&s8h|eWX-fZo^ z$XOY3I4TM)v(yLG68FvBdl(gjMhiB8Qdc|;KIlmMjQaxN&LBONrr)ewCkAp6eLpZ% zg(2lw5G|{&VEdm+Cj}ua?XnrBQ1;C;q$=OBXCJnwAAQps_4c5Q;bS$z^zSh*+VC8a z`(-Ez|JIV_H*qo!%U3Hq4xhwEtZOO73C@=-ll~el(#MET&?{`dQFSkIYgt?UtG(G0 zy6h-D4mc75imX z-IKYGmJnCLEM(u}x($Rg#hBDtGsLw^FvWBbFw*ZV2}`$p<33lzp+P&B!ND@$CLv!f z#J1+OEma2WQgYqhpr4g-NQ;f$q%QIob*ay>jI5BJ#yUFiGB0{jHTA@aIBbC^+DKxW z^#4r3UGmjyqnb<4veFX*kHphN-RxFLyIV~Q4-pO(a;c7qtwG}y=f|crtIc>v1+xt; zKLakC_QD)I2zD)v$Mpgv-2$I+yn0X;KF7=`RSllJZcsE}@2*dTD!Y5wQr+pNI!}u7S8h~FKB~>3BKdqqkXZS;m$!V4Le(1NyUkuHs^0oEcGhhZf3MX=8L>&MGZj+c9Ezi%xUCJDXo~X7$eC0-OlL@O*su^Ct`! zQqbXL$!m5W@Aie6Pv*5*;ccri%iY!3tZJr7Mec0VV)ZY-fY;=bGgEWiOwyRVrbUsc zC}%6=693AaG77mT+*_*7L29d!4sATacb1ziXcC7%hSA>$U}rg(Fo%<9uDHcksodlo zE(AX9#09e~g@}##-jm&(CzDYSal2>sTPGQ}ZF94~l)8-XIXXOARdQ5XHJJ1d)YW2U z9FMlruQ{~!t>mh6b?(~YvYKR&Ht#qX7YsIgkn3Pm34n-ze7J*=4svF;#F8l6(iQ5u zi?=_f{$7%!@qFy!-oe|*rP3GDm=`J@kD4h8Apdh&Z?W<)){V?4eQ8)1(+<)VV0vq+ zmzs1bY6ArR^>i6KGI#ol_u?FuLnu!C1$($1k8RbmG6A`LTVDo9khjw1tM=kdCmdml zM>s~=ehz*t2Y5^|`h*;z@EYX>w7N|#?h{)5)0QEFtxsqLwpt(zGft0Rlg!eSs3>VE zXs|_mQ0S_uZW{cf&$vZ5IsQ=G6`)6#k)WrRTE_09BAEk^(r7BQbYkxj&W3x>B(EDv zVQ>9(nU`JbNf?P`6>)|Yoxal9zVwogZ4`JsYP~>SVR&Sa9#6PRoj8HrwdJlqX>@H- zo0-8Xwh%A|C3}gZ8G$Ws1jf^C`lGkhbSoF=jB&{34_d|;{2h+2G9z2-3_;%~X_PZ@ z$}Ldk4=meVTbxxcTJ-|NX4jK9VPp^46~f%&r@xdq{EBrD$cO$(YAF37u&>l~6<%5- zHHp0?s$XBB$ZpjavxL&|Fq7zg!tJte4t!7e0&n-!ki`A{!*8u{@rj&`^{xb8I-O@hM})6ecDY`Bad>TqC? zmZpterY*N=X71`^o?-Tfbq6WrI{BmTuyv^{ZUsaCyN1qLiaR|Wz?68lDqlPCI`4WH zCOxz}gD_^*l(dQGWHlX16E+0ZYC_#5ufI;;;Ze&@ZN!qX@agKs)+Y+4``sU;Bp;Vp z{#TAo5pV4sIQs1Lr^O55Lgd}eYEvJ8=_P&Ux&!tc@Ms4fhP`@fJz#C%Lp?S(cVY>H zgcgP;-H`QEQ}`^eccr=KE7aE-i-Jrf4Y0Bt!=o5D56`N-?MwPfO+?R=MHm_zd^D1L zRGfZ8e`WOCrLZHNUZ=A*qUlxXkJ)DPbU@MPRYI=Xb{j8uGU>zia5yHy9TLCdIJDPC{v1P$%!6;0{PM*_@c4Oc4G!-fBT;-p-lI-uDCfZD?~;{0DBSCgc)L3- z^d)IMf*OBm&z4BsE5Bb)gr|rm)Ox)X#V$mSs}CDz>tflB1scmaQ})yas&2MC|4MXd zNzn*VC(``1+poXgeD>*4Dpf&|;*DZbWrz{ZIlIx;w8i zz8MeEv8o`0gE4(%8d-bb>dYy>xU+=1=92wL7I1pm`cNm>gQ?EgY+p2env+mbiMI#}q@-KgqoNoa?T6KgoWWoH00_4hv^(;0r)CYPI#%W zRN@*>`MT%;cXM^({3F7nkniXf3Fp_v=zht_(}!u($2{7W5wWIMRj&QUR{8q0?V3DU z?aT&#gf8z6@{t@NcbB8bo1VXH?uZCJ5;T5fe7~pXo54IY8xW?>U${FYHMvBV z7COn@Xsvi-o!&P+fg75;pYLX@n{}lL`}GOtwZnL#o~d9Arp|SdwBC0;s`Bs|Pm6p` zx$jXD-wyEbE1M<7m3-%53kQsU$+(T#c82vnPwD9Wk1LSTm+TUz7So;n641|3;5zM2l0f3ObXpAyXBr;S>m#ZHh ztv}6ksuYrIV$Zi)>cP{M#Mu+2x*TFsDk3J0MGk?AbcgSr+DhK`UhT6y?B}qybEj4v z&P(QKLzKg>eC27Mvjiod1mA?Jvc{vf!MH+FeIh^JTUH6#xG8_Of2>r;KqhhkUFKj&Qk!nTRtu>%5qZN`vOV$sgt!<>xEel-coKTi9_%CF{Oi&AL16ED9aUmQ%NAo<3c$h zua2pH8RORf%C(VaYA62HwIw0#)E4rxe6msir{qP88$jow#~dNv3cW=Jjkf}OBg=HpM>;j1xiE7BDH^B_%{{#k|~2h z?597b)+B{AvNPi|$>X|Uo!E+|H+jKs_UN9Rfr||0A4C4ze zM6MTl7@m~G!$ce+Od{+rt4YS*B@^+?I`7cthh!LHGj^HZqb=-ZxhnuQt+b`43B^1{ zvBSDRY&BC5g~D(iMe4ZTUZYOVia;f=S6AeM?VwyMQlD7Fw1Sd-$n2VEzIle<&*f!9 zBo-3v69NXmdh|0oe4xqyW3alxFmW13DciX7yLSLOU3=eoPS#f24^Ryb+s$Vl>IKOw zeyMmWm6dV{P2`Hvz-P7-?RaT^7v}+j%b=q0PAC0Dd>aF79&$;YuuVlj?m4m(hYjh@ ze6Gt0g6zz73;DerlI~gb!sG5Z{m`3Y=&t)Q19iGjAaRfX)Z@cqar(Fr}E+6 zX90dNPN3EM`Urb&RvbMni)YPUJbY(^`qZ6g$aVXE&n0RYV8=L`=W=TeNxVGzv`sh; z6A=>b3(&~$q&!#y=Noqe*X@Tk4L3(iw^hQxmIXCG5IM%afwH3vuj+HsAle5e3epoy z?ySGrk7|5s0?(>(hU7K%mHuQrm*fQ9WtbNsd>$OqJ%?sRvLN0>Qs#E__HFz-KQNa9 z>UZNbfh@%PAi<_IaZ*3&0ih>sEde@yNEQ2xf)XD4ddA=FwrgRX;4CX^e-KEA!%DnN)^S^C{TC9W=Tpa%DcG!- zA8c7%^JwB`qj=+sfp6&vmXpGHXjOuixQ6;1xwNFKe{U$+K<^P*v1asFAY_{U33DIE4TJ literal 0 HcmV?d00001 diff --git a/assets/images/3x/ic_attach_inactivate.png b/assets/images/3x/ic_attach_inactivate.png new file mode 100644 index 0000000000000000000000000000000000000000..ef86b8891f5288b42ab9720aac34a9473c052a54 GIT binary patch literal 2078 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_history_activate.png b/assets/images/ic_history_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..cb3ec2b03cf7c55bf2216f21728057cdf8a0d053 GIT binary patch literal 1850 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 i)HEEVTeyXr6#oHE@3Gu-fvvs(0000XazzgZUs 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 literal 0 HcmV?d00001 diff --git a/assets/images/ic_user_activate.png b/assets/images/ic_user_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..d066f879c32536cbae1ccc9efb25c61df3809195 GIT binary patch literal 1555 zcmV+u2JHEXP)IOCmAGL@^NLk`N$VR7B7Knl!OV0i#BWHV}!? z2l_ztt>Kbd7B8SNCK_Xm_*6kdTDsk$Ae3|F_xtCpMi7@hE%-qCCueugnK?7x{MT;| z(YV|u!ZZdctZkTUtXbs9JwVntPEmnK`dna+h9j~R zIi`p$IWiPdzz#F_Nm`cVTJvXU6p|R2f)eWvvyqu(0l-Q`%#i>bl|YgaZ9B&@L=-HW z($@0>B@{ymg{?cnO!atEh{cI;m#|qr5{|S8xrNMp5J2%*99zzE5bge{_5MkeP=X|b zhgLN#g%8yWlQYZ?>#wir$ah^c?BuzvO$XV~9<;OA#Ppo0UV?TfC6GiKgWWf%nv5~d z3GJ-uINo)=aZ}oleThNu;{_)M+B3A65=zCuhE_CAhDYD0=tMm;6&xrxUNV;znC=5+ zrR>1YmKk&_fQ?KDXTfw%{ffv9)xOp9bGh+#FMa+S0R4g>fbsy)g?CZ{sTf!~Oc&KO zWDI;A|CLP6Tn*h}CnA(kDh4Lj6tU8QDrVcVArzn9` z46Jrv&oCDH7C8#$WL3iEa^qp~EkbH`z36K-EhUhId5qg*hsI@T_TUQ*`v*78tN-VS z!PZA67229!1o$QssJ7IOuA34{;>=&%(AY*PUgg-K1Zl=+2TdMgYfh7OYPu#=fok8! z5<+WTbzAeVQ$k6c`6utmzl>VRZXecV4_cvyPnIv@yTgQDE)6YPG@5` z6T5rKLanGC#>zKSR`k9?Nq`NnZd?!bx5v~Oz(fwzcI2O-G0MQchn8TYi(zVLALh6G zZr#$J?uvjZr>9hO0zFv|iln=C&+(;nljQ9F=2h160;S%%@k~0sZsJpi2Cg0VuRO*! z+J>l`q&y0@ePmPH>1K*2nB4DK2W)#Wy8OiThFt}$u=?Q|#QW1|`a+Fe?Ya>mOe)ji z@CeY|G3g}T{M@r2%&#sBEHL3*9Lp4t0_&^&4^BT;$*nl{JuK2s{x|?Fm~bAI1Lhn( zs)Um@a}#|=w^D@i>SsuL90YvVwcS@8-#`auDQiGWRrcNBrum+0UBY!oFd|e{nlmtx zNm);qFXH;6^nNC7{-)59wo;Y8?C&p>uBr+8&hKbt;cL{7We|KC^!A>zz>urzJ#~id z(S8+2kXEgQ8O_|9V6RYwh>D_6+$9M^^0knns!~5o6n`oRa4+mGMJP}Brhzz$vU*OC zC?u0XNz+3*`uyomnWQW4W4cioU6fC0RQi8)Qscix=mFRH6E=A!0q~;FqPWj@pd^Wp zHg$*i#Nxb@bId-(U+^ubUW|#={qd723k(_gofu4vQQ|CDnoJ{=e literal 0 HcmV?d00001 diff --git a/assets/images/ic_user_inactivate.png b/assets/images/ic_user_inactivate.png new file mode 100644 index 0000000000000000000000000000000000000000..c88c2fc23131537d84598de6783c3a10205867e9 GIT binary patch literal 833 zcmV-H1HSx;P)EE;A_Slr+3b}rfu#(oxy#SX~<0mP{sVUK=lNo^o*b zm5uqf*M}x+Bt&Rp${Y{0C)qhCzgn$YTGwFTq-zjMr_-j^buUF*sZ?_D&}B>#AT+VN zyE~WU5Ienx(8Lyt1rzhgv1zPx^2&6EwqBGnLK9P_`L{Wo`{kTG=6`5iTdn_iVhluA zQ|nrj$)x9ZY7P>NGpX<17}83Ygb-(b9r#@E@bOH1E`~meCAL>aT$DRXR^5t{UdXiXxrr4>gQA*_# zrML~vl}SQuHk;L;89mgy*rY-+F&>W_IGlc!)la3ABVy`wzi6Mm`&j%)9|V7L2GLTG z6@v2Ei$;ob)kQ~@V7*>9NUPIenZRP;Kx3Q`v)Sx#ZBaGu_hArJ`g!yExVG;7fpDNP zkg~L{a}81q7156N-ilx5fEdj7&1>UCHeC_ezpJ&s_~%nTVbg0PR}G{e5JGU7^xp9P zV$gBmW5``Yig)cqg^S3)*9Rh17gxYh72+q>rq74VAJ25d4WEoZS`SrZPi#K`00000 LNkvXXu0mjfhst(w literal 0 HcmV?d00001 diff --git a/assets/images/img_upload.png b/assets/images/img_upload.png new file mode 100644 index 0000000000000000000000000000000000000000..20fa0e1469e721e636d9161da756c70b99a63098 GIT binary patch literal 537 zcmeAS@N?(olHy`uVBq!ia0vp^zCdin!3HG1>RmYrq&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+5^+2sJuYj39foaZxsoVYt;{f15DH&)E$U#7vRzIOsk zcH-YXKfbPPo>X9T%_gT|>o=pH;=eT**;zLo`=WigB#D*7#2Uc_ns-A?f=}$dy=~I*LH84{oUF8PJ5@wo5}lY3=Dtmyd8Y7 z=xXUQppFF@EUwBLQjQlny4(Uxnm~q-E%e~P0+Diq?k8uSZ)5*Cv48!<_e}STA6Bi_ z*V@kR?6K^Q|BmJ1zT795I64HFIMtc>UX9s#aT2p{u<7ANr?;0^s@+}I9x***{|=7q dyN*Bj_CAlYom#kf1u!NVJYD@<);T3K0RaDu<0}9F literal 0 HcmV?d00001 diff --git a/assets/images/upload_image.png b/assets/images/upload_image.png deleted file mode 100644 index 253b2f5c74381b07f1e6232180ce1e2e096f3ae1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 zcmeAS@N?(olHy`uVBq!ia0vp^zCdin!3HG1>RmYrq&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+maX917`tK|AQ2Xk8A~;>AMq4Cb%Yx{L*m~YFgWAztHP%t=Oz^r$gp% zf9tPx>^k_g?ygjE4v*FkL-Ah0?d5*I1i22K(Z5s9H=A!=E2~$XepOZ9>fOEn1XvTE zizgi^)tS-Ac}jX)XVVXn+)wNqdCtw@vr6n>+Hhjx^F8m*y6$MG{Z#%`N_S_E_S4e! z-Jvz|Y5isH2O{i24)b{N|KtmVG#-Nbq#yhGIRX3(VmS8ry;-Z~a9!dCs+ z`{%n%)`b}?uF5lZpKJ8C{hami{yNpihac?U++SB;^~NpZM`XN?>udvku5XHSOKt^a#BqYYxTETAYZ`Kzp{Ym$|zcRm-dt-l~ zLG_}Ny;qx;oT_Q5t_Ulh5F*6_v?;~?a>&^!lDao9n1lxV?5g>xciwrmSi+Rw(Z}nj g_h;-b72V5t-XU-T!~46|z({5AboFyt=akR{0Qnl&{r~^~ diff --git a/ios/Podfile b/ios/Podfile index b74ea69c..b44d63a9 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -31,6 +31,8 @@ target 'Runner' do use_frameworks! use_modular_headers! + pod 'DKImagePickerController', '4.3.4' + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index a9e27155..1dae9316 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -11,14 +11,33 @@ PODS: - Flutter - biometric_storage (0.0.1): - Flutter - - DKImagePickerController/Core (4.3.3): + - CropViewController (2.6.1) + - DKCamera (1.6.7) + - DKImagePickerController (4.3.4): + - DKImagePickerController/Camera (= 4.3.4) + - DKImagePickerController/Core (= 4.3.4) + - DKImagePickerController/ImageDataManager (= 4.3.4) + - DKImagePickerController/InlineCamera (= 4.3.4) + - DKImagePickerController/PhotoEditor (= 4.3.4) + - DKImagePickerController/PhotoGallery (= 4.3.4) + - DKImagePickerController/Resource (= 4.3.4) + - DKImagePickerController/Camera (4.3.4): + - DKCamera + - DKImagePickerController/Core + - DKImagePickerController/Core (4.3.4): - DKImagePickerController/ImageDataManager - DKImagePickerController/Resource - - DKImagePickerController/ImageDataManager (4.3.3) - - DKImagePickerController/PhotoGallery (4.3.3): + - DKImagePickerController/ImageDataManager (4.3.4) + - DKImagePickerController/InlineCamera (4.3.4): + - DKCamera + - DKImagePickerController/Core + - DKImagePickerController/PhotoEditor (4.3.4): + - CropViewController (~> 2.5) + - DKImagePickerController/Core + - DKImagePickerController/PhotoGallery (4.3.4): - DKImagePickerController/Core - DKPhotoGallery - - DKImagePickerController/Resource (4.3.3) + - DKImagePickerController/Resource (4.3.4) - DKPhotoGallery (0.0.17): - DKPhotoGallery/Core (= 0.0.17) - DKPhotoGallery/Model (= 0.0.17) @@ -100,7 +119,7 @@ PODS: - shared_preferences_foundation (0.0.1): - Flutter - FlutterMacOS - - SwiftyGif (5.4.3) + - SwiftyGif (5.4.4) - Toast (4.0.0) - url_launcher_ios (0.0.1): - Flutter @@ -119,6 +138,7 @@ DEPENDENCIES: - at_file_saver (from `.symlinks/plugins/at_file_saver/ios`) - at_onboarding_flutter (from `.symlinks/plugins/at_onboarding_flutter/ios`) - biometric_storage (from `.symlinks/plugins/biometric_storage/ios`) + - DKImagePickerController (= 4.3.4) - emoji_picker_flutter (from `.symlinks/plugins/emoji_picker_flutter/ios`) - file_picker (from `.symlinks/plugins/file_picker/ios`) - Flutter (from `Flutter`) @@ -142,6 +162,8 @@ DEPENDENCIES: SPEC REPOS: trunk: + - CropViewController + - DKCamera - DKImagePickerController - DKPhotoGallery - libwebp @@ -213,7 +235,9 @@ SPEC CHECKSUMS: at_file_saver: c0e052c72d8c0296318bd70f2ae7f510887014ce at_onboarding_flutter: e8219b6d0bfb236d3837ec3528871aebdcc56e8d biometric_storage: 1400f1382af3a4cc2bf05340e13c3d8de873ceb9 - DKImagePickerController: 72fd378f244cef3d27288e0aebf217a4467e4012 + CropViewController: 58fb440f30dac788b129d2a1f24cffdcb102669c + DKCamera: a902b66921fca14b7a75266feb8c7568aa7caa71 + DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 emoji_picker_flutter: df19dac03a2b39ac667dc8d1da939ef3a9e21347 file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 @@ -228,21 +252,21 @@ SPEC CHECKSUMS: MTBBarcodeScanner: f453b33c4b7dfe545d8c6484ed744d55671788cb open_file: 02eb5cb6b21264bd3a696876f5afbfb7ca4f4b7d package_info_plus: 6c92f08e1f853dc01228d6f553146438dafcd14e - path_provider_foundation: 37748e03f12783f9de2cb2c4eadfaa25fe6d4852 + path_provider_foundation: c68054786f1b4f3343858c1e1d0caaded73f0be9 permission_handler_apple: 44366e37eaf29454a1e7b1b7d736c2cceaeb17ce qr_code_scanner: bb67d64904c3b9658ada8c402e8b4d406d5d796e receive_sharing_intent: c0d87310754e74c0f9542947e7cbdf3a0335a3b1 SDWebImage: 0905f1b7760fc8ac4198cae0036600d67478751e SDWebImageWebPCoder: f93010f3f6c031e2f8fb3081ca4ee6966c539815 share_plus: 056a1e8ac890df3e33cb503afffaf1e9b4fbae68 - shared_preferences_foundation: 297b3ebca31b34ec92be11acd7fb0ba932c822ca - SwiftyGif: 6c3eafd0ce693cad58bb63d2b2fb9bacb8552780 + shared_preferences_foundation: 986fc17f3d3251412d18b0265f9c64113a8c2472 + SwiftyGif: 93a1cc87bf3a51916001cf8f3d63835fb64c819f Toast: 91b396c56ee72a5790816f40d3a94dd357abc196 - url_launcher_ios: fb12c43172927bb5cf75aeebd073f883801f1993 + url_launcher_ios: 08a3dfac5fb39e8759aeb0abbd5d9480f30fc8b4 video_compress: fce97e4fb1dfd88175aa07d2ffc8a2f297f87fbe video_thumbnail: c4e2a3c539e247d4de13cd545344fd2d26ffafd1 webview_flutter_wkwebview: b7e70ef1ddded7e69c796c7390ee74180182971f -PODFILE CHECKSUM: db1b3d34103b9bca35e1d0bca266af8024bec0bc +PODFILE CHECKSUM: a69c71e5c6dcbb517b96ee8fed9f0c82ee0b181a COCOAPODS: 1.11.3 diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart index fcbd1a3d..9af3c534 100644 --- a/lib/screens/common_widgets/file_card.dart +++ b/lib/screens/common_widgets/file_card.dart @@ -1,21 +1,21 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import '../../utils/colors.dart'; -class FileCard extends StatefulWidget { - PlatformFile fileDetail; +class FileCard extends StatelessWidget { + final PlatformFile fileDetail; + final Function? deleteFunc; - FileCard({Key? key, required this.fileDetail}) : super(key: key); + FileCard({ + Key? key, + required this.fileDetail, + this.deleteFunc, + }) : super(key: key); - @override - State createState() => _FileCardState(); -} - -class _FileCardState extends State { @override Widget build(BuildContext context) { return Container( @@ -26,43 +26,47 @@ class _FileCardState extends State { color: ColorConstants.textBoxBg, ), ), - margin: EdgeInsets.fromLTRB(0, 15, 10, 0), - padding: EdgeInsets.fromLTRB(13, 8, 8, 13), + margin: EdgeInsets.fromLTRB(0, 15, 0, 0), + padding: EdgeInsets.symmetric(horizontal: 22, vertical: 12), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - width: 100.toWidth, - child: Text( - widget.fileDetail.name, - style: TextStyle( - color: Colors.black, - fontSize: 13.toFont, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + fileDetail.name, + style: TextStyle( + color: Colors.black, + fontSize: 12.toFont, + fontWeight: FontWeight.w500, + ), ), - maxLines: 1, - overflow: TextOverflow.ellipsis, ), - ), - Text( - AppUtils.getFileSizeString( - bytes: widget.fileDetail.size.toDouble(), - decimals: 2, - ), - style: TextStyle( - fontSize: 9.toFont, - color: ColorConstants.sidebarTextUnselected, + Text( + AppUtils.getFileSizeString( + bytes: fileDetail.size.toDouble(), + decimals: 2, + ), + style: TextStyle( + fontSize: 9.toFont, + color: ColorConstants.sidebarTextUnselected, + ), ), - ), - ], + ], + ), ), - Icon( - Icons.remove_red_eye_outlined, - size: 15.toFont, + InkWell( + onTap: () { + deleteFunc?.call(); + }, + child: SvgPicture.asset( + AppVectors.icClose, + ), ), ], ), diff --git a/lib/screens/contact_new_version/widget/contact_card_widget.dart b/lib/screens/contact_new_version/widget/contact_card_widget.dart index 88d0419b..b441fed9 100644 --- a/lib/screens/contact_new_version/widget/contact_card_widget.dart +++ b/lib/screens/contact_new_version/widget/contact_card_widget.dart @@ -125,9 +125,12 @@ class _ContactCardWidgetState extends State { ), ), widget.isTrusted - ? SvgPicture.asset( - AppVectors.icTrustActivated, - ) + ? Padding( + padding: const EdgeInsets.only(right: 4), + child: SvgPicture.asset( + AppVectors.icTrustActivated, + ), + ) : const SizedBox(), ], ), diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index 52865a3f..bb13ca77 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -24,6 +24,8 @@ class ListContactWidget extends StatefulWidget { final Function(List contacts)? onSelectContacts; final List? trustedContacts; final List? selectedContacts; + final Color? searchBackgroundColor, searchBorderColor; + final String? hintText; const ListContactWidget({ Key? key, @@ -40,6 +42,9 @@ class ListContactWidget extends StatefulWidget { this.onSelectContacts, this.trustedContacts, this.selectedContacts, + this.searchBackgroundColor, + this.searchBorderColor, + this.hintText, }) : super(key: key); @override @@ -88,6 +93,10 @@ class _ListContactWidgetState extends State { ) : Container( height: 44.toHeight, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: widget.searchBackgroundColor, + ), margin: EdgeInsets.symmetric( horizontal: 32.toWidth, vertical: 18.toHeight, @@ -99,16 +108,18 @@ class _ListContactWidgetState extends State { }, decoration: InputDecoration( enabledBorder: OutlineInputBorder( - borderSide: const BorderSide( + borderSide: BorderSide( width: 1, - color: Color(0xFF939393), + color: + widget.searchBorderColor ?? ColorConstants.grey, ), borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( - borderSide: const BorderSide( + borderSide: BorderSide( width: 1, - color: Color(0xFF939393), + color: + widget.searchBorderColor ?? ColorConstants.grey, ), borderRadius: BorderRadius.circular(10), ), @@ -122,13 +133,14 @@ class _ListContactWidgetState extends State { Icons.search, color: Colors.grey, ), - hintText: 'Search by atSign or nickname', + hintText: + widget.hintText ?? 'Search by atSign or nickname', ), textInputAction: TextInputAction.search, style: TextStyle( fontSize: 14.toFont, color: ColorConstants.fontPrimary, - fontWeight: FontWeight.normal, + fontWeight: FontWeight.w500, ), ), ), diff --git a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart index 6ded5347..e56f097e 100644 --- a/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart +++ b/lib/screens/group_contacts_screen/widgets/group_contact_list_tile.dart @@ -9,8 +9,6 @@ import 'package:flutter/material.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import '../../../utils/images.dart'; - class ContactListTile extends StatefulWidget { final String? name; final String? atSign; diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index d8d78500..3a262749 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -13,13 +13,13 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/svg.dart'; import 'package:provider/provider.dart'; import '../../utils/text_strings.dart'; @@ -111,66 +111,24 @@ class _WelcomeScreenState extends State { bottomNavigationBar: customBottomNavigationBar(), key: _scaffoldKey, backgroundColor: ColorConstants.scaffoldColor, - floatingActionButtonLocation: - FloatingActionButtonLocation.centerDocked, - floatingActionButton: Container( - width: 79, - height: 79, - decoration: BoxDecoration( - shape: BoxShape.circle, - gradient: LinearGradient( - colors: [Color(0xffF05E3F), Color(0xffe9a642)], - stops: [0.1, 0.8], - )), - child: FloatingActionButton( - elevation: 0, - backgroundColor: Colors.transparent, - onPressed: () { - welcomeScreenProvider.changeBottomNavigationIndex(0); - }, - child: context - .watch() - .selectedBottomNavigationIndex == - 0 - ? SvgPicture.asset( - "assets/svg/plus.svg", - ) - : SvgPicture.asset( - "assets/svg/home.svg", - ), - ), - ), - // appBar: _selectedBottomNavigationIndex == 0 - // ? (SizeConfig().isTablet(context) - // ? null - // : CustomAppBar( - // showLeadingicon: true, - // )) - // : CustomAppBar( - // showMenu: true, - // showBackButton: false, - // showTrailingButton: true, - // showTitle: true, - // showClosedBtnText: false, - // title: 'Received Files', - // ), extendBody: true, drawerScrimColor: Colors.transparent, endDrawer: SideBarWidget( isExpanded: true, ), body: Consumer( - builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[context - .watch() - .selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }), + builder: (_c, provider, widget) { + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[context + .watch() + .selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }, + ), ), ), Consumer( @@ -245,7 +203,7 @@ class _WelcomeScreenState extends State { .sentFileTransferProgress ?.percent ?? 30) / - 105; + 100; return ProgressBarAnimation( value: percent, gradient: const LinearGradient( @@ -272,83 +230,87 @@ class _WelcomeScreenState extends State { } Widget customBottomNavigationBar() { - return Consumer(builder: (context, provider, _) { - return Selector( + return Consumer( + builder: (context, provider, _) { + return Selector( selector: (context, provider) => provider.selectedBottomNavigationIndex, builder: (context, selectedBottomNavigationIndex, _) { return Container( - height: 70.toHeight, + height: 74, + margin: EdgeInsets.symmetric(horizontal: 16, vertical: 32), + padding: EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.only( - topRight: Radius.circular(20), - topLeft: Radius.circular(20)), - boxShadow: [ - BoxShadow( - color: Colors.black26, spreadRadius: 0, blurRadius: 10), - ], + borderRadius: BorderRadius.circular(76), ), - child: ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(30.0), - topRight: Radius.circular(30.0), - ), - child: Padding( - padding: const EdgeInsets.only(left: 15, right: 15.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - BottomNavigationWidget( - icon: "assets/svg/contacts.svg", - title: "Contacts", - index: 1, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, - ), - BottomNavigationWidget( - icon: "assets/svg/my_files.svg", - title: "My Files", - index: 2, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, - ), - SizedBox( - width: 1, - ), - BottomNavigationWidget( - icon: "assets/svg/history.svg", - title: "History", - index: 3, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, - ), - BottomNavigationWidget( - icon: "assets/svg/settings.svg", - title: "Settings", - index: 4, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, - ), - ], - ), + child: Padding( + padding: const EdgeInsets.only(left: 15, right: 15.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + BottomNavigationWidget( + iconActivate: ImageConstants.icUserActivate, + iconInactivate: ImageConstants.icUserInactivate, + title: "Contacts", + index: 1, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + iconActivate: ImageConstants.icFileActivate, + iconInactivate: ImageConstants.icFileInactivate, + title: "Files", + index: 2, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + iconActivate: ImageConstants.icSendActivate, + iconInactivate: ImageConstants.icSendInactivate, + index: 0, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + iconActivate: ImageConstants.icHistoryActivate, + iconInactivate: ImageConstants.icHistoryInactivate, + title: "History", + index: 3, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + BottomNavigationWidget( + iconActivate: ImageConstants.icSettingActivate, + iconInactivate: ImageConstants.icSettingInactivate, + title: "Settings", + index: 4, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), + ], ), ), ); - }); - }); + }, + ); + }, + ); } } diff --git a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart index b131a6f4..1a08b316 100644 --- a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart +++ b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart @@ -1,12 +1,10 @@ import 'package:at_common_flutter/services/size_config.dart'; -import 'package:atsign_atmosphere_pro/screens/welcome_screen/welcome_screen.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; class BottomNavigationWidget extends StatelessWidget { final Function(int index)? onTap; final int index; - final String icon; + final String iconActivate, iconInactivate; final String title; final int indexSelected; @@ -14,9 +12,10 @@ class BottomNavigationWidget extends StatelessWidget { Key? key, this.onTap, required this.index, - this.icon = '', this.title = '', required this.indexSelected, + required this.iconActivate, + required this.iconInactivate, }) : super(key: key); @override @@ -28,59 +27,19 @@ class BottomNavigationWidget extends StatelessWidget { child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ - Spacer(), - SvgPicture.asset( - icon, - color: indexSelected == index ? Color(0xffEAA743) : Colors.black, + Image.asset( + indexSelected == index ? iconActivate : iconInactivate, height: 25, ), - SizedBox( - height: 3, - ), + SizedBox(height: 3), Text( title, style: TextStyle( - fontSize: 11.toFont, - color: indexSelected == index ? Color(0xffEAA743) : Colors.black, + fontSize: 10.toFont, + color: indexSelected == index ? Colors.black : Color(0xFFAEAEAE), + fontWeight: FontWeight.w500, ), ), - // Spacer(), - SizedBox( - height: 10, - ), - if (indexSelected == index) - Container( - height: 2, - width: 40, - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Color(0xffEAA743).withOpacity(0.5), - spreadRadius: 3, - blurRadius: 5, - offset: Offset(0, -1), // changes position of shadow - ), - ], - ), - ) - else - SizedBox( - height: 2, - width: 40, - ), - if (indexSelected == index) - SizedBox( - height: 4, - width: 50, - child: CustomPaint( - painter: PainterOne(), - ), - ) - else - SizedBox( - height: 4, - width: 50, - ) ], ), ); diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index 1b9604de..d2908672 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -1,9 +1,10 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; -import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class ChoiceContactsWidget extends StatefulWidget { @@ -36,10 +37,10 @@ class _ChoiceContactsWidgetState extends State { body: Align( alignment: Alignment.bottomCenter, child: Container( - height: MediaQuery.of(context).size.height - 120, + height: MediaQuery.of(context).size.height - 60, width: double.infinity, decoration: BoxDecoration( - color: Colors.white, + color: Color(0xFFF4F4F4), borderRadius: const BorderRadius.only( topLeft: Radius.circular(20), topRight: Radius.circular(20), @@ -56,14 +57,13 @@ class _ChoiceContactsWidgetState extends State { mainAxisSize: MainAxisSize.min, children: [ _buildHeaderWidget(), - const SizedBox(height: 24), Padding( padding: const EdgeInsets.only(left: 27), child: Text( "Send To:", style: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.bold, + fontSize: 20.toFont, + fontWeight: FontWeight.w500, color: Colors.black, ), ), @@ -73,8 +73,11 @@ class _ChoiceContactsWidgetState extends State { trustedContacts: trustedProvider.trustedContacts, isSelectMultiContacts: true, showGroups: true, - isShowFilterBar: true, + isShowFilterBar: false, selectedContacts: listContact, + searchBackgroundColor: Colors.white, + searchBorderColor: Colors.white, + hintText: "Search", onSelectContacts: (contacts) { setState(() { listContact = contacts; @@ -95,7 +98,7 @@ class _ChoiceContactsWidgetState extends State { }, child: Container( width: double.infinity, - height: 44, + height: 51.toHeight, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), color: Colors.black, @@ -105,8 +108,8 @@ class _ChoiceContactsWidgetState extends State { "Select (${listContact.length})", style: TextStyle( color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.w600, + fontSize: 16.toFont, + fontWeight: FontWeight.w500, ), ), ), @@ -141,28 +144,8 @@ class _ChoiceContactsWidgetState extends State { onTap: () { Navigator.of(context).pop(); }, - child: Container( - height: 31.toHeight, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric( - horizontal: 30, - ), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(28), - ), - child: Center( - child: Text( - "Close", - style: TextStyle( - fontSize: 17.toFont, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), + child: SvgPicture.asset( + AppVectors.icClose, ), ), ), diff --git a/lib/screens/welcome_screen/widgets/contact_card.dart b/lib/screens/welcome_screen/widgets/contact_card.dart index 25aea267..c8f44ef5 100644 --- a/lib/screens/welcome_screen/widgets/contact_card.dart +++ b/lib/screens/welcome_screen/widgets/contact_card.dart @@ -14,6 +14,7 @@ class ContactCard extends StatefulWidget { final double avatarSize, borderRadius; final Function()? onTap; final bool isSelected, isTrusted; + final Function? deleteFunc; const ContactCard({ Key? key, @@ -23,6 +24,7 @@ class ContactCard extends StatefulWidget { this.onTap, this.isSelected = false, this.isTrusted = false, + this.deleteFunc, }) : super(key: key); @override @@ -126,6 +128,17 @@ class _ContactCardState extends State { AppVectors.icTrustActivated, ) : const SizedBox(), + InkWell( + onTap: () { + widget.deleteFunc?.call(); + }, + child: Padding( + padding: const EdgeInsets.only(top: 4), + child: SvgPicture.asset( + AppVectors.icClose, + ), + ), + ), ], ), ), diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index ed2eb99f..4a700463 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -10,11 +10,9 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avata import 'package:atsign_atmosphere_pro/screens/group_contacts_screen/widgets/group_contact_list_tile.dart'; import 'package:atsign_atmosphere_pro/screens/welcome_screen/widgets/contact_card.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; -import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class OverlappingContacts extends StatefulWidget { @@ -66,33 +64,19 @@ class _OverlappingContactsState extends State { _atsignImages[widget.selectedList[index]?.contact?.atSign]; return widget.selectedList[index]?.contact != null - ? Stack( - children: [ - Padding( - padding: const EdgeInsets.only(right: 8, top: 4), - child: ContactCard( - key: Key( - widget.selectedList[index]!.contact!.atSign ?? - ''), - contact: widget.selectedList[index]!.contact!, - isTrusted: _checkTrustedContact( - widget.selectedList[index]!.contact!), - ), - ), - Positioned( - top: -5, - right: -5, - child: InkWell( - onTap: () { - provider.removeContacts( - provider.selectedContacts[index]); - }, - child: SvgPicture.asset( - AppVectors.icClose, - ), - ), - ) - ], + ? Padding( + padding: const EdgeInsets.only(right: 8, top: 4), + child: ContactCard( + key: Key( + widget.selectedList[index]!.contact!.atSign ?? ''), + contact: widget.selectedList[index]!.contact!, + isTrusted: _checkTrustedContact( + widget.selectedList[index]!.contact!), + deleteFunc: () { + provider + .removeContacts(provider.selectedContacts[index]); + }, + ), ) : ContactListTile( isSelected: provider.selectedContacts diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index fdc0d86c..c4d73e9d 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -15,12 +15,10 @@ import 'package:atsign_atmosphere_pro/services/overlay_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; -import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import '../../../utils/images.dart'; @@ -72,6 +70,7 @@ class _WelcomeScreenHomeState extends State { height: SizeConfig().screenHeight, child: SingleChildScrollView( controller: scrollController, + padding: EdgeInsets.only(bottom: 100.toHeight), child: Padding( padding: EdgeInsets.symmetric( horizontal: 30.toWidth, @@ -81,27 +80,19 @@ class _WelcomeScreenHomeState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Expanded( - child: Padding( - padding: EdgeInsets.symmetric( - horizontal: - SizeConfig().isTablet(context) ? 33.toWidth : 0, - ), - child: Text( - TextStrings().selectFiles, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, - ), - ), - ), + Padding( + padding: EdgeInsets.symmetric( + horizontal: SizeConfig().isTablet(context) ? 33.toWidth : 0, + ), + child: Text( + TextStrings().selectFiles, + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.w600, ), - ], + ), ), - const SizedBox(height: 16), + const SizedBox(height: 10), Consumer(builder: (context, provider, _) { if (provider.selectedFiles.isNotEmpty) { return Column( @@ -114,25 +105,12 @@ class _WelcomeScreenHomeState extends State { children: List.generate( provider.selectedFiles.length, (index) { - return Stack( - children: [ - FileCard( - fileDetail: provider.selectedFiles[index], - ), - Positioned( - top: 0, - right: -5, - child: InkWell( - onTap: () { - provider.deleteFiles(index); - provider.calculateSize(); - }, - child: SvgPicture.asset( - AppVectors.icClose, - ), - ), - ), - ], + return FileCard( + fileDetail: provider.selectedFiles[index], + deleteFunc: () { + provider.deleteFiles(index); + provider.calculateSize(); + }, ); }, ), @@ -162,15 +140,14 @@ class _WelcomeScreenHomeState extends State { children: [ Image.asset( ImageConstants.uploadIcon, - width: 77.toWidth, - height: 57.toHeight, ), SizedBox(height: 10.toHeight), Text( 'Upload your file(s)', style: TextStyle( - color: ColorConstants.textLightGrey, - fontSize: 16.toFont, + color: ColorConstants.gray, + fontSize: 15.toFont, + fontWeight: FontWeight.w500, ), ), ], @@ -181,28 +158,27 @@ class _WelcomeScreenHomeState extends State { ); } }), - SizedBox(height: 16.toHeight), + SizedBox(height: 27.toHeight), Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Expanded( child: Padding( padding: EdgeInsets.only( - left: SizeConfig().isTablet(context) - ? 30.toWidth - : 0), + left: SizeConfig().isTablet(context) ? 30.toWidth : 0, + ), child: Text( TextStrings().selectContacts, style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, + fontSize: 15.toFont, + fontWeight: FontWeight.w600, ), ), ), ), ], ), - SizedBox(height: 16.toHeight), + SizedBox(height: 10.toHeight), Consumer( builder: (context, provider, _) { if (provider.scrollToBottom) { @@ -220,7 +196,7 @@ class _WelcomeScreenHomeState extends State { }, ), _buildChoiceContact(), - SizedBox(height: 16.toHeight), + SizedBox(height: 27.toHeight), Container( height: 94.toHeight, width: double.infinity, @@ -228,7 +204,7 @@ class _WelcomeScreenHomeState extends State { color: Colors.white, borderRadius: BorderRadius.circular(10), ), - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 4), + padding: EdgeInsets.symmetric(horizontal: 18, vertical: 4), child: TextField( controller: noteController, maxLines: 5, @@ -258,7 +234,7 @@ class _WelcomeScreenHomeState extends State { height: 67.toHeight, width: double.infinity, decoration: BoxDecoration( - borderRadius: BorderRadius.all(Radius.circular(247)), + borderRadius: BorderRadius.circular(247), gradient: LinearGradient( colors: [Color(0xffF05E3F), Color(0xffe9a642)], stops: [0.1, 0.8], @@ -271,14 +247,16 @@ class _WelcomeScreenHomeState extends State { Text( 'Transfer Now', style: TextStyle( - fontSize: 20.toFont, color: Colors.white), + fontSize: 20.toFont, + color: Colors.white, + fontWeight: FontWeight.w600, + ), ), ], ), ), ), ), - SizedBox(height: 100) ], ), ), @@ -293,7 +271,7 @@ class _WelcomeScreenHomeState extends State { _choiceContact(clearSelectedContact: true); }, child: Container( - height: 61.toHeight, + height: 56.toHeight, width: double.infinity, decoration: BoxDecoration( color: Color(0xFFF6DED5), @@ -309,7 +287,7 @@ class _WelcomeScreenHomeState extends State { 'Add atSigns', style: TextStyle( color: ColorConstants.orange, - fontSize: 18.toFont, + fontSize: 15.toFont, fontWeight: FontWeight.w500, ), ), @@ -345,7 +323,7 @@ class _WelcomeScreenHomeState extends State { 'Add Files', style: TextStyle( color: ColorConstants.yellow, - fontSize: 18.toFont, + fontSize: 15.toFont, fontWeight: FontWeight.w500, ), ), diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index 10a3a66e..eaaa650b 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -5,11 +5,13 @@ import 'package:atsign_atmosphere_pro/screens/history/widgets/file_recipients.da import 'package:atsign_atmosphere_pro/screens/common_widgets/linear_progress_bar.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import 'navigation_service.dart'; import '../data_models/file_transfer_status.dart'; @@ -65,29 +67,17 @@ class OverlayService { child: InkWell( onTap: () { hideOverlay(); - WelcomeScreenProvider() - .changeOverlayStatus(false); + if (flushbarStatus != FLUSHBAR_STATUS.DONE && + flushbarStatus != + FLUSHBAR_STATUS.FAILED) { + WelcomeScreenProvider() + .changeOverlayStatus(false); + } }, - borderRadius: BorderRadius.circular(20), - child: Container( - width: 105.toWidth, - height: 35, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20), - border: - Border.all(color: ColorConstants.grey), - ), - child: Center( - child: Text( - 'Close', - style: TextStyle( - color: ColorConstants.grey, - fontSize: 17, - fontWeight: FontWeight.w600, - ), - ), - ), + child: SvgPicture.asset( + AppVectors.icClose, + height: 52, + width: 52, ), ), ), diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 3a111dfe..606c4474 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -47,6 +47,7 @@ class ColorConstants { static const Color boxGrey = Color(0xFFEFEFEF); static const Color darkGray = Color(0xFFC0C0C0); static const Color buttonGrey = Color(0xFFC7C7C7); + static const Color gray = Color(0xFF9B9B9B); static const Color sidebarTextUnselected = Color(0xFFA4A4A5); static const Color sidebarTextSelected = Color(0xFF000000); diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 30bbccc3..4f460acd 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -77,5 +77,16 @@ class ImageConstants { static String sidebarSettings = '$_basePath/settings.png'; static String emptyBox = '$_basePath/img_empty_box.png'; - static String uploadIcon = '$_basePath/upload_image.png'; -} + static String uploadIcon = '$_basePath/img_upload.png'; + + static String icFileActivate = '$_basePath/ic_attach_activate.png'; + static String icFileInactivate = '$_basePath/ic_attach_inactivate.png'; + static String icHistoryActivate = '$_basePath/ic_history_activate.png'; + static String icHistoryInactivate = '$_basePath/ic_history_inactivate.png'; + static String icSendActivate = '$_basePath/ic_send_activate.png'; + static String icSendInactivate = '$_basePath/ic_send_inactivate.png'; + static String icSettingActivate = '$_basePath/ic_setting_activate.png'; + static String icSettingInactivate = '$_basePath/ic_setting_inactivate.png'; + static String icUserActivate = '$_basePath/ic_user_activate.png'; + static String icUserInactivate = '$_basePath/ic_user_inactivate.png'; +} \ No newline at end of file diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index 8961f4c2..ebc62408 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -39,7 +39,7 @@ class TextStrings { String hello = 'hello'; String reset = 'Reset'; String selectFiles = 'SELECT FILES'; - String selectContacts = 'SELECT CONTACT(S)'; + String selectContacts = 'SELECT CONTACTS'; //sidebar menu texts String sidebarGeneral = 'GENERAL'; diff --git a/pubspec.lock b/pubspec.lock index 572d94b0..7dabb35c 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,120 +5,105 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "569ddca58d535e601dd1584afa117710abc999d036c0cd2c51777fb257df78e8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "53.0.0" + version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "10927c4b7c7c88b1adbca278c3d5531db92e2f4b4abf04e2919a800af965f3f5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "5.5.0" + version: "4.7.0" archive: dependency: "direct main" description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.3.6" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.4.0" asn1lib: dependency: transitive description: name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.0" async: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.10.0" + version: "2.9.0" at_backupkey_flutter: dependency: "direct main" description: name: at_backupkey_flutter - sha256: "63a8fb9ba7b091aa8ff1a300509eb6933aeff02621bfbdabd738f42230f7b306" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.8" at_base2e15: dependency: transitive description: name: at_base2e15 - sha256: "06ee6ffba9b3439f1c41f9bf0c01f579ce0a8b25f42da8c374ba3a14d721937f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" at_chops: dependency: transitive description: name: at_chops - sha256: b0b3c0a80493be0e95f69cf487bfbfc0ea8c5a26b32270254f368d48d662e04d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.0.0" + version: "1.0.3" at_client: dependency: "direct overridden" description: name: at_client - sha256: "179bea8c4ecb5cf719887f2f5b806719dd6458736cbb824c29cf928129203bf5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.56" + version: "3.0.58" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - sha256: f056674b02bdf13e5442725934e834f7757abcd7062d302ec2e65e46432ca134 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.9" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - sha256: "75f7b1070d9aa5d42f9878859995f2a24654733a118012b83eb552baaba8ce13" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.11" at_commons: dependency: "direct main" description: name: at_commons - sha256: "3361a1114d8f7263e7a0e6f299247bceed7e6c9e81e9cde01525cd10085eee60" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.43" at_contact: dependency: "direct main" description: name: at_contact - sha256: "232a7dd140bd4c22f4d99c7866633338de57e50f0e1eb84e515dc1ed0f7b0fee" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.7" at_contacts_flutter: dependency: "direct main" description: name: at_contacts_flutter - sha256: "159656f0387d17471dfe90337d767a989f067de3da0bf74af0894191a4460cea" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.9" at_contacts_group_flutter: @@ -134,338 +119,310 @@ packages: dependency: transitive description: name: at_file_saver - sha256: d1d5322be265ff395b6160f8880b4ebd713b673ea739662eca463def9c588f00 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.2" at_lookup: dependency: transitive description: name: at_lookup - sha256: "77bee8af965e1c27bb372a48f961206051de6f4da27f2226c4986e592758fe76" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.35" + version: "3.0.36" at_onboarding_flutter: dependency: "direct main" description: name: at_onboarding_flutter - sha256: "57f5753460487129a306ffb523f4800146bae885968e9f3f1ec52598867998e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.5" at_persistence_secondary_server: dependency: transitive description: name: at_persistence_secondary_server - sha256: f4263138e22ab68a2bbb988e85c2c70a98171f1d9a55714fedde79bae8fbda19 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.46" + version: "3.0.52" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - sha256: "7664d3e576936f0edef642821486594c4ab86fb2678c68998d97f778d5c2a63e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.10" + version: "2.0.12" at_server_status: dependency: transitive description: name: at_server_status - sha256: "01190ba0886dfafb02a7ec247faff405527e7efaa5c21f567e4f45e10699e12d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" at_sync_ui_flutter: dependency: "direct main" description: name: at_sync_ui_flutter - sha256: "9297d27ad1219f61a13372d554d94b5610027df7bd566f08e351a7f9ea09aa17" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.8" at_utf7: dependency: transitive description: name: at_utf7 - sha256: c88e964e307bfe0e53e0048cff1ebf5ab60e23ceb4273f1ca664e724a9a5c5c9 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" at_utils: dependency: transitive description: name: at_utils - sha256: a244ea7f6411b177ba2f011d36d23ec786b0d41b0e62b58bb0e8bf9ad61cf530 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.12" biometric_storage: dependency: "direct main" description: name: biometric_storage - sha256: f6d7f5f4c28323797658423e4c5982c9dee42e18f59a8a8d4bc5df38eaf2e2f1 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.1.3" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.0" carousel_slider: dependency: "direct main" description: name: carousel_slider - sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.2.1" characters: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" charcode: dependency: transitive description: name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.1" collection: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.17.0" + version: "1.16.0" console: dependency: transitive description: name: console - sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.1.0" convert: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.1" coverage: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.6.3" cron: dependency: transitive description: name: cron - sha256: d98aa8cdad0cccdb6b098e6a1fb89339c180d8a229145fa4cd8c6fc538f0e35f - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.5.1" cross_file: dependency: transitive description: name: cross_file - sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.3+4" crypto: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.2" crypton: dependency: transitive description: name: crypton - sha256: "886462e83bf642ba10f5382002654d27da8c2e6e1f42d928f12764cfa204f124" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" csslib: dependency: transitive description: name: csslib - sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.3" dbus: dependency: transitive description: name: dbus - sha256: "253bfaa3d340778d8bc755e89c3af38e85ef95e65fd5d5670aa3167f8d4f6577" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.7.4" desktop_window: dependency: "direct main" description: name: desktop_window - sha256: "6256fb6feb7b5ec1311c76a3503f89202825bfe92c0458ec5fe7a728ffa216d5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.4.0" + ecdsa: + dependency: transitive + description: + name: ecdsa + url: "https://pub.dartlang.org" + source: hosted + version: "0.0.4" + elliptic: + dependency: transitive + description: + name: elliptic + url: "https://pub.dartlang.org" + source: hosted + version: "0.3.8" emoji_picker_flutter: dependency: transitive description: name: emoji_picker_flutter - sha256: feb141b3ab9188e33c2ec35212136ecb3f79215d881aa5af3d3e0df28f84b725 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.5.2" encrypt: dependency: transitive description: name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker - sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.6.1" file_selector: dependency: "direct main" description: name: file_selector - sha256: "9e34368bfacdf644e2c8a59e2b241cfb722bcbbd09876410e8775ae4905d6a49" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.4+3" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: c06249f2082e88aca55f4aad9e4c70ff0f2b61d753c1577d51adeab88b3f0178 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.0.3" file_selector_macos: dependency: "direct main" description: name: file_selector_macos - sha256: e87311d719039da30d26ae829aab3ae66f82deb3318cd70ffecb608c99e3da68 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.2+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "17cdfe3d13a7d3e29e3d3978577ce840fcf94497d7de51bdea378abf9a34fc2c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" file_selector_web: dependency: transitive description: name: file_selector_web - sha256: bf166d08f4c3f79286774cdfa39ed301e076c5a903c435f5199818288f24a66d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.1+5" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: "8bbcc82fe0d3cdf5ae5c289492ddfd703ec028028d9f194dbceae04cfbde1c48" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.2+2" filesystem_picker: dependency: "direct main" description: name: filesystem_picker - sha256: "41bb01c65cbd8abc389509adfbd08fc4c9090d2d4d15c5fa8813d0efd980f523" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.1" fixnum: dependency: transitive description: name: fixnum - sha256: "25517a4deb0c03aa0f32fd12db525856438902d9c16536311e76cdc57b31d7d1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.1.0" + version: "1.0.1" flutter: dependency: "direct main" description: flutter @@ -475,64 +432,56 @@ packages: dependency: transitive description: name: flutter_image_compress - sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.3" flutter_keychain: dependency: "direct main" description: name: flutter_keychain - sha256: "777ea8d3e1f55536bc8489a9ced73a912da4065645d9a1f751aae3548825b140" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.2.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "57d0012730780fe137260dd180e072c18a73fbeeb924cdc029c18aaa0f338d64" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.9.1" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.5.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: "60fc7b78455b94e6de2333d2f95196d32cf5c22f4b0b0520a628804cb463503b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.7" + version: "2.0.9" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - sha256: c7607eb808cdef19c8468246e95a133308aeaeb3971cdd9edfb9d5e31cedfbe9 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.6" flutter_test: @@ -544,8 +493,7 @@ packages: dependency: "direct main" description: name: flutter_toastr - sha256: "60e4af64bfba2c43ca4bedf09d2e84ba36ac242f0b13ac26681eb547ccd8489e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" flutter_web_plugins: @@ -557,704 +505,623 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "8.1.2" frontend_server_client: dependency: transitive description: name: frontend_server_client - sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "2.1.3" get_it: dependency: transitive description: name: get_it - sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "7.2.0" glob: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.1" google_fonts: dependency: "direct main" description: name: google_fonts - sha256: e70521755a6b08c6bde14ddae27dff5bf21010033888fc61da6c595f8a9f58c1 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.3.3" hive: dependency: transitive description: name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.2.3" html: dependency: transitive description: name: html - sha256: d9793e10dbe0e6c364f4c59bf3e01fb33a9b2a674bc7a1081693dba0614b6269 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.15.1" + version: "0.15.2" http: dependency: "direct main" description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.3.0" image_compression: dependency: transitive description: name: image_compression - sha256: "911ae4a59196ebcc33c70a38bbc1fa0e2d07243589803dd616120e1a6125bfe9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" image_picker: dependency: "direct main" description: name: image_picker - sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.6" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.6+6" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.12" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: d4cb8ab04f770dab9d04c7959e5f6d22e8c5280343d425f9344f93832cf58445 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.7+2" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.6.3" internet_connection_checker: dependency: transitive description: name: internet_connection_checker - sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0+1" intl: dependency: "direct main" description: name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.4" js: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.6.5" + version: "0.6.4" local_notifier: dependency: "direct main" description: name: local_notifier - sha256: cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.5" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.1" matcher: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.12.13" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.1.5" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.4" mocktail: dependency: transitive description: name: mocktail - sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.0" msix: dependency: "direct dev" description: name: msix - sha256: e3de4d9f52543ad6e4b0f534991e1303cbd379d24be28dd241ac60bd9439a201 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.7.0" mutex: dependency: transitive description: name: mutex - sha256: "03116a4e46282a671b46c12de649d72c0ed18188ffe12a8d0fc63e83f4ad88f4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" nested: dependency: transitive description: name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" new_version: dependency: "direct main" description: name: new_version - sha256: "2eabd66e53c882dbaab4f3f8824d139a35a0521e2e04b8fd6d9fb358112691e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.1" + ninja_asn1: + dependency: transitive + description: + name: ninja_asn1 + url: "https://pub.dartlang.org" + source: hosted + version: "2.0.0" node_preamble: dependency: transitive description: name: node_preamble - sha256: "8ebdbaa3b96d5285d068f80772390d27c21e1fa10fb2df6627b1b9415043608d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.1" + version: "2.0.2" open_file: dependency: "direct main" description: name: open_file - sha256: "5cd0288033d613ee7908aa974b7ff00805ae55d253f64d311603cf2e30613ca8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.1" package_config: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.5" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.6" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.5" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" path_provider: dependency: transitive description: name: path_provider - sha256: dcea5feb97d8abf90cab9e9030b497fb7c3cbf26b7a1fe9e3ef7dcb0a1ddec95 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.12" + version: "2.0.14" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: a776c088d671b27f6e3aa8881d64b87b3e80201c64e8869b811325de7a76c15e - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.22" + version: "2.0.24" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "62a68e7e1c6c459f9289859e2fae58290c981ce21d1697faf54910fe1faa4c74" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.2.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2e32f1640f07caef0d3cb993680f181c79e54a3827b997d5ee221490d131fbd9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.8" + version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: f0abc8ebd7253741f05488b4813d936b4d07c6bae3e86148a09e342ee4b08e76 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.5" + version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.7" pedantic: dependency: "direct main" description: name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "5749ebeb7ec0c3865ea17e3eb337174b87747be816dab582c551e1aff6f6bbf3" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.0.2+1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: "9c370ef6a18b1c4b2f7f35944d644a56aa23576f23abee654cf73968de93f163" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "9.0.7" + version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.9.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.2" petitparser: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.1.0" pin_code_fields: dependency: transitive description: name: pin_code_fields - sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "7.4.0" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: dbf0f707c78beedc9200146ad3cb0ab4d5da13c246336987be6940f026500d3a - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - sha256: db7306cf0249f838d1a24af52b5a5887c5bf7f31d8bb4e827d071dc0939ad346 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.6.2" + version: "3.7.2" pool: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.3" qr: dependency: transitive description: name: qr - sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" qr_code_scanner: dependency: transitive description: name: qr_code_scanner - sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" qr_flutter: dependency: "direct main" description: name: qr_flutter - sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.0" receive_sharing_intent: dependency: "direct main" description: name: receive_sharing_intent - sha256: "912bebb551bce75a14098891fd750305b30d53eba0d61cc70cd9973be9866e8d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.5" rxdart: dependency: "direct main" description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.27.7" share_plus: dependency: "direct main" description: name: share_plus - sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.5.3" share_plus_linux: dependency: transitive description: name: share_plus_linux - sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" share_plus_macos: dependency: transitive description: name: share_plus_macos - sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.0" share_plus_web: dependency: transitive description: name: share_plus_web - sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.0" share_plus_windows: dependency: transitive description: name: share_plus_windows - sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" shared_preferences: dependency: transitive description: name: shared_preferences - sha256: "5949029e70abe87f75cfe59d17bf5c397619c4b74a099b10116baeb34786fad9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.17" + version: "2.0.20" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: "955e9736a12ba776bdd261cf030232b30eadfcd9c79b32a3250dd4a494e8c8f7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.15" + version: "2.0.17" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "2b55c18636a4edc529fa5cd44c03d3f3100c00513f518c5127c951978efcccd0" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: f8ea038aa6da37090093974ebdcf4397010605fd2ff65c37a66f9d28394cb874 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: da9431745ede5ece47bc26d5d73a9d3c6936ef6945c101a5aca46f62e52c1cf3 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: a4b5bc37fe1b368bbc81f953197d55e12f49d0296e7e412dfe2d2d77d6929958 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.4" + version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "5eaf05ae77658d3521d0e993ede1af962d4b326cd2153d312df716dc250f00c9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.5" shelf: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.0" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" shelf_static: dependency: transitive description: name: shelf_static - sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" showcaseview: dependency: "direct main" description: name: showcaseview - sha256: "09b534d806572135c38e06901de4b36b2bbd61739ec56c5fa9242d10748e19df" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.8" sky_engine: @@ -1266,298 +1133,268 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.1" source_maps: dependency: transitive description: name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.10.12" source_span: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.9.1" + version: "1.9.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" test: dependency: transitive description: name: test - sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.22.0" + version: "1.21.4" test_api: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.4.16" + version: "0.4.12" test_core: dependency: transitive description: name: test_core - sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.4.20" + version: "0.4.16" timezone: dependency: transitive description: name: timezone - sha256: "57b35f6e8ef731f18529695bffc62f92c6189fac2e52c12d478dec1931afb66e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.0" typed_data: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - sha256: e8f2efc804810c0f2f5b485f49e7942179f56eabcfe81dce3387fec4bb55876b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.1.9" + version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: "3e2f6dfd2c7d9cd123296cab8ef66cfc2c1a13f5845f42c7a0f365690a8a7dd1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.0.23" + version: "6.0.26" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "0a5af0aefdd8cf820dd739886efb1637f1f24489900204f50984634c07a54815" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.1.0" + version: "6.1.3" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "318c42cba924e18180c029be69caf0a1a710191b9ec49bb42b5998fdcccee3cc" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "41988b55570df53b3dd2a7fc90c76756a963de6a8c5f8e113330cb35992e2094" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.2" + version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "4eae912628763eb48fc214522e58e942fd16ce195407dbf45638239523c759a6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "44d79408ce9f07052095ef1f9a693c258d6373dc3944249374e30eff7219ccb0" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.14" + version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: b6217370f8eb1fd85c8890c539f5a639a01ab209a36db82c921ebeacefc7a615 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.3" + version: "3.0.5" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.2" + version: + dependency: transitive + description: + name: version + url: "https://pub.dartlang.org" + source: hosted + version: "3.0.2" video_compress: dependency: "direct main" description: name: video_compress - sha256: "407693726e674a1e1958801deb2d9daf5a5297707ba6d03375007012dae7389a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.2" video_thumbnail: dependency: "direct main" description: name: video_thumbnail - sha256: "005bf7898bf6cddbf5f079e2618f3d3cb83dd2712714f0042b5a018c2b32e7d6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.4.6" vm_service: dependency: transitive description: name: vm_service - sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.4.0" watcher: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.3.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.9.5" win32: dependency: transitive description: name: win32 - sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.2.0+3" xml: dependency: transitive description: name: xml - sha256: "979ee37d622dec6365e2efa4d906c37470995871fe9ae080d967e192d88286b5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.2.2" + version: "6.1.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.1" zxing2: dependency: transitive description: name: zxing2 - sha256: "1913c33844c68b62573741134ef5f987f1e15e331c95ac7dc327afbb9896e9ec" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.1" sdks: - dart: ">=2.19.0 <3.0.0" + dart: ">=2.18.0 <3.0.0" flutter: ">=3.3.0" From fdafc5bb9610982512721d21e8dae97fc80b3a94 Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 3 Apr 2023 10:35:34 +0700 Subject: [PATCH 52/94] feat: add openFile func --- lib/screens/common_widgets/file_card.dart | 97 ++++++++++--------- .../widgets/welcome_sceen_home.dart | 18 ++++ 2 files changed, 70 insertions(+), 45 deletions(-) diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart index 9af3c534..a6a1ea9f 100644 --- a/lib/screens/common_widgets/file_card.dart +++ b/lib/screens/common_widgets/file_card.dart @@ -9,66 +9,73 @@ import 'package:flutter_svg/flutter_svg.dart'; class FileCard extends StatelessWidget { final PlatformFile fileDetail; final Function? deleteFunc; + final Function? onTap; FileCard({ Key? key, required this.fileDetail, this.deleteFunc, + this.onTap, }) : super(key: key); @override Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - border: Border.all( - color: ColorConstants.textBoxBg, + return InkWell( + onTap: () { + onTap?.call(); + }, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: ColorConstants.textBoxBg, + ), ), - ), - margin: EdgeInsets.fromLTRB(0, 15, 0, 0), - padding: EdgeInsets.symmetric(horizontal: 22, vertical: 12), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: Text( - fileDetail.name, - style: TextStyle( - color: Colors.black, - fontSize: 12.toFont, - fontWeight: FontWeight.w500, + margin: EdgeInsets.fromLTRB(0, 15, 0, 0), + padding: EdgeInsets.symmetric(horizontal: 22, vertical: 12), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + fileDetail.name, + style: TextStyle( + color: Colors.black, + fontSize: 12.toFont, + fontWeight: FontWeight.w500, + ), ), ), - ), - Text( - AppUtils.getFileSizeString( - bytes: fileDetail.size.toDouble(), - decimals: 2, - ), - style: TextStyle( - fontSize: 9.toFont, - color: ColorConstants.sidebarTextUnselected, + Text( + AppUtils.getFileSizeString( + bytes: fileDetail.size.toDouble(), + decimals: 2, + ), + style: TextStyle( + fontSize: 9.toFont, + color: ColorConstants.sidebarTextUnselected, + ), ), - ), - ], + ], + ), ), - ), - InkWell( - onTap: () { - deleteFunc?.call(); - }, - child: SvgPicture.asset( - AppVectors.icClose, + InkWell( + onTap: () { + deleteFunc?.call(); + }, + child: SvgPicture.asset( + AppVectors.icClose, + ), ), - ), - ], + ], + ), ), ); } diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index c4d73e9d..d59374aa 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -18,7 +18,9 @@ import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; import '../../../utils/images.dart'; @@ -111,6 +113,11 @@ class _WelcomeScreenHomeState extends State { provider.deleteFiles(index); provider.calculateSize(); }, + onTap: () { + openFile( + provider.selectedFiles[index], + ); + }, ); }, ), @@ -476,4 +483,15 @@ class _WelcomeScreenHomeState extends State { ), ); } + + openFile(PlatformFile file) async { + final result = await OpenFile.open(file.path); + + if (result.type != ResultType.done) { + SnackbarService().showSnackbar( + context, + result.message, + ); + } + } } From 89c96ca2e514a799f950a2d0cd7cd33fed3f03d0 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 12 Apr 2023 15:53:19 +0700 Subject: [PATCH 53/94] feat: edit UI HomeScreen --- assets/svg/ic_back.svg | 3 + assets/svg/ic_file.svg | 4 + assets/svg/ic_plus_11px.svg | 4 + .../common_widgets/app_bar_custom.dart | 11 +- lib/screens/common_widgets/file_card.dart | 15 +- .../welcome_screen/welcome_screen.dart | 337 +++++++++--------- .../widgets/bottom_navigation_widget.dart | 23 +- .../widgets/choice_contacts_widget.dart | 61 +++- .../welcome_screen/widgets/contact_card.dart | 9 +- .../widgets/overlapping_contacts.dart | 44 +-- .../widgets/welcome_sceen_home.dart | 10 +- lib/utils/vectors.dart | 3 + 12 files changed, 296 insertions(+), 228 deletions(-) create mode 100644 assets/svg/ic_back.svg create mode 100644 assets/svg/ic_file.svg create mode 100644 assets/svg/ic_plus_11px.svg diff --git a/assets/svg/ic_back.svg b/assets/svg/ic_back.svg new file mode 100644 index 00000000..7666374a --- /dev/null +++ b/assets/svg/ic_back.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_file.svg b/assets/svg/ic_file.svg new file mode 100644 index 00000000..8d780952 --- /dev/null +++ b/assets/svg/ic_file.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_plus_11px.svg b/assets/svg/ic_plus_11px.svg new file mode 100644 index 00000000..8a28206c --- /dev/null +++ b/assets/svg/ic_plus_11px.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index 29a395ef..011edc0b 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -12,6 +12,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { final double? height; final bool isContent; final Widget? suffixIcon; + final TextStyle? titleStyle; const AppBarCustom({ Key? key, @@ -22,6 +23,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { this.description, this.isContent = false, this.suffixIcon, + this.titleStyle, }) : super(key: key); @override @@ -48,10 +50,11 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { child: Text( title ?? '', textAlign: TextAlign.left, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, - ), + style: titleStyle ?? + TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), maxLines: 1, overflow: TextOverflow.ellipsis, ), diff --git a/lib/screens/common_widgets/file_card.dart b/lib/screens/common_widgets/file_card.dart index a6a1ea9f..671141b4 100644 --- a/lib/screens/common_widgets/file_card.dart +++ b/lib/screens/common_widgets/file_card.dart @@ -32,12 +32,19 @@ class FileCard extends StatelessWidget { color: ColorConstants.textBoxBg, ), ), - margin: EdgeInsets.fromLTRB(0, 15, 0, 0), - padding: EdgeInsets.symmetric(horizontal: 22, vertical: 12), + margin: EdgeInsets.only(bottom: 10.toHeight), + padding: EdgeInsets.fromLTRB( + 16.toWidth, + 12.toHeight, + 14.toWidth, + 12.toHeight, + ), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, children: [ + SvgPicture.asset( + AppVectors.icFile, + ), + SizedBox(width: 6.toWidth), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 3a262749..da713fc3 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -102,130 +102,127 @@ class _WelcomeScreenState extends State { @override Widget build(BuildContext context) { - return Container( - color: ColorConstants.scaffoldColor, - child: Stack( - children: [ - SafeArea( - child: Scaffold( - bottomNavigationBar: customBottomNavigationBar(), - key: _scaffoldKey, - backgroundColor: ColorConstants.scaffoldColor, - extendBody: true, - drawerScrimColor: Colors.transparent, - endDrawer: SideBarWidget( - isExpanded: true, - ), - body: Consumer( - builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[context - .watch() - .selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }, - ), + return Stack( + children: [ + SafeArea( + child: Scaffold( + bottomNavigationBar: customBottomNavigationBar(), + key: _scaffoldKey, + backgroundColor: ColorConstants.welcomeScreenBG, + extendBody: true, + drawerScrimColor: Colors.transparent, + endDrawer: SideBarWidget( + isExpanded: true, + ), + body: Consumer( + builder: (_c, provider, widget) { + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[context + .watch() + .selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }, ), ), - Consumer( - builder: (_c, welcomeProvider, _) { - return !welcomeProvider.isShowOverlay - ? SafeArea( - bottom: false, - child: Container( - height: 24, - width: double.infinity, - child: StreamBuilder( - stream: FileTransferProvider().flushBarStatusStream, - builder: (context, snapshot) { - final flushbarStatus = - snapshot.data ?? FLUSHBAR_STATUS.SENDING; + ), + Consumer( + builder: (_c, welcomeProvider, _) { + return !welcomeProvider.isShowOverlay + ? SafeArea( + bottom: false, + child: Container( + height: 24, + width: double.infinity, + child: StreamBuilder( + stream: FileTransferProvider().flushBarStatusStream, + builder: (context, snapshot) { + final flushbarStatus = + snapshot.data ?? FLUSHBAR_STATUS.SENDING; - if (flushbarStatus == FLUSHBAR_STATUS.DONE) { - Future.delayed( - const Duration(seconds: 3), - () { - welcomeScreenProvider - .changeOverlayStatus(true); - }, - ); - return Material( - child: Container( - width: double.infinity, - height: double.infinity, - color: ColorConstants.successGreen, - child: Center( - child: Text( - 'Success!🎉 ', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, - ), + if (flushbarStatus == FLUSHBAR_STATUS.DONE) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider + .changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.successGreen, + child: Center( + child: Text( + 'Success!🎉 ', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, ), ), ), - ); - } else if (flushbarStatus == - FLUSHBAR_STATUS.FAILED) { - Future.delayed( - const Duration(seconds: 3), - () { - welcomeScreenProvider - .changeOverlayStatus(true); - }, - ); - return Material( - child: Container( - width: double.infinity, - height: double.infinity, - color: ColorConstants.redAlert, - child: Center( - child: Text( - 'Something went wrong! ⚠️', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, - ), + ), + ); + } else if (flushbarStatus == + FLUSHBAR_STATUS.FAILED) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider + .changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.redAlert, + child: Center( + child: Text( + 'Something went wrong! ⚠️', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, ), ), ), - ); - } else { - return Consumer( - builder: (_c, provider, _) { - var percent = (provider - .sentFileTransferProgress - ?.percent ?? - 30) / - 100; - return ProgressBarAnimation( - value: percent, - gradient: const LinearGradient( - colors: [ - Color(0xFFF05E3F), - Color(0xFFEAA743), - ], - ), - // backgroundColor: Colors.red, - ); - }, - ); - } - }, - ), + ), + ); + } else { + return Consumer( + builder: (_c, provider, _) { + var percent = (provider + .sentFileTransferProgress + ?.percent ?? + 30) / + 100; + return ProgressBarAnimation( + value: percent, + gradient: const LinearGradient( + colors: [ + Color(0xFFF05E3F), + Color(0xFFEAA743), + ], + ), + // backgroundColor: Colors.red, + ); + }, + ); + } + }, ), - ) - : SizedBox(); - }, - ), - ], - ), + ), + ) + : SizedBox(); + }, + ), + ], ); } @@ -233,8 +230,7 @@ class _WelcomeScreenState extends State { return Consumer( builder: (context, provider, _) { return Selector( - selector: (context, provider) => - provider.selectedBottomNavigationIndex, + selector: (context, provider) => provider.selectedBottomNavigationIndex, builder: (context, selectedBottomNavigationIndex, _) { return Container( height: 74, @@ -247,61 +243,70 @@ class _WelcomeScreenState extends State { child: Padding( padding: const EdgeInsets.only(left: 15, right: 15.0), child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ - BottomNavigationWidget( - iconActivate: ImageConstants.icUserActivate, - iconInactivate: ImageConstants.icUserInactivate, - title: "Contacts", - index: 1, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, + Expanded( + child: BottomNavigationWidget( + iconActivate: ImageConstants.icUserActivate, + iconInactivate: ImageConstants.icUserInactivate, + title: "Contacts", + index: 1, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), ), - BottomNavigationWidget( - iconActivate: ImageConstants.icFileActivate, - iconInactivate: ImageConstants.icFileInactivate, - title: "Files", - index: 2, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, + Expanded( + child: BottomNavigationWidget( + iconActivate: ImageConstants.icFileActivate, + iconInactivate: ImageConstants.icFileInactivate, + title: "Files", + index: 2, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), ), - BottomNavigationWidget( - iconActivate: ImageConstants.icSendActivate, - iconInactivate: ImageConstants.icSendInactivate, - index: 0, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, + Expanded( + child: BottomNavigationWidget( + iconActivate: ImageConstants.icSendActivate, + iconInactivate: ImageConstants.icSendInactivate, + index: 0, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), ), - BottomNavigationWidget( - iconActivate: ImageConstants.icHistoryActivate, - iconInactivate: ImageConstants.icHistoryInactivate, - title: "History", - index: 3, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, + Expanded( + child: BottomNavigationWidget( + iconActivate: ImageConstants.icHistoryActivate, + iconInactivate: ImageConstants.icHistoryInactivate, + title: "History", + index: 3, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), ), - BottomNavigationWidget( - iconActivate: ImageConstants.icSettingActivate, - iconInactivate: ImageConstants.icSettingInactivate, - title: "Settings", - index: 4, - indexSelected: selectedBottomNavigationIndex, - onTap: (index) { - welcomeScreenProvider - .changeBottomNavigationIndex(index); - }, + Expanded( + child: BottomNavigationWidget( + iconActivate: ImageConstants.icSettingActivate, + iconInactivate: ImageConstants.icSettingInactivate, + title: "Settings", + index: 4, + indexSelected: selectedBottomNavigationIndex, + onTap: (index) { + welcomeScreenProvider + .changeBottomNavigationIndex(index); + }, + ), ), ], ), diff --git a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart index 1a08b316..58ee8146 100644 --- a/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart +++ b/lib/screens/welcome_screen/widgets/bottom_navigation_widget.dart @@ -29,19 +29,22 @@ class BottomNavigationWidget extends StatelessWidget { children: [ Image.asset( indexSelected == index ? iconActivate : iconInactivate, - height: 25, + height: title.isNotEmpty ? 25 : null, ), - SizedBox(height: 3), - Text( - title, - style: TextStyle( - fontSize: 10.toFont, - color: indexSelected == index ? Colors.black : Color(0xFFAEAEAE), - fontWeight: FontWeight.w500, + if (title.isNotEmpty) ...[ + SizedBox(height: 3), + Text( + title, + style: TextStyle( + fontSize: 10.toFont, + color: + indexSelected == index ? Colors.black : Color(0xFFAEAEAE), + fontWeight: FontWeight.w500, + ), ), - ), + ], ], ), ); } -} +} \ No newline at end of file diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index d2908672..82fb6612 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -1,5 +1,7 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/add_contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; @@ -22,9 +24,11 @@ class ChoiceContactsWidget extends StatefulWidget { class _ChoiceContactsWidgetState extends State { late TrustedContactProvider trustedProvider; late List listContact; + late GroupService _groupService; @override void initState() { + _groupService = GroupService(); trustedProvider = context.read(); listContact = widget.selectedContacts ?? []; super.initState(); @@ -126,26 +130,61 @@ class _ChoiceContactsWidgetState extends State { Widget _buildHeaderWidget() { return Padding( - padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + padding: const EdgeInsets.fromLTRB(18, 14, 18, 0), child: Row( children: [ - Container( - height: 2, - width: 45, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(20), + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Padding( + padding: EdgeInsets.symmetric(vertical: 10, horizontal: 6), + child: SvgPicture.asset( + AppVectors.icBack, + ), ), ), const Spacer(), Align( alignment: Alignment.topRight, child: InkWell( - onTap: () { - Navigator.of(context).pop(); + onTap: () async { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return AddContactScreen(); + }, + ); + if (result == true) { + _groupService.fetchGroupsAndContacts(); + } }, - child: SvgPicture.asset( - AppVectors.icClose, + child: Container( + height: 34, + margin: EdgeInsets.only(top: 10, right: 8), + padding: EdgeInsets.symmetric(horizontal: 20), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(20), + ), + child: Row( + children: [ + Text( + "Add New", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + ), + ), + SizedBox(width: 9), + SvgPicture.asset( + AppVectors.icPlus11px, + ), + ], + ), ), ), ), diff --git a/lib/screens/welcome_screen/widgets/contact_card.dart b/lib/screens/welcome_screen/widgets/contact_card.dart index c8f44ef5..f5377571 100644 --- a/lib/screens/welcome_screen/widgets/contact_card.dart +++ b/lib/screens/welcome_screen/widgets/contact_card.dart @@ -67,8 +67,13 @@ class _ContactCardState extends State { widget.onTap?.call(); }, child: Container( - padding: const EdgeInsets.fromLTRB(20, 13, 12, 13), - margin: const EdgeInsets.only(bottom: 12), + padding: EdgeInsets.fromLTRB( + 20.toWidth, + 12.toHeight, + 14.toWidth, + 12.toHeight, + ), + margin: EdgeInsets.only(bottom: 10.toHeight), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), border: Border.all( diff --git a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart index 4a700463..4376de2d 100644 --- a/lib/screens/welcome_screen/widgets/overlapping_contacts.dart +++ b/lib/screens/welcome_screen/widgets/overlapping_contacts.dart @@ -62,46 +62,38 @@ class _OverlappingContactsState extends State { itemBuilder: (context, index) { Uint8List? image = _atsignImages[widget.selectedList[index]?.contact?.atSign]; + final contactSelected = provider.selectedContacts[index]; return widget.selectedList[index]?.contact != null - ? Padding( - padding: const EdgeInsets.only(right: 8, top: 4), - child: ContactCard( - key: Key( - widget.selectedList[index]!.contact!.atSign ?? ''), - contact: widget.selectedList[index]!.contact!, - isTrusted: _checkTrustedContact( - widget.selectedList[index]!.contact!), - deleteFunc: () { - provider - .removeContacts(provider.selectedContacts[index]); - }, - ), + ? ContactCard( + key: Key(widget.selectedList[index]!.contact!.atSign ?? ''), + contact: widget.selectedList[index]!.contact!, + isTrusted: _checkTrustedContact( + widget.selectedList[index]!.contact!), + deleteFunc: () { + provider.removeContacts(contactSelected); + }, ) : ContactListTile( - isSelected: provider.selectedContacts - .contains(provider.selectedContacts[index]), + isSelected: + provider.selectedContacts.contains(contactSelected), onAdd: () {}, onRemove: () { - provider.removeContacts(provider.selectedContacts[index]); + provider.removeContacts(contactSelected); widget.onchange!(true); }, - name: provider.selectedContacts[index].contact?.atSign - ?.substring(1) ?? - provider.selectedContacts[index].group?.groupName - ?.substring(0), - atSign: provider.selectedContacts[index].contact?.atSign ?? - '${provider.selectedContacts[index].group?.members?.length.toString()} Members', + name: contactSelected.contact?.atSign?.substring(1) ?? + contactSelected.group?.groupName?.substring(0), + atSign: contactSelected.contact?.atSign ?? + '${contactSelected.group?.members?.length.toString()} Members', image: (image != null) ? CustomCircleAvatar( byteImage: image, nonAsset: true, ) : ContactInitial( - initials: provider - .selectedContacts[index].contact?.atSign ?? - provider - .selectedContacts[index].group?.groupName, + initials: contactSelected.contact?.atSign ?? + contactSelected.group?.groupName, ), ); }, diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index d59374aa..fad1c950 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -63,6 +63,10 @@ class _WelcomeScreenHomeState extends State { height: 130, title: "${BackendService.getInstance().currentAtSign ?? ''} ", description: '', + titleStyle: TextStyle( + fontSize: 25.toFont, + fontWeight: FontWeight.w600, + ), ), body: Container( decoration: BoxDecoration( @@ -122,7 +126,6 @@ class _WelcomeScreenHomeState extends State { }, ), ), - SizedBox(height: 10.toHeight), _buildAddFilesOption() ], ); @@ -195,9 +198,6 @@ class _WelcomeScreenHomeState extends State { return provider.selectedContacts.isNotEmpty ? OverlappingContacts( selectedList: provider.selectedContacts, - onchange: (isUpdate) { - setState(() {}); - }, ) : SizedBox(); }, @@ -322,7 +322,7 @@ class _WelcomeScreenHomeState extends State { ), alignment: Alignment.centerLeft, child: Padding( - padding: EdgeInsets.only(left: 20.toWidth, right: 20.toWidth), + padding: EdgeInsets.symmetric(horizontal: 20.toWidth), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index f8af530a..5322f733 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -25,4 +25,7 @@ class AppVectors { static String icImage = '$_basePath/ic_image.svg'; static String icClose = '$_basePath/ic_close.svg'; static String icTrustActivated = '$_basePath/ic_trust_activated.svg'; + static String icFile = '$_basePath/ic_file.svg'; + static String icBack = '$_basePath/ic_back.svg'; + static String icPlus11px = '$_basePath/ic_plus_11px.svg'; } From 492586836911d25c9b0cbe84a1025c7792510df2 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 26 Apr 2023 09:51:47 +0700 Subject: [PATCH 54/94] feat: upgrade UI Contact Screen --- assets/images/2x/ic_image.png | Bin 0 -> 1860 bytes assets/images/3x/ic_image.png | Bin 0 -> 2812 bytes assets/images/ic_image.png | Bin 0 -> 977 bytes ios/Podfile.lock | 2 +- lib/data_models/enums/contact_type.dart | 15 +- .../common_widgets/app_bar_custom.dart | 70 ++-- lib/screens/common_widgets/input_widget.dart | 79 ++++ lib/screens/common_widgets/search_widget.dart | 83 ++++ .../add_contact_screen.dart | 189 ++++----- .../contact_new_version/contact_screen.dart | 352 ++++++++++------- .../create_group_screen.dart | 366 ++++++++---------- .../trusted_contact_screen.dart | 318 +++++++-------- .../widget/contacts_widget.dart | 65 ++-- .../widget/empty_contact_widget.dart | 116 ++++++ .../widget/list_contact_widget.dart | 53 +-- .../welcome_screen/welcome_screen.dart | 45 ++- .../widgets/welcome_sceen_home.dart | 2 +- lib/utils/colors.dart | 6 +- lib/utils/images.dart | 1 + lib/utils/vectors.dart | 1 + 20 files changed, 1042 insertions(+), 721 deletions(-) create mode 100644 assets/images/2x/ic_image.png create mode 100644 assets/images/3x/ic_image.png create mode 100644 assets/images/ic_image.png create mode 100644 lib/screens/common_widgets/input_widget.dart create mode 100644 lib/screens/common_widgets/search_widget.dart create mode 100644 lib/screens/contact_new_version/widget/empty_contact_widget.dart diff --git a/assets/images/2x/ic_image.png b/assets/images/2x/ic_image.png new file mode 100644 index 0000000000000000000000000000000000000000..b5f0b8f0a0f6d9b2fe5d7364d0b39871f8f28ec3 GIT binary patch literal 1860 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 O0000bRuoNa zX@f~MHGiOz(#KOWtFq6rIF>TN1^BOsrLZOiK zcswU7D=Sgsp2ELoW@f?|!sId(MMo6_TrT%@ zb8|DMU0htWVe!SA*VosDwY9a6*^jCm@R zDvr{ddTD8i-R3(uILPnp>}1GcmC^wXNNa_ zE-x?tCP`QXhZB3E+J+E)(TEt;tA5Yk_5ZEyBhC_%5bW?AXR-eHa7N@ zEFzu$AcpsXrTxHgIBjolONlVx0*qqoK?D0k_HRr*(g;S16@`<4uochP7J^vz@=rZ` zWr`)6uxDgbvn?Sk0GmC6Ix{>vIvS|9*GjQ=;nZ9@!3wb~q~wJ`h|nP>pzHcuEW9j6 zlwunoTQIH*)wdD zO|h*&$|Ee|`1p8G)F5)G(Jdl#LM+BSL^Lzzn~qtF(u$4S5`;pqi3i*uf-yT-IpP>A zLrYtf|H+*Yry)$gC~k+U@nZOv!8u5H_7MufdElH}f-6G{*;J{%r=ig+zs^CwRa&|$L=(be5K(34MPxdpIipN6uG*(`n[ + Expanded( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + title ?? '', + textAlign: TextAlign.left, + style: titleStyle ?? + TextStyle( + fontSize: 25.toFont, + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ), - SizedBox(width: 12), - Text( - description ?? '', - textAlign: TextAlign.left, - style: TextStyle( - fontSize: 15.toFont, - fontWeight: FontWeight.w500, + SizedBox(width: 12), + Text( + description ?? '', + textAlign: TextAlign.left, + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ], + ), ), - maxLines: 1, - overflow: TextOverflow.ellipsis, - ), - ], + suffixIcon ?? SizedBox(), + ], + ), ), ), - suffixIcon ?? SizedBox(), ], ), ); diff --git a/lib/screens/common_widgets/input_widget.dart b/lib/screens/common_widgets/input_widget.dart new file mode 100644 index 00000000..ea6b8457 --- /dev/null +++ b/lib/screens/common_widgets/input_widget.dart @@ -0,0 +1,79 @@ +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_outline_input_border.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class InputWidget extends StatefulWidget { + final String? hintText; + final TextStyle? hintTextStyle; + final TextEditingController? controller; + final Function(String value)? onchange; + final Function(String value)? onSubmitted; + final String? prefixText; + final TextStyle? prefixStyle; + + const InputWidget({ + Key? key, + this.hintText, + this.controller, + this.hintTextStyle, + this.onchange, + this.onSubmitted, + this.prefixText, + this.prefixStyle, + }) : super(key: key); + + @override + State createState() => _InputWidgetState(); +} + +class _InputWidgetState extends State { + @override + Widget build(BuildContext context) { + return Container( + height: 59.toHeight, + alignment: Alignment.centerLeft, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + child: TextFormField( + controller: widget.controller, + onChanged: (value) { + widget.onchange?.call(value); + }, + onFieldSubmitted: (value) { + widget.onSubmitted?.call(value); + }, + style: TextStyle( + fontSize: 14.toFont, + ), + decoration: InputDecoration( + prefixText: widget.prefixText, + prefixStyle: widget.prefixStyle, + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(5), + borderSide: BorderSide( + width: 1, + color: Colors.white, + ), + ), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.circular(5), + borderSide: BorderSide( + width: 1, + color: Colors.white, + ), + ), + hintText: widget.hintText, + hintStyle: widget.hintTextStyle ?? + TextStyle( + fontSize: 14.toFont, + fontWeight: FontWeight.w400, + color: ColorConstants.grey, + ), + ), + ), + ); + } +} diff --git a/lib/screens/common_widgets/search_widget.dart b/lib/screens/common_widgets/search_widget.dart new file mode 100644 index 00000000..75e90b5e --- /dev/null +++ b/lib/screens/common_widgets/search_widget.dart @@ -0,0 +1,83 @@ +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:flutter/material.dart'; + +import '../../utils/colors.dart'; + +class SearchWidget extends StatefulWidget { + final Color? backgroundColor, borderColor; + final TextEditingController controller; + final String? hintText; + final TextStyle? hintStyle; + final EdgeInsetsGeometry? margin; + + const SearchWidget({ + Key? key, + this.backgroundColor, + this.borderColor, + required this.controller, + this.hintText, + this.hintStyle, + this.margin, + }) : super(key: key); + + @override + State createState() => _SearchWidgetState(); +} + +class _SearchWidgetState extends State { + @override + Widget build(BuildContext context) { + return Container( + height: 44.toHeight, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: widget.backgroundColor, + ), + margin: widget.margin ?? + EdgeInsets.symmetric( + horizontal: 32.toWidth, + vertical: 18.toHeight, + ), + child: TextFormField( + controller: widget.controller, + onChanged: (value) { + setState(() {}); + }, + decoration: InputDecoration( + enabledBorder: OutlineInputBorder( + borderSide: BorderSide( + width: 1, + color: widget.borderColor ?? ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(10), + ), + focusedBorder: OutlineInputBorder( + borderSide: BorderSide( + width: 1, + color: widget.borderColor ?? ColorConstants.grey, + ), + borderRadius: BorderRadius.circular(10), + ), + contentPadding: const EdgeInsets.only(top: 12, left: 14), + hintStyle: widget.hintStyle ?? + TextStyle( + fontSize: 14.toFont, + color: ColorConstants.grey, + fontWeight: FontWeight.normal, + ), + suffixIcon: const Icon( + Icons.search, + color: ColorConstants.darkSliver, + ), + hintText: widget.hintText ?? 'Search by atSign or nickname', + ), + textInputAction: TextInputAction.search, + style: TextStyle( + fontSize: 14.toFont, + color: ColorConstants.fontPrimary, + fontWeight: FontWeight.w500, + ), + ), + ); + } +} diff --git a/lib/screens/contact_new_version/add_contact_screen.dart b/lib/screens/contact_new_version/add_contact_screen.dart index 0ea56572..916f3ea1 100644 --- a/lib/screens/contact_new_version/add_contact_screen.dart +++ b/lib/screens/contact_new_version/add_contact_screen.dart @@ -1,9 +1,12 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_text_field_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/input_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class AddContactScreen extends StatefulWidget { @@ -35,56 +38,61 @@ class _AddContactScreenState extends State { return Scaffold( backgroundColor: Colors.transparent, resizeToAvoidBottomInset: false, - body: Align( - alignment: Alignment.bottomCenter, - child: Container( - margin: EdgeInsets.only(top: 120), - width: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], + body: Container( + margin: EdgeInsets.only(top: 60), + width: double.infinity, + decoration: BoxDecoration( + color: ColorConstants.culturedColor, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: SafeArea( child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ - Container( - height: 2, - width: 45, - margin: const EdgeInsets.only(left: 27, top: 38), - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(20), + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Padding( + padding: EdgeInsets.only(left: 31, top: 36), + child: SvgPicture.asset( + AppVectors.icBack, + ), + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + vertical: 24, + horizontal: 38, + ), + child: Text( + "Add New Contact", + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.w500, + color: Colors.black, + ), ), ), - const SizedBox(height: 24), Expanded( child: Stack( children: [ Padding( - padding: const EdgeInsets.symmetric(horizontal: 27), + padding: const EdgeInsets.symmetric(horizontal: 23), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - "Add Contact", - style: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - const SizedBox(height: 53), - GradientTextFieldWidget( + InputWidget( hintText: 'Enter atSign', controller: atSignController, prefixText: "@", @@ -110,40 +118,44 @@ class _AddContactScreenState extends State { ), ), ), - const SizedBox(height: 24), - GradientTextFieldWidget( + const SizedBox(height: 16), + InputWidget( hintText: 'Enter nickname', controller: nicknameController, onSubmitted: (value) { _checkValid(); }, ), - const SizedBox(height: 44), + const SizedBox(height: 30), Container( height: 1, decoration: BoxDecoration( - color: ColorConstants.darkGray, + color: ColorConstants.lightGray, ), ), - const SizedBox(height: 24), - Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "atSign valid", - style: TextStyle( - fontSize: 14.toFont, - fontWeight: FontWeight.w500, + const SizedBox(height: 28), + Align( + alignment: Alignment.center, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "atSign valid", + style: TextStyle( + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + ), ), - ), - const SizedBox(width: 10), - Icon( - Icons.check_circle_outlined, - color: state.isVerify - ? Colors.green - : ColorConstants.darkGray, - ) - ], + const SizedBox(width: 4), + Icon( + Icons.check_circle_outlined, + size: 23, + color: state.isVerify + ? Colors.green + : Colors.black, + ) + ], + ), ), ], ), @@ -160,40 +172,37 @@ class _AddContactScreenState extends State { ], ), ), - SafeArea( - top: false, - child: Padding( - padding: const EdgeInsets.fromLTRB(27, 0, 27, 40), - child: InkWell( - onTap: () async { - if (addContactProvider.isVerify) { - var response = await addContactProvider.addContact( - atSign: atSignController.text, - nickname: nicknameController.text, - ); + Padding( + padding: const EdgeInsets.fromLTRB(27, 0, 27, 16), + child: InkWell( + onTap: () async { + if (addContactProvider.isVerify) { + var response = await addContactProvider.addContact( + atSign: atSignController.text, + nickname: nicknameController.text, + ); - if (response ?? false) { - Navigator.of(context).pop(true); - } + if (response ?? false) { + Navigator.of(context).pop(true); } - }, - child: Container( - height: 60.toHeight, - width: double.infinity, - decoration: BoxDecoration( - color: !state.isVerify - ? ColorConstants.buttonGrey - : Colors.black, - borderRadius: BorderRadius.circular(8), - ), - child: Center( - child: Text( - "Create New Contact", - style: TextStyle( - color: Colors.white, - fontSize: 16.toFont, - fontWeight: FontWeight.bold, - ), + } + }, + child: Container( + height: 51.toHeight, + width: double.infinity, + decoration: BoxDecoration( + color: !state.isVerify + ? ColorConstants.buttonGrey + : Colors.black, + borderRadius: BorderRadius.circular(8), + ), + child: Center( + child: Text( + "Add Contact", + style: TextStyle( + color: Colors.white, + fontSize: 16.toFont, + fontWeight: FontWeight.bold, ), ), ), diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index 25d021cf..89615eb5 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -1,18 +1,16 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/add_contact_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/blocked_contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/group_contact_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/trusted_contact_screen.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; -import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; class ContactScreen extends StatefulWidget { @@ -22,184 +20,244 @@ class ContactScreen extends StatefulWidget { State createState() => _ContactScreenState(); } -class _ContactScreenState extends State { +class _ContactScreenState extends State + with SingleTickerProviderStateMixin { late TrustedContactProvider trustedProvider; late GroupService _groupService; + late TabController _tabController; + late TextEditingController searchController; + int indexTab = 0; @override void initState() { trustedProvider = context.read(); _groupService = GroupService(); + _tabController = TabController(length: 3, initialIndex: 0, vsync: this); + searchController = TextEditingController(); super.initState(); } @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: ColorConstants.background, appBar: AppBarCustom( - height: 130, title: "Contacts", - description: '${_groupService.listContact.length}', suffixIcon: Padding( padding: const EdgeInsets.only(right: 30), child: InkWell( onTap: () async { - final result = await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return AddContactScreen(); - }, - ); - if (result == true) { - reloadPage(); + if (indexTab == 2) { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return CreateGroupScreen( + trustContacts: trustedProvider.trustedContacts, + ); + }, + ); + + if (result == true) { + await _groupService.fetchGroupsAndContacts(); + setState(() {}); + } + } else { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return AddContactScreen(); + }, + ); + + if (result == true) { + reloadPage(); + } } }, - child: SvgPicture.asset( - AppVectors.icAdd, - ), - ), - ), - ), - body: Stack( - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - ImageConstants.welcomeBackground, + child: Container( + decoration: BoxDecoration( + color: ColorConstants.orange, + borderRadius: BorderRadius.circular(46), + ), + padding: EdgeInsets.symmetric( + horizontal: 13, + vertical: 8, + ), + child: Text( + indexTab == 2 ? "Add Group" : "Add Contact", + style: TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w500, ), - fit: BoxFit.fill, ), ), ), - buildBody(), - ], + ), ), + body: buildBody(), ); } Widget buildBody() { - return Column( - children: [ - Padding( - padding: const EdgeInsets.symmetric(horizontal: 30), - child: Row( - children: [ - _buildHeaderItem( - title: 'Blocked atSign', - icon: AppVectors.icBlock, - onTap: () async { - await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return BlockedContactScreen(); - }, - ); - reloadPage(); - }, - ), - _buildHeaderItem( - title: 'Trusted Senders', - icon: AppVectors.icTrust, - onTap: () async { - await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return TrustedContactScreen(); - }, - ); - reloadPage(); - }, - ), - _buildHeaderItem( - title: 'My Groups', - icon: AppVectors.icContactGroup, - onTap: () { - return showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return GroupContactScreen(); - }, - ); - }, + return InkWell( + highlightColor: Colors.transparent, + splashColor: Colors.transparent, + onTap: () { + FocusScopeNode currentFocus = FocusScope.of(context); + if (!currentFocus.hasPrimaryFocus) { + currentFocus.unfocus(); + } + }, + child: Column( + children: [ + SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.fromLTRB( + 36.toWidth, + 24.toHeight, + 36.toWidth, + 0, + ), + ), + Container( + height: 56.toHeight, + decoration: BoxDecoration( + color: ColorConstants.backgroundTab, + borderRadius: BorderRadius.circular(8), + ), + margin: EdgeInsets.symmetric( + horizontal: 36, + vertical: 16, + ), + child: TabBar( + controller: _tabController, + indicatorColor: Colors.transparent, + padding: EdgeInsets.symmetric( + horizontal: 13.toWidth, + vertical: 7.toHeight, ), - ], + labelPadding: EdgeInsets.zero, + physics: const ClampingScrollPhysics(), + tabs: [ + _buildTabBarItem(index: 0, currentIndex: indexTab), + _buildTabBarItem(index: 1, currentIndex: indexTab), + _buildTabBarItem(index: 2, currentIndex: indexTab), + ], + onTap: (index) { + setState(() { + indexTab = index; + }); + }, + ), ), - ), - Expanded( - child: ListContactWidget( - trustedContacts: trustedProvider.trustedContacts, - onTapContact: (contact) async { - final result = await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return ContactDetailScreen( - contact: contact, - ); - }, - ); - if (result != false) { - reloadPage(); - } - }, + Expanded( + child: TabBarView( + controller: _tabController, + physics: NeverScrollableScrollPhysics(), + children: [ + ListContactWidget( + contactsType: ContactsType.contact, + isShowHeader: false, + trustedContacts: trustedProvider.trustedContacts, + onTapContact: (contact) async { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return ContactDetailScreen( + contact: contact, + ); + }, + ); + if (result != false) { + reloadPage(); + } + }, + ), + ListContactWidget( + contactsType: ContactsType.trusted, + isShowHeader: false, + isOnlyShowContactTrusted: true, + trustedContacts: trustedProvider.trustedContacts, + onTapContact: (contact) async { + await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return ContactDetailScreen( + contact: contact, + onTrustFunc: () { + Navigator.of(context).pop(); + }, + ); + }, + ); + }, + ), + ListContactWidget( + contactsType: ContactsType.groups, + isShowHeader: false, + showGroups: true, + showContacts: false, + onTapGroup: (group) async { + WidgetsBinding.instance.addPostFrameCallback((_) async { + _groupService.groupViewSink.add(group); + }); + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => GroupView( + group: group, + ), + ), + ); + }, + ), + ], + ), ), - ), - SizedBox(height: 80), - ], + ], + ), ); } - Widget _buildHeaderItem({ - required String title, - required String icon, - required Function onTap, + Widget _buildTabBarItem({ + required int index, + required int currentIndex, }) { - return Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 15), - child: InkWell( - onTap: () { - onTap.call(); - }, - child: Container( - padding: EdgeInsets.symmetric(horizontal: 4, vertical: 12), - decoration: BoxDecoration( - color: ColorConstants.fadedGreyN, - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(8), - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.asset(icon), - SizedBox(height: 8), - Text( - title, - style: TextStyle( - fontSize: 13.toFont, - fontWeight: FontWeight.w500, - color: ColorConstants.grey, - ), - textAlign: TextAlign.center, - ) - ], + final bool isCurrentTab = index == currentIndex; + return Tab( + child: Container( + decoration: BoxDecoration( + color: isCurrentTab ? ColorConstants.yellow : Colors.transparent, + borderRadius: BorderRadius.circular(125), + ), + child: Center( + child: Text( + ContactsType.values[index].display, + style: TextStyle( + color: isCurrentTab ? Colors.white : Colors.black, + fontSize: 12, + fontWeight: FontWeight.w500, ), ), ), diff --git a/lib/screens/contact_new_version/create_group_screen.dart b/lib/screens/contact_new_version/create_group_screen.dart index e0d573ca..224e47f2 100644 --- a/lib/screens/contact_new_version/create_group_screen.dart +++ b/lib/screens/contact_new_version/create_group_screen.dart @@ -1,14 +1,20 @@ import 'dart:io'; import 'dart:typed_data'; +import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_commons/at_commons.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_toast.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/input_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:image_picker/image_picker.dart'; class CreateGroupScreen extends StatefulWidget { @@ -26,13 +32,15 @@ class CreateGroupScreen extends StatefulWidget { class _CreateGroupScreenState extends State { List listContact = []; late TextEditingController groupNameController; - Uint8List? selectedImageByteData; + late TextEditingController searchController; late GroupService _groupService; bool isLoading = false; + Uint8List? selectedImageByteData; @override void initState() { groupNameController = TextEditingController(); + searchController = TextEditingController(); _groupService = GroupService(); super.initState(); } @@ -41,205 +49,171 @@ class _CreateGroupScreenState extends State { Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.transparent, - body: SafeArea( - bottom: false, - child: Container( - height: double.infinity, - width: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], + body: Container( + margin: EdgeInsets.only(top: 60), + decoration: BoxDecoration( + color: ColorConstants.culturedColor, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), ), - child: Stack( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), - child: Row( + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], + ), + child: Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Padding( + padding: EdgeInsets.only(left: 31, top: 36), + child: SvgPicture.asset( + AppVectors.icBack, + ), + ), + ), + Padding( + padding: const EdgeInsets.only( + top: 24, + left: 38, + bottom: 14, + ), + child: Text( + "Add New Group", + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + ), + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Container( - height: 2, - width: 45, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(20), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 27, ), - ), - const Spacer(), - Align( - alignment: Alignment.topRight, - child: InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - height: 31, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric( - horizontal: 30, - ), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(28), - ), - child: Center( - child: Text( - "Close", - style: TextStyle( - fontSize: 17, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), + child: InputWidget( + hintText: 'Group Name', + controller: groupNameController, + hintTextStyle: TextStyle( + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, ), ), ), - ], - ), - ), - const SizedBox(height: 24), - Expanded( - child: SingleChildScrollView( - padding: EdgeInsets.zero, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - const Padding( - padding: EdgeInsets.only(left: 27), - child: Text( - "New Group", - style: TextStyle( - fontSize: 25, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), + _buildImage(), + Padding( + padding: const EdgeInsets.only( + top: 22, + left: 31, ), - const SizedBox(height: 18), - Container( - height: 48, - margin: const EdgeInsets.symmetric(horizontal: 27), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - padding: const EdgeInsets.symmetric(horizontal: 12), - child: Center( - child: TextField( - controller: groupNameController, - decoration: InputDecoration.collapsed( - hintText: 'Group Name', - hintStyle: TextStyle( - color: ColorConstants.grey, - fontSize: 14, - fontWeight: FontWeight.w500, - fontStyle: FontStyle.italic, - ), - ), - onChanged: (value) { - setState(() {}); - }, - ), + child: Text( + "Select Members ${listContact.isNotEmpty ? listContact.length : ''}", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.black, ), ), - _buildImage(), - Padding( - padding: const EdgeInsets.only( - top: 8, bottom: 15, left: 27), - child: Text( - "Select Members ${listContact.isNotEmpty ? listContact.length : ''}", - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), + ), + SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, ), - Flexible( - child: ListContactWidget( - trustedContacts: widget.trustContacts, - isSelectMultiContacts: true, - onSelectContacts: (contacts) { - setState(() { - listContact = []; - for (var element in contacts) { - listContact.add(element.contact!); - } - }); - }, - ), + margin: EdgeInsets.fromLTRB( + 28.toWidth, + 8.toHeight, + 28.toWidth, + 14.toHeight, ), - ], - ), + ), + Flexible( + child: ListContactWidget( + isShowHeader: false, + trustedContacts: widget.trustContacts, + isSelectMultiContacts: true, + onSelectContacts: (contacts) { + setState(() { + listContact = []; + for (var element in contacts) { + listContact.add(element.contact!); + } + }); + }, + ), + ), + ], ), ), - SafeArea( - child: Padding( - padding: const EdgeInsets.only(bottom: 24, top: 18), - child: InkWell( - onTap: () { - createGroup(); - }, - child: Container( - height: 67, - margin: const EdgeInsets.symmetric(horizontal: 27), - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: ColorConstants.buttonGrey, - gradient: groupNameController.text.isNotEmpty && - listContact.isNotEmpty - ? LinearGradient( - colors: [ - ColorConstants.orange, - ColorConstants.yellow.withOpacity(0.65), - ], - ) - : null, - ), - child: const Center( - child: Text( - "Create Group", - style: TextStyle( - color: Colors.white, - fontSize: 20, - fontWeight: FontWeight.bold, - ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 16, + ), + child: InkWell( + onTap: () { + createGroup(); + }, + child: Container( + height: 51.toHeight, + margin: const EdgeInsets.symmetric(horizontal: 27), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: groupNameController.text.isNotEmpty && + listContact.isNotEmpty + ? Colors.black + : ColorConstants.buttonGrey, + ), + child: const Center( + child: Text( + "Create Group", + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.bold, ), ), ), ), ), ), - ], - ), - isLoading - ? Align( - alignment: Alignment.center, - child: CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation( - ColorConstants.orange, - ), + ), + ], + ), + isLoading + ? Align( + alignment: Alignment.center, + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, ), - ) - : const SizedBox(), - ], - ), + ), + ) + : const SizedBox(), + ], ), ), ); @@ -258,27 +232,21 @@ class _CreateGroupScreenState extends State { } }, child: Container( - height: 117, + height: 89, width: double.infinity, - margin: const EdgeInsets.symmetric( - horizontal: 27, - vertical: 15, - ), + margin: const EdgeInsets.fromLTRB(27, 14, 27, 0), decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: ColorConstants.textBoxBg, - image: selectedImageByteData != null - ? DecorationImage( - image: Image.memory(selectedImageByteData!).image, - fit: BoxFit.cover, - ) - : null, - border: Border.all( - color: ColorConstants.grey, - ), + color: Color(0xFFECECEC), ), child: selectedImageByteData != null - ? const SizedBox() + ? ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Image.memory( + selectedImageByteData!, + fit: BoxFit.cover, + ), + ) : Center( child: Column( mainAxisSize: MainAxisSize.min, @@ -291,9 +259,9 @@ class _CreateGroupScreenState extends State { color: ColorConstants.grey, ), ), - const Icon( - Icons.image_rounded, - size: 60, + SizedBox(height: 8), + Image.asset( + ImageConstants.icImage, ), ], ), diff --git a/lib/screens/contact_new_version/trusted_contact_screen.dart b/lib/screens/contact_new_version/trusted_contact_screen.dart index 5be3558e..510ab62a 100644 --- a/lib/screens/contact_new_version/trusted_contact_screen.dart +++ b/lib/screens/contact_new_version/trusted_contact_screen.dart @@ -1,159 +1,159 @@ -import 'package:at_common_flutter/services/size_config.dart'; -import 'package:at_contact/at_contact.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; -import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; -import 'package:flutter/material.dart'; -import 'package:provider/provider.dart'; - -class TrustedContactScreen extends StatefulWidget { - const TrustedContactScreen({Key? key}) : super(key: key); - - @override - State createState() => _TrustedContactScreenState(); -} - -class _TrustedContactScreenState extends State { - late TrustedContactProvider provider; - late TextEditingController searchController; - - List trustedContacts = []; - - @override - void initState() { - provider = context.read(); - searchController = TextEditingController(); - super.initState(); - trustedContacts = provider.trustedContacts; - } - - @override - Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.transparent, - body: Align( - alignment: Alignment.bottomCenter, - child: Container( - margin: EdgeInsets.only(top: 120), - height: double.infinity, - width: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - _buildHeaderWidget(), - const SizedBox(height: 24), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 27), - child: Text( - "Trusted Senders", - style: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - ), - const SizedBox(height: 30), - Expanded( - child: Consumer( - builder: (context, myProvider, child) { - return Scrollbar( - child: ListContactWidget( - isOnlyShowContactTrusted: true, - trustedContacts: trustedContacts, - onTapContact: (contact) async { - await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return Padding( - padding: const EdgeInsets.only(top: 120), - child: ContactDetailScreen( - contact: contact, - onTrustFunc: () { - Navigator.of(context).pop(); - }, - ), - ); - }, - ); - }, - ), - ); - }, - ), - ), - ], - ), - ), - ), - ); - } - - Widget _buildHeaderWidget() { - return Padding( - padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), - child: Row( - children: [ - Container( - height: 2, - width: 45, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(20), - ), - ), - const Spacer(), - Align( - alignment: Alignment.topRight, - child: InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - height: 31.toHeight, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric( - horizontal: 30, - ), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(28), - ), - child: Center( - child: Text( - "Close", - style: TextStyle( - fontSize: 17.toFont, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), - ), - ), - ), - ], - ), - ); - } -} +// import 'package:at_common_flutter/services/size_config.dart'; +// import 'package:at_contact/at_contact.dart'; +// import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail_screen.dart'; +// import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; +// import 'package:atsign_atmosphere_pro/utils/colors.dart'; +// import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; +// import 'package:flutter/material.dart'; +// import 'package:provider/provider.dart'; +// +// class TrustedContactScreen extends StatefulWidget { +// const TrustedContactScreen({Key? key}) : super(key: key); +// +// @override +// State createState() => _TrustedContactScreenState(); +// } +// +// class _TrustedContactScreenState extends State { +// late TrustedContactProvider provider; +// late TextEditingController searchController; +// +// List trustedContacts = []; +// +// @override +// void initState() { +// provider = context.read(); +// searchController = TextEditingController(); +// super.initState(); +// trustedContacts = provider.trustedContacts; +// } +// +// @override +// Widget build(BuildContext context) { +// return Scaffold( +// backgroundColor: Colors.transparent, +// body: Align( +// alignment: Alignment.bottomCenter, +// child: Container( +// margin: EdgeInsets.only(top: 120), +// height: double.infinity, +// width: double.infinity, +// decoration: BoxDecoration( +// color: Colors.white, +// borderRadius: const BorderRadius.only( +// topLeft: Radius.circular(20), +// topRight: Radius.circular(20), +// ), +// boxShadow: [ +// BoxShadow( +// color: Colors.black.withOpacity(0.25), +// offset: const Offset(0, 4), +// ) +// ], +// ), +// child: Column( +// crossAxisAlignment: CrossAxisAlignment.start, +// mainAxisSize: MainAxisSize.min, +// children: [ +// _buildHeaderWidget(), +// const SizedBox(height: 24), +// Padding( +// padding: const EdgeInsets.symmetric(horizontal: 27), +// child: Text( +// "Trusted Senders", +// style: TextStyle( +// fontSize: 25.toFont, +// fontWeight: FontWeight.bold, +// color: Colors.black, +// ), +// ), +// ), +// const SizedBox(height: 30), +// Expanded( +// child: Consumer( +// builder: (context, myProvider, child) { +// return Scrollbar( +// child: ListContactWidget( +// isOnlyShowContactTrusted: true, +// trustedContacts: trustedContacts, +// onTapContact: (contact) async { +// await showModalBottomSheet( +// context: context, +// isScrollControlled: true, +// useRootNavigator: true, +// backgroundColor: Colors.transparent, +// builder: (BuildContext context) { +// return Padding( +// padding: const EdgeInsets.only(top: 120), +// child: ContactDetailScreen( +// contact: contact, +// onTrustFunc: () { +// Navigator.of(context).pop(); +// }, +// ), +// ); +// }, +// ); +// }, +// ), +// ); +// }, +// ), +// ), +// ], +// ), +// ), +// ), +// ); +// } +// +// Widget _buildHeaderWidget() { +// return Padding( +// padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), +// child: Row( +// children: [ +// Container( +// height: 2, +// width: 45, +// decoration: BoxDecoration( +// color: Colors.black, +// borderRadius: BorderRadius.circular(20), +// ), +// ), +// const Spacer(), +// Align( +// alignment: Alignment.topRight, +// child: InkWell( +// onTap: () { +// Navigator.of(context).pop(); +// }, +// child: Container( +// height: 31.toHeight, +// alignment: Alignment.topRight, +// padding: const EdgeInsets.symmetric( +// horizontal: 30, +// ), +// decoration: BoxDecoration( +// border: Border.all( +// color: ColorConstants.grey, +// ), +// borderRadius: BorderRadius.circular(28), +// ), +// child: Center( +// child: Text( +// "Close", +// style: TextStyle( +// fontSize: 17.toFont, +// fontWeight: FontWeight.w600, +// color: ColorConstants.grey, +// ), +// ), +// ), +// ), +// ), +// ), +// ], +// ), +// ); +// } +// } diff --git a/lib/screens/contact_new_version/widget/contacts_widget.dart b/lib/screens/contact_new_version/widget/contacts_widget.dart index 2eeedb3c..c84c038b 100644 --- a/lib/screens/contact_new_version/widget/contacts_widget.dart +++ b/lib/screens/contact_new_version/widget/contacts_widget.dart @@ -21,7 +21,7 @@ class ContactsWidget extends StatefulWidget { final List contacts; final String searchValue; final Function? onRefresh; - final EdgeInsetsGeometry? padding; + final EdgeInsetsGeometry? padding, contactPadding; const ContactsWidget({ Key? key, @@ -39,6 +39,7 @@ class ContactsWidget extends StatefulWidget { this.selectedContacts, this.onRefresh, this.padding, + this.contactPadding, }) : super(key: key); @override @@ -64,7 +65,6 @@ class _ContactsWidgetState extends State { setState(() {}); }, child: ListView.builder( - padding: const EdgeInsets.symmetric(horizontal: 18), physics: const ClampingScrollPhysics(), itemCount: 27, shrinkWrap: true, @@ -102,39 +102,40 @@ class _ContactsWidgetState extends State { return const SizedBox(); } - return Column( - mainAxisSize: MainAxisSize.min, - children: [ - if (widget.isShowAlpha) ...[ - Padding( - padding: const EdgeInsets.only( - left: 9, - right: 8, - bottom: 10, - top: 14, - ), - child: Row( - children: [ - Text( - currentChar, - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.bold, + return Padding( + padding: widget.contactPadding ?? EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + if (widget.isShowAlpha) ...[ + Padding( + padding: const EdgeInsets.only(bottom: 8), + child: Row( + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: Text( + currentChar, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), + ), ), - ), - SizedBox(width: 16.toWidth), - Expanded( - child: Divider( - color: ColorConstants.dividerGrey, - height: 1.toHeight, + SizedBox(width: 16.toWidth), + Expanded( + child: Divider( + color: ColorConstants.dividerGrey, + height: 1.toHeight, + ), ), - ), - ], + ], + ), ), - ), + ], + contactListBuilder(contactsForAlphabet) ], - contactListBuilder(contactsForAlphabet) - ], + ), ); }, ), @@ -146,7 +147,7 @@ class _ContactsWidgetState extends State { ) { return ListView.builder( itemCount: contactsForAlphabet.length, - padding: widget.padding ?? EdgeInsets.zero, + padding: widget.padding ?? EdgeInsets.only(left: 24), shrinkWrap: true, physics: const NeverScrollableScrollPhysics(), itemBuilder: (context, index) { diff --git a/lib/screens/contact_new_version/widget/empty_contact_widget.dart b/lib/screens/contact_new_version/widget/empty_contact_widget.dart new file mode 100644 index 00000000..98163ad6 --- /dev/null +++ b/lib/screens/contact_new_version/widget/empty_contact_widget.dart @@ -0,0 +1,116 @@ +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class EmptyContactsWidget extends StatelessWidget { + final ContactsType? contactsType; + + const EmptyContactsWidget({ + Key? key, + this.contactsType, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return contactsType == ContactsType.groups || + contactsType == ContactsType.contact + ? _buildEmptyImage() + : Padding( + padding: const EdgeInsets.only(top: 100), + child: SizedBox( + width: double.infinity, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "Add contacts to trusted by", + style: TextStyle( + fontSize: 18, + color: ColorConstants.grey, + ), + ), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "selecting", + style: TextStyle( + fontSize: 18, + color: ColorConstants.grey, + ), + ), + SvgPicture.asset( + AppVectors.icBigTrustActivated, + ), + Text( + "next to their name!", + style: TextStyle( + fontSize: 18, + color: ColorConstants.grey, + ), + ), + ], + ), + ], + ), + ), + ); + } + + Widget _buildEmptyImage() { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: 122, + width: 226, + child: Image.asset( + ImageConstants.emptyBox, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 24), + child: Text( + contactsType == ContactsType.groups ? "No Groups" : "No Contacts", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ), + ), + InkWell( + borderRadius: BorderRadius.circular(46), + onTap: () async {}, + child: Container( + decoration: BoxDecoration( + color: ColorConstants.orange, + borderRadius: BorderRadius.circular(46), + ), + padding: EdgeInsets.symmetric( + horizontal: 13, + vertical: 8, + ), + child: Text( + contactsType == ContactsType.groups + ? "Add Group" + : "Add Contact", + style: TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + ), + ), + ), + SizedBox(height: 100), + ], + ), + ); + } +} diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index bb13ca77..73c0f7bc 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -1,8 +1,10 @@ import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; -import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart' + hide ContactsType; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/contact_filter_type.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contacts_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -10,6 +12,8 @@ import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:flutter/material.dart'; +import 'empty_contact_widget.dart'; + class ListContactWidget extends StatefulWidget { final bool showGroups, showContacts, @@ -26,6 +30,7 @@ class ListContactWidget extends StatefulWidget { final List? selectedContacts; final Color? searchBackgroundColor, searchBorderColor; final String? hintText; + final ContactsType? contactsType; const ListContactWidget({ Key? key, @@ -45,6 +50,7 @@ class ListContactWidget extends StatefulWidget { this.searchBackgroundColor, this.searchBorderColor, this.hintText, + this.contactsType, }) : super(key: key); @override @@ -225,49 +231,20 @@ class _ListContactWidgetState extends State { builder: (context, snapshot) { if ((snapshot.connectionState == ConnectionState.waiting)) { return const Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator( + color: ColorConstants.orange, + ), ); } else { // filtering contacts and groups var _filteredList = []; - _filteredList = getAllContactList(snapshot.data ?? []); + _filteredList = []; // getAllContactList(snapshot.data ?? []); if (_filteredList.isEmpty) { - return widget.showGroups - ? Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - height: 122, - width: 226, - child: Image.asset( - ImageConstants.emptyBox, - ), - ), - const SizedBox(height: 32), - Text( - "No Result", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w700, - color: ColorConstants.grey, - ), - ) - ], - ), - ) - : Center( - child: Text( - TextStrings().contactEmpty, - style: TextStyle( - fontSize: 15.toFont, - fontWeight: FontWeight.normal, - ), - ), - ); + return EmptyContactsWidget( + contactsType: widget.contactsType, + ); } - // renders contacts according to the initial alphabet return Scrollbar( radius: const Radius.circular(11), @@ -285,7 +262,7 @@ class _ListContactWidgetState extends State { onRefresh: () async { await _groupService.fetchGroupsAndContacts(); }, - padding: const EdgeInsets.only(left: 24, right: 6), + contactPadding: EdgeInsets.only(left: 18, right: 28), selectedContacts: widget.selectedContacts, trustedContacts: widget.trustedContacts, ), diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index da713fc3..cdfded1c 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -104,17 +104,18 @@ class _WelcomeScreenState extends State { Widget build(BuildContext context) { return Stack( children: [ - SafeArea( - child: Scaffold( - bottomNavigationBar: customBottomNavigationBar(), - key: _scaffoldKey, - backgroundColor: ColorConstants.welcomeScreenBG, - extendBody: true, - drawerScrimColor: Colors.transparent, - endDrawer: SideBarWidget( - isExpanded: true, - ), - body: Consumer( + Scaffold( + bottomNavigationBar: customBottomNavigationBar(), + key: _scaffoldKey, + backgroundColor: ColorConstants.background, + extendBody: true, + drawerScrimColor: Colors.transparent, + endDrawer: SideBarWidget( + isExpanded: true, + ), + body: SafeArea( + bottom: false, + child: Consumer( builder: (_c, provider, widget) { if (provider.isInternetAvailable) { return _bottomSheetWidgetOptions[context @@ -147,8 +148,7 @@ class _WelcomeScreenState extends State { Future.delayed( const Duration(seconds: 3), () { - welcomeScreenProvider - .changeOverlayStatus(true); + welcomeScreenProvider.changeOverlayStatus(true); }, ); return Material( @@ -168,13 +168,11 @@ class _WelcomeScreenState extends State { ), ), ); - } else if (flushbarStatus == - FLUSHBAR_STATUS.FAILED) { + } else if (flushbarStatus == FLUSHBAR_STATUS.FAILED) { Future.delayed( const Duration(seconds: 3), () { - welcomeScreenProvider - .changeOverlayStatus(true); + welcomeScreenProvider.changeOverlayStatus(true); }, ); return Material( @@ -197,8 +195,7 @@ class _WelcomeScreenState extends State { } else { return Consumer( builder: (_c, provider, _) { - var percent = (provider - .sentFileTransferProgress + var percent = (provider.sentFileTransferProgress ?.percent ?? 30) / 100; @@ -230,11 +227,17 @@ class _WelcomeScreenState extends State { return Consumer( builder: (context, provider, _) { return Selector( - selector: (context, provider) => provider.selectedBottomNavigationIndex, + selector: (context, provider) => + provider.selectedBottomNavigationIndex, builder: (context, selectedBottomNavigationIndex, _) { return Container( height: 74, - margin: EdgeInsets.symmetric(horizontal: 16, vertical: 32), + margin: EdgeInsets.fromLTRB( + 16.toWidth, + 0, + 16.toWidth, + 16 + MediaQuery.of(context).padding.bottom, + ), padding: EdgeInsets.symmetric(horizontal: 16), decoration: BoxDecoration( color: Colors.white, diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index fad1c950..e1352916 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -70,7 +70,7 @@ class _WelcomeScreenHomeState extends State { ), body: Container( decoration: BoxDecoration( - color: ColorConstants.welcomeScreenBG, + color: ColorConstants.background, ), width: double.infinity, height: SizeConfig().screenHeight, diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 606c4474..9dfa5c12 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -54,7 +54,11 @@ class ColorConstants { static const Color sidebarTextHeading = Color(0xFFE7E7E7); static const Color sidebarTileSelected = Color(0xFFF5F5F5); static const Color grayText = Color(0xFF424242); - static const Color welcomeScreenBG = Color(0xFFF8F8F8); + static const Color background = Color(0xFFF8F8F8); + static const Color culturedColor = Color(0xFFF4F4F4); + static const Color backgroundTab = Color(0xFFF6F0E6); + static const Color darkSliver = Color(0xFF717171); + static const Color lightGray = Color(0xFFD3D3D3); } class ContactInitialsColors { diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 4f460acd..5db1be6d 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -89,4 +89,5 @@ class ImageConstants { static String icSettingInactivate = '$_basePath/ic_setting_inactivate.png'; static String icUserActivate = '$_basePath/ic_user_activate.png'; static String icUserInactivate = '$_basePath/ic_user_inactivate.png'; + static String icImage = '$_basePath/ic_image.png'; } \ No newline at end of file diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index 5322f733..2e582104 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -28,4 +28,5 @@ class AppVectors { static String icFile = '$_basePath/ic_file.svg'; static String icBack = '$_basePath/ic_back.svg'; static String icPlus11px = '$_basePath/ic_plus_11px.svg'; + static String icImageGray = '$_basePath/ic_image_gray.svg'; } From 7f1d470b0ced5c29e69b43e928ca0e8f11e815ab Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 28 Apr 2023 10:15:33 +0700 Subject: [PATCH 55/94] feat: update new UI --- assets/svg/ic_setting_backup.svg | 3 + assets/svg/ic_setting_block.svg | 3 + assets/svg/ic_setting_contact_us.svg | 3 + assets/svg/ic_setting_delete.svg | 6 + assets/svg/ic_setting_faq.svg | 3 + assets/svg/ic_setting_privacy.svg | 3 + assets/svg/ic_setting_switch.svg | 3 + assets/svg/ic_white_trust.svg | 3 + .../common_widgets/contact_initial.dart | 4 +- .../blocked_contact_screen.dart | 415 ++++++++--------- .../contact_detail_screen.dart | 426 +++++++++--------- .../contact_new_version/contact_screen.dart | 19 +- .../create_group_screen.dart | 1 - .../group_contact_screen.dart | 1 - .../widget/contact_card_widget.dart | 138 +++--- .../widget/list_contact_widget.dart | 253 ++--------- .../widget/option_dialog.dart | 114 +++++ lib/screens/settings/settings_screen.dart | 220 +++++---- .../settings/widgets/settings_buttons.dart | 17 +- .../widgets/choice_contacts_widget.dart | 4 - lib/utils/colors.dart | 4 + lib/utils/text_strings.dart | 5 +- lib/utils/text_styles.dart | 7 + lib/utils/vectors.dart | 10 + 24 files changed, 823 insertions(+), 842 deletions(-) create mode 100644 assets/svg/ic_setting_backup.svg create mode 100644 assets/svg/ic_setting_block.svg create mode 100644 assets/svg/ic_setting_contact_us.svg create mode 100644 assets/svg/ic_setting_delete.svg create mode 100644 assets/svg/ic_setting_faq.svg create mode 100644 assets/svg/ic_setting_privacy.svg create mode 100644 assets/svg/ic_setting_switch.svg create mode 100644 assets/svg/ic_white_trust.svg create mode 100644 lib/screens/contact_new_version/widget/option_dialog.dart diff --git a/assets/svg/ic_setting_backup.svg b/assets/svg/ic_setting_backup.svg new file mode 100644 index 00000000..5914a8e0 --- /dev/null +++ b/assets/svg/ic_setting_backup.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_setting_block.svg b/assets/svg/ic_setting_block.svg new file mode 100644 index 00000000..941f35a0 --- /dev/null +++ b/assets/svg/ic_setting_block.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_setting_contact_us.svg b/assets/svg/ic_setting_contact_us.svg new file mode 100644 index 00000000..ae591052 --- /dev/null +++ b/assets/svg/ic_setting_contact_us.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_setting_delete.svg b/assets/svg/ic_setting_delete.svg new file mode 100644 index 00000000..3d9ff145 --- /dev/null +++ b/assets/svg/ic_setting_delete.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/svg/ic_setting_faq.svg b/assets/svg/ic_setting_faq.svg new file mode 100644 index 00000000..5d581bd6 --- /dev/null +++ b/assets/svg/ic_setting_faq.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_setting_privacy.svg b/assets/svg/ic_setting_privacy.svg new file mode 100644 index 00000000..29c7125f --- /dev/null +++ b/assets/svg/ic_setting_privacy.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_setting_switch.svg b/assets/svg/ic_setting_switch.svg new file mode 100644 index 00000000..fbf7b2c2 --- /dev/null +++ b/assets/svg/ic_setting_switch.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_white_trust.svg b/assets/svg/ic_white_trust.svg new file mode 100644 index 00000000..df0762e5 --- /dev/null +++ b/assets/svg/ic_white_trust.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/screens/common_widgets/contact_initial.dart b/lib/screens/common_widgets/contact_initial.dart index 2d530486..4b048f32 100644 --- a/lib/screens/common_widgets/contact_initial.dart +++ b/lib/screens/common_widgets/contact_initial.dart @@ -25,7 +25,7 @@ class ContactInitial extends StatelessWidget { if (initials!.length < 3) { index = initials!.length; } else { - index = 3; + index = 2; } return Container( @@ -39,7 +39,7 @@ class ContactInitial extends StatelessWidget { ), child: Center( child: Text( - initials!.substring((index == 1) ? 0 : 1, index).toUpperCase(), + initials!.substring(0, index).toUpperCase(), style: CustomTextStyles.whiteBold(size: (size! ~/ 3)), ), ), diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index 9beee258..52814efc 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -1,8 +1,10 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_flutter/models/contact_base_model.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_card_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:flutter/material.dart'; class BlockedContactScreen extends StatefulWidget { @@ -30,91 +32,132 @@ class _BlockedContactScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.transparent, - body: Align( - alignment: Alignment.bottomCenter, + backgroundColor: ColorConstants.background, + appBar: AppBar( + backgroundColor: ColorConstants.background, + title: Text( + "Blocked atSigns", + style: TextStyle( + color: Colors.black, + ), + ), + centerTitle: false, + ), + body: SafeArea( child: Container( - height: MediaQuery.of(context).size.height - 120, width: double.infinity, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), - ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], - ), + height: double.infinity, child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - _buildHeaderWidget(), - const SizedBox(height: 24), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 27), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Text( - "Blocked atSigns", - style: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.bold, - color: Colors.black, - ), - ), - const SizedBox(height: 30), - HeaderWidget( - margin: EdgeInsets.only(bottom: 28), - onReloadCallback: () async { - await _contactService.fetchBlockContactList(); - searchController.clear(); - }, - controller: searchController, - onSearch: (value) { - setState(() {}); - }, - ), - Container( - height: 37.toHeight, - padding: const EdgeInsets.only(left: 24), - alignment: Alignment.centerLeft, - decoration: BoxDecoration( - borderRadius: const BorderRadius.only( - topRight: Radius.circular(10), - topLeft: Radius.circular(10), - ), - color: ColorConstants.textBoxBg), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "atSign", - style: TextStyle( - fontSize: 15.toFont, - fontWeight: FontWeight.w500, - color: ColorConstants.sidebarTextUnselected, - ), - ), - Icon( - Icons.arrow_downward_outlined, - color: ColorConstants.sidebarTextUnselected, - ) - ], - ), - ), - ], + children: [ + SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.fromLTRB( + 44.toWidth, + 14.toHeight, + 29.toWidth, + 16, ), ), Expanded( - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 27), - child: _buildListBlocked(), + child: StreamBuilder>( + stream: _contactService.blockedContactStream, + initialData: _contactService.baseBlockedList, + builder: (context, snapshot) { + if ((snapshot.connectionState == ConnectionState.waiting)) { + return const Center( + child: CircularProgressIndicator( + color: ColorConstants.orange, + ), + ); + } else { + var listContact = snapshot.data!; + listContact = listContact + .where( + (element) => (element?.contact?.atSign ?? '') + .contains(searchController.text), + ) + .toList(); + + if (listContact.isEmpty) { + return Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: 122, + width: 226, + child: Image.asset( + ImageConstants.emptyBox, + ), + ), + Padding( + padding: + const EdgeInsets.symmetric(vertical: 24), + child: Text( + "Empty Contacts", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ), + ), + ], + ), + ); + } + // renders contacts according to the initial alphabet + return Scrollbar( + radius: const Radius.circular(11), + child: RefreshIndicator( + onRefresh: () async {}, + child: ListView.builder( + physics: const ClampingScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: 27, + shrinkWrap: true, + itemBuilder: (context, alphabetIndex) { + List contactsForAlphabet = []; + + var currentChar = + String.fromCharCode(alphabetIndex + 65) + .toUpperCase(); + + if (alphabetIndex == 26) { + currentChar = 'Others'; + } + + contactsForAlphabet = getContactsForAlphabets( + listContact, + currentChar, + alphabetIndex, + ); + + if (contactsForAlphabet.isEmpty) { + return const SizedBox(); + } + + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + _buildChar(currentChar), + _buildBlockContacts(contactsForAlphabet) + ], + ); + }, + ), + ), + ); + } + }, ), ), ], @@ -124,157 +167,91 @@ class _BlockedContactScreenState extends State { ); } - Widget _buildHeaderWidget() { + Widget _buildBlockContacts( + List contactsForAlphabet, + ) { + return ListView.builder( + itemCount: contactsForAlphabet.length, + padding: EdgeInsets.only(left: 44, right: 28), + shrinkWrap: true, + physics: const NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + final contact = contactsForAlphabet[index].contact; + return ContactCardWidget( + contact: contact!, + onTap: () async { + print("unblock"); + await _contactService.blockUnblockContact( + contact: contactsForAlphabet[index].contact!, + blockAction: false, + ); + }, + suffixIcon: Padding( + padding: const EdgeInsets.only(right: 8), + child: Icon( + Icons.block, + color: Colors.red, + ), + ), + ); + }, + ); + } + + Widget _buildChar(String currentChar) { return Padding( - padding: const EdgeInsets.fromLTRB(27, 24, 27, 0), + padding: const EdgeInsets.only(bottom: 8), child: Row( children: [ - Container( - height: 2, - width: 45, - decoration: BoxDecoration( - color: Colors.black, - borderRadius: BorderRadius.circular(20), + Padding( + padding: const EdgeInsets.only(left: 28), + child: Text( + currentChar, + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.bold, + ), ), ), - const Spacer(), - Align( - alignment: Alignment.topRight, - child: InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - height: 31.toHeight, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric( - horizontal: 30, - ), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(28), - ), - child: Center( - child: Text( - "Close", - style: TextStyle( - fontSize: 17.toFont, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - ), - ), + SizedBox(width: 16.toWidth), + Expanded( + child: Divider( + color: ColorConstants.dividerGrey, + height: 1.toHeight, ), ), + SizedBox(width: 31.toWidth), ], ), ); } - _buildListBlocked() { - return StreamBuilder>( - stream: _contactService.blockedContactStream, - initialData: _contactService.baseBlockedList, - builder: (context, snapshot) { - if (snapshot.connectionState == ConnectionState.active) { - var listContact = snapshot.data!; - listContact = listContact - .where( - (element) => (element?.contact?.atSign ?? '') - .contains(searchController.text), - ) - .toList(); - return ListView.builder( - itemCount: listContact.length, - physics: ClampingScrollPhysics(), - padding: EdgeInsets.zero, - itemBuilder: (context, index) { - return Container( - height: 58.toHeight, - color: Colors.white, - child: Column( - children: [ - Expanded( - child: Row( - children: [ - Expanded( - child: Padding( - padding: const EdgeInsets.only(left: 18), - child: Text( - listContact[index]?.contact?.atSign ?? '', - style: TextStyle( - fontSize: 13.toFont, - fontWeight: FontWeight.w500, - color: ColorConstants.textBlack, - ), - ), - ), - ), - Padding( - padding: const EdgeInsets.only(right: 24), - child: InkWell( - onTap: () async { - await _contactService.blockUnblockContact( - contact: listContact[index]!.contact!, - blockAction: false, - ); - }, - child: Container( - padding: EdgeInsets.symmetric( - horizontal: 14.toWidth, - vertical: 7.toHeight, - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(15), - color: ColorConstants.boxGrey, - border: Border.all( - color: ColorConstants.grey, - ), - ), - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "Unblock?", - style: TextStyle( - fontSize: 13.toFont, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, - ), - ), - const SizedBox(width: 16), - const Icon( - Icons.block, - color: Colors.red, - size: 16, - ) - ], - ), - ), - ), - ) - ], - ), - ), - Container( - color: ColorConstants.textBoxBg, - height: 1.toHeight, - width: double.infinity, - ) - ], - ), - ); - }, - ); - } else { - return const Center( - child: CircularProgressIndicator(), - ); + List getContactsForAlphabets( + List _filteredList, + String currentChar, + int alphabetIndex, + ) { + List contactsForAlphabet = []; + + /// contacts, groups that does not starts with alphabets + if (alphabetIndex == 26) { + for (var c in _filteredList) { + if (!RegExp(r'^[a-z]+$').hasMatch( + (c?.contact?.atSign?[1] ?? '').toLowerCase(), + )) { + contactsForAlphabet.add(c!); } - }, - ); + } + } else { + for (var c in _filteredList) { + if (c?.contact != null) { + if (c?.contact?.atSign?[1].toUpperCase() == currentChar) { + contactsForAlphabet.add(c!); + } + } + } + } + + return contactsForAlphabet; } } diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index caf92952..fa5c996f 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -1,8 +1,9 @@ +import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/avatar_widget.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/card_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/option_dialog.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; @@ -28,7 +29,7 @@ class _ContactDetailScreenState extends State { late TrustedContactProvider _trustedContactProvider; late ContactService _contactService; late WelcomeScreenProvider _welcomeScreenProvider; - + GlobalKey optionKey = GlobalKey(); bool isTrusted = false; @override @@ -53,227 +54,242 @@ class _ContactDetailScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( - backgroundColor: Colors.transparent, - body: Align( - alignment: Alignment.bottomCenter, - child: Container( - height: double.infinity, - width: double.infinity, - margin: EdgeInsets.only(top: 120), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], + backgroundColor: ColorConstants.background, + appBar: AppBar( + backgroundColor: ColorConstants.background, + leading: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Padding( + padding: const EdgeInsets.only(left: 31), + child: Icon( + Icons.arrow_back_ios, + ), ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Row( - children: [ - const Spacer(), - Align( - alignment: Alignment.topRight, - child: InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - height: 31, - alignment: Alignment.topRight, - padding: const EdgeInsets.symmetric( - horizontal: 30, - ), - margin: const EdgeInsets.only(right: 27, top: 30), - decoration: BoxDecoration( - border: Border.all( - color: ColorConstants.grey, + ), + actions: [ + _buildMoreIcon(), + ], + ), + body: Container( + height: double.infinity, + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 44), + margin: EdgeInsets.only(top: 8), + child: Row( + children: [ + AvatarWidget( + size: 100, + borderRadius: 50, + contact: widget.contact, + ), + const SizedBox(width: 22), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, ), - borderRadius: BorderRadius.circular(28), ), - child: Center( + const SizedBox(height: 5), + Flexible( child: Text( - "Close", - style: TextStyle( - fontSize: 17, - fontWeight: FontWeight.w600, - color: ColorConstants.grey, + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, ), ), ), - ), + ], ), - ), + ) ], ), - const SizedBox(height: 11), - Padding( - padding: const EdgeInsets.symmetric(horizontal: 42), - child: Row( - children: [ - AvatarWidget( - size: 83, - borderRadius: 24, - contact: widget.contact, + ), + const SizedBox(height: 25), + isTrusted + ? _buildButtonIcon( + title: "Trusted", + titleStyle: TextStyle( + color: Colors.white, + fontSize: 14.toFont, + fontWeight: FontWeight.w500, ), - const SizedBox(width: 25), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: Text( - widget.contact.atSign ?? '', - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w600, - ), - overflow: TextOverflow.ellipsis, - ), - ), - const SizedBox(height: 5), - Flexible( - child: Text( - widget.contact.tags?['name'] ?? - widget.contact.atSign!.substring(1), - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w400, - ), - ), - ), - ], - ), - ) - ], - ), - ), - const SizedBox(height: 25), - Flexible( - child: SingleChildScrollView( - physics: ClampingScrollPhysics(), - padding: const EdgeInsets.symmetric( - horizontal: 36, - vertical: 25, + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icWhiteTrust, + backgroundColor: ColorConstants.orange, + onTap: () async { + await _trustedContactProvider + .removeTrustedContacts(widget.contact); + setState(() { + isTrusted = false; + }); + }, + ) + : _buildButtonIcon( + title: "Add To Trusted", + titleStyle: TextStyle( + color: ColorConstants.portlandOrange, + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icTrustActivated, + backgroundColor: ColorConstants.unbleachedSilk, + onTap: () async { + await _trustedContactProvider + .addTrustedContacts(widget.contact); + setState(() { + isTrusted = true; + }); + }, ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(false); - widget.onTrustFunc?.call(); - _welcomeScreenProvider.selectedContacts = [ - GroupContactsModel( - contactType: ContactsType.CONTACT, - contact: widget.contact, - ), - ]; - _welcomeScreenProvider.changeBottomNavigationIndex(0); - }, - child: Container( - height: 63, - decoration: BoxDecoration( - gradient: const LinearGradient( - begin: Alignment.topLeft, - end: Alignment.bottomRight, - colors: [ - ColorConstants.orangeColor, - ColorConstants.yellow, - ], - ), - borderRadius: BorderRadius.circular(10), - ), - child: Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - const Text( - "Transfer Now", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w700, - color: Colors.white, - ), - ), - const SizedBox(width: 24), - SvgPicture.asset( - AppVectors.icArrow, - ), - ], - ), - ), - ), - ), - const SizedBox(height: 46), - isTrusted - ? CardButton( - icon: AppVectors.icBigTrustActivated, - title: "Trusted", - style: TextStyle( - fontSize: 18, - fontWeight: FontWeight.w500, - color: ColorConstants.orange, - ), - borderColor: ColorConstants.orange, - backgroundColor: - ColorConstants.orange.withOpacity(0.2), - onTap: () async { - await _trustedContactProvider - .removeTrustedContacts(widget.contact); - setState(() { - isTrusted = false; - }); - }, - ) - : CardButton( - icon: AppVectors.icTrust, - title: "Add To Trusted", - onTap: () async { - await _trustedContactProvider - .addTrustedContacts(widget.contact); - setState(() { - isTrusted = true; - }); - }, - ), - const SizedBox(height: 25), - CardButton( - icon: AppVectors.icTrash, - title: "Delete", - onTap: () async { - await _contactService.deleteAtSign( - atSign: widget.contact.atSign!, - ); - Navigator.of(context).pop(); - }, - ), - const SizedBox(height: 25), - CardButton( - icon: AppVectors.icBlock, - title: "Block", - onTap: () async { - await _contactService.blockUnblockContact( - contact: widget.contact, - blockAction: true, - ); - Navigator.of(context).pop(); - }, - ), - const SizedBox(height: 25), - ], + const SizedBox(height: 13), + _buildButtonIcon( + title: "Transfer File", + titleStyle: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icArrow, + backgroundColor: Colors.black, + onTap: () { + Navigator.of(context).pop(false); + widget.onTrustFunc?.call(); + _welcomeScreenProvider.selectedContacts = [ + GroupContactsModel( + contactType: ContactsType.CONTACT, + contact: widget.contact, ), + ]; + _welcomeScreenProvider.changeBottomNavigationIndex(0); + }, + ), + Padding( + padding: EdgeInsets.only(top: 20, left: 38), + child: Text( + "Attachments", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + ), + Padding( + padding: EdgeInsets.only(left: 38), + child: Text( + "Files ${widget.contact.atSign ?? ''} has sent you", + style: TextStyle( + fontSize: 10.toFont, + fontWeight: FontWeight.w400, + color: ColorConstants.oldSliver, ), - ) + ), + ), + ], + ), + ), + ); + } + + Widget _buildButtonIcon({ + String title = '', + TextStyle? titleStyle, + required String imageUrl, + Color backgroundColor = Colors.black, + EdgeInsetsGeometry? margin, + Function? onTap, + }) { + return Container( + height: 51, + width: double.infinity, + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.circular(10), + ), + margin: margin, + child: InkWell( + onTap: () { + onTap?.call(); + }, + child: Center( + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + title, + style: titleStyle ?? + TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: Colors.white, + ), + ), + const SizedBox(width: 14), + SvgPicture.asset( + imageUrl, + ), ], ), ), ), ); } + + Widget _buildMoreIcon() { + return InkWell( + onTap: () { + RenderBox box = + optionKey.currentContext!.findRenderObject() as RenderBox; + Offset position = box.localToGlobal(Offset.zero); + showDialog( + context: context, + builder: (BuildContext contextDialog) { + return OptionDialog( + position: position, + editNickNameFunc: () {}, + blockFunc: () async { + await _contactService.blockUnblockContact( + contact: widget.contact, + blockAction: true, + ); + Navigator.of(context).pop(); + }, + deleteFunc: () async { + await _contactService.deleteAtSign( + atSign: widget.contact.atSign!, + ); + Navigator.of(context).pop(); + }, + ); + }, + ); + }, + child: Padding( + key: optionKey, + padding: EdgeInsets.only(right: 32), + child: Icon( + Icons.more_horiz, + ), + ), + ); + } } diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index 89615eb5..445477e7 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -172,20 +172,17 @@ class _ContactScreenState extends State children: [ ListContactWidget( contactsType: ContactsType.contact, - isShowHeader: false, trustedContacts: trustedProvider.trustedContacts, onTapContact: (contact) async { - final result = await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return ContactDetailScreen( + final result = await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ContactDetailScreen( contact: contact, - ); - }, + ), + ), ); + if (result != false) { reloadPage(); } @@ -193,7 +190,6 @@ class _ContactScreenState extends State ), ListContactWidget( contactsType: ContactsType.trusted, - isShowHeader: false, isOnlyShowContactTrusted: true, trustedContacts: trustedProvider.trustedContacts, onTapContact: (contact) async { @@ -215,7 +211,6 @@ class _ContactScreenState extends State ), ListContactWidget( contactsType: ContactsType.groups, - isShowHeader: false, showGroups: true, showContacts: false, onTapGroup: (group) async { diff --git a/lib/screens/contact_new_version/create_group_screen.dart b/lib/screens/contact_new_version/create_group_screen.dart index 224e47f2..38b077be 100644 --- a/lib/screens/contact_new_version/create_group_screen.dart +++ b/lib/screens/contact_new_version/create_group_screen.dart @@ -150,7 +150,6 @@ class _CreateGroupScreenState extends State { ), Flexible( child: ListContactWidget( - isShowHeader: false, trustedContacts: widget.trustContacts, isSelectMultiContacts: true, onSelectContacts: (contacts) { diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart index 8afe7e9a..4be67b41 100644 --- a/lib/screens/contact_new_version/group_contact_screen.dart +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -121,7 +121,6 @@ class _GroupContactScreenState extends State { showGroups: true, showContacts: false, isShowAlpha: false, - isOnlyShowSearchBar: false, onTapGroup: (group) async { WidgetsBinding.instance .addPostFrameCallback((_) async { diff --git a/lib/screens/contact_new_version/widget/contact_card_widget.dart b/lib/screens/contact_new_version/widget/contact_card_widget.dart index b441fed9..5be6d802 100644 --- a/lib/screens/contact_new_version/widget/contact_card_widget.dart +++ b/lib/screens/contact_new_version/widget/contact_card_widget.dart @@ -13,6 +13,7 @@ class ContactCardWidget extends StatefulWidget { final double avatarSize, borderRadius; final Function()? onTap; final bool isSelected, isTrusted; + final Widget? suffixIcon; const ContactCardWidget({ Key? key, @@ -22,6 +23,7 @@ class ContactCardWidget extends StatefulWidget { this.onTap, this.isSelected = false, this.isTrusted = false, + this.suffixIcon, }) : super(key: key); @override @@ -59,80 +61,82 @@ class _ContactCardWidgetState extends State { @override Widget build(BuildContext context) { - return InkWell( - onTap: () { - widget.onTap?.call(); - }, - child: Container( - padding: const EdgeInsets.fromLTRB(20, 13, 12, 13), - margin: const EdgeInsets.only(bottom: 12), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all( + return Padding( + padding: const EdgeInsets.only(bottom: 12), + child: InkWell( + onTap: () { + widget.onTap?.call(); + }, + child: Container( + padding: const EdgeInsets.fromLTRB(20, 13, 12, 13), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + color: widget.isSelected + ? ColorConstants.orange + : ColorConstants.textBoxBg, + ), color: widget.isSelected - ? ColorConstants.orange - : ColorConstants.textBoxBg, + ? ColorConstants.orange.withOpacity(0.2) + : Colors.white, ), - color: widget.isSelected - ? ColorConstants.orange.withOpacity(0.2) - : Colors.white, - ), - child: Row( - children: [ - Container( - height: widget.avatarSize, - width: widget.avatarSize, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular( - widget.borderRadius, + child: Row( + children: [ + Container( + height: widget.avatarSize, + width: widget.avatarSize, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular( + widget.borderRadius, + ), ), + child: image != null + ? CustomCircleAvatar( + byteImage: image, + nonAsset: true, + ) + : ContactInitial( + borderRadius: widget.borderRadius, + size: widget.avatarSize, + initials: contactName, + ), ), - child: image != null - ? CustomCircleAvatar( - byteImage: image, - nonAsset: true, - ) - : ContactInitial( - borderRadius: widget.borderRadius, - size: widget.avatarSize, - initials: contactName, + const SizedBox(width: 18), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.black, + ), ), - ), - const SizedBox(width: 18), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Text( - widget.contact.atSign ?? '', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.black, - ), - ), - Text( - widget.contact.tags?['name'] ?? - widget.contact.atSign!.substring(1), - style: const TextStyle( - fontSize: 11, - fontWeight: FontWeight.w400, - color: Colors.black, + Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 11, + fontWeight: FontWeight.w400, + color: Colors.black, + ), ), - ), - ], + ], + ), ), - ), - widget.isTrusted - ? Padding( - padding: const EdgeInsets.only(right: 4), - child: SvgPicture.asset( - AppVectors.icTrustActivated, - ), - ) - : const SizedBox(), - ], + widget.isTrusted + ? Padding( + padding: const EdgeInsets.only(right: 4), + child: SvgPicture.asset( + AppVectors.icTrustActivated, + ), + ) + : widget.suffixIcon ?? const SizedBox(), + ], + ), ), ), ); diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index 73c0f7bc..2799d088 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -5,11 +5,8 @@ import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart' import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/contact_filter_type.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contacts_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; -import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:flutter/material.dart'; import 'empty_contact_widget.dart'; @@ -17,9 +14,6 @@ import 'empty_contact_widget.dart'; class ListContactWidget extends StatefulWidget { final bool showGroups, showContacts, - isShowHeader, - isOnlyShowSearchBar, - isShowFilterBar, isShowAlpha, isSelectMultiContacts, isOnlyShowContactTrusted; @@ -28,17 +22,13 @@ class ListContactWidget extends StatefulWidget { final Function(List contacts)? onSelectContacts; final List? trustedContacts; final List? selectedContacts; - final Color? searchBackgroundColor, searchBorderColor; - final String? hintText; final ContactsType? contactsType; + final String searchKeywords; const ListContactWidget({ Key? key, this.showGroups = false, this.showContacts = true, - this.isShowHeader = true, - this.isOnlyShowSearchBar = true, - this.isShowFilterBar = false, this.isShowAlpha = true, this.isSelectMultiContacts = false, this.isOnlyShowContactTrusted = false, @@ -47,10 +37,8 @@ class ListContactWidget extends StatefulWidget { this.onSelectContacts, this.trustedContacts, this.selectedContacts, - this.searchBackgroundColor, - this.searchBorderColor, - this.hintText, this.contactsType, + this.searchKeywords = '', }) : super(key: key); @override @@ -59,7 +47,6 @@ class ListContactWidget extends StatefulWidget { class _ListContactWidgetState extends State { late GroupService _groupService; - late TextEditingController searchController; ContactFilter selectedContactType = ContactFilter.all; bool showContacts = true; @@ -68,7 +55,6 @@ class _ListContactWidgetState extends State { @override void initState() { _groupService = GroupService(); - searchController = TextEditingController(); showContacts = widget.showContacts; showGroups = widget.showGroups; _groupService.fetchGroupsAndContacts(); @@ -79,199 +65,50 @@ class _ListContactWidgetState extends State { @override Widget build(BuildContext context) { SizeConfig().init(context); - return Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (widget.isShowHeader) ...[ - !widget.isOnlyShowSearchBar - ? HeaderWidget( - controller: searchController, - onReloadCallback: () { - searchController.clear(); - _groupService.fetchGroupsAndContacts(); - }, - onSearch: (value) { - setState(() {}); - }, - margin: - const EdgeInsets.only(bottom: 15, left: 27, right: 27), - ) - : Container( - height: 44.toHeight, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - color: widget.searchBackgroundColor, - ), - margin: EdgeInsets.symmetric( - horizontal: 32.toWidth, - vertical: 18.toHeight, - ), - child: TextFormField( - controller: searchController, - onChanged: (value) { - setState(() {}); - }, - decoration: InputDecoration( - enabledBorder: OutlineInputBorder( - borderSide: BorderSide( - width: 1, - color: - widget.searchBorderColor ?? ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(10), - ), - focusedBorder: OutlineInputBorder( - borderSide: BorderSide( - width: 1, - color: - widget.searchBorderColor ?? ColorConstants.grey, - ), - borderRadius: BorderRadius.circular(10), - ), - contentPadding: const EdgeInsets.only(top: 12, left: 14), - hintStyle: TextStyle( - fontSize: 14.toFont, - color: ColorConstants.grey, - fontWeight: FontWeight.normal, - ), - suffixIcon: const Icon( - Icons.search, - color: Colors.grey, - ), - hintText: - widget.hintText ?? 'Search by atSign or nickname', - ), - textInputAction: TextInputAction.search, - style: TextStyle( - fontSize: 14.toFont, - color: ColorConstants.fontPrimary, - fontWeight: FontWeight.w500, - ), - ), - ), - ], - if (widget.isShowFilterBar) ...[ - Padding( - padding: const EdgeInsets.only(left: 31, bottom: 8), - child: Text( - "Filter By", - style: TextStyle( - fontSize: 12.toFont, - fontWeight: FontWeight.w500, - color: ColorConstants.grey, - ), + return StreamBuilder>( + stream: _groupService.allContactsStream, + initialData: _groupService.allContacts, + builder: (context, snapshot) { + if ((snapshot.connectionState == ConnectionState.waiting)) { + return const Center( + child: CircularProgressIndicator( + color: ColorConstants.orange, ), - ), - Container( - height: 38, - margin: const EdgeInsets.symmetric(horizontal: 27), - child: ListView.builder( - padding: EdgeInsets.zero, - scrollDirection: Axis.horizontal, - physics: const ClampingScrollPhysics(), - itemCount: ContactFilter.values.length, - itemBuilder: (context, index) { - final type = ContactFilter.values[index]; - return InkWell( - onTap: () { - setState(() { - selectedContactType = type; - if (type == ContactFilter.contacts) { - showContacts = true; - showGroups = false; - } else if (type == ContactFilter.groups) { - showContacts = false; - showGroups = true; - } else { - showContacts = true; - showGroups = true; - } - }); - }, - child: Container( - margin: EdgeInsets.only(right: 5.toWidth), - padding: EdgeInsets.symmetric( - horizontal: 10.toWidth, - vertical: 8.toHeight, - ), - decoration: BoxDecoration( - color: selectedContactType == type - ? ColorConstants.orange.withOpacity(0.2) - : ColorConstants.textBoxBg, - borderRadius: BorderRadius.circular(16), - border: Border.all( - color: selectedContactType == type - ? ColorConstants.orange - : ColorConstants.grey, - ), - ), - child: Center( - child: Text( - ContactFilter.values[index].display, - style: TextStyle( - fontSize: 15.toFont, - color: selectedContactType == type - ? ColorConstants.orange - : ColorConstants.grey, - fontWeight: FontWeight.w500, - ), - ), - ), - ), - ); + ); + } else { + // filtering contacts and groups + var _filteredList = []; + _filteredList = getAllContactList(snapshot.data ?? []); + + if (_filteredList.isEmpty) { + return EmptyContactsWidget( + contactsType: widget.contactsType, + ); + } + // renders contacts according to the initial alphabet + return Scrollbar( + radius: const Radius.circular(11), + child: ContactsWidget( + contacts: _filteredList, + searchValue: widget.searchKeywords, + showGroups: widget.showGroups, + showContacts: widget.showContacts, + isShowAlpha: widget.isShowAlpha, + isSelectMultiContacts: widget.isSelectMultiContacts, + isOnlyShowContactTrusted: widget.isOnlyShowContactTrusted, + onTapContact: widget.onTapContact, + onTapGroup: widget.onTapGroup, + onSelectContacts: widget.onSelectContacts, + onRefresh: () async { + await _groupService.fetchGroupsAndContacts(); }, + contactPadding: EdgeInsets.only(left: 18, right: 28), + selectedContacts: widget.selectedContacts, + trustedContacts: widget.trustedContacts, ), - ), - ], - Flexible( - child: StreamBuilder>( - stream: _groupService.allContactsStream, - initialData: _groupService.allContacts, - builder: (context, snapshot) { - if ((snapshot.connectionState == ConnectionState.waiting)) { - return const Center( - child: CircularProgressIndicator( - color: ColorConstants.orange, - ), - ); - } else { - // filtering contacts and groups - var _filteredList = []; - _filteredList = []; // getAllContactList(snapshot.data ?? []); - - if (_filteredList.isEmpty) { - return EmptyContactsWidget( - contactsType: widget.contactsType, - ); - } - // renders contacts according to the initial alphabet - return Scrollbar( - radius: const Radius.circular(11), - child: ContactsWidget( - contacts: _filteredList, - searchValue: searchController.text, - showGroups: widget.showGroups, - showContacts: widget.showContacts, - isShowAlpha: widget.isShowAlpha, - isSelectMultiContacts: widget.isSelectMultiContacts, - isOnlyShowContactTrusted: widget.isOnlyShowContactTrusted, - onTapContact: widget.onTapContact, - onTapGroup: widget.onTapGroup, - onSelectContacts: widget.onSelectContacts, - onRefresh: () async { - await _groupService.fetchGroupsAndContacts(); - }, - contactPadding: EdgeInsets.only(left: 18, right: 28), - selectedContacts: widget.selectedContacts, - trustedContacts: widget.trustedContacts, - ), - ); - } - }, - ), - ), - ], + ); + } + }, ); } @@ -284,7 +121,7 @@ class _ListContactWidgetState extends State { if (showContacts && c?.contact != null && (c?.contact?.atSign ?? '').toString().toUpperCase().contains( - searchController.text.toUpperCase(), + widget.searchKeywords.toUpperCase(), )) { _filteredList.add(c); } @@ -293,7 +130,7 @@ class _ListContactWidgetState extends State { c?.group != null && c?.group?.displayName != null && (c?.group?.displayName ?? '').toUpperCase().contains( - searchController.text.toUpperCase(), + widget.searchKeywords.toUpperCase(), )) { _filteredList.add(c); } diff --git a/lib/screens/contact_new_version/widget/option_dialog.dart b/lib/screens/contact_new_version/widget/option_dialog.dart new file mode 100644 index 00000000..5743cf07 --- /dev/null +++ b/lib/screens/contact_new_version/widget/option_dialog.dart @@ -0,0 +1,114 @@ +import 'package:flutter/material.dart'; + +class OptionDialog extends StatelessWidget { + final Offset? position; + final Function? editNickNameFunc, blockFunc, deleteFunc; + + const OptionDialog({ + Key? key, + this.position, + this.editNickNameFunc, + this.blockFunc, + this.deleteFunc, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: InkWell( + highlightColor: Colors.transparent, + splashColor: Colors.transparent, + onTap: () { + Navigator.of(context).pop(); + }, + child: Stack( + fit: StackFit.expand, + children: [ + Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.only( + top: position?.dy ?? 0, + left: 24, + right: 24, + ), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Column( + children: [ + _buildOptionCard( + context: context, + title: "Edit Nickname", + onTap: () { + editNickNameFunc?.call(); + }, + ), + _buildOptionCard( + context: context, + title: "Block", + onTap: () { + blockFunc?.call(); + }, + ), + _buildOptionCard( + context: context, + title: "Delete", + onTap: () { + deleteFunc?.call(); + }, + ), + ], + ), + ), + ], + ), + ], + ), + ), + ); + } + + Widget _buildOptionCard({ + required String title, + required Function onTap, + required BuildContext context, + }) { + return InkWell( + onTap: () { + onTap.call(); + Navigator.of(context).pop(); + }, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + height: 44, + decoration: BoxDecoration( + color: Colors.white, + ), + child: Center( + child: Text( + title, + style: TextStyle( + color: Colors.black, + fontSize: 12, + ), + ), + ), + ), + Container( + height: 1, + width: double.infinity, + decoration: BoxDecoration( + color: Colors.black, + ), + ) + ], + ), + ); + } +} diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index d03ae65b..8778b468 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -2,18 +2,18 @@ import 'package:at_backupkey_flutter/widgets/backup_key_widget.dart'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/side_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/switch_at_sign.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/blocked_contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/settings/widgets/settings_buttons.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import 'package:url_launcher/url_launcher.dart'; @@ -27,21 +27,23 @@ class SettingsScreen extends StatefulWidget { class _SettingsScreenState extends State { final List optionTitle = [ - TextStrings().switchatSign, + TextStrings().blockedAtSign, TextStrings().backUpKeys, + TextStrings().switchatSign, + TextStrings().deleteAtsigns, TextStrings().faqs, TextStrings().contactUs, TextStrings().termsAppBar, - TextStrings().deleteAtsigns, ]; final List optionIcons = [ - ImageConstants.switchAtSign, - ImageConstants.backupKeys, - ImageConstants.faqs, - ImageConstants.contactUsLogo, - ImageConstants.termsAndConditions, - ImageConstants.deleteAtsigns, + AppVectors.icSettingBlock, + AppVectors.icSettingBackup, + AppVectors.icSettingSwitch, + AppVectors.icSettingDelete, + AppVectors.icSettingFAQ, + AppVectors.icSettingContactUs, + AppVectors.icSettingPrivacy, ]; void switchAtsign() async { @@ -82,118 +84,112 @@ class _SettingsScreenState extends State { Widget build(BuildContext context) { SizeConfig().init(context); return Scaffold( + backgroundColor: ColorConstants.background, extendBodyBehindAppBar: true, appBar: AppBarCustom( - height: 330, - title: "Settings", - ), - /*CustomAppBar( - showMenu: false, - showBackButton: true, - showLeadingicon: true, - showTrailingButton: false, - showTitle: true, - showClosedBtnText: false, - title: 'Settings', - ),*/ + height: 330, + title: "Settings", + ), extendBody: true, drawerScrimColor: Colors.transparent, endDrawer: SideBarWidget( isExpanded: true, ), - body: Stack( - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - ImageConstants.welcomeBackground, - ), - fit: BoxFit.fill, - ), + body: SafeArea( + child: ListView( + padding: const EdgeInsets.fromLTRB(31, 0, 31, 24), + children: [ + Text( + 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', + style: CustomTextStyles.black12, ), - ), - SafeArea( - child: ListView( - padding: const EdgeInsets.fromLTRB(31, 0, 31, 24), - children: [ - Text( - 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', - style: CustomTextStyles.black12, - ), - SizedBox( - height: 28, - ), - SettingsButton( - buttonText: optionTitle[0], - onPressed: switchAtsign, - image: optionIcons[0], - ), - SizedBox(height: 20), - SettingsButton( - buttonText: optionTitle[1], - onPressed: () async { - BackupKeyWidget( - atsign: AtClientManager.getInstance() - .atClient - .getCurrentAtSign()!, - ).showBackupDialog(context); - }, - image: optionIcons[1], - ), - Divider( - height: 58, - color: ColorConstants.dividerGrey, - ), - SettingsButton( - buttonText: optionTitle[2], - onPressed: () { - Navigator.pushNamed( - context, - Routes.FAQ_SCREEN, - ); - }, - image: optionIcons[2], - ), - SizedBox(height: 20), - SettingsButton( - buttonText: optionTitle[3], - onPressed: () async { - await launchUrl(Uri( - scheme: 'mailto', path: 'atmospherepro@atsign.com')); - }, - image: optionIcons[3], - ), - SizedBox(height: 20), - SettingsButton( - buttonText: optionTitle[4], - onPressed: () { - Navigator.pushNamed( - context, - Routes.WEBSITE_SCREEN, - arguments: { - 'title': optionTitle[4], - 'url': MixedConstants.PRIVACY_POLICY - }, - ); - }, - image: optionIcons[4], - ), - SizedBox(height: 20), - SettingsButton( - buttonText: optionTitle[5], - onPressed: () async { - CommonUtilityFunctions().showResetAtsignDialog(); + SizedBox( + height: 28, + ), + SettingsButton( + buttonText: optionTitle[0], + onPressed: () async { + await Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) { + return BlockedContactScreen(); + }, + ), + ); + }, + image: optionIcons[0], + ), + SizedBox(height: 32), + SettingsButton( + buttonText: optionTitle[1], + onPressed: () async { + BackupKeyWidget( + atsign: AtClientManager.getInstance() + .atClient + .getCurrentAtSign()!, + ).showBackupDialog(context); + }, + image: optionIcons[1], + ), + SizedBox(height: 16), + SettingsButton( + buttonText: optionTitle[2], + onPressed: switchAtsign, + image: optionIcons[2], + ), + SizedBox(height: 16), + SettingsButton( + buttonText: optionTitle[3], + onPressed: () async { + CommonUtilityFunctions().showResetAtsignDialog(); + }, + image: optionIcons[3], + ), + SizedBox(height: 33), + SettingsButton( + buttonText: optionTitle[4], + onPressed: () { + Navigator.pushNamed( + context, + Routes.FAQ_SCREEN, + ); + }, + image: optionIcons[4], + ), + SizedBox(height: 16), + SettingsButton( + buttonText: optionTitle[5], + onPressed: () async { + await launchUrl( + Uri( + scheme: 'mailto', + path: 'atmospherepro@atsign.com', + ), + ); + }, + image: optionIcons[5], + ), + SizedBox(height: 16), + SettingsButton( + buttonText: optionTitle[6], + onPressed: () { + Navigator.pushNamed( + context, + Routes.WEBSITE_SCREEN, + arguments: { + 'title': optionTitle[6], + 'url': MixedConstants.PRIVACY_POLICY }, - image: optionIcons[5], - ), - SizedBox( - height: 12, - ), - ], + ); + }, + image: optionIcons[6], + ), + SizedBox( + height: 12, ), - ) - ], + ], + ), ), ); } diff --git a/lib/screens/settings/widgets/settings_buttons.dart b/lib/screens/settings/widgets/settings_buttons.dart index 8b5c2aca..39239968 100644 --- a/lib/screens/settings/widgets/settings_buttons.dart +++ b/lib/screens/settings/widgets/settings_buttons.dart @@ -1,6 +1,7 @@ import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; class SettingsButton extends StatelessWidget { const SettingsButton({ @@ -19,28 +20,26 @@ class SettingsButton extends StatelessWidget { return MaterialButton( elevation: 0, onPressed: onPressed, - color: ColorConstants.fadedGreyN, + color: ColorConstants.jetColor, shape: RoundedRectangleBorder( - side: BorderSide( - color: ColorConstants.grey, - width: 1, - style: BorderStyle.solid, - ), borderRadius: BorderRadius.circular(10), ), child: Padding( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 16), child: Row( children: [ - Image.asset( + SvgPicture.asset( image, + color: ColorConstants.textBoxBg, height: 27, width: 27, ), - SizedBox(width: 12), + SizedBox(width: 24), Text( buttonText.toString(), - style: CustomTextStyles.greySemiBold18, + style: CustomTextStyles.whiteMedium18.copyWith( + color: ColorConstants.textBoxBg, + ), ), ], ), diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index 82fb6612..096bb5ea 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -77,11 +77,7 @@ class _ChoiceContactsWidgetState extends State { trustedContacts: trustedProvider.trustedContacts, isSelectMultiContacts: true, showGroups: true, - isShowFilterBar: false, selectedContacts: listContact, - searchBackgroundColor: Colors.white, - searchBorderColor: Colors.white, - hintText: "Search", onSelectContacts: (contacts) { setState(() { listContact = contacts; diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 9dfa5c12..77e35ae9 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -37,12 +37,15 @@ class ColorConstants { static const Color textGray = Color(0xFFA7A7A7); static const Color textGrey = Color(0xFF868686); static const Color textLightGrey = Color(0xFF868686); + static const Color oldSliver = Color(0xFF838383); //NEW UI COLORS static const Color fadedGreyN = Color(0xFFF1F1F1); static const Color dividerGrey = Color(0xFFD9D9D9); static const Color grey = Color(0xFF939393); static const Color orange = Color(0xFFF07C50); + static const Color portlandOrange = Color(0xFFFB6232); + static const Color unbleachedSilk = Color(0xFFFFDACC); static const Color lightGrey = Color(0xFFF1F1F1); static const Color boxGrey = Color(0xFFEFEFEF); static const Color darkGray = Color(0xFFC0C0C0); @@ -59,6 +62,7 @@ class ColorConstants { static const Color backgroundTab = Color(0xFFF6F0E6); static const Color darkSliver = Color(0xFF717171); static const Color lightGray = Color(0xFFD3D3D3); + static const Color jetColor = Color(0xFF363636); } class ContactInitialsColors { diff --git a/lib/utils/text_strings.dart b/lib/utils/text_strings.dart index ebc62408..16fc3c9a 100644 --- a/lib/utils/text_strings.dart +++ b/lib/utils/text_strings.dart @@ -171,7 +171,7 @@ class TextStrings { String removeGroupPhoto = 'Remove Group Photo'; // terms and conditions texts - String termsAppBar = 'Terms & Conditions'; + String termsAppBar = 'Privacy Policy'; String termsAndConditions = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.\n\n Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. \n\n Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.'; @@ -336,7 +336,8 @@ class TextStrings { String switchatSign = 'Switch atSign'; String backUpKeys = 'Backup Your Keys'; String contactUs = 'Contact Us'; - String deleteAtsigns = 'Delete atSign(s)'; + String deleteAtsigns = 'Delete Your Key'; + String blockedAtSign = 'Blocked atSign'; static final String resetButton = 'Reset'; static const String resetDescription = diff --git a/lib/utils/text_styles.dart b/lib/utils/text_styles.dart index e9b1368d..5215cffc 100644 --- a/lib/utils/text_styles.dart +++ b/lib/utils/text_styles.dart @@ -193,6 +193,13 @@ class CustomTextStyles { fontWeight: FontWeight.w500, ); + static TextStyle whiteMedium18 = TextStyle( + color: Colors.white, + fontSize: 18.toFont, + letterSpacing: 0.1, + fontWeight: FontWeight.w500, + ); + /// Desktop static TextStyle greyText16 = TextStyle( diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index 2e582104..b6789f12 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -19,6 +19,7 @@ class AppVectors { static String icContactGroup = '$_basePath/ic_contact_group.svg'; static String icTrust = '$_basePath/ic_trust.svg'; static String icBigTrust = '$_basePath/ic_big_trust.svg'; + static String icWhiteTrust = '$_basePath/ic_white_trust.svg'; static String icBigTrustActivated = '$_basePath/ic_big_trust_activated.svg'; static String icTrash = '$_basePath/ic_trash.svg'; static String icArrow = '$_basePath/ic_arrow.svg'; @@ -29,4 +30,13 @@ class AppVectors { static String icBack = '$_basePath/ic_back.svg'; static String icPlus11px = '$_basePath/ic_plus_11px.svg'; static String icImageGray = '$_basePath/ic_image_gray.svg'; + + static String icSettingBlock = '$_basePath/ic_setting_block.svg'; + static String icSettingBackup = '$_basePath/ic_setting_backup.svg'; + static String icSettingSwitch = '$_basePath/ic_setting_switch.svg'; + static String icSettingDelete = '$_basePath/ic_setting_delete.svg'; + static String icSettingFAQ = '$_basePath/ic_setting_faq.svg'; + static String icSettingContactUs = '$_basePath/ic_setting_contact_us.svg'; + static String icSettingPrivacy = '$_basePath/ic_setting_privacy.svg'; + } From 5187d4f3eb954016fd05b91cc614d401e8090690 Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 4 May 2023 16:24:54 +0700 Subject: [PATCH 56/94] feat: update UI Files Screen --- assets/images/2x/ic_grid_type.png | Bin 0 -> 291 bytes assets/images/2x/ic_grid_type_activate.png | Bin 0 -> 1821 bytes assets/images/2x/ic_list_type.png | Bin 0 -> 225 bytes assets/images/2x/ic_list_type_activate.png | Bin 0 -> 1186 bytes assets/images/3x/ic_grid_type.png | Bin 0 -> 517 bytes assets/images/3x/ic_grid_type_activate.png | Bin 0 -> 3041 bytes assets/images/3x/ic_list_type.png | Bin 0 -> 281 bytes assets/images/3x/ic_list_type_activate.png | Bin 0 -> 2279 bytes assets/images/ic_grid_type.png | Bin 0 -> 302 bytes assets/images/ic_grid_type_activate.png | Bin 0 -> 815 bytes assets/images/ic_list_type.png | Bin 0 -> 190 bytes assets/images/ic_list_type_activate.png | Bin 0 -> 524 bytes assets/svg/ic_arrow_right.svg | 3 + assets/svg/ic_banner_overlay.svg | 3 + assets/svg/ic_category_files.svg | 3 + assets/svg/ic_category_folder.svg | 3 + assets/svg/ic_category_image.svg | 3 + assets/svg/ic_category_other.svg | 5 + assets/svg/ic_category_play.svg | 3 + assets/svg/ic_category_volume.svg | 5 + assets/svg/ic_delete_file.svg | 6 + assets/svg/ic_download_file.svg | 5 + assets/svg/ic_filter.svg | 4 + assets/svg/ic_send_file.svg | 4 + lib/data_models/enums/file_category_type.dart | 75 ++++ lib/data_models/enums/file_types.dart | 48 +-- .../common_widgets/sliver_grid_delegate.dart | 66 ++++ lib/screens/my_files/files_detail_screen.dart | 370 ++++++++++++++++++ lib/screens/my_files/image_view_widget.dart | 203 ++++++++++ lib/screens/my_files/my_files_screen.dart | 258 +++++++++++- lib/screens/settings/settings_screen.dart | 12 +- .../welcome_screen/welcome_screen.dart | 10 +- lib/utils/colors.dart | 4 + lib/utils/images.dart | 7 +- lib/utils/vectors.dart | 14 + lib/view_models/my_files_provider.dart | 20 +- 36 files changed, 1072 insertions(+), 62 deletions(-) create mode 100644 assets/images/2x/ic_grid_type.png create mode 100644 assets/images/2x/ic_grid_type_activate.png create mode 100644 assets/images/2x/ic_list_type.png create mode 100644 assets/images/2x/ic_list_type_activate.png create mode 100644 assets/images/3x/ic_grid_type.png create mode 100644 assets/images/3x/ic_grid_type_activate.png create mode 100644 assets/images/3x/ic_list_type.png create mode 100644 assets/images/3x/ic_list_type_activate.png create mode 100644 assets/images/ic_grid_type.png create mode 100644 assets/images/ic_grid_type_activate.png create mode 100644 assets/images/ic_list_type.png create mode 100644 assets/images/ic_list_type_activate.png create mode 100644 assets/svg/ic_arrow_right.svg create mode 100644 assets/svg/ic_banner_overlay.svg create mode 100644 assets/svg/ic_category_files.svg create mode 100644 assets/svg/ic_category_folder.svg create mode 100644 assets/svg/ic_category_image.svg create mode 100644 assets/svg/ic_category_other.svg create mode 100644 assets/svg/ic_category_play.svg create mode 100644 assets/svg/ic_category_volume.svg create mode 100644 assets/svg/ic_delete_file.svg create mode 100644 assets/svg/ic_download_file.svg create mode 100644 assets/svg/ic_filter.svg create mode 100644 assets/svg/ic_send_file.svg create mode 100644 lib/data_models/enums/file_category_type.dart create mode 100644 lib/screens/common_widgets/sliver_grid_delegate.dart create mode 100644 lib/screens/my_files/files_detail_screen.dart create mode 100644 lib/screens/my_files/image_view_widget.dart diff --git a/assets/images/2x/ic_grid_type.png b/assets/images/2x/ic_grid_type.png new file mode 100644 index 0000000000000000000000000000000000000000..21b9da5d6d0ec0ac959e62d587a2580dd3c934ba GIT binary patch literal 291 zcmeAS@N?(olHy`uVBq!ia0vp^sz9v5!3HGx4t-t*q&N#aB8wRq#DEfFs*IjNDj$G? zjKx9jP7LeL$-D$|SkfJR9T^xl_H+M9WCikfc)B=-R4~4sdYAXG0#D1^70d=q$|Ws5 z7Xq!F+!I=QCh%(TyL{q)w=|Gr;=9QL_MaA3GtBo=ef~!)c!JsLRr}r^jGVRh!%V}b zoi!m-oXY(o0SW}~U!C%$16TF3K5)?k8v i^Rj>puGA9_|CsVV?^29v5BUxB1B0ilpUXO@geCwH2y3SR literal 0 HcmV?d00001 diff --git a/assets/images/2x/ic_grid_type_activate.png b/assets/images/2x/ic_grid_type_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..68cd6fbcb1e1e001e2b3c498f11742435aa20085 GIT binary patch literal 1821 zcmV+&2jcjNP)^Xw z42TGR$q?wD)0A-Urq53<#yBhdcm^=NxcU9#zmzq9 zzdipEWSrw9^N|TlQ31RD;;_*0;GV8%Ml}K0H>0qpYb&0}X;Kk(#atLLmzq!*;}jN6-8JqE z4)cQts@$v8Ol%&{SnY{L7{suYYuiBIMiz1$sjKcIC=o5=s@u3Dkj?9yXuhyOm3u#^ zRYRSkG2q!{+2+E4kM%8N@#fo7SrZ=6xF-F|<}!hmjxZc})NYOmr?`xlbklCC#{r5* zmUWUZXJOK;S3HyaIjvdMK9+D9u2r(ZLokLtQ1wm~+!AL&&Ev}(Kl|?I?xXb;&#eO9 zp`mNBArfkaj6}UU1791{^3Hcpp6agIFjGIXG8)}pNxF|jta?V~Umt;hDAzMGw#wJG z9y#$V+`MkI3m2c8U68PvYezB!VWLuj-cNH=?Yr&MZXX{E@WKU=*TM zTw*8K1ZQaGmZ!G9{^fF6^VhLMA4nqYBMsh4IYQ^!dJR??!*g|2y_Y70@u*jDBZ8Kb zcEg78{ar0&lScv8I1CIn;$VX$ds<*ba7=LE zV&fb`Z9QZ(u&jfet`^clw@QGVAK1qs`ERL?k?IDF*kVyjQH5Lsrcw7Nr|_1!Eu|-< zQDKaw9e)U+;J(P?2ljEAf^@m%$K=Ncb)>R|?WKrrgvU&AU|X~320e^Y>#4hRDw#^^ zE~G-NJcW>r{nayx9j&1ea5f4fHI<_N8g*b%+$uMM;4!pPfd|yV9h7y87_pgqT~Hpl zjDtF4KDpA#4QC~YKT}Uc47r8W^b}=<{A?IoHtwklQRNw78tY>=TCf^6p7+%-w$TTv zEmOR1;Z9YNTE_)%8IzkfW(1nPxw|HZHG={<++kmXIx0#Pb(7zrb#cpuSuKP{u3k>s zZfHd3f+W*ym}Ib|bqzsOG;tg!dv(*3n8OCfO@N`dGM0 z94an0he`NUx;UNL{^7#+6Xt37Ny_*zXk9G%G$t=ibEUPiVqH3W>uV=|?5-iCBVy7A z+_+*{X*s;YY|NUX`i0Gh*SeIO*9~*w;tR9iaEAR>sAq`|yQ6|uV_jy#-!^Sr{{+7E z^_8;d(wlQ1OFSGjf^_~Oi7CM_7_)&N{z2>L`E4(qyjs>={N&K9GXEe1Wk_Kbovz+B z$kT`SO^UCJvemjn|GfjQrvp9ZANKnr84Otm%v(lPb*JaG!%%b(YmHwtfzanNN8FOS5NV9w;;?t4c?$n^no1MgxWO^T zSyP9taZ`$D(UPOz;;_(k)YUvS3J5TT0K?La_Q@3k45=V4l} zZH?Ek4Kh|2@C$%53n%X!bn&pUcdM4h&%K~@V^syIxl-FG+Geqdx3lE^R=fmIH`GII z8>NNR*16S|q4lAhuqqXiMNMj~-O^PM}|)>5e(7 zLvLTXExLp=CSDJ81!{RO*xiINf>M_y9GPumVpMY!?|jT^Xz_rWqSIPwjUgvwr4V&h zytnZFeb`E~Ckk1Zgz^+Ivla~qOAsY%+liKsDLV{md2og8#R7Y~9rF^#D;YF5pYK`d zYWw0MVzVQLo%|0stJ0d*`?+cMkBKaCaxLb=$~11&1U3A=<(-8ex_eVyJ)Lp1x5$UJ z2tW=fD&IK6`Rzv+e(J7ia`o~$q6_^JN@6`z6q5rhb;00000 LNkvXXu0mjfex-A| literal 0 HcmV?d00001 diff --git a/assets/images/2x/ic_list_type.png b/assets/images/2x/ic_list_type.png new file mode 100644 index 0000000000000000000000000000000000000000..9713ab540e11637ca683bd031a3389b8cbd49c41 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^DnKm3!3HEJ?TGgSQk(@Ik;M!QVyYm_=ozH)0Vv2= z9OUlAuCS_S+nosj*~*vi;1>2kxEL zXl zWkn3M-S-J5Mz8|n2?=?#1U3Kx0TB`#ASNJzm9PaQmVkta3CNJppqT)1+s0MpzV~T% zFwz|9>AcgYk6r#$wXgsE`Qy*w_E=_aRb}pOx_Zg*P!|0rJo~;YDm|Qc!J;774qXfp+5gjZ$*yU@mqLDNBwl0Uq4Q(4;m_7F5FY zsWCDY%wU7>$OS-aCkt3Z)@-uZ0jxM>MFCu8M$pC_)+rOK!Dm;>5rwN{CsT+hX(U1= z!5%|dl#z-l0|Dr-CKD(d*Br)dN1aZO<1L8DKsTRCl`x2i zJO~g@vN5EZzi$T6Z6Fby0$4~jQ^2yt^xyR8KOa1-U+vxXwq5@6i%-Al8h&O_gcgCO zx#)SQ-1oY$Yn!rSP&Wwbzw10N=w0l*sLzIlJ1$47)O#t0Vzbs3Y)Pl^?!$-mUDMuw zU@wQW@v#|XaRQ8!Vhx&jQGl9ok>JT}O(IX0lG$e5JaZd9g3NVl*c8)TQ(lp%Lz8mf)w zrM<9yZ4@!3qi(n^$7&fx$`2BXrbBEY+d7WYlo2=It&*IebJbU1{t zpwt2sclD(ML_vMA`8!!rrj9V)qK83#-|rW*rgui!$zYJ`M+BQv?40uf!Ea@|kB{E? zV@L2DFR&T?0z=6&mGUkCF-JrnLjXYzv>{1<5*W4dC~yZ7EBKyHEpLJOX^sA)R>DB$ zt7p&N|IOZAZ`y@9u=f($WZ3z^sZFZ(bOsvGawAD}(-2FV&qy8!tUc1biL zUNeA+aX!a@j|NGbsF`9b^{dYDF~i*%_K-!1ZgT2L4rOulfzIL#Ur!9&g^+WLYx+yc z0cC>aq}a{yRet|rAkEPjsM)!Al&}p7-vb}UuaQIz?9pH%>-@SHAW~A!s?-;k{PP*0 zF@??XagK+YjMoHOa~|SX#~dAW%%ET^=)`2z`0T$N*)N?hHvpW0eabST=~PvzvfYma z1`~G@q?C9@VD;x5K_Ep+Mm^kmh-oAeSAG&GOLytW}X#fBK07*qoM6N<$g3D1g A3IG5A literal 0 HcmV?d00001 diff --git a/assets/images/3x/ic_grid_type.png b/assets/images/3x/ic_grid_type.png new file mode 100644 index 0000000000000000000000000000000000000000..246d0ab55844357d9ccf37fba070a970ff8fb845 GIT binary patch literal 517 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+e>Z&H|6fVg?393lL^>oo1K-6l5$8 za(7}_cTVOdki(Mh=icvYhtby|u?<`&pVVQK1RT`Uo_i+ZT->dFgdj8YbeM+(CzgfOIc&4>R z#AMzz%j?I~j>da3JX-B}cJV*H?k6{m&-os?&-^$?_~Tna_s#ciZK@7qZt+^6ZP9Nr$#1!cd{up{P@jjg!uQz23J)b>|OBkJP=BXXWS~)|Tr3e{lJUJGP0| ztmm^cwqH29ZPG(i$+pBl>g)cy8l9iC;ml*>8(LFN?wb2SHgV>~^rOBRO3K>~ADZ>K zqUT5TLz}LK^^+Wzt+3HkF8gAyvvr+{z-rO0aC?D_i{jfB?wRwhqbsR? zm2ab~%-^lDhxYfnrsO$VtSsy3Vpy}}QXA)GI67vy&DrNsc7@4LIcp>gQtF@1p$3$sb<(8f~rX5AD8=*6SbDi{4!CR1&I}s zTh_!}AwR@c|*>`q+iwda- ztxJ`Fg}-;|;*}rR6F+D2fa}J8lSFwqnCDnOOEZg~*YoxNTl{AKtGt*nrW?};7}2IU zV}$gqtmwWudcu6ZUUO$-!5fFlaklgfCf>B6Zil19iN~Up3{mKMd zgwOFo92(MD!6cZ*Wf~0CCo6>GrX)KM0x!^Vwn#xljSY8c2^XwCoQ(YtNkvlg2(kN; z`Cx_)xuyxusbW}!7MI6>Kfn#<782a+uHx<(zK#d27br!LyXD;?CXmGOY8$hnDYI~L ztb<^KA8J^vQ|{MO8lt(;;Z-(xN{z9_c8@KiUxPm_XdF&Fuc%^r4n7#lan-ljZ~;6G zm;>l&e%VqGwet`#|D|h}(Dt(Xq_yA{RRZ!1;bJ2mbkHNLyRatq0M(2i&ZJ>dh?z{a zDKq%WFqA>4Atkn$YaE2y$kXh2azm=*ypTtzxF!oVH{4K4L4i?SbVV~R6lGbxXx^(y zqbCn__BgX<6Rc%-ZTW>p%TbRDTC|vW`nEq%FR4$rAP>PixHIbA>?-jGH*z7OCgMJ6 zbW(ZUf}UCiS{u>hKP-Lnm*Kv3l=L;NWBmn_vwCFzml>d2CaCT#AQr7<5CFW zv8~8pPze4slTsuG@y;eaLp7TBvdq0R|7l`IEK zz9`%?of%D%adaG(DKnuUY4q4Piu=hBZ!;YA%e8AvNMme&mJcfXDa0ULbH|qA3E$Td z(Xx>4>+u7MteA1@#|7C>Tm2G307j7}w-|rD{@5o}UEW9*;7zp?HLdKIb$M)#k@D!mKf{_%I8lTse2-|s3>uf4w1#1;itWkM=N87=#~v--u!Z(jY!9Koj_*?oI0 zH*fQfd7|hHfBzw&9=`Xz%rAVm zUSv~1LFa6B+3Q+ylpv-NAiPqO2yZ7MaqgVE}>7ANxexoY$^$ewY*W>(HWwIhB z^|$E@t(EJZC)%yIUND=S+n|OKs!+CA(IucO;+V|z9djBcS-+_dmC-y2x`dJ#1j241so?DH6gPt}|b5Er3x&VDn1kZ3$- z*(hix0Fgn6-cmt_F@!R8n1GI&$FvPxp-h&0w|ETcKx;DImjfZ|5Lq!9i=oK^|Q z%g=cF;!)cba&xIhr*rYC}as5Y}XjNSr2rOvppl`Gv4HDW^vLAcmVf9AP87do*b_|LNdk@ zxN(L&XL#Y%WF(J6d9(oyZ;Q3!Aq!%(jZ8{j41^Mnc1bDWJe~J|M7Vf6Vbw~{A*jO& zjFiu`neJo5Aa8P(oH=g6Pd$*C#>_XvP4faU;v%srp3)X!R@U4cauS$7{;aIN0<>10ez9Su@i`KmlIRup7d@73x`XZ8-bn zDaiJFZIj@MyS{quJKMybdUW@!tn>@@g0n5HTlttcTB^E1F4%1;p7PZy>rHxvUVQCC z*Pb~&o;s?ql*LjTYoFiASeO0t$ITENO{d^6A@Ggl9)u$U;!Ab$# zaNizbOuo^pB?anj*23cKG$ddR9oi}=h$tG{5<4cm&{9Dl^(la(Vb<)5uq&y#&+Wf_ zB8)Mx1kc&>fd7Ul`PdL{+Q1oF+V)vd2W^OZU#SDwqWv0i?>M5N_RXILc7#&1O=L8@ zgHk{%u+c=IG}SE8qHv!-(vKuJvWbr3MH>UL1r=Bc_4htND0ltKA}vn5qs?4hz-X^r z$*@xTCWOoxt;dvhm>}k%HrfCN^TBa$ohad^I9FdVhvE-U$Xp7BLUdvP3Fl zV=fd;Hu~6hLu~lJg{}ooSM*p!xjfZ@eo^h$4X)>_jd*T>PQ|MGg7`uqfC@9b_HNbkq{FiXo+Qk83OYRZS%Odo!Km2 zi3$&)qn4rn87eKsmu6{ymjtdEbTWCgfK1##6b~L@fSj5wZjQh_65VYU)n*kdpx6+{ z^D-No4TZ~6jA^{?rHL1YtC!MWRSCOR+YK3V1u#W3$73>Wt`~%4E5-A&D{=sRh#%7N zU8p8(15A_V0_YLlPJ_eUQxd$%lu_Ir3Au5AGnw1Vk%4=FL1VFJt4yyY>eIm-A3LjZ zz`5hog$W2x{S{Y7as{s-WmB+Tc(Jb*-dmwa(21RfJP!*YwhC>w4R-E}6u@X8OGP5b zYG5JFLILqtjNZTZ^U% j+!SxM0*Ss%FX#0l4i*ko-GqG000000NkvXXu0mjf<;b+_ literal 0 HcmV?d00001 diff --git a/assets/images/3x/ic_list_type.png b/assets/images/3x/ic_list_type.png new file mode 100644 index 0000000000000000000000000000000000000000..e0d3dd287be7be08bb9b7c38a03a840023206ba0 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^W+S^M<8 a&zYNZ|L1&ER~7@hoWax8&t;ucLK6TK!)%8D literal 0 HcmV?d00001 diff --git a/assets/images/3x/ic_list_type_activate.png b/assets/images/3x/ic_list_type_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..e4efbfe245aaaba925c7cb3021e6af8c487ad686 GIT binary patch literal 2279 zcmVC1q~%hdJ1YJ6go;C0r3FTG=Nee(SeX?Nr^;(B1Dtj zxyC-nzIQgM)9pyR^Ua<6<9{D}^yw#eABpHAkALFsqN>6xh9n;x@9N6uk>e&K{>S`y zG#yxNp7(f`oZ@+Rbyu^PHx5y&IXNHeJm)Ls#rhcY*i$z@H0Mgsaqf@3xo?h*7~4#b zxQm(OJ7Sgqo(B6J2$wog@!Ks0kwhprGrZ5`UPMR|&NmWyy6+v(}jWT1=fnqUtG3v~P{_x>HDRhJCc}ITxlaAyR4uk`6%5lme}JYQfw5 z3{g)jP>d-Iqos%spAi&WmqN!N@g*GfzjAz!MIXgh_hb|3-|H@0*~5mPki5YchUZSk z0N@AZ16NNo%jXUA;6ULgN0|r$f*cs6vvc2(aZL^beOT+|ecMLfrinQY_N!eZX~q0) zi~N-*Ct2|?obruVwx8wZy18zymwqA6{qx}7dvUv+zxVjNns15w_FLhwlCbAkp)%iH z#JeM%nL}=k6La1!d)%?t#d?1c4u08t)ckAvZrt}gFOaU!ce!0WKa*$DzjNNjuAU=r zKK$W#koWZd-LE4=eOAOWDJv6cqv}NO#Dh9Rec{4D<~oxykUJ77$9z$rMCGJm1GYzF5UL7`})b0z$uX$Iveb%|z{C6rY(x|agKLTHm_lf@wr zrcD#ja`-~tttxI8UFC{4<5fsX`IENeml0g69Qxd< zAW9f}dlv^2zB|$sjib4tkPbr|x4_bpXPIVS4 z3U7dH3=}HW;K4=_!L8DTF3H0ub(vy1Xi+={`aF!r-hCD6Iu3I=&HeF|*S`-xcz-74 zOqTmTljg2W&R{AGcehi5?fLya=XYXFBj5D;yO?{4Y<;;B@Yd^?Xpx+cE5E$O2j8w{ zQog)o;(nIzA{*aAqR!-eiF=6PzdH{fKard3=DN9F`lWw9xOe;Zg@0%j;@K6*Cd`4n za%_A?$j#rF$Fdylh6^@qtZ*foH*!?6jPgJHKZ6g}Rrx=0pJ1VPRdDP`)B+zM?YZvd?i^fmz-26NLw?1R0Z0P%`GB68n2j)d^G0k*}@ zY|U#%{egB05dM{KgVn}Pj2Du9_9XWFJo}1oOW{J&;oX;?iMSK6cb5thR_|6DUe5U< z6A@Gn61F6PIU7R~T|4^N%zs+Y$g5p#;@!=yCT!8uK$`uc0xhHaKH~4d5WF_^Zqhel z^|7H!1Tbh#Kx0N(%}i}*wVI|r+j4dt_mb z)3}k1PwPHA`+utszd&wn*iFs`yakHAfv2u|tb2)GV0RU+bq8NEXu911rIyg5PD`zi z3{(4LV&O%Rh5l=>KwXXWmysl-YblfNg^#kM!ixwTW1@KL2I>5cbX*m4T)#E#7tw->;zs<@>;tO~*YGNLCNuO2)7vc^cd zvrNY)fFaXAyiAIKmi}G=ATfBA^)kP&T{rm|N&ACgHC(Mc^~~HTgEh@YNgjyB)@E7N zx=#e{^K;SQM+PI}>>{r<+NJzJ%Ya`-Xhx$%iNG`aA6h2ZY%NJU=9v&Tm%;99AY{QkC|Uq;xs5X@%@n?v%?a8aAfYS6Sck z@abn%8-WbbB-88%&ALM#ZLHBf>$T-)40GS*)BmzfX7CeEup3F0&fHF z4Tc*_W^eIf$YGE+aN6Z)#$i@;MNP%YsqTR1yQS%|i;kGJ3WPCK@jdJi7UZ2{{h`YK z^1)x*9_`c%y`gwCwsP^r#ZL;kB@UGs?_Bo0LSgUzaIxCh4^wTFbsRrEe6{7KX5Z>( zTe5PK6n0&;Q8IfdJ6EdBW?|LI%m4FCbEBQ*f1P-pwk&>%^@+oN6PBweZv{o?%LBc`;OXk;vd$@?2>?)5anAq% literal 0 HcmV?d00001 diff --git a/assets/images/ic_grid_type_activate.png b/assets/images/ic_grid_type_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..d3c8d197c86d13ea5327e88cdd17e775e245583c GIT binary patch literal 815 zcmV+~1JL}5P)nu~K~#7FtyDXU z6hRQKs_wbRvYvZ)x}c(eMDQM=fgozAfgpkgdL|-*2tEQq)IbmuJ%o!4L>5E?*$oZ^ zBTbCV1doODR+ih-o#`&W>e+Gs!1c29OxNq{@2eW_om=?DL=7ckQdJRtIkVb1|NG*? zrRez{dCJvOp`LS^)}!;c+dnq%F1^EhGufQx?6@UFG>dpjisJhCf(l(MEMB!CB!A;58%_L6MuIjALe_UFhMkLp*Mth(dmEZ$Hc zDL@(;W&V#SB@ru#LU@G{H)VYc*9IU`v>??^LL{`V!iPkth)xVy*eNFaWno%F_L|^o zBoZR)SK6(`TW1%qqC!Kw2H=Z8@@4K>yR~`k*kN(*bj&oeqY%M^P7Yt~zrNn@K3qCZ z88;=P08wJd_`6;05gP}@1*k5>$tnu8NZc7*=L+b{vFGr~m1=Kb>w|_H*mJOygR5Lr zKS)Vll2}b0a#1V6Ab(Jk-js7=ve9dXG8&p>L%bx-p@1UDcCOU1f69m%l>E)>)W(ji+dLqH!yfL$|#Rs z3dwkF_QA)Mty{|{qtiRMUZE2_1iAU-R6JF`+}`LuUw*-!<`g!J#}L=<2uR+8gK{uI zAX+<-9b7zUWR8?Ea&=sunu$AbRZX+l0SgC9B%(!XgCu`a4Ys6az^H^ll?MZ?<(I+4 z81ZihZ1URd*^rifl+?4fFq_RKf@%}4LN!Wa{^d8wv&d64LA^vpR_T)&l-*}`p=tf2 tXcgoQgJDeS;JR;>!;~RLBihI4+dq6OdmIyXa8v*Q002ovPDHLkV1n2sc3c1e literal 0 HcmV?d00001 diff --git a/assets/images/ic_list_type.png b/assets/images/ic_list_type.png new file mode 100644 index 0000000000000000000000000000000000000000..e6c8e5922cab66058cff573105bea453b987cf75 GIT binary patch literal 190 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&J!3HGrh2HJ~Qk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFKz^{Ni(^Oy>ybT6Ct{1JF7?w0T%LvFQ zFizQ^`Qln+#e0>%xwoQ~9f*o!vp4D*eQSJZ8nfwQ hYu&}%-q?#<`NWK+O^*1I=lb? literal 0 HcmV?d00001 diff --git a/assets/images/ic_list_type_activate.png b/assets/images/ic_list_type_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..e8aca48072dfac6011ebb59d31cbedec2c936909 GIT binary patch literal 524 zcmV+n0`vWeP)Uz8H*)AlN%W$vTeEzC-(>(WnTfQfH_@RL;&`%9*3$8=h*# zuXp#aW$!YhaT-zdI-268tMudz)v9C7JabjC|D^gjviY3-tZLyVz8}&2C=QgBgK9@T z3pOq$wyOtri=md{(!iu_Xb{R9$rvMgh^fyen^yw4{_{Xvk#2PU!#<qB6(d9NVH} + + diff --git a/assets/svg/ic_banner_overlay.svg b/assets/svg/ic_banner_overlay.svg new file mode 100644 index 00000000..b215c654 --- /dev/null +++ b/assets/svg/ic_banner_overlay.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_category_files.svg b/assets/svg/ic_category_files.svg new file mode 100644 index 00000000..858dac32 --- /dev/null +++ b/assets/svg/ic_category_files.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_category_folder.svg b/assets/svg/ic_category_folder.svg new file mode 100644 index 00000000..4ca98506 --- /dev/null +++ b/assets/svg/ic_category_folder.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_category_image.svg b/assets/svg/ic_category_image.svg new file mode 100644 index 00000000..6bf33e72 --- /dev/null +++ b/assets/svg/ic_category_image.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_category_other.svg b/assets/svg/ic_category_other.svg new file mode 100644 index 00000000..ef1d7af4 --- /dev/null +++ b/assets/svg/ic_category_other.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_category_play.svg b/assets/svg/ic_category_play.svg new file mode 100644 index 00000000..d6fdfc58 --- /dev/null +++ b/assets/svg/ic_category_play.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_category_volume.svg b/assets/svg/ic_category_volume.svg new file mode 100644 index 00000000..975afe3e --- /dev/null +++ b/assets/svg/ic_category_volume.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_delete_file.svg b/assets/svg/ic_delete_file.svg new file mode 100644 index 00000000..d588a6a2 --- /dev/null +++ b/assets/svg/ic_delete_file.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/assets/svg/ic_download_file.svg b/assets/svg/ic_download_file.svg new file mode 100644 index 00000000..e233af3b --- /dev/null +++ b/assets/svg/ic_download_file.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_filter.svg b/assets/svg/ic_filter.svg new file mode 100644 index 00000000..0eb8ce15 --- /dev/null +++ b/assets/svg/ic_filter.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_send_file.svg b/assets/svg/ic_send_file.svg new file mode 100644 index 00000000..8b833b73 --- /dev/null +++ b/assets/svg/ic_send_file.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/data_models/enums/file_category_type.dart b/lib/data_models/enums/file_category_type.dart new file mode 100644 index 00000000..08c4a2f2 --- /dev/null +++ b/lib/data_models/enums/file_category_type.dart @@ -0,0 +1,75 @@ +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; + +enum FileType { photo, file, audio, video, zips, other } + +extension GenderTypeExtension on FileType { + String get text { + switch (this) { + case FileType.photo: + return 'Photos'; + case FileType.file: + return 'Files'; + case FileType.audio: + return 'Audio'; + case FileType.video: + return 'Videos'; + case FileType.zips: + return 'Zips'; + case FileType.other: + return 'Other'; + } + } + + String get image { + switch (this) { + case FileType.photo: + return AppVectors.icCategoryImage; + case FileType.file: + return AppVectors.icCategoryFiles; + case FileType.audio: + return AppVectors.icCategoryVolume; + case FileType.video: + return AppVectors.icCategoryPlay; + case FileType.zips: + return AppVectors.icCategoryFolder; + case FileType.other: + return AppVectors.icCategoryOther; + } + } + + List get backgroundColor { + switch (this) { + case FileType.photo: + return [ + Color(0xFFF07C50), + Color(0xFFD86033), + ]; + case FileType.file: + return [ + Color(0xFFE98C49), + Color(0xFFFE8228), + ]; + case FileType.audio: + return [ + Color(0xFFFFB13D), + Color(0xFFFFAD33), + ]; + case FileType.video: + return [ + Color(0xFFE47140), + Color(0xFFF67137), + ]; + case FileType.zips: + return [ + Color(0xFFF09650), + Color(0xFFFD8E28), + ]; + case FileType.other: + return [ + Color(0xFFF1B65C), + Color(0xFFFFB545), + ]; + } + } +} diff --git a/lib/data_models/enums/file_types.dart b/lib/data_models/enums/file_types.dart index 77792431..4e73bd89 100644 --- a/lib/data_models/enums/file_types.dart +++ b/lib/data_models/enums/file_types.dart @@ -1,24 +1,24 @@ -enum FileType { all, photo, video, audio, apk, document, unknown } - -extension GenderTypeExtension on FileType { - String get text { - switch (this) { - case FileType.all: - return 'All'; - case FileType.photo: - return 'Photo'; - case FileType.video: - return 'Video'; - case FileType.audio: - return 'Audio'; - case FileType.apk: - return 'APK'; - case FileType.document: - return 'Document'; - case FileType.unknown: - return 'Unknown'; - default: - return ''; - } - } -} +// enum FileType { all, photo, video, audio, apk, document, unknown } +// +// extension GenderTypeExtension on FileType { +// String get text { +// switch (this) { +// case FileType.all: +// return 'All'; +// case FileType.photo: +// return 'Photo'; +// case FileType.video: +// return 'Video'; +// case FileType.audio: +// return 'Audio'; +// case FileType.apk: +// return 'APK'; +// case FileType.document: +// return 'Document'; +// case FileType.unknown: +// return 'Unknown'; +// default: +// return ''; +// } +// } +// } diff --git a/lib/screens/common_widgets/sliver_grid_delegate.dart b/lib/screens/common_widgets/sliver_grid_delegate.dart new file mode 100644 index 00000000..d4b8d478 --- /dev/null +++ b/lib/screens/common_widgets/sliver_grid_delegate.dart @@ -0,0 +1,66 @@ +import 'package:flutter/rendering.dart'; + +class SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight + extends SliverGridDelegate { + /// Creates a delegate that makes grid layouts with a fixed number of tiles in + /// the cross axis. + /// + /// All of the arguments must not be null. The `mainAxisSpacing` and + /// `crossAxisSpacing` arguments must not be negative. The `crossAxisCount` + /// and `childAspectRatio` arguments must be greater than zero. + const SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight({ + required this.crossAxisCount, + this.mainAxisSpacing = 0.0, + this.crossAxisSpacing = 0.0, + this.height = 56.0, + }) : assert(crossAxisCount > 0), + assert(mainAxisSpacing >= 0), + assert(crossAxisSpacing >= 0), + assert(height > 0); + + /// The number of children in the cross axis. + final int crossAxisCount; + + /// The number of logical pixels between each child along the main axis. + final double mainAxisSpacing; + + /// The number of logical pixels between each child along the cross axis. + final double crossAxisSpacing; + + /// The height of the crossAxis. + final double height; + + bool _debugAssertIsValid() { + assert(crossAxisCount > 0); + assert(mainAxisSpacing >= 0.0); + assert(crossAxisSpacing >= 0.0); + assert(height > 0.0); + return true; + } + + @override + SliverGridLayout getLayout(SliverConstraints constraints) { + assert(_debugAssertIsValid()); + final double usableCrossAxisExtent = + constraints.crossAxisExtent - crossAxisSpacing * (crossAxisCount - 1); + final double childCrossAxisExtent = usableCrossAxisExtent / crossAxisCount; + final double childMainAxisExtent = height; + return SliverGridRegularTileLayout( + crossAxisCount: crossAxisCount, + mainAxisStride: childMainAxisExtent + mainAxisSpacing, + crossAxisStride: childCrossAxisExtent + crossAxisSpacing, + childMainAxisExtent: childMainAxisExtent, + childCrossAxisExtent: childCrossAxisExtent, + reverseCrossAxis: axisDirectionIsReversed(constraints.crossAxisDirection), + ); + } + + @override + bool shouldRelayout( + SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight oldDelegate) { + return oldDelegate.crossAxisCount != crossAxisCount || + oldDelegate.mainAxisSpacing != mainAxisSpacing || + oldDelegate.crossAxisSpacing != crossAxisSpacing || + oldDelegate.height != height; + } +} diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart new file mode 100644 index 00000000..44cdb3a5 --- /dev/null +++ b/lib/screens/my_files/files_detail_screen.dart @@ -0,0 +1,370 @@ +import 'dart:io'; + +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/sliver_grid_delegate.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/image_view_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_slidable/flutter_slidable.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; +import 'package:provider/provider.dart'; + +class FilesDetailScreen extends StatefulWidget { + final FileType? type; + + const FilesDetailScreen({ + Key? key, + required this.type, + }) : super(key: key); + + @override + State createState() => _FilesDetailScreenState(); +} + +class _FilesDetailScreenState extends State { + bool isGridType = true; + late TextEditingController searchController; + late MyFilesProvider provider; + + @override + void initState() { + searchController = TextEditingController(); + provider = context.read(); + super.initState(); + provider.changeTypeSelected(widget.type); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: ColorConstants.background, + appBar: AppBar( + backgroundColor: ColorConstants.background, + title: Text( + widget.type != null ? "${widget.type!.text}" : "All Files", + style: TextStyle( + fontSize: 25, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + centerTitle: false, + actions: [ + Container( + margin: EdgeInsets.symmetric( + vertical: 6, + horizontal: 21, + ), + padding: EdgeInsets.symmetric( + vertical: 4, + horizontal: 6, + ), + decoration: BoxDecoration( + color: ColorConstants.dividerGrey, + borderRadius: BorderRadius.circular(30), + ), + child: Row( + children: [ + InkWell( + onTap: () { + setState(() { + isGridType = !isGridType; + }); + }, + child: Container( + height: 34, + width: 34, + decoration: BoxDecoration( + color: isGridType ? Colors.white : Colors.transparent, + borderRadius: BorderRadius.circular(17), + ), + padding: EdgeInsets.all(8), + child: Image.asset( + isGridType + ? ImageConstants.icGridTypeActivate + : ImageConstants.icGridType, + ), + ), + ), + InkWell( + onTap: () { + setState(() { + isGridType = !isGridType; + }); + }, + child: Container( + height: 34, + width: 34, + decoration: BoxDecoration( + color: isGridType ? Colors.transparent : Colors.white, + borderRadius: BorderRadius.circular(17), + ), + padding: EdgeInsets.all(8), + child: Image.asset( + isGridType + ? ImageConstants.icListType + : ImageConstants.icListTypeActivate, + ), + ), + ), + ], + ), + ) + ], + ), + body: SafeArea( + top: false, + child: Column( + children: [ + Padding( + padding: EdgeInsets.symmetric(horizontal: 32, vertical: 28), + child: SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.zero, + ), + ), + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.only(bottom: 75), + child: Consumer( + builder: (context, provider, _) { + final files = provider.displayFiles; + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + isGridType + ? _buildGridView(files) + : _buildListView(files), + Padding( + padding: EdgeInsets.only(top: 75), + child: Text( + "${files.length} items", + style: TextStyle( + fontSize: 13, + color: ColorConstants.textGrey, + ), + ), + ) + ], + ); + }, + ), + ), + ), + ], + ), + ), + ); + } + + Widget _buildGridView(List files) { + return Container( + margin: EdgeInsets.symmetric(horizontal: 36), + child: GridView.builder( + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + shrinkWrap: true, + itemCount: files.length, + gridDelegate: SliverGridDelegateWithFixedCrossAxisCountAndFixedHeight( + crossAxisCount: 4, + crossAxisSpacing: 24, + mainAxisSpacing: 22, + height: 104, + ), + itemBuilder: (context, index) { + return InkWell( + onTap: () { + if (widget.type == FileType.photo) { + _onTapPhotoItem.call(files[index]); + } else { + /// handler + } + }, + child: Column( + children: [ + Container( + height: 85, + decoration: BoxDecoration( + color: ColorConstants.lightSliver, + borderRadius: BorderRadius.circular(5), + ), + ), + Spacer(), + Text( + files[index].fileName ?? "", + style: TextStyle( + color: Colors.black, + fontSize: 8.toFont, + fontWeight: FontWeight.w500, + ), + ) + ], + ), + ); + }, + ), + ); + } + + Widget _buildListView(List files) { + return ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.symmetric(horizontal: 32), + physics: NeverScrollableScrollPhysics(), + itemCount: files.length, + separatorBuilder: (context, index) => SizedBox(height: 10), + itemBuilder: (context, index) { + final date = DateTime.parse(files[index].date ?? "").toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + + return Slidable( + actionPane: const SlidableDrawerActionPane(), + actionExtentRatio: 0.11, + secondaryActions: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icDownloadFile, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icSendFile, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icDeleteFile, + ), + ), + ], + child: Container( + key: UniqueKey(), + padding: EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Row( + children: [ + Container( + height: 49, + width: 38, + decoration: BoxDecoration( + color: ColorConstants.lightSliver, + borderRadius: BorderRadius.circular(5), + ), + ), + SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + "${files[index].fileName}", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w600, + fontSize: 10, + ), + ), + ), + Text( + "$shortDate", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + SizedBox(height: 7), + Text( + "${(files[index].contactName ?? '').split("@")[1]}", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w600, + fontSize: 10, + ), + ), + SizedBox(height: 1), + Row( + children: [ + Expanded( + child: Text( + "${files[index].contactName}", + style: TextStyle( + color: Colors.black, + fontSize: 10, + ), + ), + ), + Text( + AppUtils.getFileSizeString( + bytes: files[index].size ?? 0, + decimals: 2, + ), + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ) + ], + ), + ], + ), + ) + ], + ), + ), + ); + }, + ); + } + + void _onTapPhotoItem(FilesDetail file) { + showDialog( + context: context, + builder: (context) => ImageViewWidget( + image: file, + ), + ); + } +} diff --git a/lib/screens/my_files/image_view_widget.dart b/lib/screens/my_files/image_view_widget.dart new file mode 100644 index 00000000..eb49986c --- /dev/null +++ b/lib/screens/my_files/image_view_widget.dart @@ -0,0 +1,203 @@ +import 'dart:io'; + +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; + +class ImageViewWidget extends StatelessWidget { + final FilesDetail image; + + const ImageViewWidget({ + Key? key, + required this.image, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + final date = DateTime.parse(image.date ?? "").toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + return Scaffold( + backgroundColor: Colors.transparent, + body: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.only( + left: 31, + top: 16, + bottom: 16, + ), + child: InkWell( + borderRadius: BorderRadius.circular(20), + onTap: () { + Navigator.of(context).pop(); + }, + child: Icon( + Icons.close, + color: Colors.white, + size: 33, + ), + ), + ), + Expanded( + child: Container( + // height: double.infinity, + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + image: DecorationImage( + image: FileImage( + File(image.filePath ?? ''), + ), + fit: BoxFit.cover, + ), + ), + ), + ), + SizedBox(height: 24), + Align( + alignment: Alignment.center, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: 48, + height: 48, + child: SvgPicture.asset( + AppVectors.icDownloadFile, + ), + ), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 12, + ), + child: SizedBox( + width: 48, + height: 48, + child: SvgPicture.asset( + AppVectors.icSendFile, + ), + ), + ), + SizedBox( + width: 48, + height: 48, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + ), + ), + ], + ), + ), + SizedBox(height: 32), + Container( + height: 175, + width: double.infinity, + padding: EdgeInsets.fromLTRB(24, 16, 18, 16), + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topRight, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ), + Text( + "${image.fileName}", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + SizedBox(height: 5), + Text( + AppUtils.getFileSizeString( + bytes: image.size ?? 0, + decimals: 2, + ), + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + SizedBox(height: 10), + Text( + "${(image.contactName ?? '').split("@")[1]}", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w600, + fontSize: 12, + ), + ), + SizedBox(height: 1), + Text( + "${image.contactName}", + style: TextStyle( + color: Colors.black, + fontSize: 10, + ), + ), + SizedBox(height: 13), + Text( + "Message:", + style: TextStyle( + color: ColorConstants.textLightGray, + fontWeight: FontWeight.w500, + fontSize: 10, + ), + ), + SizedBox(height: 5), + Text( + "${image.date}", + style: TextStyle( + color: ColorConstants.textLightGray, + fontWeight: FontWeight.w500, + fontSize: 10, + ), + ), + ], + ), + ), + SizedBox(height: 16), + ], + ), + ); + } +} diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 20444a5a..67567cc6 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -1,17 +1,19 @@ import 'dart:io'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/files_detail_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; @@ -44,25 +46,253 @@ class _MyFilesScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: ColorConstants.background, appBar: AppBarCustom( height: 130, - title: "My Files", - description: "${context.watch().allFiles.length}", + title: "Files", ), - body: Stack( - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - ImageConstants.welcomeBackground, + body: _buildBody(), + ); + } + + Widget _buildBody() { + return SingleChildScrollView( + physics: ClampingScrollPhysics(), + padding: EdgeInsets.only(left: 34, bottom: 32), + child: ProviderHandler( + load: (provider) async { + await provider.getMyFilesRecords(); + await provider.getAllFiles(); + }, + functionName: 'all_files', + showError: false, + successBuilder: (provider) { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Padding( + padding: EdgeInsets.only( + top: 18.toHeight, + right: 32.toWidth, + ), + child: Row( + children: [ + Expanded( + child: SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.zero, + ), + ), + SizedBox(width: 16), + SvgPicture.asset( + AppVectors.icFilter, + ), + ], + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 20), + child: Text( + "Recent", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + ), + provider.recentFile.isNotEmpty + ? Padding( + padding: const EdgeInsets.only(bottom: 20), + child: SizedBox( + height: 112, + child: ListView.separated( + scrollDirection: Axis.horizontal, + itemCount: provider.recentFile.length, + padding: EdgeInsets.zero, + physics: ClampingScrollPhysics(), + separatorBuilder: (context, index) => SizedBox( + width: 16, + ), + itemBuilder: (context, index) { + return SizedBox( + width: 66, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Stack( + children: [ + Container( + height: 85, + width: 66, + decoration: BoxDecoration( + color: ColorConstants.lightSliver, + borderRadius: + BorderRadius.circular(5), + ), + ), + Align( + alignment: Alignment.topRight, + child: SvgPicture.asset( + AppVectors.icBannerOverlay, + ), + ), + ], + ), + SizedBox(height: 8), + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 8), + child: Text( + "${provider.recentFile[index].filePath!.split(Platform.pathSeparator).last}", + style: TextStyle( + color: Colors.black, + fontSize: 10, + fontWeight: FontWeight.w500, + ), + maxLines: 1, + overflow: TextOverflow.ellipsis, + ), + ), + ], + ), + ); + }, + ), + ), + ) + : SizedBox(), + Text( + "Category", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + SizedBox( + width: double.infinity, + child: Wrap( + children: _generateChildren(), ), - fit: BoxFit.fill, ), - ), + SizedBox(height: 32), + Container( + height: 56, + width: double.infinity, + margin: EdgeInsets.only(left: 2, right: 36), + padding: EdgeInsets.symmetric( + horizontal: 28, + vertical: 18, + ), + decoration: BoxDecoration( + color: ColorConstants.raisinBlack, + borderRadius: BorderRadius.circular(10), + ), + child: InkWell( + onTap: () { + navigateToFilesDetail(); + }, + child: Row( + children: [ + Text( + "All Files", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Colors.white, + ), + ), + SizedBox(width: 8), + Text( + "${context.watch().allFiles.length}", + style: TextStyle( + fontSize: 13, + fontWeight: FontWeight.w400, + color: ColorConstants.gray2, + ), + ), + Spacer(), + SvgPicture.asset( + AppVectors.icArrowRight, + ), + ], + ), + ), + ), + ], + ); + }, + ), + ); + } + + Widget _generateItem(FileType fileType) { + return InkWell( + onTap: () { + navigateToFilesDetail(type: fileType); + }, + child: Container( + width: (MediaQuery.of(context).size.width - 110) / 3, + height: 100, + margin: EdgeInsets.only(right: 20, top: 20), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: fileType.backgroundColor, ), - buildBody(), - ], + ), + child: Center( + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + fileType.image, + ), + Text( + fileType.text, + style: TextStyle( + color: Colors.white, + fontSize: 8.toFont, + ), + ), + ], + ), + ), + ), + ); + } + + List _generateChildren() { + List items = []; + + for (int i = 0; i < FileType.values.length; i++) { + items.add( + _generateItem(FileType.values[i]), + ); + } + + return items; + } + + void navigateToFilesDetail({FileType? type}) { + Navigator.push( + context, + MaterialPageRoute( + builder: (_) => FilesDetailScreen( + type: type, + ), ), ); } diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index 8778b468..ad08abe3 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -85,16 +85,16 @@ class _SettingsScreenState extends State { SizeConfig().init(context); return Scaffold( backgroundColor: ColorConstants.background, - extendBodyBehindAppBar: true, + // extendBodyBehindAppBar: true, appBar: AppBarCustom( height: 330, title: "Settings", ), - extendBody: true, - drawerScrimColor: Colors.transparent, - endDrawer: SideBarWidget( - isExpanded: true, - ), + // extendBody: true, + // drawerScrimColor: Colors.transparent, + // endDrawer: SideBarWidget( + // isExpanded: true, + // ), body: SafeArea( child: ListView( padding: const EdgeInsets.fromLTRB(31, 0, 31, 24), diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index cdfded1c..471c6d47 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -108,11 +108,11 @@ class _WelcomeScreenState extends State { bottomNavigationBar: customBottomNavigationBar(), key: _scaffoldKey, backgroundColor: ColorConstants.background, - extendBody: true, - drawerScrimColor: Colors.transparent, - endDrawer: SideBarWidget( - isExpanded: true, - ), + // extendBody: true, + // drawerScrimColor: Colors.transparent, + // endDrawer: SideBarWidget( + // isExpanded: true, + // ), body: SafeArea( bottom: false, child: Consumer( diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 77e35ae9..b0c008e6 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -38,6 +38,7 @@ class ColorConstants { static const Color textGrey = Color(0xFF868686); static const Color textLightGrey = Color(0xFF868686); static const Color oldSliver = Color(0xFF838383); + static const Color textLightGray = Color(0xFFBCBCBC); //NEW UI COLORS static const Color fadedGreyN = Color(0xFFF1F1F1); @@ -51,6 +52,7 @@ class ColorConstants { static const Color darkGray = Color(0xFFC0C0C0); static const Color buttonGrey = Color(0xFFC7C7C7); static const Color gray = Color(0xFF9B9B9B); + static const Color gray2 = Color(0xFFB9B9B9); static const Color sidebarTextUnselected = Color(0xFFA4A4A5); static const Color sidebarTextSelected = Color(0xFF000000); @@ -63,6 +65,8 @@ class ColorConstants { static const Color darkSliver = Color(0xFF717171); static const Color lightGray = Color(0xFFD3D3D3); static const Color jetColor = Color(0xFF363636); + static const Color lightSliver = Color(0xFFD8D8D8); + static const Color raisinBlack = Color(0xFF252525); } class ContactInitialsColors { diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 5db1be6d..206fea92 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -90,4 +90,9 @@ class ImageConstants { static String icUserActivate = '$_basePath/ic_user_activate.png'; static String icUserInactivate = '$_basePath/ic_user_inactivate.png'; static String icImage = '$_basePath/ic_image.png'; -} \ No newline at end of file + + static String icGridTypeActivate = '$_basePath/ic_grid_type_activate.png'; + static String icGridType = '$_basePath/ic_grid_type.png'; + static String icListTypeActivate = '$_basePath/ic_list_type_activate.png'; + static String icListType = '$_basePath/ic_list_type.png'; +} diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index b6789f12..d27e7542 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -38,5 +38,19 @@ class AppVectors { static String icSettingFAQ = '$_basePath/ic_setting_faq.svg'; static String icSettingContactUs = '$_basePath/ic_setting_contact_us.svg'; static String icSettingPrivacy = '$_basePath/ic_setting_privacy.svg'; + static String icFilter = '$_basePath/ic_filter.svg'; + static String icBannerOverlay = '$_basePath/ic_banner_overlay.svg'; + static String icCategoryVolume = '$_basePath/ic_category_volume.svg'; + static String icCategoryFolder = '$_basePath/ic_category_folder.svg'; + static String icCategoryImage = '$_basePath/ic_category_image.svg'; + static String icCategoryOther = '$_basePath/ic_category_other.svg'; + static String icCategoryPlay = '$_basePath/ic_category_play.svg'; + static String icCategoryFiles = '$_basePath/ic_category_files.svg'; + static String icArrowRight = '$_basePath/ic_arrow_right.svg'; + static String icGridType = '$_basePath/ic_grid_type.svg'; + static String icListType = '$_basePath/ic_list_type.svg'; + static String icDeleteFile = '$_basePath/ic_delete_file.svg'; + static String icSendFile = '$_basePath/ic_send_file.svg'; + static String icDownloadFile = '$_basePath/ic_download_file.svg'; } diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index dd7cd6be..c61358c4 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -2,7 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:at_client_mobile/at_client_mobile.dart'; -import 'package:at_commons/at_commons.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_apk.dart'; @@ -21,7 +21,6 @@ import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; -import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:flutter/material.dart'; @@ -51,7 +50,7 @@ class MyFilesProvider extends BaseModel { List tabs = [Recents()]; Map> filesByAlpha = {}; - FileType typeSelected = FileType.all; + FileType? typeSelected; init() async { await getMyFilesRecords(); @@ -71,30 +70,27 @@ class MyFilesProvider extends BaseModel { tabNames = ['Recents']; } - void changeTypeSelected(FileType type) { + void changeTypeSelected(FileType? type) { typeSelected = type; displayFiles = filterFiles(type); - notifyListeners(); } - List filterFiles(FileType type) { + List filterFiles(FileType? type) { switch (type) { - case FileType.all: - return allFiles; case FileType.photo: return receivedPhotos; case FileType.video: return receivedVideos; case FileType.audio: return receivedAudio; - case FileType.apk: + case FileType.zips: return receivedApk; - case FileType.document: + case FileType.file: return receivedDocument; - case FileType.unknown: + case FileType.other: return receivedUnknown; default: - return []; + return allFiles; } } From 4e5dc0ad1371d1a5b2be4718c08d8f37a756b3f4 Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 5 May 2023 09:21:05 +0700 Subject: [PATCH 57/94] feat: update UI Contact Screen --- lib/data_models/enums/contact_type.dart | 12 +- lib/screens/common_widgets/search_widget.dart | 4 +- .../blocked_contact_screen.dart | 8 +- .../contact_new_version/contact_screen.dart | 33 ++-- .../group_contact_screen.dart | 4 +- .../widget/contacts_widget.dart | 56 +----- .../widget/empty_contact_widget.dart | 177 +++++++++++------- .../widget/list_contact_widget.dart | 37 ++-- .../widgets/choice_contacts_widget.dart | 39 +++- 9 files changed, 202 insertions(+), 168 deletions(-) diff --git a/lib/data_models/enums/contact_type.dart b/lib/data_models/enums/contact_type.dart index ce7001d3..5b93ff4c 100644 --- a/lib/data_models/enums/contact_type.dart +++ b/lib/data_models/enums/contact_type.dart @@ -1,14 +1,16 @@ -enum ContactsType { contact, trusted, groups } +enum ListContactType { contact, trusted, groups, all} -extension ContactsTypeExtension on ContactsType { +extension ContactsTypeExtension on ListContactType { String get display { switch (this) { - case ContactsType.contact: + case ListContactType.contact: return "Contacts"; - case ContactsType.trusted: + case ListContactType.trusted: return "Trusted"; - case ContactsType.groups: + case ListContactType.groups: return "Groups"; + case ListContactType.all: + return "All"; } } } diff --git a/lib/screens/common_widgets/search_widget.dart b/lib/screens/common_widgets/search_widget.dart index 75e90b5e..140938e3 100644 --- a/lib/screens/common_widgets/search_widget.dart +++ b/lib/screens/common_widgets/search_widget.dart @@ -9,6 +9,7 @@ class SearchWidget extends StatefulWidget { final String? hintText; final TextStyle? hintStyle; final EdgeInsetsGeometry? margin; + final Function(String value)? onChange; const SearchWidget({ Key? key, @@ -18,6 +19,7 @@ class SearchWidget extends StatefulWidget { this.hintText, this.hintStyle, this.margin, + this.onChange, }) : super(key: key); @override @@ -41,7 +43,7 @@ class _SearchWidgetState extends State { child: TextFormField( controller: widget.controller, onChanged: (value) { - setState(() {}); + widget.onChange?.call(value); }, decoration: InputDecoration( enabledBorder: OutlineInputBorder( diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index 52814efc..a790d2b3 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -54,6 +54,9 @@ class _BlockedContactScreenState extends State { borderColor: Colors.white, backgroundColor: Colors.white, hintText: "Search", + onChange: (value) { + setState(() {}); + }, hintStyle: TextStyle( color: ColorConstants.darkSliver, fontSize: 15, @@ -99,8 +102,9 @@ class _BlockedContactScreenState extends State { ), ), Padding( - padding: - const EdgeInsets.symmetric(vertical: 24), + padding: const EdgeInsets.symmetric( + vertical: 24, + ), child: Text( "Empty Contacts", style: TextStyle( diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index 445477e7..e90708ae 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -41,6 +41,7 @@ class _ContactScreenState extends State Widget build(BuildContext context) { return Scaffold( backgroundColor: ColorConstants.background, + resizeToAvoidBottomInset: false, appBar: AppBarCustom( title: "Contacts", suffixIcon: Padding( @@ -133,6 +134,9 @@ class _ContactScreenState extends State 36.toWidth, 0, ), + onChange: (value) { + setState(() {}); + }, ), Container( height: 56.toHeight, @@ -171,8 +175,9 @@ class _ContactScreenState extends State physics: NeverScrollableScrollPhysics(), children: [ ListContactWidget( - contactsType: ContactsType.contact, + contactsType: ListContactType.contact, trustedContacts: trustedProvider.trustedContacts, + searchKeywords: searchController.text, onTapContact: (contact) async { final result = await Navigator.push( context, @@ -189,30 +194,26 @@ class _ContactScreenState extends State }, ), ListContactWidget( - contactsType: ContactsType.trusted, - isOnlyShowContactTrusted: true, + contactsType: ListContactType.trusted, trustedContacts: trustedProvider.trustedContacts, + searchKeywords: searchController.text, onTapContact: (contact) async { - await showModalBottomSheet( - context: context, - isScrollControlled: true, - useRootNavigator: true, - backgroundColor: Colors.transparent, - builder: (BuildContext context) { - return ContactDetailScreen( + await Navigator.push( + context, + MaterialPageRoute( + builder: (context) => ContactDetailScreen( contact: contact, onTrustFunc: () { Navigator.of(context).pop(); }, - ); - }, + ), + ), ); }, ), ListContactWidget( - contactsType: ContactsType.groups, - showGroups: true, - showContacts: false, + contactsType: ListContactType.groups, + searchKeywords: searchController.text, onTapGroup: (group) async { WidgetsBinding.instance.addPostFrameCallback((_) async { _groupService.groupViewSink.add(group); @@ -248,7 +249,7 @@ class _ContactScreenState extends State ), child: Center( child: Text( - ContactsType.values[index].display, + ListContactType.values[index].display, style: TextStyle( color: isCurrentTab ? Colors.white : Colors.black, fontSize: 12, diff --git a/lib/screens/contact_new_version/group_contact_screen.dart b/lib/screens/contact_new_version/group_contact_screen.dart index 4be67b41..f2ab23d1 100644 --- a/lib/screens/contact_new_version/group_contact_screen.dart +++ b/lib/screens/contact_new_version/group_contact_screen.dart @@ -1,6 +1,7 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/screens/group_view/group_view.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -118,8 +119,7 @@ class _GroupContactScreenState extends State { const SizedBox(height: 30), Expanded( child: ListContactWidget( - showGroups: true, - showContacts: false, + contactsType: ListContactType.groups, isShowAlpha: false, onTapGroup: (group) async { WidgetsBinding.instance diff --git a/lib/screens/contact_new_version/widget/contacts_widget.dart b/lib/screens/contact_new_version/widget/contacts_widget.dart index c84c038b..54587344 100644 --- a/lib/screens/contact_new_version/widget/contacts_widget.dart +++ b/lib/screens/contact_new_version/widget/contacts_widget.dart @@ -1,17 +1,14 @@ import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_card_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/group_card_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:flutter/material.dart'; class ContactsWidget extends StatefulWidget { - final bool showGroups, - showContacts, - isShowAlpha, - isSelectMultiContacts, - isOnlyShowContactTrusted; + final bool isShowAlpha, isSelectMultiContacts; final Function(AtContact contact)? onTapContact; final Function(AtGroup group)? onTapGroup; @@ -19,19 +16,15 @@ class ContactsWidget extends StatefulWidget { final List? selectedContacts; final List? trustedContacts; final List contacts; - final String searchValue; final Function? onRefresh; final EdgeInsetsGeometry? padding, contactPadding; + final ListContactType? contactsType; const ContactsWidget({ Key? key, required this.contacts, - this.showGroups = false, - this.showContacts = true, this.isShowAlpha = true, this.isSelectMultiContacts = false, - this.isOnlyShowContactTrusted = false, - this.searchValue = '', this.onTapContact, this.onTapGroup, this.onSelectContacts, @@ -40,6 +33,7 @@ class ContactsWidget extends StatefulWidget { this.onRefresh, this.padding, this.contactPadding, + this.contactsType, }) : super(key: key); @override @@ -78,7 +72,7 @@ class _ContactsWidgetState extends State { currentChar = 'Others'; } - if (widget.isOnlyShowContactTrusted) { + if (widget.contactsType == ListContactType.trusted) { for (var element in (widget.trustedContacts ?? [])) { trustedContacts.add( GroupContactsModel( @@ -88,7 +82,7 @@ class _ContactsWidgetState extends State { } } - final listContact = widget.isOnlyShowContactTrusted + final listContact = widget.contactsType == ListContactType.trusted ? trustedContacts : widget.contacts; @@ -186,31 +180,6 @@ class _ContactsWidgetState extends State { ); } - // creates a list of contacts by merging atsigns and groups. - List getAllContactList( - List allGroupContactData) { - var _filteredList = []; - for (var c in allGroupContactData) { - if (widget.showContacts && - c?.contact != null && - (c?.contact?.atSign ?? '').toString().toUpperCase().contains( - widget.searchValue.toUpperCase(), - )) { - _filteredList.add(c); - } - if (widget.showGroups && - c?.group != null && - c?.group?.displayName != null && - (c?.group?.displayName ?? '').toUpperCase().contains( - widget.searchValue.toUpperCase(), - )) { - _filteredList.add(c); - } - } - - return _filteredList; - } - /// returns list of atsigns, that matches with [currentChar] in [_filteredList] List getContactsForAlphabets( List _filteredList, @@ -221,8 +190,7 @@ class _ContactsWidgetState extends State { /// contacts, groups that does not starts with alphabets if (alphabetIndex == 26) { for (var c in _filteredList) { - if (widget.showContacts && - c?.contact != null && + if (c?.contact != null && !RegExp(r'^[a-z]+$').hasMatch( (c?.contact?.atSign?[1] ?? '').toLowerCase(), )) { @@ -230,9 +198,7 @@ class _ContactsWidgetState extends State { } } for (var c in _filteredList) { - if (widget.showGroups && - c?.group != null && - (c?.group?.displayName ?? '').isNotEmpty) { + if (c?.group != null && (c?.group?.displayName ?? '').isNotEmpty) { if (!RegExp(r'^[a-z]+$').hasMatch( (c?.group?.displayName?[0] ?? '').toLowerCase(), )) { @@ -242,7 +208,7 @@ class _ContactsWidgetState extends State { } } else { for (var c in _filteredList) { - if (widget.showContacts && c?.contact != null) { + if (c?.contact != null) { if (c?.contact?.atSign?[1].toUpperCase() == currentChar) { contactsForAlphabet.add(c); } @@ -250,9 +216,7 @@ class _ContactsWidgetState extends State { } for (var c in _filteredList) { - if (widget.showGroups && - c?.group != null && - (c?.group?.displayName ?? '').isNotEmpty) { + if (c?.group != null && (c?.group?.displayName ?? '').isNotEmpty) { if (c?.group?.displayName?[0].toUpperCase() == currentChar) { contactsForAlphabet.add(c); } diff --git a/lib/screens/contact_new_version/widget/empty_contact_widget.dart b/lib/screens/contact_new_version/widget/empty_contact_widget.dart index 98163ad6..b610acb5 100644 --- a/lib/screens/contact_new_version/widget/empty_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/empty_contact_widget.dart @@ -1,5 +1,4 @@ import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -7,7 +6,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; class EmptyContactsWidget extends StatelessWidget { - final ContactsType? contactsType; + final ListContactType? contactsType; const EmptyContactsWidget({ Key? key, @@ -16,100 +15,136 @@ class EmptyContactsWidget extends StatelessWidget { @override Widget build(BuildContext context) { - return contactsType == ContactsType.groups || - contactsType == ContactsType.contact + return contactsType == ListContactType.groups || + contactsType == ListContactType.contact ? _buildEmptyImage() - : Padding( - padding: const EdgeInsets.only(top: 100), - child: SizedBox( - width: double.infinity, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "Add contacts to trusted by", - style: TextStyle( - fontSize: 18, - color: ColorConstants.grey, - ), - ), - Row( + : contactsType == ListContactType.trusted + ? Padding( + padding: const EdgeInsets.only(top: 100), + child: SizedBox( + width: double.infinity, + child: Column( mainAxisSize: MainAxisSize.min, - children: [ + children: [ Text( - "selecting", + "Add contacts to trusted by", style: TextStyle( fontSize: 18, color: ColorConstants.grey, ), ), - SvgPicture.asset( - AppVectors.icBigTrustActivated, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "selecting", + style: TextStyle( + fontSize: 18, + color: ColorConstants.grey, + ), + ), + SvgPicture.asset( + AppVectors.icBigTrustActivated, + ), + Text( + "next to their name!", + style: TextStyle( + fontSize: 18, + color: ColorConstants.grey, + ), + ), + ], ), - Text( - "next to their name!", - style: TextStyle( - fontSize: 18, - color: ColorConstants.grey, + ], + ), + ), + ) + : Center( + child: SingleChildScrollView( + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: 122, + width: 226, + child: Image.asset( + ImageConstants.emptyBox, + ), + ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 24), + child: Text( + "No Contacts", + style: TextStyle( + fontSize: 20, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), ), ), ], ), - ], - ), - ), - ); + ), + ); } Widget _buildEmptyImage() { return Center( - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - SizedBox( - height: 122, - width: 226, - child: Image.asset( - ImageConstants.emptyBox, - ), - ), - Padding( - padding: const EdgeInsets.symmetric(vertical: 24), - child: Text( - contactsType == ContactsType.groups ? "No Groups" : "No Contacts", - style: TextStyle( - fontSize: 20, - fontWeight: FontWeight.w500, - color: ColorConstants.grey, + child: SingleChildScrollView( + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + height: 122, + width: 226, + child: Image.asset( + ImageConstants.emptyBox, ), ), - ), - InkWell( - borderRadius: BorderRadius.circular(46), - onTap: () async {}, - child: Container( - decoration: BoxDecoration( - color: ColorConstants.orange, - borderRadius: BorderRadius.circular(46), - ), - padding: EdgeInsets.symmetric( - horizontal: 13, - vertical: 8, - ), + Padding( + padding: const EdgeInsets.symmetric(vertical: 24), child: Text( - contactsType == ContactsType.groups - ? "Add Group" - : "Add Contact", + contactsType == ListContactType.groups + ? "No Groups" + : "No Contacts", style: TextStyle( - color: Colors.white, - fontSize: 15, + fontSize: 20, fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + ), + ), + InkWell( + borderRadius: BorderRadius.circular(46), + onTap: () async {}, + child: Container( + decoration: BoxDecoration( + color: ColorConstants.orange, + borderRadius: BorderRadius.circular(46), + ), + padding: EdgeInsets.symmetric( + horizontal: 13, + vertical: 8, + ), + child: Text( + contactsType == ListContactType.groups + ? "Add Group" + : "Add Contact", + style: TextStyle( + color: Colors.white, + fontSize: 15, + fontWeight: FontWeight.w500, + ), ), ), ), - ), - SizedBox(height: 100), - ], + SizedBox(height: 100), + ], + ), ), ); } diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index 2799d088..1850497c 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -12,26 +12,19 @@ import 'package:flutter/material.dart'; import 'empty_contact_widget.dart'; class ListContactWidget extends StatefulWidget { - final bool showGroups, - showContacts, - isShowAlpha, - isSelectMultiContacts, - isOnlyShowContactTrusted; + final bool isShowAlpha, isSelectMultiContacts; final Function(AtContact contact)? onTapContact; final Function(AtGroup contact)? onTapGroup; final Function(List contacts)? onSelectContacts; final List? trustedContacts; final List? selectedContacts; - final ContactsType? contactsType; + final ListContactType? contactsType; final String searchKeywords; const ListContactWidget({ Key? key, - this.showGroups = false, - this.showContacts = true, this.isShowAlpha = true, this.isSelectMultiContacts = false, - this.isOnlyShowContactTrusted = false, this.onTapContact, this.onTapGroup, this.onSelectContacts, @@ -47,18 +40,25 @@ class ListContactWidget extends StatefulWidget { class _ListContactWidgetState extends State { late GroupService _groupService; - - ContactFilter selectedContactType = ContactFilter.all; - bool showContacts = true; + bool showContacts = false; bool showGroups = false; @override void initState() { _groupService = GroupService(); - showContacts = widget.showContacts; - showGroups = widget.showGroups; - _groupService.fetchGroupsAndContacts(); + if (widget.contactsType == ListContactType.all) { + showContacts = true; + showGroups = true; + } else if (widget.contactsType == ListContactType.groups) { + showContacts = false; + showGroups = true; + } else { + showContacts = true; + showGroups = false; + } + + _groupService.fetchGroupsAndContacts(); super.initState(); } @@ -90,12 +90,9 @@ class _ListContactWidgetState extends State { radius: const Radius.circular(11), child: ContactsWidget( contacts: _filteredList, - searchValue: widget.searchKeywords, - showGroups: widget.showGroups, - showContacts: widget.showContacts, + contactsType: widget.contactsType, isShowAlpha: widget.isShowAlpha, isSelectMultiContacts: widget.isSelectMultiContacts, - isOnlyShowContactTrusted: widget.isOnlyShowContactTrusted, onTapContact: widget.onTapContact, onTapGroup: widget.onTapGroup, onSelectContacts: widget.onSelectContacts, @@ -116,7 +113,6 @@ class _ListContactWidgetState extends State { List getAllContactList( List allGroupContactData) { var _filteredList = []; - for (var c in allGroupContactData) { if (showContacts && c?.contact != null && @@ -135,7 +131,6 @@ class _ListContactWidgetState extends State { _filteredList.add(c); } } - return _filteredList; } } diff --git a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart index 096bb5ea..5d7f6780 100644 --- a/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart +++ b/lib/screens/welcome_screen/widgets/choice_contacts_widget.dart @@ -1,8 +1,11 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/add_contact_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; @@ -25,9 +28,11 @@ class _ChoiceContactsWidgetState extends State { late TrustedContactProvider trustedProvider; late List listContact; late GroupService _groupService; + late TextEditingController searchController; @override void initState() { + searchController = TextEditingController(); _groupService = GroupService(); trustedProvider = context.read(); listContact = widget.selectedContacts ?? []; @@ -62,7 +67,7 @@ class _ChoiceContactsWidgetState extends State { children: [ _buildHeaderWidget(), Padding( - padding: const EdgeInsets.only(left: 27), + padding: const EdgeInsets.only(left: 27, top: 10), child: Text( "Send To:", style: TextStyle( @@ -72,12 +77,33 @@ class _ChoiceContactsWidgetState extends State { ), ), ), + SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.fromLTRB( + 36.toWidth, + 11.toHeight, + 36.toWidth, + 10.toHeight, + ), + onChange: (value) { + setState(() {}); + }, + ), Expanded( child: ListContactWidget( trustedContacts: trustedProvider.trustedContacts, isSelectMultiContacts: true, - showGroups: true, + contactsType: ListContactType.all, selectedContacts: listContact, + searchKeywords: searchController.text, onSelectContacts: (contacts) { setState(() { listContact = contacts; @@ -134,7 +160,10 @@ class _ChoiceContactsWidgetState extends State { Navigator.of(context).pop(); }, child: Padding( - padding: EdgeInsets.symmetric(vertical: 10, horizontal: 6), + padding: EdgeInsets.symmetric( + vertical: 10, + horizontal: 6, + ), child: SvgPicture.asset( AppVectors.icBack, ), @@ -163,7 +192,7 @@ class _ChoiceContactsWidgetState extends State { margin: EdgeInsets.only(top: 10, right: 8), padding: EdgeInsets.symmetric(horizontal: 20), decoration: BoxDecoration( - color: Colors.white, + color: ColorConstants.orange, borderRadius: BorderRadius.circular(20), ), child: Row( @@ -171,6 +200,7 @@ class _ChoiceContactsWidgetState extends State { Text( "Add New", style: TextStyle( + color: Colors.white, fontSize: 15, fontWeight: FontWeight.w500, ), @@ -178,6 +208,7 @@ class _ChoiceContactsWidgetState extends State { SizedBox(width: 9), SvgPicture.asset( AppVectors.icPlus11px, + color: Colors.white, ), ], ), From 2dad53253d4419b207238d5bfe5c8ac0ebd9277c Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 5 May 2023 09:32:47 +0700 Subject: [PATCH 58/94] feat: update icon bottom bar --- assets/images/2x/ic_history_activate.png | Bin 4472 -> 2993 bytes assets/images/2x/ic_history_inactivate.png | Bin 1580 -> 1044 bytes assets/images/3x/ic_history_activate.png | Bin 8009 -> 5386 bytes assets/images/3x/ic_history_inactivate.png | Bin 2233 -> 1438 bytes assets/images/ic_history_activate.png | Bin 1850 -> 1361 bytes assets/images/ic_history_inactivate.png | Bin 865 -> 694 bytes lib/screens/history/history_screen.dart | 1 - 7 files changed, 1 deletion(-) diff --git a/assets/images/2x/ic_history_activate.png b/assets/images/2x/ic_history_activate.png index 5f567e7801fa5c19ac62fbcb36ddd1f085d05f6c..fd96396e93fc842cb498127aec9374d270139cc5 100644 GIT binary patch delta 2972 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 delta 4463 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 e3EkS2nGNE05wnwt&t%#e+9uw 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∋!E1}oXz7%K(-&B?j9h>gk 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 delta 1820 zcmV+%2jlqB3c3yS}DdtTVBNk5=o3K)Ua@4ifu6%MbxMZNJ-O%su7F?7l5${ zCc1#2#6$>~5Cb+Y{7H0Wq|)*ejWHw`B}(E35=()$Qp#V!d*}F_Gq3f%*Y|i2LO04u zZsy*ZbLW2Z&H0;a%x(D(3gzoOf7jO7NX#2?J4c>5Q_&i4EG5Pn&%_DtrS%k{wP>x4 z*@=!^oRBq%hmJ}2d0aN4VN7`3mzRB1yXM>elEIyCZQRI)H-%9QGly1{y=O-X4nPzb zK8Tj3jg7My56@&NW&x;+AnC(`LYtlg{eGA^T3NTY`;VgFz}Q2?=BNS+f09WW<3o%m zfRKp+!U2?g5cgm%Nk~B@0$5nI0PG{xML*udy@3uE5R=Ry3nSC#%YA#@ssk5u!9`h5 z-n0>rDI%hio=iJ#PmB$Za)4V=X%#(3p{;PCy<$eq6<=X0>@~(*2Dhd%BEBp-WlmcW zM}N-;%1)UAtftCL*<9TJe|%kVMEsyhBlB$bRPQ-(z)X&u8rs_Qf+qqf_Ar*2`IKzt z12##p33+0>Y$j2#)fa^g5_>Hm*~|&l0+7ykJh}k}*B}Ni9!Kg3V%RLtY{e@h`Iy=q zR_D{644nu%=1rVDlqKYS(>#AuxeSw1Hj$cv;(O3KJ}G39M+W5_Y_rC5iWfEfW|t z;aPMf`lO%1G5}*kM#h1O!0)Uuj}=8W;^NF@Y^wyKvF_@Rdk>yl(R?4`QUk^r{K>ZA zj?|i+bMlr?1cFm{f7da^L_&80{kwXzzJ-1hLXQs|76TVvG8u7hT&j2XoJ4cd+#+EY zXb^{pfijLn9c zWCU14A2P$iDPik#A=W$%t8K8!WxBdh`GVe1^1g|^h1uQp6qz2!PZ&0rTPU+j>W1mx!|Ts z2|MC1;zdQliJBH5q~2;um7%qb_u!Qs0FlC@SBEy{2==XqW3-iJ7o1O0h&Xc*u%E;H zwd&PU1RxSee+9Bpc7_-ODXdZH>5Iy#3#`;@^&#NcZK>U`zbi*g>b9e}K0mX)sTF!H z@tA3)?>DX( ze6Q(?p%0qd$NFZj>fMW)ZYyE`(TdmBz;PGn&OLGOe@J5}iZN4~So0d<4l6k3uWB~- zd@?q~+Z(H3d>vSA3aH!8;&~k4i~G9~$h(DUFJ@@?$%#{ENQjD>QourShv&Yr$p9WO(~c@21a$G&4ga3(AcrWf(-g5XG!I(#-!bK|1SVLPXVf&g%W$6=#Ihc_jKf4PYM)R?LUZR=65P0Ll`$ghTr^=oya z^ikc|7{bR?INu!gS`4AWxtuk9HdK2;ss*XVuuscIUTr!QN3wnCRoR52DTKHh`cU{* zNwujp9`RHYS1!TOrKsIUSoc}%Z-Rz^`%gqa* zfA@`+*iO%;l4g={7S*ymNgs|AJ=TTdQ~LBCeZx#qOYOSuQ>KW3wL19SCPbm>a_EN5 z4%98{UY*5N=0o+ao-RXU!|!P0?UvsGBwj)85D*B1lk zynh>0%`h59K%Py$%++K@Xmb6NM!lEB@J3~X+C2@6;OW@9g) z0a#9G=sW7gh9jy3NwdXkIsKO){G#9!{@UO>sn%aEO&T}_xTU!R$G|o#OzQs-a#nlP zlUVqN5^NR!RP+~yrJs_RcIGDhNdcz-w>6;hjRfFhvhAqn08~JQ|0`k===&9>{Mn4< z`+vLMT(=zDm>_(l0O(%p>>NF*X%>mj#L>lLsn#FPn%nY!m45&;0idH$b9vVQ0000< KMNUMnLSTY3E^nm( diff --git a/assets/images/ic_history_inactivate.png b/assets/images/ic_history_inactivate.png index 526ffe35e5d2144ee424a0373fe382e431dac667..5fda40dd903afffda62edfb8ad5d9d05214247f3 100644 GIT binary patch delta 654 zcmV;90&)G}2DSwuiBL{Q4GJ0x0000DNk~Le0000M0000Y2nGNE09#)vfRQ0Je@jV3 zK~#7Fy;jSS+CUI(4JzQcC#v`yLFk*-#&cXCC7tHi{9 zzn{`A*5Sch$pMa(9g9()U5xu3lmvy%t3^`SvBZ@imspd%O`!|P0VMmb)my~D_^-t7 zhJ<1GAUQy!eWtbAyx3^te_5NJNp7Nh)%Z~Nt+w_CN)b4u7h$P-7XmWS!#i!h>GgWg z8H-&Bc%I9U+PQK?5~J2;B&d>v@+1lBO5nqlgrRN3x$|shk{aM8Z0o%9LU#~HDAr^| zX>LpKac^wo#cqG-PXy^5iiwoBl%De0)Ld!;8|PwMdT;@-z6V3{HqVpuEiBL{Q4GJ0x0000DNk~Le0000d0000c2nGNE07w6VkdYxZfA&d4 zK~#7F?O5Aw;y@I=5MF=F7ZUI@RIpA5&_Ox~R6w=@Oa;kSu%v<|72pn*4)97mB)|;I*|9P97#t!+ITD%~&+E*6&Or2qPl!~|$JuOF-|zPwR0X{Qu(pF@m`fX?`|EFUn`Z0Mel>&bUJOLWKy)N#39Dek{kl1e+9MHP_5I2 zSS%K?RLan{IT^`&bVGckw?;x+a&Z8|FCwtErFRRZ%f{~wHrz*F!>z+YdSWRF5a)E&Ce5o@BIK~? zz_;NKWP=yqFq;m9UnY}@e+j$mxE;vp9hgMl9|y1Y*711U3?s&A4;f~}rTeW~t(x-2 z<3i+exhMbHSCivYyLCvgrxIfak!g=rYI57{L)`44cy-$#+df&Ft^lOQHY60HU9}&c zTMTQ1P)}(V`FTJ|kpmf_G>2jDfgo^NB;_(I9p?Y~bOms7RT4T$fBiAw+i@Pqc_f=; z`Z|eQQj)f^xe4cZB2DM1$-aSqNAR104xVL@K7>-Yd9(F;?MX?> zRf?VBXc8Q}ku_Rc%zhzx-vtYMdIXKNRoz{k`ShBCKfl%ec@B#9}Ws_5r!`GK#TwY002ovPDHLk FV1j@Li#h-R diff --git a/lib/screens/history/history_screen.dart b/lib/screens/history/history_screen.dart index bae1a4a1..0ba3ab16 100644 --- a/lib/screens/history/history_screen.dart +++ b/lib/screens/history/history_screen.dart @@ -1,5 +1,4 @@ import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_button.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/received_file_list_tile.dart'; From 28dfbedc30774fa8edffe67ea55048071f61220e Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 5 May 2023 12:22:48 +0700 Subject: [PATCH 59/94] feat: update history screen --- .../history/transfer_history_screen.dart | 171 ++++++++++++++++-- .../history/widgets/history_card_widget.dart | 127 +++++++++++++ .../widgets/received_file_list_tile.dart | 1 + lib/screens/history/widgets/test.dart | 67 +++++++ lib/screens/my_files/my_files_screen.dart | 1 - lib/utils/colors.dart | 2 + lib/view_models/history_provider.dart | 7 +- 7 files changed, 361 insertions(+), 15 deletions(-) create mode 100644 lib/screens/history/widgets/history_card_widget.dart create mode 100644 lib/screens/history/widgets/test.dart diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 9ad7aa1e..a1425719 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -4,15 +4,19 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_button.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/labelled_circular_progress.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; +import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/history_card_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/sent_file_list_tile.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; -import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -37,11 +41,13 @@ class TransferHistoryScreen extends StatefulWidget { class _TransferHistoryScreenState extends State { bool isLoading = false; + late HistoryProvider historyProvider; late HistoryProvider provider; late TextEditingController searchController; @override void initState() { + historyProvider = context.read(); provider = context.read(); searchController = TextEditingController(); super.initState(); @@ -50,25 +56,164 @@ class _TransferHistoryScreenState extends State { @override Widget build(BuildContext context) { return Scaffold( + backgroundColor: ColorConstants.background, appBar: AppBarCustom( height: 130, - title: "Transfer History", + title: "History", ), - body: Stack( - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage( - ImageConstants.welcomeBackground, + body: _buildBody(), + ); + } + + Widget _buildBody() { + return Column( + children: [ + Padding( + padding: EdgeInsets.only( + top: 18.toHeight, + right: 22.toWidth, + left: 34.toWidth, + bottom: 16.toHeight, + ), + child: Row( + children: [ + Expanded( + child: SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.zero, + ), + ), + SizedBox(width: 16), + SvgPicture.asset( + AppVectors.icFilter, + ), + ], + ), + ), + Expanded( + child: RefreshIndicator( + onRefresh: () async { + if (historyProvider.status[historyProvider.PERIODIC_REFRESH] != + Status.Loading) { + await historyProvider.getSentHistory(); + } + }, + child: ProviderHandler( + functionName: historyProvider.SENT_HISTORY, + showError: false, + successBuilder: (provider) { + if ((provider.sentHistory.isEmpty)) { + return ListView.separated( + padding: EdgeInsets.only(bottom: 170.toHeight), + physics: AlwaysScrollableScrollPhysics(), + separatorBuilder: (context, index) => + Divider(indent: 16.toWidth), + itemCount: 1, + itemBuilder: (context, index) => Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + height: SizeConfig().screenHeight - 120.toHeight, + child: Center( + child: Text( + 'No files sent', + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.normal, + ), + ), + ), + ), + ), + ); + } else { + List filteredSentHistory = []; + provider.sentHistory.forEach((element) { + if (element.sharedWith!.any( + (ShareStatus sharedStatus) => sharedStatus.atsign! + .contains(provider.getSearchText), + ) || + (element.groupName != null && + element.groupName!.toLowerCase().contains( + provider.getSearchText.toLowerCase()))) { + filteredSentHistory.add(element); + } + }); + + if (filteredSentHistory.isNotEmpty) { + return ListView.separated( + padding: EdgeInsets.only(bottom: 170.toHeight), + physics: AlwaysScrollableScrollPhysics(), + separatorBuilder: (context, index) { + return Divider( + indent: 16.toWidth, + ); + }, + itemCount: filteredSentHistory.length, + itemBuilder: (context, index) { + return HistoryCardWidget(); + + // SentFilesListTile( + // sentHistory: filteredSentHistory[index], + // key: Key(filteredSentHistory[index].fileDetails!.key), + // ); + + }, + ); + } else { + return Center( + child: Text('No results found'), + ); + } + } + }, + errorBuilder: (provider) => ListView.separated( + padding: EdgeInsets.only(bottom: 170.toHeight), + physics: AlwaysScrollableScrollPhysics(), + separatorBuilder: (context, index) => + Divider(indent: 16.toWidth), + itemCount: 1, + itemBuilder: (context, index) => Padding( + padding: const EdgeInsets.all(8.0), + child: SizedBox( + height: SizeConfig().screenHeight - 120.toHeight, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'Some error occured', + style: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.normal, + ), + ), + SizedBox(height: 10.toHeight), + CustomButton( + isOrange: true, + buttonText: TextStrings().retry, + height: 40.toHeight, + width: 115.toWidth, + onPressed: () { + historyProvider.getSentHistory(); + }, + ) + ], + ), + ), ), - fit: BoxFit.fill, ), + load: (provider) async {}, ), ), - buildBody(), - ], - ), + ), + ], ); } diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart new file mode 100644 index 00000000..67d5f724 --- /dev/null +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -0,0 +1,127 @@ +import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class HistoryCardWidget extends StatefulWidget { + final FileHistory? fileHistory; + + const HistoryCardWidget({ + Key? key, + this.fileHistory, + }) : super(key: key); + + @override + State createState() => _HistoryCardWidgetState(); +} + +class _HistoryCardWidgetState extends State { + bool isExpanded = false; + + @override + Widget build(BuildContext context) { + return Container( + height: 74, + width: double.infinity, + margin: EdgeInsets.only(left: 36, right: 18), + padding: EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + decoration: BoxDecoration( + color: isExpanded ? Color(0xFFD7D7D7) : Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + "Anna", + style: TextStyle( + fontSize: 10, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + ), + SizedBox(width: 8), + Text( + "04/07/23", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "14:09", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + SizedBox(width: 6), + Container( + height: 10, + width: 10, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + color: ColorConstants.lightGreen, + ), + child: Icon( + Icons.check, + size: 8, + color: ColorConstants.textGreen, + ), + ), + SizedBox(width: 4), + Container( + height: 16, + padding: EdgeInsets.symmetric(horizontal: 8, vertical: 2), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(33), + color: ColorConstants.lightGreen, + ), + child: Center( + child: Text( + "Received", + style: TextStyle( + color: ColorConstants.textGreen, + fontSize: 8, + ), + ), + ), + ), + ], + ), + Text( + "@Antartica45", + style: TextStyle( + fontSize: 8, + color: Colors.black, + ), + ), + Row( + children: [ + Text( + "message", + style: TextStyle( + fontSize: 10, + ), + ) + ], + ) + ], + ), + ); + } +} diff --git a/lib/screens/history/widgets/received_file_list_tile.dart b/lib/screens/history/widgets/received_file_list_tile.dart index 97a27ab2..635d6a3e 100644 --- a/lib/screens/history/widgets/received_file_list_tile.dart +++ b/lib/screens/history/widgets/received_file_list_tile.dart @@ -52,6 +52,7 @@ class _ReceivedFilesListTileState extends State { isDownloadAvailable = false, isFilesAvailableOfline = true, isOverwrite = false; + DateTime? sendTime; Uint8List? videoThumbnail, image; int fileSize = 0; diff --git a/lib/screens/history/widgets/test.dart b/lib/screens/history/widgets/test.dart new file mode 100644 index 00000000..9350278f --- /dev/null +++ b/lib/screens/history/widgets/test.dart @@ -0,0 +1,67 @@ +// class ksk { +// getAllFileTransferData() async { +// setStatus(GET_ALL_FILE_DATA, Status.Loading); +// List tempReceivedHistoryLogs = []; +// +// List fileTransferAtkeys = +// await AtClientManager.getInstance().atClient.getAtKeys( +// regex: MixedConstants.FILE_TRANSFER_KEY, +// ); +// +// fileTransferAtkeys.retainWhere((element) => +// !element.key!.contains(MixedConstants.FILE_TRANSFER_ACKNOWLEDGEMENT)); +// +// bool isNewKeyAvailable = false; +// fileTransferAtkeys.forEach((AtKey atkey) { +// if (receivedItemsId[atkey.key] == null) { +// isNewKeyAvailable = true; +// } +// receivedItemsId[atkey.key] = true; +// }); +// +// if (!isNewKeyAvailable) { +// return; +// } +// +// for (var atKey in fileTransferAtkeys) { +// var isCurrentAtsign = compareAtSign( +// atKey.sharedBy!, BackendService.getInstance().currentAtSign!); +// +// if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { +// receivedItemsId[atKey.key] = true; +// +// AtValue atvalue = await AtClientManager.getInstance() +// .atClient +// .get(atKey) +// // ignore: return_of_invalid_type_from_catch_error +// .catchError((e) { +// print("error in getting atValue in getAllFileTransferData : $e"); +// //// Removing exception as called in a loop +// // ExceptionService.instance.showGetExceptionOverlay(e); +// return AtValue(); +// }); +// +// if (atvalue != null && atvalue.value != null) { +// try { +// FileTransferObject fileTransferObject = +// FileTransferObject.fromJson(jsonDecode(atvalue.value))!; +// +// FileTransfer filesModel = +// convertFiletransferObjectToFileTransfer(fileTransferObject); +// +// filesModel.sender = atKey.sharedBy!; +// +// if (filesModel.key != null) { +// tempReceivedHistoryLogs.insert(0, filesModel); +// } +// } catch (e) { +// print('error in getAllFileTransferData file model conversion: $e'); +// } +// } +// } +// } +// +// receivedHistoryLogs = tempReceivedHistoryLogs; +// setStatus(GET_ALL_FILE_DATA, Status.Done); +// } +// } \ No newline at end of file diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 67567cc6..4050415f 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -1,7 +1,6 @@ import 'dart:io'; import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; -import 'package:atsign_atmosphere_pro/data_models/enums/file_types.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index b0c008e6..498c389f 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -24,6 +24,8 @@ class ColorConstants { static const Color redAlert = Color(0xffF86060); static const Color red = Color(0xFFe34040); static const Color successGreen = Color(0xFF0ACB21); + static const Color lightGreen = Color(0xFFE1EDCC); + static const Color textGreen = Color(0xFF67A700); static const Color selago = Color(0xFFFFFAFA); static const Color mildGrey = Color(0xFFE4E4E4); static const Color selected_list = Color(0xFFFEF7F7); diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index fd8737fc..a6dc7ac5 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -42,7 +42,7 @@ class HistoryProvider extends BaseModel { String DOWNLOAD_FILE = 'download_file'; String DOWNLOAD_ACK = 'download_ack'; List sentHistory = [], tempSentHistory = []; - List receivedHistoryLogs = []; + List receivedHistoryLogs = []; ///SONLT2 List Received Map> downloadedFileAcknowledgement = {}; Map individualSentFileId = {}, receivedItemsId = {}; String? state; @@ -410,16 +410,19 @@ class HistoryProvider extends BaseModel { ..key = MixedConstants.SENT_FILE_HISTORY ..sharedBy = AtClientManager.getInstance().atClient.getCurrentAtSign() ..metadata = Metadata(); + var keyValue = await AtClientManager.getInstance().atClient.get(key).catchError((e) { print('error in getSentHistory : $e'); ExceptionService.instance.showGetExceptionOverlay(e); return AtValue(); }); + if (keyValue != null && keyValue.value != null) { try { Map historyFile = json.decode((keyValue.value) as String) as Map; sendFileHistory['history'] = historyFile['history']; + historyFile['history'].forEach((value) { FileHistory filesModel = FileHistory.fromJson(value); // checking for download acknowledged @@ -628,6 +631,7 @@ class HistoryProvider extends BaseModel { setStatus(DOWNLOAD_ACK, Status.Done); } + ///kkk getReceivedHistory({bool setLoading = true}) async { if (setLoading) { setStatus(RECEIVED_HISTORY, Status.Loading); @@ -846,6 +850,7 @@ class HistoryProvider extends BaseModel { for (var atKey in fileTransferAtkeys) { var isCurrentAtsign = compareAtSign( atKey.sharedBy!, BackendService.getInstance().currentAtSign!); + if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; From b114dcc3fa1eddb536b23956bae6724365dd9d73 Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Thu, 4 May 2023 14:43:11 +0530 Subject: [PATCH 60/94] feat: created contact detail screen --- .env | 0 assets/images/open_file_icon.png | Bin 0 -> 279 bytes ios/Podfile.lock | 2 +- .../contact_detail_screen.dart | 317 +++++---- .../widget/contact_attachment_card.dart | 355 ++++++++++ lib/services/common_utility_functions.dart | 47 ++ pubspec.lock | 613 ++++++++++++------ 7 files changed, 1004 insertions(+), 330 deletions(-) create mode 100644 .env create mode 100644 assets/images/open_file_icon.png create mode 100644 lib/screens/contact_new_version/widget/contact_attachment_card.dart diff --git a/.env b/.env new file mode 100644 index 00000000..e69de29b diff --git a/assets/images/open_file_icon.png b/assets/images/open_file_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a2732c62bb3f31f65bf507e9c3baac0f7e25e2c5 GIT binary patch literal 279 zcmeAS@N?(olHy`uVBq!ia0vp^JV4CH!3HFy_x^nYq&N#aB8wRqxP?KOkzv*x37{Zj zage(c!@6@aFM%AEbVpxD28NCO+z65Cs><|cG8a7Ynf9c~e%8r=30+%$ zojbMiqR5HnH$`mT@2i-;Szeaizxc*Kk986f7wfLrerb4OLSrK=vb8cAwd*kCpnFssUOnqnQ#BRD>Vx?DdrO!(9 Y%Ck!9f_Zj*KzB2Ey85}Sb4q9e0Jj)vv;Y7A literal 0 HcmV?d00001 diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 32ae023e..1dae9316 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -269,4 +269,4 @@ SPEC CHECKSUMS: PODFILE CHECKSUM: a69c71e5c6dcbb517b96ee8fed9f0c82ee0b181a -COCOAPODS: 1.12.1 +COCOAPODS: 1.11.3 diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index fa5c996f..f5a63bb8 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -1,15 +1,35 @@ +import 'dart:io'; + import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_entity.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/avatar_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_attachment_card.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/option_dialog.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:provider/provider.dart'; + +import '../../data_models/file_transfer.dart'; +import '../../services/snackbar_service.dart'; +import '../../utils/constants.dart'; +import '../../utils/file_types.dart'; +import '../../utils/images.dart'; +import '../../utils/text_strings.dart'; +import '../../view_models/file_progress_provider.dart'; +import '../../view_models/internet_connectivity_checker.dart'; +import '../../view_models/my_files_provider.dart'; +import '../common_widgets/provider_handler.dart'; +import '../my_files/widgets/recents.dart'; class ContactDetailScreen extends StatefulWidget { final AtContact contact; @@ -29,14 +49,18 @@ class _ContactDetailScreenState extends State { late TrustedContactProvider _trustedContactProvider; late ContactService _contactService; late WelcomeScreenProvider _welcomeScreenProvider; + late HistoryProvider historyProvider; GlobalKey optionKey = GlobalKey(); bool isTrusted = false; + bool isDownloaded = false; @override void initState() { _trustedContactProvider = TrustedContactProvider(); _welcomeScreenProvider = WelcomeScreenProvider(); _contactService = ContactService(); + historyProvider = + Provider.of(NavService.navKey.currentContext!); checkTrustedContact(); super.initState(); } @@ -51,6 +75,18 @@ class _ContactDetailScreenState extends State { }); } + filterReceivedFiles(String atSign, List receivedFiles) { + var tempfiles = []; + + for (var file in receivedFiles) { + if (file.sender == atSign) { + tempfiles.add(file); + } + } + + return tempfiles; + } + @override Widget build(BuildContext context) { return Scaffold( @@ -72,139 +108,180 @@ class _ContactDetailScreenState extends State { _buildMoreIcon(), ], ), - body: Container( - height: double.infinity, - width: double.infinity, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Container( - padding: const EdgeInsets.symmetric(horizontal: 44), - margin: EdgeInsets.only(top: 8), - child: Row( - children: [ - AvatarWidget( - size: 100, - borderRadius: 50, - contact: widget.contact, - ), - const SizedBox(width: 22), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: Text( - widget.contact.tags?['name'] ?? - widget.contact.atSign!.substring(1), - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w600, + body: SingleChildScrollView( + child: Container( + // height: double.infinity, + // width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + padding: const EdgeInsets.symmetric(horizontal: 44), + margin: EdgeInsets.only(top: 8), + child: Row( + children: [ + AvatarWidget( + size: 100, + borderRadius: 50, + contact: widget.contact, + ), + const SizedBox(width: 22), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Flexible( + child: Text( + widget.contact.tags?['name'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, ), - overflow: TextOverflow.ellipsis, ), - ), - const SizedBox(height: 5), - Flexible( - child: Text( - widget.contact.atSign ?? '', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w400, + const SizedBox(height: 5), + Flexible( + child: Text( + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + ), ), ), - ), - ], - ), - ) - ], + ], + ), + ) + ], + ), ), - ), - const SizedBox(height: 25), - isTrusted - ? _buildButtonIcon( - title: "Trusted", - titleStyle: TextStyle( - color: Colors.white, - fontSize: 14.toFont, - fontWeight: FontWeight.w500, + const SizedBox(height: 25), + isTrusted + ? _buildButtonIcon( + title: "Trusted", + titleStyle: TextStyle( + color: Colors.white, + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icWhiteTrust, + backgroundColor: ColorConstants.orange, + onTap: () async { + await _trustedContactProvider + .removeTrustedContacts(widget.contact); + setState(() { + isTrusted = false; + }); + }, + ) + : _buildButtonIcon( + title: "Add To Trusted", + titleStyle: TextStyle( + color: ColorConstants.portlandOrange, + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icTrustActivated, + backgroundColor: ColorConstants.unbleachedSilk, + onTap: () async { + await _trustedContactProvider + .addTrustedContacts(widget.contact); + setState(() { + isTrusted = true; + }); + }, ), - margin: EdgeInsets.symmetric(horizontal: 44), - imageUrl: AppVectors.icWhiteTrust, - backgroundColor: ColorConstants.orange, - onTap: () async { - await _trustedContactProvider - .removeTrustedContacts(widget.contact); - setState(() { - isTrusted = false; - }); - }, - ) - : _buildButtonIcon( - title: "Add To Trusted", - titleStyle: TextStyle( - color: ColorConstants.portlandOrange, - fontSize: 14.toFont, - fontWeight: FontWeight.w500, + const SizedBox(height: 13), + _buildButtonIcon( + title: "Transfer File", + titleStyle: TextStyle( + color: Colors.white, + fontSize: 14, + fontWeight: FontWeight.bold, + ), + margin: EdgeInsets.symmetric(horizontal: 44), + imageUrl: AppVectors.icArrow, + backgroundColor: Colors.black, + onTap: () { + Navigator.of(context).pop(false); + widget.onTrustFunc?.call(); + _welcomeScreenProvider.selectedContacts = [ + GroupContactsModel( + contactType: ContactsType.CONTACT, + contact: widget.contact, ), - margin: EdgeInsets.symmetric(horizontal: 44), - imageUrl: AppVectors.icTrustActivated, - backgroundColor: ColorConstants.unbleachedSilk, - onTap: () async { - await _trustedContactProvider - .addTrustedContacts(widget.contact); - setState(() { - isTrusted = true; - }); - }, - ), - const SizedBox(height: 13), - _buildButtonIcon( - title: "Transfer File", - titleStyle: TextStyle( - color: Colors.white, - fontSize: 14, - fontWeight: FontWeight.bold, + ]; + _welcomeScreenProvider.changeBottomNavigationIndex(0); + }, ), - margin: EdgeInsets.symmetric(horizontal: 44), - imageUrl: AppVectors.icArrow, - backgroundColor: Colors.black, - onTap: () { - Navigator.of(context).pop(false); - widget.onTrustFunc?.call(); - _welcomeScreenProvider.selectedContacts = [ - GroupContactsModel( - contactType: ContactsType.CONTACT, - contact: widget.contact, + Padding( + padding: EdgeInsets.only(top: 20, left: 38), + child: Text( + "Attachments", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Colors.black, ), - ]; - _welcomeScreenProvider.changeBottomNavigationIndex(0); - }, - ), - Padding( - padding: EdgeInsets.only(top: 20, left: 38), - child: Text( - "Attachments", - style: TextStyle( - fontSize: 15, - fontWeight: FontWeight.w500, - color: Colors.black, ), ), - ), - Padding( - padding: EdgeInsets.only(left: 38), - child: Text( - "Files ${widget.contact.atSign ?? ''} has sent you", - style: TextStyle( - fontSize: 10.toFont, - fontWeight: FontWeight.w400, - color: ColorConstants.oldSliver, + Padding( + padding: EdgeInsets.only(left: 38), + child: Text( + "Files ${widget.contact.atSign ?? ''} has sent you", + style: TextStyle( + fontSize: 10.toFont, + fontWeight: FontWeight.w400, + color: ColorConstants.oldSliver, + ), ), ), - ), - ], + SizedBox(height: 20), + ProviderHandler( + functionName: historyProvider.RECEIVED_HISTORY, + showError: false, + successBuilder: (provider) { + var files = filterReceivedFiles( + widget.contact.atSign ?? "", provider.receivedHistoryLogs); + + return ListView.builder( + shrinkWrap: true, + itemCount: files.length, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + List list = []; + for (var file in files[index].files) { + print("path: ${file.path}"); + + list.add( + ContactAttachmentCard( + fileTransfer: files[index], + singleFile: file, + ), + ); + } + + return Column( + mainAxisSize: MainAxisSize.min, + children: list, + ); + }, + ); + }, + // errorBuilder: (provider) => Center( + // child: Text(TextStrings().errorOccured), + // ), + load: (provider) async { + await provider.getReceivedHistory(); + }, + ), + ], + ), ), ), ); diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart new file mode 100644 index 00000000..b11196dd --- /dev/null +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -0,0 +1,355 @@ +import 'dart:io'; + +import 'package:flutter/material.dart'; +import 'package:flutter/src/foundation/key.dart'; +import 'package:flutter/src/widgets/framework.dart'; +import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:provider/provider.dart'; + +import '../../../data_models/file_transfer.dart'; +import '../../../services/backend_service.dart'; +import '../../../services/common_utility_functions.dart'; +import '../../../services/navigation_service.dart'; +import '../../../services/snackbar_service.dart'; +import '../../../utils/colors.dart'; +import '../../../utils/constants.dart'; +import '../../../utils/file_types.dart'; +import '../../../utils/images.dart'; +import '../../../utils/text_strings.dart'; +import '../../../view_models/file_progress_provider.dart'; +import '../../../view_models/history_provider.dart'; +import '../../../view_models/internet_connectivity_checker.dart'; +import '../../../view_models/my_files_provider.dart'; +import '../../my_files/widgets/recents.dart'; + +class ContactAttachmentCard extends StatefulWidget { + const ContactAttachmentCard( + {Key? key, required this.fileTransfer, required this.singleFile}) + : super(key: key); + + final FileTransfer fileTransfer; + final FileData singleFile; + + @override + State createState() => _ContactAttachmentCardState(); +} + +class _ContactAttachmentCardState extends State { + bool isDownloaded = false; + + @override + void initState() { + super.initState(); + initDownloads(); + } + + void initDownloads() async { + isDownloaded = await isFilePresent(widget.singleFile.name ?? ""); + setState(() { + isDownloaded; + }); + } + + Future isFilePresent(String fileName) async { + String filePath = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + fileName; + + File file = File(filePath); + bool fileExists = await file.exists(); + return fileExists; + } + + @override + Widget build(BuildContext context) { + return Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + margin: EdgeInsets.symmetric(horizontal: 25, vertical: 5), + padding: EdgeInsets.all(15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + decoration: BoxDecoration( + color: ColorConstants.MILD_GREY, + borderRadius: BorderRadius.circular(5), + ), + child: thumbnail( + widget.singleFile.name?.split(".").last, + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + widget.singleFile.name!, + ), + ), + SizedBox(width: 15), + Expanded( + child: Column( + children: [ + Text( + widget.singleFile.name ?? "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 10, + ), + ), + const SizedBox( + height: 10, + ), + Row( + children: [ + Consumer(builder: (_c, provider, _) { + var fileTransferProgress = provider + .receivedFileProgress[widget.fileTransfer.key]; + print("filetransferPrgress: $fileTransferProgress"); + return CommonUtilityFunctions() + .checkForDownloadAvailability(widget.fileTransfer) + ? fileTransferProgress != null + ? CommonUtilityFunctions() + .getDownloadStatus(fileTransferProgress) + : (isDownloaded + ? Icon( + Icons.done, + color: Color(0xFF08CB21), + size: 25, + ) + : InkWell( + onTap: () async => await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name), + child: Container( + padding: EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Colors.black, + ), + child: Icon( + Icons.cloud_download_outlined, + color: Colors.white, + size: 18, + )), + )) + : SizedBox(); + }), + const SizedBox( + width: 10, + ), + Container( + padding: EdgeInsets.all(3), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: ColorConstants.yellow, + ), + child: Icon( + Icons.arrow_forward, + color: Colors.black, + size: 18, + ), + ) + ], + ) + ], + ), + ), + SizedBox( + width: 10, + ), + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.end, + mainAxisSize: MainAxisSize.max, + children: [ + Text( + CommonUtilityFunctions() + .formatDateTime(widget.fileTransfer.date!), + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + ), + const SizedBox( + height: 10, + ), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + ), + ], + ), + ) + ], + ), + ); + } + + Widget thumbnail(String? extension, String path, + {bool? isFilePresent = true}) { + return FileTypes.IMAGE_TYPES.contains(extension) + ? ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + height: 50, + width: 50, + child: isFilePresent! + ? Image.file( + File(path), + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30, + ), + ); + }, + ) + : Icon( + Icons.image, + size: 30, + ), + ), + ) + : FileTypes.VIDEO_TYPES.contains(extension) + ? FutureBuilder( + future: videoThumbnailBuilder(path), + builder: (context, snapshot) => ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + padding: EdgeInsets.only(left: 10), + height: 50, + width: 50, + child: (snapshot.data == null) + ? Image.asset( + ImageConstants.videoLogo, + fit: BoxFit.cover, + ) + : Image.memory( + videoThumbnail!, + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30, + ), + ); + }, + ), + ), + ), + ) + : ClipRRect( + borderRadius: BorderRadius.circular(10), + child: Container( + padding: EdgeInsets.only(left: 10), + height: 50, + width: 50, + child: Image.asset( + FileTypes.PDF_TYPES.contains(extension) + ? ImageConstants.pdfLogo + : FileTypes.AUDIO_TYPES.contains(extension) + ? ImageConstants.musicLogo + : FileTypes.WORD_TYPES.contains(extension) + ? ImageConstants.wordLogo + : FileTypes.EXEL_TYPES.contains(extension) + ? ImageConstants.exelLogo + : FileTypes.TEXT_TYPES.contains(extension) + ? ImageConstants.txtLogo + : ImageConstants.unknownLogo, + fit: BoxFit.cover, + ), + ), + ); + } + + downloadFiles(FileTransfer? file, {String? fileName}) async { + var fileTransferProgress = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .receivedFileProgress[file!.key]; + + if (fileTransferProgress != null) { + return; //returning because download is still in progress + } + var isConnected = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .isInternetAvailable; + + if (!isConnected) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings.noInternetMsg, + bgColor: ColorConstants.redAlert, + ); + return; + } + + var result; + if (fileName != null) { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadSingleFile( + file.key, + file.sender, + false, + fileName, + ); + } else { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadFiles( + file.key, + file.sender!, + false, + ); + } + + if (result is bool && result) { + if (mounted) { + // getFutureBuilders(); + setState(() { + isDownloaded = true; + // isFilesAvailableOfline = true; + // isOverwrite = false; + }); + } + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .saveNewDataInMyFiles(file); + + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().fileDownloadd, + bgColor: ColorConstants.successGreen, + ); + // send download acknowledgement + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .sendFileDownloadAcknowledgement(file); + } else if (result is bool && !result) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().downloadFailed, + bgColor: ColorConstants.redAlert, + ); + if (mounted) { + setState(() { + isDownloaded = false; + }); + } + } + } +} diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 0f83b52f..37ffd669 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -19,6 +19,9 @@ import 'package:flutter/rendering.dart'; import 'package:showcaseview/showcaseview.dart'; import 'package:video_thumbnail/video_thumbnail.dart'; +import '../data_models/file_transfer.dart'; +import '../screens/common_widgets/labelled_circular_progress.dart'; + class CommonUtilityFunctions { static final CommonUtilityFunctions _singleton = CommonUtilityFunctions._internal(); @@ -609,6 +612,50 @@ class CommonUtilityFunctions { }); } + String formatDateTime(DateTime datetime) { + return "${datetime.day}/${datetime.month}/${datetime.year} | ${datetime.hour}:${datetime.minute}"; + } + + Widget getDownloadStatus(FileTransferProgress? fileTransferProgress) { + Widget spinner = CircularProgressIndicator(); + + if (fileTransferProgress == null) { + return spinner; + } + + if (fileTransferProgress.fileState == FileState.download && + fileTransferProgress.percent != null) { + spinner = LabelledCircularProgressIndicator( + value: (fileTransferProgress.percent! / 100)); + } + + return spinner; + } + + bool checkForDownloadAvailability(FileTransfer file) { + + bool isDownloadAvailable = false; + + var expiryDate = file.date!.add(Duration(days: 6)); + if (expiryDate.difference(DateTime.now()) > Duration(seconds: 0)) { + isDownloadAvailable = true; + } + + // if fileList is not having any file then download icon will not be shown + var isFileUploaded = false; + file.files!.forEach((FileData fileData) { + if (fileData.isUploaded!) { + isFileUploaded = true; + } + }); + + if (!isFileUploaded) { + isDownloadAvailable = false; + } + + return isDownloadAvailable; + } + void showNoFileDialog({double deviceTextFactor = 1}) { showDialog( context: NavService.navKey.currentContext!, diff --git a/pubspec.lock b/pubspec.lock index 7dabb35c..ec7aae22 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,105 +5,120 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" archive: dependency: "direct main" description: name: archive - url: "https://pub.dartlang.org" + sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d + url: "https://pub.dev" source: hosted version: "3.3.6" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" + url: "https://pub.dev" source: hosted version: "2.4.0" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.10.0" at_backupkey_flutter: dependency: "direct main" description: name: at_backupkey_flutter - url: "https://pub.dartlang.org" + sha256: "63a8fb9ba7b091aa8ff1a300509eb6933aeff02621bfbdabd738f42230f7b306" + url: "https://pub.dev" source: hosted version: "4.0.8" at_base2e15: dependency: transitive description: name: at_base2e15 - url: "https://pub.dartlang.org" + sha256: "06ee6ffba9b3439f1c41f9bf0c01f579ce0a8b25f42da8c374ba3a14d721937f" + url: "https://pub.dev" source: hosted version: "1.0.0" at_chops: dependency: transitive description: name: at_chops - url: "https://pub.dartlang.org" + sha256: "4bd63f0bb9b61ad8087455f5ab303101cbc07b6b87892d4a7dba197ca2b3eb6c" + url: "https://pub.dev" source: hosted version: "1.0.3" at_client: dependency: "direct overridden" description: name: at_client - url: "https://pub.dartlang.org" + sha256: "1a8dcd963b8bd802ffa2684dd1c6c46262a74289404f46f0763071feff6218c6" + url: "https://pub.dev" source: hosted version: "3.0.58" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - url: "https://pub.dartlang.org" + sha256: f056674b02bdf13e5442725934e834f7757abcd7062d302ec2e65e46432ca134 + url: "https://pub.dev" source: hosted version: "3.2.9" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - url: "https://pub.dartlang.org" + sha256: "75f7b1070d9aa5d42f9878859995f2a24654733a118012b83eb552baaba8ce13" + url: "https://pub.dev" source: hosted version: "2.0.11" at_commons: dependency: "direct main" description: name: at_commons - url: "https://pub.dartlang.org" + sha256: "3361a1114d8f7263e7a0e6f299247bceed7e6c9e81e9cde01525cd10085eee60" + url: "https://pub.dev" source: hosted version: "3.0.43" at_contact: dependency: "direct main" description: name: at_contact - url: "https://pub.dartlang.org" + sha256: "232a7dd140bd4c22f4d99c7866633338de57e50f0e1eb84e515dc1ed0f7b0fee" + url: "https://pub.dev" source: hosted version: "3.0.7" at_contacts_flutter: dependency: "direct main" description: name: at_contacts_flutter - url: "https://pub.dartlang.org" + sha256: "159656f0387d17471dfe90337d767a989f067de3da0bf74af0894191a4460cea" + url: "https://pub.dev" source: hosted version: "4.0.9" at_contacts_group_flutter: @@ -119,308 +134,352 @@ packages: dependency: transitive description: name: at_file_saver - url: "https://pub.dartlang.org" + sha256: d1d5322be265ff395b6160f8880b4ebd713b673ea739662eca463def9c588f00 + url: "https://pub.dev" source: hosted version: "0.1.2" at_lookup: dependency: transitive description: name: at_lookup - url: "https://pub.dartlang.org" + sha256: d1ecc7b48c0843289efe90ee3f7948805ddcc7077c984a35fabbc89c3ba7d958 + url: "https://pub.dev" source: hosted version: "3.0.36" at_onboarding_flutter: dependency: "direct main" description: name: at_onboarding_flutter - url: "https://pub.dartlang.org" + sha256: "57f5753460487129a306ffb523f4800146bae885968e9f3f1ec52598867998e9" + url: "https://pub.dev" source: hosted version: "5.0.5" at_persistence_secondary_server: dependency: transitive description: name: at_persistence_secondary_server - url: "https://pub.dartlang.org" + sha256: a1b0e9819d6d22072caf15e52ea3bf459c8b161404ed92bb199bfd32f5ff63a9 + url: "https://pub.dev" source: hosted version: "3.0.52" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - url: "https://pub.dartlang.org" + sha256: "2ee8f0433783633d2375dba2acf27f8778bcbcd40dda8659bf54f80925db224f" + url: "https://pub.dev" source: hosted version: "2.0.12" at_server_status: dependency: transitive description: name: at_server_status - url: "https://pub.dartlang.org" + sha256: "01190ba0886dfafb02a7ec247faff405527e7efaa5c21f567e4f45e10699e12d" + url: "https://pub.dev" source: hosted version: "1.0.3" at_sync_ui_flutter: dependency: "direct main" description: name: at_sync_ui_flutter - url: "https://pub.dartlang.org" + sha256: "9297d27ad1219f61a13372d554d94b5610027df7bd566f08e351a7f9ea09aa17" + url: "https://pub.dev" source: hosted version: "1.0.8" at_utf7: dependency: transitive description: name: at_utf7 - url: "https://pub.dartlang.org" + sha256: c88e964e307bfe0e53e0048cff1ebf5ab60e23ceb4273f1ca664e724a9a5c5c9 + url: "https://pub.dev" source: hosted version: "1.0.0" at_utils: dependency: transitive description: name: at_utils - url: "https://pub.dartlang.org" + sha256: a244ea7f6411b177ba2f011d36d23ec786b0d41b0e62b58bb0e8bf9ad61cf530 + url: "https://pub.dev" source: hosted version: "3.0.12" biometric_storage: dependency: "direct main" description: name: biometric_storage - url: "https://pub.dartlang.org" + sha256: f6d7f5f4c28323797658423e4c5982c9dee42e18f59a8a8d4bc5df38eaf2e2f1 + url: "https://pub.dev" source: hosted version: "4.1.3" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - url: "https://pub.dartlang.org" + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + url: "https://pub.dev" source: hosted version: "4.2.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c + url: "https://pub.dev" source: hosted version: "1.2.1" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.0" console: dependency: transitive description: name: console - url: "https://pub.dartlang.org" + sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a + url: "https://pub.dev" source: hosted version: "4.1.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted version: "3.1.1" coverage: dependency: transitive description: name: coverage - url: "https://pub.dartlang.org" + sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + url: "https://pub.dev" source: hosted version: "1.6.3" cron: dependency: transitive description: name: cron - url: "https://pub.dartlang.org" + sha256: d98aa8cdad0cccdb6b098e6a1fb89339c180d8a229145fa4cd8c6fc538f0e35f + url: "https://pub.dev" source: hosted version: "0.5.1" cross_file: dependency: transitive description: name: cross_file - url: "https://pub.dartlang.org" + sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + url: "https://pub.dev" source: hosted version: "0.3.3+4" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" crypton: dependency: transitive description: name: crypton - url: "https://pub.dartlang.org" + sha256: "886462e83bf642ba10f5382002654d27da8c2e6e1f42d928f12764cfa204f124" + url: "https://pub.dev" source: hosted version: "2.1.0" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 + url: "https://pub.dev" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 + url: "https://pub.dev" source: hosted version: "0.1.3" dbus: dependency: transitive description: name: dbus - url: "https://pub.dartlang.org" + sha256: "253bfaa3d340778d8bc755e89c3af38e85ef95e65fd5d5670aa3167f8d4f6577" + url: "https://pub.dev" source: hosted version: "0.7.4" desktop_window: dependency: "direct main" description: name: desktop_window - url: "https://pub.dartlang.org" + sha256: "6256fb6feb7b5ec1311c76a3503f89202825bfe92c0458ec5fe7a728ffa216d5" + url: "https://pub.dev" source: hosted version: "0.4.0" ecdsa: dependency: transitive description: name: ecdsa - url: "https://pub.dartlang.org" + sha256: dd1efbaf6c18bfde9347dddcfe10dce3dd044e5a1b237457a49b5c24850dfb95 + url: "https://pub.dev" source: hosted version: "0.0.4" elliptic: dependency: transitive description: name: elliptic - url: "https://pub.dartlang.org" + sha256: "8c7396126c81c574fe970ac4afe9ba919b1ca754da20b509664be2345ffb2845" + url: "https://pub.dev" source: hosted version: "0.3.8" emoji_picker_flutter: dependency: transitive description: name: emoji_picker_flutter - url: "https://pub.dartlang.org" + sha256: feb141b3ab9188e33c2ec35212136ecb3f79215d881aa5af3d3e0df28f84b725 + url: "https://pub.dev" source: hosted version: "1.5.2" encrypt: dependency: transitive description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" + url: "https://pub.dev" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker - url: "https://pub.dartlang.org" + sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f" + url: "https://pub.dev" source: hosted version: "4.6.1" file_selector: dependency: "direct main" description: name: file_selector - url: "https://pub.dartlang.org" + sha256: "9e34368bfacdf644e2c8a59e2b241cfb722bcbbd09876410e8775ae4905d6a49" + url: "https://pub.dev" source: hosted version: "0.8.4+3" file_selector_linux: dependency: transitive description: name: file_selector_linux - url: "https://pub.dartlang.org" + sha256: c06249f2082e88aca55f4aad9e4c70ff0f2b61d753c1577d51adeab88b3f0178 + url: "https://pub.dev" source: hosted version: "0.0.3" file_selector_macos: dependency: "direct main" description: name: file_selector_macos - url: "https://pub.dartlang.org" + sha256: e87311d719039da30d26ae829aab3ae66f82deb3318cd70ffecb608c99e3da68 + url: "https://pub.dev" source: hosted version: "0.8.2+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - url: "https://pub.dartlang.org" + sha256: "98b3f98effcc135bd951b34b575886620ce208d3ff60e3b61cbaea9e2e00f54b" + url: "https://pub.dev" source: hosted version: "2.4.1" file_selector_web: dependency: transitive description: name: file_selector_web - url: "https://pub.dartlang.org" + sha256: bf166d08f4c3f79286774cdfa39ed301e076c5a903c435f5199818288f24a66d + url: "https://pub.dev" source: hosted version: "0.8.1+5" file_selector_windows: dependency: transitive description: name: file_selector_windows - url: "https://pub.dartlang.org" + sha256: "8bbcc82fe0d3cdf5ae5c289492ddfd703ec028028d9f194dbceae04cfbde1c48" + url: "https://pub.dev" source: hosted version: "0.8.2+2" filesystem_picker: dependency: "direct main" description: name: filesystem_picker - url: "https://pub.dartlang.org" + sha256: "41bb01c65cbd8abc389509adfbd08fc4c9090d2d4d15c5fa8813d0efd980f523" + url: "https://pub.dev" source: hosted version: "2.0.1" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + url: "https://pub.dev" source: hosted version: "1.0.1" flutter: @@ -432,56 +491,64 @@ packages: dependency: transitive description: name: flutter_image_compress - url: "https://pub.dartlang.org" + sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" + url: "https://pub.dev" source: hosted version: "1.1.3" flutter_keychain: dependency: "direct main" description: name: flutter_keychain - url: "https://pub.dartlang.org" + sha256: "777ea8d3e1f55536bc8489a9ced73a912da4065645d9a1f751aae3548825b140" + url: "https://pub.dev" source: hosted version: "2.2.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - url: "https://pub.dartlang.org" + sha256: "57d0012730780fe137260dd180e072c18a73fbeeb924cdc029c18aaa0f338d64" + url: "https://pub.dev" source: hosted version: "9.9.1" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - url: "https://pub.dartlang.org" + sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 + url: "https://pub.dev" source: hosted version: "0.5.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - url: "https://pub.dartlang.org" + sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" + url: "https://pub.dev" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf + url: "https://pub.dev" source: hosted version: "2.0.9" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - url: "https://pub.dartlang.org" + sha256: c7607eb808cdef19c8468246e95a133308aeaeb3971cdd9edfb9d5e31cedfbe9 + url: "https://pub.dev" source: hosted version: "0.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - url: "https://pub.dartlang.org" + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + url: "https://pub.dev" source: hosted version: "1.1.6" flutter_test: @@ -493,7 +560,8 @@ packages: dependency: "direct main" description: name: flutter_toastr - url: "https://pub.dartlang.org" + sha256: "60e4af64bfba2c43ca4bedf09d2e84ba36ac242f0b13ac26681eb547ccd8489e" + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_web_plugins: @@ -505,623 +573,712 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" + url: "https://pub.dev" source: hosted version: "8.1.2" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b" + url: "https://pub.dev" source: hosted version: "2.1.3" get_it: dependency: transitive description: name: get_it - url: "https://pub.dartlang.org" + sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" + url: "https://pub.dev" source: hosted version: "7.2.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted version: "2.1.1" google_fonts: dependency: "direct main" description: name: google_fonts - url: "https://pub.dartlang.org" + sha256: e70521755a6b08c6bde14ddae27dff5bf21010033888fc61da6c595f8a9f58c1 + url: "https://pub.dev" source: hosted version: "2.3.3" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + sha256: "79d498e6d6761925a34ee5ea8fa6dfef38607781d2fa91e37523474282af55cb" + url: "https://pub.dev" source: hosted version: "0.15.2" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" + url: "https://pub.dev" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" source: hosted version: "3.3.0" image_compression: dependency: transitive description: name: image_compression - url: "https://pub.dartlang.org" + sha256: "911ae4a59196ebcc33c70a38bbc1fa0e2d07243589803dd616120e1a6125bfe9" + url: "https://pub.dev" source: hosted version: "1.0.3" image_picker: dependency: "direct main" description: name: image_picker - url: "https://pub.dartlang.org" + sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd + url: "https://pub.dev" source: hosted version: "0.8.6" image_picker_android: dependency: transitive description: name: image_picker_android - url: "https://pub.dartlang.org" + sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7 + url: "https://pub.dev" source: hosted version: "0.8.6+6" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - url: "https://pub.dartlang.org" + sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" + url: "https://pub.dev" source: hosted version: "2.1.12" image_picker_ios: dependency: transitive description: name: image_picker_ios - url: "https://pub.dartlang.org" + sha256: d4cb8ab04f770dab9d04c7959e5f6d22e8c5280343d425f9344f93832cf58445 + url: "https://pub.dev" source: hosted version: "0.8.7+2" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - url: "https://pub.dartlang.org" + sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + url: "https://pub.dev" source: hosted version: "2.6.3" internet_connection_checker: dependency: transitive description: name: internet_connection_checker - url: "https://pub.dartlang.org" + sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" + url: "https://pub.dev" source: hosted version: "1.0.0+1" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.5" local_notifier: dependency: "direct main" description: name: local_notifier - url: "https://pub.dartlang.org" + sha256: cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03 + url: "https://pub.dev" source: hosted version: "0.1.5" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.13" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" + url: "https://pub.dev" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted version: "1.0.4" mocktail: dependency: transitive description: name: mocktail - url: "https://pub.dartlang.org" + sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" + url: "https://pub.dev" source: hosted version: "0.3.0" msix: dependency: "direct dev" description: name: msix - url: "https://pub.dartlang.org" + sha256: e3de4d9f52543ad6e4b0f534991e1303cbd379d24be28dd241ac60bd9439a201 + url: "https://pub.dev" source: hosted version: "3.7.0" mutex: dependency: transitive description: name: mutex - url: "https://pub.dartlang.org" + sha256: "03116a4e46282a671b46c12de649d72c0ed18188ffe12a8d0fc63e83f4ad88f4" + url: "https://pub.dev" source: hosted version: "3.0.1" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" new_version: dependency: "direct main" description: name: new_version - url: "https://pub.dartlang.org" + sha256: "2eabd66e53c882dbaab4f3f8824d139a35a0521e2e04b8fd6d9fb358112691e9" + url: "https://pub.dev" source: hosted version: "0.3.1" ninja_asn1: dependency: transitive description: name: ninja_asn1 - url: "https://pub.dartlang.org" + sha256: b0f04877243fda51c475ec2bcaadb55a92759baee9f02888124c60775760ccf7 + url: "https://pub.dev" source: hosted version: "2.0.0" node_preamble: dependency: transitive description: name: node_preamble - url: "https://pub.dartlang.org" + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" source: hosted version: "2.0.2" open_file: dependency: "direct main" description: name: open_file - url: "https://pub.dartlang.org" + sha256: "5cd0288033d613ee7908aa974b7ff00805ae55d253f64d311603cf2e30613ca8" + url: "https://pub.dev" source: hosted version: "3.2.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - url: "https://pub.dartlang.org" + sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" + url: "https://pub.dev" source: hosted version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - url: "https://pub.dartlang.org" + sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" + url: "https://pub.dev" source: hosted version: "1.0.5" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - url: "https://pub.dartlang.org" + sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 + url: "https://pub.dev" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 + url: "https://pub.dev" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - url: "https://pub.dartlang.org" + sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b + url: "https://pub.dev" source: hosted version: "1.0.6" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - url: "https://pub.dartlang.org" + sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 + url: "https://pub.dev" source: hosted version: "1.0.5" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b + url: "https://pub.dev" source: hosted version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing - url: "https://pub.dartlang.org" + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - url: "https://pub.dartlang.org" + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" source: hosted version: "1.0.1" path_provider: dependency: transitive description: name: path_provider - url: "https://pub.dartlang.org" + sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 + url: "https://pub.dev" source: hosted version: "2.0.14" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" + url: "https://pub.dev" source: hosted version: "2.0.24" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - url: "https://pub.dartlang.org" + sha256: "818b2dc38b0f178e0ea3f7cf3b28146faab11375985d815942a68eee11c2d0f7" + url: "https://pub.dev" source: hosted version: "2.2.1" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + url: "https://pub.dev" source: hosted version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" source: hosted version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 + url: "https://pub.dev" source: hosted version: "2.0.7" pedantic: dependency: "direct main" description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - url: "https://pub.dartlang.org" + sha256: "5749ebeb7ec0c3865ea17e3eb337174b87747be816dab582c551e1aff6f6bbf3" + url: "https://pub.dev" source: hosted version: "9.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - url: "https://pub.dartlang.org" + sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc + url: "https://pub.dev" source: hosted version: "9.0.2+1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - url: "https://pub.dartlang.org" + sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 + url: "https://pub.dev" source: hosted version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - url: "https://pub.dartlang.org" + sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" + url: "https://pub.dev" source: hosted version: "3.9.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - url: "https://pub.dartlang.org" + sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b + url: "https://pub.dev" source: hosted version: "0.1.2" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" source: hosted version: "5.1.0" pin_code_fields: dependency: transitive description: name: pin_code_fields - url: "https://pub.dartlang.org" + sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7 + url: "https://pub.dev" source: hosted version: "7.4.0" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + url: "https://pub.dev" source: hosted version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: c3120a968135aead39699267f4c74bc9a08e4e909e86bc1b0af5bfd78691123c + url: "https://pub.dev" source: hosted version: "3.7.2" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - url: "https://pub.dartlang.org" + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + url: "https://pub.dev" source: hosted version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" + url: "https://pub.dev" source: hosted version: "2.1.3" qr: dependency: transitive description: name: qr - url: "https://pub.dartlang.org" + sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" + url: "https://pub.dev" source: hosted version: "2.1.0" qr_code_scanner: dependency: transitive description: name: qr_code_scanner - url: "https://pub.dartlang.org" + sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + url: "https://pub.dev" source: hosted version: "1.0.1" qr_flutter: dependency: "direct main" description: name: qr_flutter - url: "https://pub.dartlang.org" + sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e + url: "https://pub.dev" source: hosted version: "4.0.0" receive_sharing_intent: dependency: "direct main" description: name: receive_sharing_intent - url: "https://pub.dartlang.org" + sha256: "912bebb551bce75a14098891fd750305b30d53eba0d61cc70cd9973be9866e8d" + url: "https://pub.dev" source: hosted version: "1.4.5" rxdart: dependency: "direct main" description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" source: hosted version: "0.27.7" share_plus: dependency: "direct main" description: name: share_plus - url: "https://pub.dartlang.org" + sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a + url: "https://pub.dev" source: hosted version: "4.5.3" share_plus_linux: dependency: transitive description: name: share_plus_linux - url: "https://pub.dartlang.org" + sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4 + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_macos: dependency: transitive description: name: share_plus_macos - url: "https://pub.dartlang.org" + sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae" + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" + url: "https://pub.dev" source: hosted version: "3.2.0" share_plus_web: dependency: transitive description: name: share_plus_web - url: "https://pub.dartlang.org" + sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935 + url: "https://pub.dev" source: hosted version: "3.1.0" share_plus_windows: dependency: transitive description: name: share_plus_windows - url: "https://pub.dartlang.org" + sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4" + url: "https://pub.dev" source: hosted version: "3.0.1" shared_preferences: dependency: transitive description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" + url: "https://pub.dev" source: hosted version: "2.0.20" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 + url: "https://pub.dev" source: hosted version: "2.0.17" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - url: "https://pub.dartlang.org" + sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" + url: "https://pub.dev" source: hosted version: "2.1.5" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" + url: "https://pub.dev" source: hosted version: "2.1.5" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + url: "https://pub.dev" source: hosted version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" + url: "https://pub.dev" source: hosted version: "2.0.6" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" + url: "https://pub.dev" source: hosted version: "2.1.5" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c + url: "https://pub.dev" source: hosted version: "1.4.0" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - url: "https://pub.dartlang.org" + sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 + url: "https://pub.dev" source: hosted version: "3.0.1" shelf_static: dependency: transitive description: name: shelf_static - url: "https://pub.dartlang.org" + sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c + url: "https://pub.dev" source: hosted version: "1.1.1" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 + url: "https://pub.dev" source: hosted version: "1.0.3" showcaseview: dependency: "direct main" description: name: showcaseview - url: "https://pub.dartlang.org" + sha256: "09b534d806572135c38e06901de4b36b2bbd61739ec56c5fa9242d10748e19df" + url: "https://pub.dev" source: hosted version: "1.1.8" sky_engine: @@ -1133,266 +1290,304 @@ packages: dependency: transitive description: name: source_map_stack_trace - url: "https://pub.dartlang.org" + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" source: hosted version: "2.1.1" source_maps: dependency: transitive description: name: source_maps - url: "https://pub.dartlang.org" + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" source: hosted version: "0.10.12" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test: dependency: transitive description: name: test - url: "https://pub.dartlang.org" + sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d + url: "https://pub.dev" source: hosted - version: "1.21.4" + version: "1.22.0" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.4.16" test_core: dependency: transitive description: name: test_core - url: "https://pub.dartlang.org" + sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" + url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.4.20" timezone: dependency: transitive description: name: timezone - url: "https://pub.dartlang.org" + sha256: "57b35f6e8ef731f18529695bffc62f92c6189fac2e52c12d478dec1931afb66e" + url: "https://pub.dev" source: hosted version: "0.8.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" source: hosted version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 + url: "https://pub.dev" source: hosted version: "6.0.26" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92" + url: "https://pub.dev" source: hosted version: "6.1.3" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" + url: "https://pub.dev" source: hosted version: "3.0.4" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" + url: "https://pub.dev" source: hosted version: "3.0.4" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" source: hosted version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + url: "https://pub.dev" source: hosted version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd + url: "https://pub.dev" source: hosted version: "3.0.5" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" version: dependency: transitive description: name: version - url: "https://pub.dartlang.org" + sha256: "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94" + url: "https://pub.dev" source: hosted version: "3.0.2" video_compress: dependency: "direct main" description: name: video_compress - url: "https://pub.dartlang.org" + sha256: "407693726e674a1e1958801deb2d9daf5a5297707ba6d03375007012dae7389a" + url: "https://pub.dev" source: hosted version: "3.1.2" video_thumbnail: dependency: "direct main" description: name: video_thumbnail - url: "https://pub.dartlang.org" + sha256: "005bf7898bf6cddbf5f079e2618f3d3cb83dd2712714f0042b5a018c2b32e7d6" + url: "https://pub.dev" source: hosted version: "0.4.6" vm_service: dependency: transitive description: name: vm_service - url: "https://pub.dartlang.org" + sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 + url: "https://pub.dev" source: hosted version: "9.4.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b + url: "https://pub.dev" source: hosted version: "2.3.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - url: "https://pub.dartlang.org" + sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + url: "https://pub.dev" source: hosted version: "1.2.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" + url: "https://pub.dev" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" + url: "https://pub.dev" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + url: "https://pub.dev" source: hosted version: "2.9.5" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef + url: "https://pub.dev" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted version: "0.2.0+3" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + url: "https://pub.dev" source: hosted version: "6.1.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" zxing2: dependency: transitive description: name: zxing2 - url: "https://pub.dartlang.org" + sha256: "1913c33844c68b62573741134ef5f987f1e15e331c95ac7dc327afbb9896e9ec" + url: "https://pub.dev" source: hosted version: "0.1.1" sdks: From 25a0a3d71ccfc4282480e5ee9c8da755abdaed6c Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Fri, 5 May 2023 10:07:19 +0530 Subject: [PATCH 61/94] feat: addded edit nickname functionality --- .../contact_detail_screen.dart | 106 ++++++++++++++---- .../widget/contact_attachment_card.dart | 12 +- 2 files changed, 89 insertions(+), 29 deletions(-) diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index f5a63bb8..d088ba21 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -10,6 +10,7 @@ import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/option_dialog.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; @@ -20,16 +21,7 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; import '../../data_models/file_transfer.dart'; -import '../../services/snackbar_service.dart'; -import '../../utils/constants.dart'; -import '../../utils/file_types.dart'; -import '../../utils/images.dart'; -import '../../utils/text_strings.dart'; -import '../../view_models/file_progress_provider.dart'; -import '../../view_models/internet_connectivity_checker.dart'; -import '../../view_models/my_files_provider.dart'; import '../common_widgets/provider_handler.dart'; -import '../my_files/widgets/recents.dart'; class ContactDetailScreen extends StatefulWidget { final AtContact contact; @@ -51,9 +43,12 @@ class _ContactDetailScreenState extends State { late WelcomeScreenProvider _welcomeScreenProvider; late HistoryProvider historyProvider; GlobalKey optionKey = GlobalKey(); + TextEditingController nicknameController = TextEditingController(); bool isTrusted = false; bool isDownloaded = false; + bool isEditNickname = false; + @override void initState() { _trustedContactProvider = TrustedContactProvider(); @@ -62,6 +57,7 @@ class _ContactDetailScreenState extends State { historyProvider = Provider.of(NavService.navKey.currentContext!); checkTrustedContact(); + nicknameController.text = widget.contact.tags!['nickname'] ?? ""; super.initState(); } @@ -87,6 +83,24 @@ class _ContactDetailScreenState extends State { return tempfiles; } + editNickname(e) async { + AtContact contact = widget.contact; + contact.tags = + await _contactService.getContactDetails(contact.atSign, null); + contact.tags!['nickname'] = nicknameController.text; + var res = await _contactService.atContactImpl.add(contact); + if (res == true) { + await SnackbarService() + .showSnackbar(context, "Successfully updated nickname"); + } else { + await SnackbarService() + .showSnackbar(context, "Failed to update nickname"); + } + setState(() { + isEditNickname = false; + }); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -131,16 +145,56 @@ class _ContactDetailScreenState extends State { crossAxisAlignment: CrossAxisAlignment.start, mainAxisSize: MainAxisSize.min, children: [ + isEditNickname + ? Text( + "Nickname", + style: TextStyle( + color: Colors.black, + fontSize: 8, + fontWeight: FontWeight.w500), + ) + : SizedBox(), + SizedBox(height: 5), Flexible( - child: Text( - widget.contact.tags?['name'] ?? - widget.contact.atSign!.substring(1), - style: const TextStyle( - fontSize: 18, - fontWeight: FontWeight.w600, - ), - overflow: TextOverflow.ellipsis, - ), + child: isEditNickname + ? Row( + children: [ + Flexible( + child: TextField( + onTapOutside: editNickname, + decoration: InputDecoration( + hintText: 'Enter Nickname', + hintStyle: TextStyle( + fontSize: 15.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), + border: InputBorder.none, + labelStyle: + TextStyle(fontSize: 15.toFont), + fillColor: Colors.white, + filled: true, + suffixIcon: Icon( + Icons.clear, + color: Colors.black, + size: 16, + ), + // contentPadding: EdgeInsets.only(right: -10, top: 15), + ), + controller: nicknameController, + ), + ), + ], + ) + : Text( + widget.contact.tags?['nickname'] ?? + widget.contact.atSign!.substring(1), + style: const TextStyle( + fontSize: 18, + fontWeight: FontWeight.w600, + ), + overflow: TextOverflow.ellipsis, + ), ), const SizedBox(height: 5), Flexible( @@ -246,9 +300,9 @@ class _ContactDetailScreenState extends State { functionName: historyProvider.RECEIVED_HISTORY, showError: false, successBuilder: (provider) { - var files = filterReceivedFiles( - widget.contact.atSign ?? "", provider.receivedHistoryLogs); - + var files = filterReceivedFiles(widget.contact.atSign ?? "", + provider.receivedHistoryLogs); + return ListView.builder( shrinkWrap: true, itemCount: files.length, @@ -257,7 +311,7 @@ class _ContactDetailScreenState extends State { List list = []; for (var file in files[index].files) { print("path: ${file.path}"); - + list.add( ContactAttachmentCard( fileTransfer: files[index], @@ -265,7 +319,7 @@ class _ContactDetailScreenState extends State { ), ); } - + return Column( mainAxisSize: MainAxisSize.min, children: list, @@ -342,7 +396,11 @@ class _ContactDetailScreenState extends State { builder: (BuildContext contextDialog) { return OptionDialog( position: position, - editNickNameFunc: () {}, + editNickNameFunc: () { + setState(() { + isEditNickname = true; + }); + }, blockFunc: () async { await _contactService.blockUnblockContact( contact: widget.contact, diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index b11196dd..97211f1f 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -77,11 +77,13 @@ class _ContactAttachmentCardState extends State { color: ColorConstants.MILD_GREY, borderRadius: BorderRadius.circular(5), ), - child: thumbnail( - widget.singleFile.name?.split(".").last, - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - widget.singleFile.name!, + child: Center( + child: thumbnail( + widget.singleFile.name?.split(".").last, + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + widget.singleFile.name!, + ), ), ), SizedBox(width: 15), From c4b0e6f8973e1607b47ab68d4f9bb644ab9d749a Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Fri, 5 May 2023 10:36:01 +0530 Subject: [PATCH 62/94] fix: updated icons and styling --- .../contact_detail_screen.dart | 1 - .../widget/contact_attachment_card.dart | 48 +++++++++++++++---- lib/utils/images.dart | 1 + 3 files changed, 39 insertions(+), 11 deletions(-) diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index d088ba21..5989eb93 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -179,7 +179,6 @@ class _ContactDetailScreenState extends State { color: Colors.black, size: 16, ), - // contentPadding: EdgeInsets.only(right: -10, top: 15), ), controller: nicknameController, ), diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index 97211f1f..7c14aa8b 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -106,17 +106,43 @@ class _ContactAttachmentCardState extends State { Consumer(builder: (_c, provider, _) { var fileTransferProgress = provider .receivedFileProgress[widget.fileTransfer.key]; - print("filetransferPrgress: $fileTransferProgress"); return CommonUtilityFunctions() .checkForDownloadAvailability(widget.fileTransfer) ? fileTransferProgress != null ? CommonUtilityFunctions() .getDownloadStatus(fileTransferProgress) : (isDownloaded - ? Icon( - Icons.done, - color: Color(0xFF08CB21), - size: 25, + ? Stack( + children: [ + Container( + padding: EdgeInsets.all(5), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: ColorConstants.MILD_GREY, + ), + child: Icon( + Icons.cloud_download_outlined, + color: Colors.grey, + size: 16, + ), + ), + Positioned( + top: 0, + right: 0, + child: Container( + padding: EdgeInsets.all(2), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: Color.fromARGB(167, 113, 219, 168), + ), + child: Icon( + Icons.done, + color: Colors.green, + size: 8, + ), + ), + ), + ], ) : InkWell( onTap: () async => await downloadFiles( @@ -140,15 +166,17 @@ class _ContactAttachmentCardState extends State { width: 10, ), Container( - padding: EdgeInsets.all(3), + padding: + EdgeInsets.only(left: 8, top: 8, bottom: 5, right: 5), decoration: BoxDecoration( shape: BoxShape.circle, color: ColorConstants.yellow, ), - child: Icon( - Icons.arrow_forward, - color: Colors.black, - size: 18, + child: Center( + child: Image.asset( + ImageConstants.openFileIcon, + fit: BoxFit.cover, + ), ), ) ], diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 206fea92..05875600 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -23,6 +23,7 @@ class ImageConstants { static String txtLogo = '$_basePath/txtLogo.png'; static String unknownLogo = '$_basePath/unknown.png'; static String videoLogo = '$_basePath/video-camera.png'; + static String openFileIcon = '$_basePath/open_file_icon.png'; static String emptyTrustedSenders = '$_basePath/emptyTrustedSenders.png'; static String emptyGroup = '$_basePath/empty_group.png'; static String profileImage = '$_basePath/profile.png'; From 5086cc1bd0ce3e286daf59f1ea1d2083fa3149ea Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 5 May 2023 17:54:40 +0700 Subject: [PATCH 63/94] feat: update UI History Screen --- assets/svg/ic_arrow_down_outline.svg | 3 + assets/svg/ic_arrow_up_outline.svg | 3 + assets/svg/ic_cloud_downloaded.svg | 7 + assets/svg/ic_cloud_downloading.svg | 12 + .../widget/contact_attachment_card.dart | 287 +++++++---------- .../history/transfer_history_screen.dart | 9 +- .../history/widgets/history_card_widget.dart | 302 ++++++++++++------ lib/utils/vectors.dart | 4 + 8 files changed, 363 insertions(+), 264 deletions(-) create mode 100644 assets/svg/ic_arrow_down_outline.svg create mode 100644 assets/svg/ic_arrow_up_outline.svg create mode 100644 assets/svg/ic_cloud_downloaded.svg create mode 100644 assets/svg/ic_cloud_downloading.svg diff --git a/assets/svg/ic_arrow_down_outline.svg b/assets/svg/ic_arrow_down_outline.svg new file mode 100644 index 00000000..8d22fc8d --- /dev/null +++ b/assets/svg/ic_arrow_down_outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_arrow_up_outline.svg b/assets/svg/ic_arrow_up_outline.svg new file mode 100644 index 00000000..5d56af49 --- /dev/null +++ b/assets/svg/ic_arrow_up_outline.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_cloud_downloaded.svg b/assets/svg/ic_cloud_downloaded.svg new file mode 100644 index 00000000..7b7f3be6 --- /dev/null +++ b/assets/svg/ic_cloud_downloaded.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/svg/ic_cloud_downloading.svg b/assets/svg/ic_cloud_downloading.svg new file mode 100644 index 00000000..6289210b --- /dev/null +++ b/assets/svg/ic_cloud_downloading.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index 7c14aa8b..2fa859fd 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -1,34 +1,37 @@ import 'dart:io'; +import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; +import 'package:atsign_atmosphere_pro/services/backend_service.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/images.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/src/foundation/key.dart'; -import 'package:flutter/src/widgets/framework.dart'; -import 'package:flutter/src/widgets/placeholder.dart'; +import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; -import '../../../data_models/file_transfer.dart'; -import '../../../services/backend_service.dart'; -import '../../../services/common_utility_functions.dart'; -import '../../../services/navigation_service.dart'; -import '../../../services/snackbar_service.dart'; -import '../../../utils/colors.dart'; -import '../../../utils/constants.dart'; -import '../../../utils/file_types.dart'; -import '../../../utils/images.dart'; -import '../../../utils/text_strings.dart'; -import '../../../view_models/file_progress_provider.dart'; -import '../../../view_models/history_provider.dart'; -import '../../../view_models/internet_connectivity_checker.dart'; -import '../../../view_models/my_files_provider.dart'; -import '../../my_files/widgets/recents.dart'; - class ContactAttachmentCard extends StatefulWidget { - const ContactAttachmentCard( - {Key? key, required this.fileTransfer, required this.singleFile}) - : super(key: key); - final FileTransfer fileTransfer; final FileData singleFile; + final bool isShowDate; + final EdgeInsetsGeometry? margin; + + const ContactAttachmentCard({ + Key? key, + required this.fileTransfer, + required this.singleFile, + this.isShowDate = true, + this.margin, + }) : super(key: key); @override State createState() => _ContactAttachmentCardState(); @@ -67,7 +70,11 @@ class _ContactAttachmentCardState extends State { color: Colors.white, borderRadius: BorderRadius.circular(10), ), - margin: EdgeInsets.symmetric(horizontal: 25, vertical: 5), + margin: widget.margin ?? + EdgeInsets.symmetric( + horizontal: 25, + vertical: 5, + ), padding: EdgeInsets.all(15), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -89,134 +96,87 @@ class _ContactAttachmentCardState extends State { SizedBox(width: 15), Expanded( child: Column( - children: [ - Text( - widget.singleFile.name ?? "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 10, - ), - ), - const SizedBox( - height: 10, + children: [ + Row( + children: [ + Expanded( + child: Text( + widget.singleFile.name ?? "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 10, + ), + ), + ), + Visibility( + visible: widget.isShowDate, + child: Text( + CommonUtilityFunctions() + .formatDateTime(widget.fileTransfer.date!), + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + ), + ), + ], ), + SizedBox(height: 10), Row( - children: [ - Consumer(builder: (_c, provider, _) { - var fileTransferProgress = provider - .receivedFileProgress[widget.fileTransfer.key]; - return CommonUtilityFunctions() - .checkForDownloadAvailability(widget.fileTransfer) - ? fileTransferProgress != null - ? CommonUtilityFunctions() - .getDownloadStatus(fileTransferProgress) - : (isDownloaded - ? Stack( - children: [ - Container( - padding: EdgeInsets.all(5), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: ColorConstants.MILD_GREY, - ), - child: Icon( - Icons.cloud_download_outlined, - color: Colors.grey, - size: 16, - ), - ), - Positioned( - top: 0, - right: 0, - child: Container( - padding: EdgeInsets.all(2), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Color.fromARGB(167, 113, 219, 168), - ), - child: Icon( - Icons.done, - color: Colors.green, - size: 8, - ), - ), + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Consumer( + builder: (_c, provider, _) { + var fileTransferProgress = provider + .receivedFileProgress[widget.fileTransfer.key]; + + return CommonUtilityFunctions() + .checkForDownloadAvailability( + widget.fileTransfer) + ? fileTransferProgress != null + ? CommonUtilityFunctions().getDownloadStatus( + fileTransferProgress, + ) + : isDownloaded + ? SvgPicture.asset( + AppVectors.icCloudDownloaded) + : InkWell( + onTap: () async { + await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name, + ); + }, + child: SvgPicture.asset( + AppVectors.icDownloadFile, ), - ], - ) - : InkWell( - onTap: () async => await downloadFiles( - widget.fileTransfer, - fileName: widget.singleFile.name), - child: Container( - padding: EdgeInsets.all(3), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: Colors.black, - ), - child: Icon( - Icons.cloud_download_outlined, - color: Colors.white, - size: 18, - )), - )) - : SizedBox(); - }), + ) + : SizedBox(); + }, + ), const SizedBox( width: 10, ), - Container( - padding: - EdgeInsets.only(left: 8, top: 8, bottom: 5, right: 5), - decoration: BoxDecoration( - shape: BoxShape.circle, - color: ColorConstants.yellow, - ), - child: Center( - child: Image.asset( - ImageConstants.openFileIcon, - fit: BoxFit.cover, - ), + SvgPicture.asset( + AppVectors.icSendFile, + ), + Spacer(), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, ), - ) + ), ], - ) - ], - ), - ), - SizedBox( - width: 10, - ), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.end, - mainAxisSize: MainAxisSize.max, - children: [ - Text( - CommonUtilityFunctions() - .formatDateTime(widget.fileTransfer.date!), - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, - ), - ), - const SizedBox( - height: 10, - ), - Text( - double.parse(widget.singleFile.size.toString()) <= 1024 - ? '${widget.singleFile.size} ' + TextStrings().kb - : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + - TextStrings().mb, - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, - ), ), ], ), - ) + ), ], ), ); @@ -227,7 +187,7 @@ class _ContactAttachmentCardState extends State { return FileTypes.IMAGE_TYPES.contains(extension) ? ClipRRect( borderRadius: BorderRadius.circular(10), - child: Container( + child: SizedBox( height: 50, width: 50, child: isFilePresent! @@ -254,8 +214,7 @@ class _ContactAttachmentCardState extends State { future: videoThumbnailBuilder(path), builder: (context, snapshot) => ClipRRect( borderRadius: BorderRadius.circular(10), - child: Container( - padding: EdgeInsets.only(left: 10), + child: SizedBox( height: 50, width: 50, child: (snapshot.data == null) @@ -280,29 +239,33 @@ class _ContactAttachmentCardState extends State { ) : ClipRRect( borderRadius: BorderRadius.circular(10), - child: Container( - padding: EdgeInsets.only(left: 10), + child: SizedBox( height: 50, width: 50, - child: Image.asset( - FileTypes.PDF_TYPES.contains(extension) - ? ImageConstants.pdfLogo - : FileTypes.AUDIO_TYPES.contains(extension) - ? ImageConstants.musicLogo - : FileTypes.WORD_TYPES.contains(extension) - ? ImageConstants.wordLogo - : FileTypes.EXEL_TYPES.contains(extension) - ? ImageConstants.exelLogo - : FileTypes.TEXT_TYPES.contains(extension) - ? ImageConstants.txtLogo - : ImageConstants.unknownLogo, - fit: BoxFit.cover, + child: Center( + child: Image.asset( + FileTypes.PDF_TYPES.contains(extension) + ? ImageConstants.pdfLogo + : FileTypes.AUDIO_TYPES.contains(extension) + ? ImageConstants.musicLogo + : FileTypes.WORD_TYPES.contains(extension) + ? ImageConstants.wordLogo + : FileTypes.EXEL_TYPES.contains(extension) + ? ImageConstants.exelLogo + : FileTypes.TEXT_TYPES.contains(extension) + ? ImageConstants.txtLogo + : ImageConstants.unknownLogo, + fit: BoxFit.cover, + ), ), ), ); } - downloadFiles(FileTransfer? file, {String? fileName}) async { + Future downloadFiles( + FileTransfer? file, { + String? fileName, + }) async { var fileTransferProgress = Provider.of( NavService.navKey.currentContext!, listen: false) @@ -311,6 +274,7 @@ class _ContactAttachmentCardState extends State { if (fileTransferProgress != null) { return; //returning because download is still in progress } + var isConnected = Provider.of( NavService.navKey.currentContext!, listen: false) @@ -349,11 +313,8 @@ class _ContactAttachmentCardState extends State { if (result is bool && result) { if (mounted) { - // getFutureBuilders(); setState(() { isDownloaded = true; - // isFilesAvailableOfline = true; - // isOverwrite = false; }); } await Provider.of(NavService.navKey.currentContext!, diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index a1425719..f5b03731 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -152,19 +152,18 @@ class _TransferHistoryScreenState extends State { padding: EdgeInsets.only(bottom: 170.toHeight), physics: AlwaysScrollableScrollPhysics(), separatorBuilder: (context, index) { - return Divider( - indent: 16.toWidth, - ); + return SizedBox(height: 10.toHeight); }, itemCount: filteredSentHistory.length, itemBuilder: (context, index) { - return HistoryCardWidget(); + return HistoryCardWidget( + fileHistory: filteredSentHistory[index], + ); // SentFilesListTile( // sentHistory: filteredSentHistory[index], // key: Key(filteredSentHistory[index].fileDetails!.key), // ); - }, ); } else { diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 67d5f724..55b90e6b 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -1,6 +1,14 @@ +import 'package:at_common_flutter/at_common_flutter.dart'; +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_attachment_card.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; class HistoryCardWidget extends StatefulWidget { final FileHistory? fileHistory; @@ -15,113 +23,215 @@ class HistoryCardWidget extends StatefulWidget { } class _HistoryCardWidgetState extends State { - bool isExpanded = false; + bool isExpanded = false, isFileSharedToGroup = false; + String nickName = ''; + List contactList = []; + List? filesList = []; + + @override + void initState() { + filesList = widget.fileHistory!.fileDetails!.files; + if (widget.fileHistory?.type == HistoryType.send) { + if (widget.fileHistory!.sharedWith != null) { + contactList = + widget.fileHistory!.sharedWith!.map((e) => e.atsign).toList(); + getDisplayDetails(); + } + + if (widget.fileHistory!.groupName != null) { + isFileSharedToGroup = true; + } + } else { + getDisplayDetails(); + } + + super.initState(); + } + + getDisplayDetails() async { + AtContact? displayDetails; + + if (widget.fileHistory?.type == HistoryType.send) { + displayDetails = await getAtSignDetails(contactList[0] ?? ''); + } else { + displayDetails = await getAtSignDetails( + widget.fileHistory?.fileDetails?.sender ?? '', + ); + } + + if (contactList.length - 1 > 0) { + nickName = "${contactList[0]} and ${contactList.length - 1} others"; + } else { + if (displayDetails.tags != null) { + nickName = displayDetails.tags!['nickname'] ?? + displayDetails.tags!['name'] ?? + ''; + } + } + setState(() {}); + } @override Widget build(BuildContext context) { - return Container( - height: 74, - width: double.infinity, - margin: EdgeInsets.only(left: 36, right: 18), - padding: EdgeInsets.symmetric( - horizontal: 16, - vertical: 12, - ), - decoration: BoxDecoration( - color: isExpanded ? Color(0xFFD7D7D7) : Colors.white, - borderRadius: BorderRadius.circular(10), - ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Text( - "Anna", + return Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: EdgeInsets.only(left: 36, right: 18), + padding: EdgeInsets.symmetric( + horizontal: 16, + vertical: 12, + ), + decoration: BoxDecoration( + color: isExpanded ? Color(0xFFE9E9E9) : Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: InkWell( + onTap: () { + setState(() { + isExpanded = !isExpanded; + }); + }, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + isFileSharedToGroup + ? "${widget.fileHistory?.groupName ?? ''}" + : nickName, + style: TextStyle( + fontSize: 10.toFont, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + ), + SizedBox(width: 8), + Text( + '${DateFormat("MM/dd/yy").format(widget.fileHistory!.fileDetails!.date!)}', + style: TextStyle( + fontSize: 10.toFont, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + '${DateFormat('kk:mm').format(widget.fileHistory!.fileDetails!.date!)}', + style: TextStyle( + fontSize: 10.toFont, + color: ColorConstants.oldSliver, + ), + ), + SizedBox(width: 6), + Container( + height: 10, + width: 10, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + color: ColorConstants.lightGreen, + ), + child: Icon( + Icons.check, + size: 8, + color: ColorConstants.textGreen, + ), + ), + SizedBox(width: 4), + Container( + height: 16, + padding: EdgeInsets.symmetric( + horizontal: + widget.fileHistory?.type == HistoryType.received + ? 8 + : 16, + vertical: 2, + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(33), + color: ColorConstants.lightGreen, + ), + child: Center( + child: Text( + widget.fileHistory?.type == HistoryType.received + ? "Received" + : "Sent", + style: TextStyle( + color: ColorConstants.textGreen, + fontSize: 8.toFont, + ), + ), + ), + ), + ], + ), + Text( + contactList.length > 1 || isFileSharedToGroup + ? '' + : widget.fileHistory?.type == HistoryType.received + ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" + : "${contactList[0] ?? ''}", style: TextStyle( - fontSize: 10, - fontWeight: FontWeight.w600, + fontSize: 8.toFont, color: Colors.black, ), ), - ), - SizedBox(width: 8), - Text( - "04/07/23", - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, - ), - ), - Container( - width: 1, - height: 8, - color: Color(0xFFD7D7D7), - margin: EdgeInsets.symmetric( - horizontal: 3, - ), - ), - Text( - "14:09", - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, - ), - ), - SizedBox(width: 6), - Container( - height: 10, - width: 10, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5), - color: ColorConstants.lightGreen, - ), - child: Icon( - Icons.check, - size: 8, - color: ColorConstants.textGreen, - ), - ), - SizedBox(width: 4), - Container( - height: 16, - padding: EdgeInsets.symmetric(horizontal: 8, vertical: 2), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(33), - color: ColorConstants.lightGreen, - ), - child: Center( - child: Text( - "Received", - style: TextStyle( - color: ColorConstants.textGreen, - fontSize: 8, + SizedBox(height: 7), + Row( + children: [ + Expanded( + child: Text( + "${widget.fileHistory?.notes ?? ''}", + style: TextStyle( + fontSize: 8.toFont, + color: Color(0xFF747474), + ), + ), ), - ), - ), - ), - ], - ), - Text( - "@Antartica45", - style: TextStyle( - fontSize: 8, - color: Colors.black, + Text( + "${filesList!.length} Files", + style: TextStyle( + fontSize: 8.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.textBlack, + ), + ), + SizedBox(width: 6), + isExpanded + ? SvgPicture.asset(AppVectors.icArrowUpOutline) + : SvgPicture.asset(AppVectors.icArrowDownOutline), + ], + ) + ], ), ), - Row( - children: [ - Text( - "message", - style: TextStyle( - fontSize: 10, - ), + ), + isExpanded + ? ListView.builder( + shrinkWrap: true, + itemCount: widget.fileHistory?.fileDetails?.files?.length ?? 0, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.only(top: 4), + itemBuilder: (context, index) { + return ContactAttachmentCard( + fileTransfer: widget.fileHistory!.fileDetails!, + singleFile: widget.fileHistory!.fileDetails!.files![index], + isShowDate: false, + margin: EdgeInsets.fromLTRB(36, 6, 20, 0), + ); + }, ) - ], - ) - ], - ), + : SizedBox(), + ], ); } } diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index d27e7542..d09195d4 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -53,4 +53,8 @@ class AppVectors { static String icDeleteFile = '$_basePath/ic_delete_file.svg'; static String icSendFile = '$_basePath/ic_send_file.svg'; static String icDownloadFile = '$_basePath/ic_download_file.svg'; + static String icArrowUpOutline = '$_basePath/ic_arrow_up_outline.svg'; + static String icArrowDownOutline = '$_basePath/ic_arrow_down_outline.svg'; + static String icCloudDownloaded = '$_basePath/ic_cloud_downloaded.svg'; + static String icCloudDownloading = '$_basePath/ic_cloud_downloading.svg'; } From 6ff2419ffcdbeba202c997e8e4efd6ce822834b5 Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 8 May 2023 15:28:45 +0700 Subject: [PATCH 64/94] feat: update History Screen --- .../history/transfer_history_screen.dart | 82 +++++++++++----- .../widgets/filter_history_widget.dart | 63 ++++++++++++ .../history/widgets/history_card_widget.dart | 96 +++++++++++++++++-- lib/screens/my_files/files_detail_screen.dart | 4 +- lib/screens/my_files/my_files_screen.dart | 36 +++---- lib/view_models/history_provider.dart | 95 ++++++++++++------ 6 files changed, 293 insertions(+), 83 deletions(-) create mode 100644 lib/screens/history/widgets/filter_history_widget.dart diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index f5b03731..a3594ec4 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -9,9 +9,9 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/labelled_circular_p import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_history_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/history_card_widget.dart'; -import 'package:atsign_atmosphere_pro/screens/history/widgets/sent_file_list_tile.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; @@ -44,6 +44,7 @@ class _TransferHistoryScreenState extends State { late HistoryProvider historyProvider; late HistoryProvider provider; late TextEditingController searchController; + GlobalKey filterKey = GlobalKey(); @override void initState() { @@ -83,6 +84,10 @@ class _TransferHistoryScreenState extends State { borderColor: Colors.white, backgroundColor: Colors.white, hintText: "Search", + onChange: (text) { + setState(() {}); + // provider.setHistorySearchText = text; + }, hintStyle: TextStyle( color: ColorConstants.darkSliver, fontSize: 15, @@ -92,8 +97,14 @@ class _TransferHistoryScreenState extends State { ), ), SizedBox(width: 16), - SvgPicture.asset( - AppVectors.icFilter, + InkWell( + onTap: (){ + _onTapFilterIcon(); + }, + child: SvgPicture.asset( + AppVectors.icFilter, + key: filterKey, + ), ), ], ), @@ -103,14 +114,17 @@ class _TransferHistoryScreenState extends State { onRefresh: () async { if (historyProvider.status[historyProvider.PERIODIC_REFRESH] != Status.Loading) { - await historyProvider.getSentHistory(); + await historyProvider.getAllFileTransferHistory(); } }, child: ProviderHandler( - functionName: historyProvider.SENT_HISTORY, + functionName: historyProvider.GET_ALL_FILE_DATA, showError: false, + load: (provider) async { + await historyProvider.getAllFileTransferHistory(); + }, successBuilder: (provider) { - if ((provider.sentHistory.isEmpty)) { + if ((provider.allFilesHistory.isEmpty)) { return ListView.separated( padding: EdgeInsets.only(bottom: 170.toHeight), physics: AlwaysScrollableScrollPhysics(), @@ -134,30 +148,39 @@ class _TransferHistoryScreenState extends State { ), ); } else { - List filteredSentHistory = []; - provider.sentHistory.forEach((element) { - if (element.sharedWith!.any( - (ShareStatus sharedStatus) => sharedStatus.atsign! - .contains(provider.getSearchText), - ) || - (element.groupName != null && - element.groupName!.toLowerCase().contains( - provider.getSearchText.toLowerCase()))) { - filteredSentHistory.add(element); + List filteredFileHistory = []; + + provider.allFilesHistory.forEach((element) { + if (element.type == HistoryType.send) { + if (element.sharedWith!.any( + (ShareStatus sharedStatus) => sharedStatus.atsign! + .contains(searchController.text), + ) || + (element.groupName != null && + element.groupName!.toLowerCase().contains( + searchController.text.toLowerCase()))) { + filteredFileHistory.add(element); + } + } else { + if (element.fileDetails!.sender!.contains( + searchController.text, + )) { + filteredFileHistory.add(element); + } } }); - if (filteredSentHistory.isNotEmpty) { + if (filteredFileHistory.isNotEmpty) { return ListView.separated( padding: EdgeInsets.only(bottom: 170.toHeight), physics: AlwaysScrollableScrollPhysics(), separatorBuilder: (context, index) { return SizedBox(height: 10.toHeight); }, - itemCount: filteredSentHistory.length, + itemCount: filteredFileHistory.length, itemBuilder: (context, index) { return HistoryCardWidget( - fileHistory: filteredSentHistory[index], + fileHistory: filteredFileHistory[index], ); // SentFilesListTile( @@ -200,7 +223,7 @@ class _TransferHistoryScreenState extends State { height: 40.toHeight, width: 115.toWidth, onPressed: () { - historyProvider.getSentHistory(); + historyProvider.getAllFileTransferHistory(); }, ) ], @@ -208,7 +231,6 @@ class _TransferHistoryScreenState extends State { ), ), ), - load: (provider) async {}, ), ), ), @@ -394,6 +416,22 @@ class _TransferHistoryScreenState extends State { ); } + + void _onTapFilterIcon() async { + RenderBox box = filterKey.currentContext!.findRenderObject() as RenderBox; + Offset position = box.localToGlobal(Offset.zero); + + await showDialog( + barrierDismissible: true, + useRootNavigator: true, + context: context, + builder: (context) { + return FilterHistoryWidget(position: position,); + }, + ); + } + + Widget _buildTableTitle({ required String title, int flex = 1, @@ -438,7 +476,7 @@ class _TransferHistoryScreenState extends State { padding: EdgeInsets.only(bottom: 110), itemCount: files.length, itemBuilder: (context, index) { - final DateFormat formatter = DateFormat('dd/MM/yy'); + final DateFormat formatter = DateFormat('MM/dd/yy'); final String date = (files[index].date ?? '').isNotEmpty ? formatter.format(DateTime.parse( files[index].date!, diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart new file mode 100644 index 00000000..6e73e758 --- /dev/null +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -0,0 +1,63 @@ +import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:flutter/material.dart'; + +class FilterHistoryWidget extends StatelessWidget { + final Offset position; + + const FilterHistoryWidget({ + Key? key, + required this.position, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Colors.transparent, + body: WillPopScope( + onWillPop: () async { + return true; + }, + child: Stack( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + color: Colors.transparent, + height: double.infinity, + width: double.infinity, + ), + ), + Positioned( + right: 15, + top: position.dy, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Container( + width: MediaQuery.of(context).size.width - 30.toWidth, + height: 40, + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(12), + topRight: Radius.circular(12), + ), + color: Colors.black, + ), + ), + Container( + height: 60, + width: MediaQuery.of(context).size.width - 30.toWidth, + color: Colors.white, + ), + ], + ), + ), + ], + ), + ), + ); + } +} \ No newline at end of file diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 55b90e6b..1cf3df11 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -1,9 +1,13 @@ +import 'dart:io'; + import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_attachment_card.dart'; +import 'package:atsign_atmosphere_pro/services/backend_service.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; @@ -23,10 +27,17 @@ class HistoryCardWidget extends StatefulWidget { } class _HistoryCardWidgetState extends State { - bool isExpanded = false, isFileSharedToGroup = false; + bool isExpanded = false, + isFileSharedToGroup = false, + isDownloadAvailable = false, + isFilesAvailableOffline = true, + isOverwrite = false; + String nickName = ''; + List existingFileNamesToOverwrite = []; List contactList = []; List? filesList = []; + Map _futureBuilder = {}; @override void initState() { @@ -41,14 +52,24 @@ class _HistoryCardWidgetState extends State { if (widget.fileHistory!.groupName != null) { isFileSharedToGroup = true; } + + if (mounted) setState(() {}); } else { - getDisplayDetails(); + _loadReceived(); } super.initState(); } - getDisplayDetails() async { + void _loadReceived() async { + checkForDownloadAvailability(); + await isFilesAlreadyDownloaded(); + getFutureBuilders(); + await getDisplayDetails(); + if (mounted) setState(() {}); + } + + Future getDisplayDetails() async { AtContact? displayDetails; if (widget.fileHistory?.type == HistoryType.send) { @@ -68,11 +89,70 @@ class _HistoryCardWidgetState extends State { ''; } } - setState(() {}); + } + + void checkForDownloadAvailability() { + var expiryDate = + widget.fileHistory!.fileDetails!.date!.add(Duration(days: 6)); + if (expiryDate.difference(DateTime.now()) > Duration(seconds: 0)) { + isDownloadAvailable = true; + } + + // if fileList is not having any file then download icon will not be shown + var isFileUploaded = false; + widget.fileHistory!.fileDetails!.files!.forEach((FileData fileData) { + if (fileData.isUploaded!) { + isFileUploaded = true; + } + }); + + if (!isFileUploaded) { + isDownloadAvailable = false; + } + } + + Future isFilesAlreadyDownloaded() async { + widget.fileHistory!.fileDetails!.files!.forEach((element) async { + String path = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (element.name ?? ''); + File test = File(path); + bool fileExists = await test.exists(); + if (fileExists == false) { + if (mounted) { + setState(() { + isFilesAvailableOffline = false; + }); + } + } else { + var fileLatsModified = await test.lastModified(); + if (fileLatsModified.isBefore(widget.fileHistory!.fileDetails!.date!)) { + existingFileNamesToOverwrite.add(element.name); + if (mounted) { + setState(() { + isOverwrite = true; + }); + } + } + } + }); + } + + void getFutureBuilders() { + widget.fileHistory!.fileDetails!.files!.forEach((element) { + String filePath = BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + element.name!; + _futureBuilder[element.name] = + CommonUtilityFunctions().isFilePresent(filePath); + }); } @override Widget build(BuildContext context) { + print("nickname: $nickName"); + print( + "atSign: ${widget.fileHistory?.type == HistoryType.received ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" : isFileSharedToGroup || contactList.isEmpty ? '' : "${contactList[0] ?? ''}"}"); return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -175,10 +255,10 @@ class _HistoryCardWidgetState extends State { ], ), Text( - contactList.length > 1 || isFileSharedToGroup - ? '' - : widget.fileHistory?.type == HistoryType.received - ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" + widget.fileHistory?.type == HistoryType.received + ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" + : isFileSharedToGroup || contactList.isEmpty + ? '' : "${contactList[0] ?? ''}", style: TextStyle( fontSize: 8.toFont, diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 44cdb3a5..d2a7976e 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -231,8 +231,8 @@ class _FilesDetailScreenState extends State { separatorBuilder: (context, index) => SizedBox(height: 10), itemBuilder: (context, index) { final date = DateTime.parse(files[index].date ?? "").toLocal(); - final shortDate = DateFormat('dd/MM/yy').format(date); - final time = DateFormat('HH:mm').format(date); + final shortDate = DateFormat('MM/dd/yy').format(date); + final time = DateFormat('kk:mm').format(date); return Slidable( actionPane: const SlidableDrawerActionPane(), diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 4050415f..21dc8033 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -75,27 +75,17 @@ class _MyFilesScreenState extends State { top: 18.toHeight, right: 32.toWidth, ), - child: Row( - children: [ - Expanded( - child: SearchWidget( - controller: searchController, - borderColor: Colors.white, - backgroundColor: Colors.white, - hintText: "Search", - hintStyle: TextStyle( - color: ColorConstants.darkSliver, - fontSize: 15, - fontWeight: FontWeight.w500, - ), - margin: EdgeInsets.zero, - ), - ), - SizedBox(width: 16), - SvgPicture.asset( - AppVectors.icFilter, - ), - ], + child: SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, + fontWeight: FontWeight.w500, + ), + margin: EdgeInsets.zero, ), ), Padding( @@ -117,7 +107,7 @@ class _MyFilesScreenState extends State { child: ListView.separated( scrollDirection: Axis.horizontal, itemCount: provider.recentFile.length, - padding: EdgeInsets.zero, + padding: EdgeInsets.only(right: 32), physics: ClampingScrollPhysics(), separatorBuilder: (context, index) => SizedBox( width: 16, @@ -545,4 +535,4 @@ class _MyFilesScreenState extends State { ), ); } -} +} \ No newline at end of file diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index a6dc7ac5..c1408b92 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -38,11 +38,17 @@ class HistoryProvider extends BaseModel { String SET_FILE_HISTORY = 'set_flie_history'; String SET_RECEIVED_HISTORY = 'set_received_history'; String GET_ALL_FILE_DATA = 'get_all_file_data'; + String GET_ALL_FILE_HISTORY = 'get_all_file_history'; String GET_FILE_STATUS = 'get_file_status'; String DOWNLOAD_FILE = 'download_file'; String DOWNLOAD_ACK = 'download_ack'; - List sentHistory = [], tempSentHistory = []; - List receivedHistoryLogs = []; ///SONLT2 List Received + List sentHistory = [], + tempSentHistory = [], + receivedFileHistory = [], + allFilesHistory = []; + List receivedHistoryLogs = []; + + ///SONLT2 List Received Map> downloadedFileAcknowledgement = {}; Map individualSentFileId = {}, receivedItemsId = {}; String? state; @@ -631,7 +637,6 @@ class HistoryProvider extends BaseModel { setStatus(DOWNLOAD_ACK, Status.Done); } - ///kkk getReceivedHistory({bool setLoading = true}) async { if (setLoading) { setStatus(RECEIVED_HISTORY, Status.Loading); @@ -823,9 +828,10 @@ class HistoryProvider extends BaseModel { } } - getAllFileTransferData() async { + Future getAllFileTransferData() async { setStatus(GET_ALL_FILE_DATA, Status.Loading); List tempReceivedHistoryLogs = []; + List tempReceivedFiles = []; List fileTransferAtkeys = await AtClientManager.getInstance().atClient.getAtKeys( @@ -854,11 +860,10 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = await AtClientManager.getInstance() - .atClient - .get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = + await AtClientManager.getInstance().atClient.get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); @@ -876,6 +881,17 @@ class HistoryProvider extends BaseModel { if (filesModel.key != null) { tempReceivedHistoryLogs.insert(0, filesModel); } + + final file = FileHistory( + filesModel, + [], + HistoryType.received, + fileTransferObject, + ); + + if (filesModel.key != null) { + tempReceivedFiles.insert(0, file); + } } catch (e) { print('error in getAllFileTransferData file model conversion: $e'); } @@ -884,9 +900,32 @@ class HistoryProvider extends BaseModel { } receivedHistoryLogs = tempReceivedHistoryLogs; + receivedFileHistory = tempReceivedFiles; setStatus(GET_ALL_FILE_DATA, Status.Done); } + Future getAllFileTransferHistory() async { + setStatus(GET_ALL_FILE_HISTORY, Status.Loading); + List tempFileHistoryLogs = []; + try { + await [ + getSentHistory(), + getAllFileTransferData(), + ]; + + tempFileHistoryLogs.addAll(receivedFileHistory); + tempFileHistoryLogs.addAll(sentHistory); + + tempFileHistoryLogs + .sort((a, b) => b.fileDetails!.date!.compareTo(a.fileDetails!.date!)); + + allFilesHistory = tempFileHistoryLogs; + setStatus(GET_ALL_FILE_DATA, Status.Done); + } catch (e) { + setStatus(GET_ALL_FILE_DATA, Status.Error); + } + } + getrecentHistoryFiles() async { // finding last 15 received files data for recent tab setStatus(RECENT_HISTORY, Status.Loading); @@ -1002,10 +1041,11 @@ class HistoryProvider extends BaseModel { } FileHistory convertFileTransferObjectToFileHistory( - FileTransferObject fileTransferObject, - List sharedWithAtsigns, - Map fileShareResult, - {String? groupName}) { + FileTransferObject fileTransferObject, + List sharedWithAtsigns, + Map fileShareResult, { + String? groupName, + }) { List files = []; var sthareStatus = []; @@ -1415,11 +1455,10 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = await AtClientManager.getInstance() - .atClient - .get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = + await AtClientManager.getInstance().atClient.get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); @@ -1449,14 +1488,14 @@ class HistoryProvider extends BaseModel { setStatus(RECEIVED_HISTORY, Status.Done); } - // save file in gallery function is not in use as of now. - // saveFilesInGallery(List files) async { - // for (var file in files) { - // if (FileTypes.IMAGE_TYPES.contains(file.path.split('.').last) || - // FileTypes.VIDEO_TYPES.contains(file.path.split('.').last)) { - // // saving image,video in gallery. - // await ImageGallerySaver.saveFile(file.path); - // } - // } - // } +// save file in gallery function is not in use as of now. +// saveFilesInGallery(List files) async { +// for (var file in files) { +// if (FileTypes.IMAGE_TYPES.contains(file.path.split('.').last) || +// FileTypes.VIDEO_TYPES.contains(file.path.split('.').last)) { +// // saving image,video in gallery. +// await ImageGallerySaver.saveFile(file.path); +// } +// } +// } } From 2285b40070777762587ade8374bb0013d635a9b8 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 9 May 2023 04:56:53 +0700 Subject: [PATCH 65/94] feat: update history card --- .../history/widgets/history_card_widget.dart | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 1cf3df11..7f5b505a 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -42,18 +42,9 @@ class _HistoryCardWidgetState extends State { @override void initState() { filesList = widget.fileHistory!.fileDetails!.files; - if (widget.fileHistory?.type == HistoryType.send) { - if (widget.fileHistory!.sharedWith != null) { - contactList = - widget.fileHistory!.sharedWith!.map((e) => e.atsign).toList(); - getDisplayDetails(); - } - - if (widget.fileHistory!.groupName != null) { - isFileSharedToGroup = true; - } - if (mounted) setState(() {}); + if (widget.fileHistory?.type == HistoryType.send) { + _loadSent(); } else { _loadReceived(); } @@ -61,10 +52,24 @@ class _HistoryCardWidgetState extends State { super.initState(); } + void _loadSent() async { + if (widget.fileHistory!.sharedWith != null) { + contactList = + widget.fileHistory!.sharedWith!.map((e) => e.atsign).toList(); + await getDisplayDetails(); + } + + if (widget.fileHistory!.groupName != null) { + isFileSharedToGroup = true; + } + + if (mounted) setState(() {}); + } + void _loadReceived() async { - checkForDownloadAvailability(); - await isFilesAlreadyDownloaded(); - getFutureBuilders(); + // checkForDownloadAvailability(); + // await isFilesAlreadyDownloaded(); + // getFutureBuilders(); await getDisplayDetails(); if (mounted) setState(() {}); } @@ -150,9 +155,9 @@ class _HistoryCardWidgetState extends State { @override Widget build(BuildContext context) { - print("nickname: $nickName"); - print( - "atSign: ${widget.fileHistory?.type == HistoryType.received ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" : isFileSharedToGroup || contactList.isEmpty ? '' : "${contactList[0] ?? ''}"}"); + // print("nickname: $nickName"); + // print( + // "atSign: ${widget.fileHistory?.type == HistoryType.received ? "${widget.fileHistory?.fileDetails?.sender ?? ''}" : isFileSharedToGroup || contactList.isEmpty ? '' : "${contactList[0] ?? ''}"}"); return Column( mainAxisSize: MainAxisSize.min, children: [ From 1d652ae035c3dc3d927cb289360380b83cad6475 Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 8 May 2023 19:22:33 +0700 Subject: [PATCH 66/94] feat: added filter dialog ui --- assets/svg/ic_arrow_asc.svg | 3 + assets/svg/ic_arrow_desc.svg | 3 + assets/svg/ic_audio.svg | 5 + assets/svg/ic_checked.svg | 4 + assets/svg/ic_files.svg | 3 + assets/svg/ic_other.svg | 5 + assets/svg/ic_photos.svg | 3 + assets/svg/ic_received.svg | 4 + assets/svg/ic_sent.svg | 4 + assets/svg/ic_uncheck.svg | 3 + assets/svg/ic_videos.svg | 3 + assets/svg/ic_zips.svg | 3 + .../enums/contact_filter_type.dart | 2 +- lib/data_models/enums/contact_type.dart | 2 +- .../contact_detail_screen.dart | 2 +- .../history/transfer_history_screen.dart | 32 +- .../widgets/filter_history_widget.dart | 192 ++++- lib/utils/colors.dart | 2 + lib/utils/vectors.dart | 13 + pubspec.lock | 677 +++++++----------- 20 files changed, 502 insertions(+), 463 deletions(-) create mode 100644 assets/svg/ic_arrow_asc.svg create mode 100644 assets/svg/ic_arrow_desc.svg create mode 100644 assets/svg/ic_audio.svg create mode 100644 assets/svg/ic_checked.svg create mode 100644 assets/svg/ic_files.svg create mode 100644 assets/svg/ic_other.svg create mode 100644 assets/svg/ic_photos.svg create mode 100644 assets/svg/ic_received.svg create mode 100644 assets/svg/ic_sent.svg create mode 100644 assets/svg/ic_uncheck.svg create mode 100644 assets/svg/ic_videos.svg create mode 100644 assets/svg/ic_zips.svg diff --git a/assets/svg/ic_arrow_asc.svg b/assets/svg/ic_arrow_asc.svg new file mode 100644 index 00000000..f1d06ae9 --- /dev/null +++ b/assets/svg/ic_arrow_asc.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_arrow_desc.svg b/assets/svg/ic_arrow_desc.svg new file mode 100644 index 00000000..b3b146d4 --- /dev/null +++ b/assets/svg/ic_arrow_desc.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_audio.svg b/assets/svg/ic_audio.svg new file mode 100644 index 00000000..fe2856f0 --- /dev/null +++ b/assets/svg/ic_audio.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_checked.svg b/assets/svg/ic_checked.svg new file mode 100644 index 00000000..e48e856d --- /dev/null +++ b/assets/svg/ic_checked.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_files.svg b/assets/svg/ic_files.svg new file mode 100644 index 00000000..d8eccee7 --- /dev/null +++ b/assets/svg/ic_files.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_other.svg b/assets/svg/ic_other.svg new file mode 100644 index 00000000..5812c943 --- /dev/null +++ b/assets/svg/ic_other.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/svg/ic_photos.svg b/assets/svg/ic_photos.svg new file mode 100644 index 00000000..e33e07ec --- /dev/null +++ b/assets/svg/ic_photos.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_received.svg b/assets/svg/ic_received.svg new file mode 100644 index 00000000..33a01b10 --- /dev/null +++ b/assets/svg/ic_received.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_sent.svg b/assets/svg/ic_sent.svg new file mode 100644 index 00000000..07783da8 --- /dev/null +++ b/assets/svg/ic_sent.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/svg/ic_uncheck.svg b/assets/svg/ic_uncheck.svg new file mode 100644 index 00000000..2a111542 --- /dev/null +++ b/assets/svg/ic_uncheck.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_videos.svg b/assets/svg/ic_videos.svg new file mode 100644 index 00000000..91f3bcc4 --- /dev/null +++ b/assets/svg/ic_videos.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/svg/ic_zips.svg b/assets/svg/ic_zips.svg new file mode 100644 index 00000000..479a0ea1 --- /dev/null +++ b/assets/svg/ic_zips.svg @@ -0,0 +1,3 @@ + + + diff --git a/lib/data_models/enums/contact_filter_type.dart b/lib/data_models/enums/contact_filter_type.dart index 9bc01189..d3f1d100 100644 --- a/lib/data_models/enums/contact_filter_type.dart +++ b/lib/data_models/enums/contact_filter_type.dart @@ -11,4 +11,4 @@ extension ContactFilterExtension on ContactFilter { return "Groups"; } } -} \ No newline at end of file +} diff --git a/lib/data_models/enums/contact_type.dart b/lib/data_models/enums/contact_type.dart index 5b93ff4c..1b083513 100644 --- a/lib/data_models/enums/contact_type.dart +++ b/lib/data_models/enums/contact_type.dart @@ -1,4 +1,4 @@ -enum ListContactType { contact, trusted, groups, all} +enum ListContactType { contact, trusted, groups, all } extension ContactsTypeExtension on ListContactType { String get display { diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index 5989eb93..58add477 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -161,7 +161,7 @@ class _ContactDetailScreenState extends State { children: [ Flexible( child: TextField( - onTapOutside: editNickname, + // onTapOutside: editNickname, decoration: InputDecoration( hintText: 'Enter Nickname', hintStyle: TextStyle( diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index a3594ec4..99249ceb 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -98,7 +98,7 @@ class _TransferHistoryScreenState extends State { ), SizedBox(width: 16), InkWell( - onTap: (){ + onTap: () { _onTapFilterIcon(); }, child: SvgPicture.asset( @@ -416,21 +416,23 @@ class _TransferHistoryScreenState extends State { ); } + void _onTapFilterIcon() async { + RenderBox box = filterKey.currentContext!.findRenderObject() as RenderBox; + Offset position = box.localToGlobal(Offset.zero); - void _onTapFilterIcon() async { - RenderBox box = filterKey.currentContext!.findRenderObject() as RenderBox; - Offset position = box.localToGlobal(Offset.zero); - - await showDialog( - barrierDismissible: true, - useRootNavigator: true, - context: context, - builder: (context) { - return FilterHistoryWidget(position: position,); - }, - ); - } - + await showDialog( + barrierDismissible: true, + useRootNavigator: true, + context: context, + builder: (context) { + return FilterHistoryWidget( + position: position, + onSelected: (value) {}, + setOrder: (value) {}, + ); + }, + ); + } Widget _buildTableTitle({ required String title, diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart index 6e73e758..519e414b 100644 --- a/lib/screens/history/widgets/filter_history_widget.dart +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -1,15 +1,28 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; -class FilterHistoryWidget extends StatelessWidget { +class FilterHistoryWidget extends StatefulWidget { final Offset position; + final Function(int) onSelected; + final Function(bool) setOrder; - const FilterHistoryWidget({ + FilterHistoryWidget({ Key? key, required this.position, + required this.onSelected, + required this.setOrder, }) : super(key: key); + @override + State createState() => _FilterHistoryWidgetState(); +} + +class _FilterHistoryWidgetState extends State { + bool isDesc = true; + @override Widget build(BuildContext context) { return Scaffold( @@ -32,25 +45,112 @@ class FilterHistoryWidget extends StatelessWidget { ), Positioned( right: 15, - top: position.dy, + top: widget.position.dy, child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( width: MediaQuery.of(context).size.width - 30.toWidth, height: 40, + padding: EdgeInsets.symmetric(vertical: 8, horizontal: 16), decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(12), - topRight: Radius.circular(12), + borderRadius: BorderRadius.vertical( + top: Radius.circular(12), ), color: Colors.black, ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisSize: MainAxisSize.min, + children: [ + SvgPicture.asset( + isDesc + ? AppVectors.icArrowDesc + : AppVectors.icArrowAsc, + width: 8, + height: 12, + fit: BoxFit.cover, + ), + SizedBox(width: 20), + Text( + 'Date', + style: TextStyle( + fontSize: 13, + color: Colors.white, + fontWeight: FontWeight.w500, + ), + ) + ], + ), + Switch( + trackColor: MaterialStateColor.resolveWith((states) { + if (states.contains(MaterialState.selected)) { + return Colors.white; + } + return ColorConstants.disableBackgroundColor; + }), + thumbColor: MaterialStateColor.resolveWith((states) { + if (states.contains(MaterialState.selected)) { + return ColorConstants.orange; + } + return Colors.white; + }), + value: isDesc, + onChanged: (value) { + setState(() { + isDesc = value; + }); + widget.setOrder; + }, + ) + ], + ), ), Container( - height: 60, width: MediaQuery.of(context).size.width - 30.toWidth, - color: Colors.white, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(12), + ), + ), + child: ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.zero, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + if (index > 2) { + return _buildFilterOptionItem( + icon: filterOptionsList.keys.elementAt(index), + title: filterOptionsList.values.elementAt(index), + isCheck: true, + isDisable: true, + index: index, + ); + } else { + return _buildFilterOptionItem( + icon: filterOptionsList.keys.elementAt(index), + title: filterOptionsList.values.elementAt(index), + isCheck: false, + index: index, + ); + } + }, + separatorBuilder: (context, index) { + return Divider( + //TODO: add isDisable variable to check + color: (index > 2 && true) + ? ColorConstants.disableColor + : ColorConstants.lightSliver, + height: 0, + indent: 0, + thickness: 0.65, + ); + }, + itemCount: filterOptionsList.length, + ), ), ], ), @@ -60,4 +160,78 @@ class FilterHistoryWidget extends StatelessWidget { ), ); } -} \ No newline at end of file + + Widget _buildFilterOptionItem({ + required String icon, + required String title, + bool isDisable = false, + required bool isCheck, + required int index, + }) { + Color color = + isDisable && index > 2 ? ColorConstants.disableColor : Colors.black; + Color backgroundColor = isDisable && index > 2 + ? ColorConstants.disableBackgroundColor + : Colors.white; + return InkWell( + onTap: () {}, + child: Container( + height: 36, + padding: EdgeInsets.symmetric(horizontal: 20), + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: index == filterOptionsList.length - 1 + ? BorderRadius.vertical(bottom: Radius.circular(12)) + : BorderRadius.zero, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + icon.isNotEmpty + ? SvgPicture.asset( + icon, + color: color, + height: 16, + width: 12, + fit: BoxFit.cover, + ) + : SizedBox(width: 12), + SizedBox(width: 16), + Text( + title, + style: TextStyle( + color: color, + fontSize: 13, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + SvgPicture.asset( + isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, + width: 16, + height: 16, + color: color, + fit: BoxFit.cover, + ), + ], + ), + ), + ); + } + + Map filterOptionsList = { + AppVectors.icReceived: 'Received', + AppVectors.icSent: 'Sent', + '': 'All', + AppVectors.icPhotos: 'Photos', + AppVectors.icFiles: 'Files', + AppVectors.icAudio: 'Audio', + AppVectors.icVideos: 'Videos', + AppVectors.icZips: 'Zips', + AppVectors.icOther: 'Other' + }; +} diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 498c389f..9a8fce20 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -69,6 +69,8 @@ class ColorConstants { static const Color jetColor = Color(0xFF363636); static const Color lightSliver = Color(0xFFD8D8D8); static const Color raisinBlack = Color(0xFF252525); + static const Color disableColor = Color(0xFFC3C3C3); + static const Color disableBackgroundColor = Color(0xFFE9E9E9); } class ContactInitialsColors { diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index d09195d4..f2d011b2 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -57,4 +57,17 @@ class AppVectors { static String icArrowDownOutline = '$_basePath/ic_arrow_down_outline.svg'; static String icCloudDownloaded = '$_basePath/ic_cloud_downloaded.svg'; static String icCloudDownloading = '$_basePath/ic_cloud_downloading.svg'; + + static String icArrowDesc = '$_basePath/ic_arrow_desc.svg'; + static String icArrowAsc = '$_basePath/ic_arrow_asc.svg'; + static String icReceived = '$_basePath/ic_received.svg'; + static String icSent = '$_basePath/ic_sent.svg'; + static String icPhotos = '$_basePath/ic_photos.svg'; + static String icFiles = '$_basePath/ic_files.svg'; + static String icAudio = '$_basePath/ic_audio.svg'; + static String icVideos = '$_basePath/ic_videos.svg'; + static String icZips = '$_basePath/ic_zips.svg'; + static String icOther = '$_basePath/ic_other.svg'; + static String icChecked = '$_basePath/ic_checked.svg'; + static String icUnchecked = '$_basePath/ic_uncheck.svg'; } diff --git a/pubspec.lock b/pubspec.lock index ec7aae22..94c4e7a5 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,120 +5,105 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.7.0" archive: dependency: "direct main" description: name: archive - sha256: d6347d54a2d8028e0437e3c099f66fdb8ae02c4720c1e7534c9f24c10351f85d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.3.6" + version: "3.3.7" args: dependency: transitive description: name: args - sha256: "4cab82a83ffef80b262ddedf47a0a8e56ee6fbf7fe21e6e768b02792034dd440" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.4.0" + version: "2.4.1" asn1lib: dependency: transitive description: name: asn1lib - sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.0" async: dependency: transitive description: name: async - sha256: bfe67ef28df125b7dddcea62755991f807aa39a2492a23e1550161692950bbe0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.10.0" + version: "2.9.0" at_backupkey_flutter: dependency: "direct main" description: name: at_backupkey_flutter - sha256: "63a8fb9ba7b091aa8ff1a300509eb6933aeff02621bfbdabd738f42230f7b306" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.8" at_base2e15: dependency: transitive description: name: at_base2e15 - sha256: "06ee6ffba9b3439f1c41f9bf0c01f579ce0a8b25f42da8c374ba3a14d721937f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" at_chops: dependency: transitive description: name: at_chops - sha256: "4bd63f0bb9b61ad8087455f5ab303101cbc07b6b87892d4a7dba197ca2b3eb6c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" at_client: dependency: "direct overridden" description: name: at_client - sha256: "1a8dcd963b8bd802ffa2684dd1c6c46262a74289404f46f0763071feff6218c6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.58" + version: "3.0.59" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - sha256: f056674b02bdf13e5442725934e834f7757abcd7062d302ec2e65e46432ca134 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.9" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - sha256: "75f7b1070d9aa5d42f9878859995f2a24654733a118012b83eb552baaba8ce13" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.11" at_commons: dependency: "direct main" description: name: at_commons - sha256: "3361a1114d8f7263e7a0e6f299247bceed7e6c9e81e9cde01525cd10085eee60" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.43" + version: "3.0.45" at_contact: dependency: "direct main" description: name: at_contact - sha256: "232a7dd140bd4c22f4d99c7866633338de57e50f0e1eb84e515dc1ed0f7b0fee" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.7" at_contacts_flutter: dependency: "direct main" description: name: at_contacts_flutter - sha256: "159656f0387d17471dfe90337d767a989f067de3da0bf74af0894191a4460cea" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.9" at_contacts_group_flutter: @@ -134,352 +119,308 @@ packages: dependency: transitive description: name: at_file_saver - sha256: d1d5322be265ff395b6160f8880b4ebd713b673ea739662eca463def9c588f00 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.2" at_lookup: dependency: transitive description: name: at_lookup - sha256: d1ecc7b48c0843289efe90ee3f7948805ddcc7077c984a35fabbc89c3ba7d958 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.36" at_onboarding_flutter: dependency: "direct main" description: name: at_onboarding_flutter - sha256: "57f5753460487129a306ffb523f4800146bae885968e9f3f1ec52598867998e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.5" at_persistence_secondary_server: dependency: transitive description: name: at_persistence_secondary_server - sha256: a1b0e9819d6d22072caf15e52ea3bf459c8b161404ed92bb199bfd32f5ff63a9 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.52" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - sha256: "2ee8f0433783633d2375dba2acf27f8778bcbcd40dda8659bf54f80925db224f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.12" at_server_status: dependency: transitive description: name: at_server_status - sha256: "01190ba0886dfafb02a7ec247faff405527e7efaa5c21f567e4f45e10699e12d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" at_sync_ui_flutter: dependency: "direct main" description: name: at_sync_ui_flutter - sha256: "9297d27ad1219f61a13372d554d94b5610027df7bd566f08e351a7f9ea09aa17" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.8" at_utf7: dependency: transitive description: name: at_utf7 - sha256: c88e964e307bfe0e53e0048cff1ebf5ab60e23ceb4273f1ca664e724a9a5c5c9 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" at_utils: dependency: transitive description: name: at_utils - sha256: a244ea7f6411b177ba2f011d36d23ec786b0d41b0e62b58bb0e8bf9ad61cf530 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.12" biometric_storage: dependency: "direct main" description: name: biometric_storage - sha256: f6d7f5f4c28323797658423e4c5982c9dee42e18f59a8a8d4bc5df38eaf2e2f1 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.1.3" boolean_selector: dependency: transitive description: name: boolean_selector - sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.0" carousel_slider: dependency: "direct main" description: name: carousel_slider - sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.2.1" characters: dependency: transitive description: name: characters - sha256: e6a326c8af69605aec75ed6c187d06b349707a27fbff8222ca9cc2cff167975c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" charcode: dependency: transitive description: name: charcode - sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.1" collection: dependency: transitive description: name: collection - sha256: cfc915e6923fe5ce6e153b0723c753045de46de1b4d63771530504004a45fae0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.17.0" + version: "1.16.0" console: dependency: transitive description: name: console - sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.1.0" convert: dependency: transitive description: name: convert - sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.1" coverage: dependency: transitive description: name: coverage - sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.6.3" cron: dependency: transitive description: name: cron - sha256: d98aa8cdad0cccdb6b098e6a1fb89339c180d8a229145fa4cd8c6fc538f0e35f - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.5.1" cross_file: dependency: transitive description: name: cross_file - sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.3+4" crypto: dependency: transitive description: name: crypto - sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.2" crypton: dependency: transitive description: name: crypton - sha256: "886462e83bf642ba10f5382002654d27da8c2e6e1f42d928f12764cfa204f124" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" csslib: dependency: transitive description: name: csslib - sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - sha256: a937da4c006989739ceb4d10e3bd6cce64ca85d0fe287fc5b2b9f6ee757dcee6 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.3" dbus: dependency: transitive description: name: dbus - sha256: "253bfaa3d340778d8bc755e89c3af38e85ef95e65fd5d5670aa3167f8d4f6577" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.7.4" desktop_window: dependency: "direct main" description: name: desktop_window - sha256: "6256fb6feb7b5ec1311c76a3503f89202825bfe92c0458ec5fe7a728ffa216d5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.4.0" ecdsa: dependency: transitive description: name: ecdsa - sha256: dd1efbaf6c18bfde9347dddcfe10dce3dd044e5a1b237457a49b5c24850dfb95 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.0.4" elliptic: dependency: transitive description: name: elliptic - sha256: "8c7396126c81c574fe970ac4afe9ba919b1ca754da20b509664be2345ffb2845" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.8" emoji_picker_flutter: dependency: transitive description: name: emoji_picker_flutter - sha256: feb141b3ab9188e33c2ec35212136ecb3f79215d881aa5af3d3e0df28f84b725 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.5.2" + version: "1.5.4" encrypt: dependency: transitive description: name: encrypt - sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - sha256: "13a6ccf6a459a125b3fcdb6ec73bd5ff90822e071207c663bfd1f70062d51d18" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" file: dependency: transitive description: name: file - sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker - sha256: "704259669b5e9cb24e15c11cfcf02caf5f20d30901b3916d60b6d1c2d647035f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.6.1" file_selector: dependency: "direct main" description: name: file_selector - sha256: "9e34368bfacdf644e2c8a59e2b241cfb722bcbbd09876410e8775ae4905d6a49" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.4+3" file_selector_linux: dependency: transitive description: name: file_selector_linux - sha256: c06249f2082e88aca55f4aad9e4c70ff0f2b61d753c1577d51adeab88b3f0178 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.0.3" file_selector_macos: dependency: "direct main" description: name: file_selector_macos - sha256: e87311d719039da30d26ae829aab3ae66f82deb3318cd70ffecb608c99e3da68 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.2+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - sha256: "98b3f98effcc135bd951b34b575886620ce208d3ff60e3b61cbaea9e2e00f54b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.4.1" + version: "2.5.0" file_selector_web: dependency: transitive description: name: file_selector_web - sha256: bf166d08f4c3f79286774cdfa39ed301e076c5a903c435f5199818288f24a66d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.1+5" file_selector_windows: dependency: transitive description: name: file_selector_windows - sha256: "8bbcc82fe0d3cdf5ae5c289492ddfd703ec028028d9f194dbceae04cfbde1c48" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.2+2" filesystem_picker: dependency: "direct main" description: name: filesystem_picker - sha256: "41bb01c65cbd8abc389509adfbd08fc4c9090d2d4d15c5fa8813d0efd980f523" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.1" fixnum: dependency: transitive description: name: fixnum - sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" flutter: @@ -491,64 +432,56 @@ packages: dependency: transitive description: name: flutter_image_compress - sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.3" flutter_keychain: dependency: "direct main" description: name: flutter_keychain - sha256: "777ea8d3e1f55536bc8489a9ced73a912da4065645d9a1f751aae3548825b140" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.2.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - sha256: "57d0012730780fe137260dd180e072c18a73fbeeb924cdc029c18aaa0f338d64" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.9.1" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.5.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - sha256: c224ac897bed083dabf11f238dd11a239809b446740be0c2044608c50029ffdf - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.9" + version: "2.0.14" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - sha256: c7607eb808cdef19c8468246e95a133308aeaeb3971cdd9edfb9d5e31cedfbe9 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.6" flutter_test: @@ -560,8 +493,7 @@ packages: dependency: "direct main" description: name: flutter_toastr - sha256: "60e4af64bfba2c43ca4bedf09d2e84ba36ac242f0b13ac26681eb547ccd8489e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" flutter_web_plugins: @@ -573,712 +505,623 @@ packages: dependency: "direct main" description: name: fluttertoast - sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "8.1.2" frontend_server_client: dependency: transitive description: name: frontend_server_client - sha256: "4f4a162323c86ffc1245765cfe138872b8f069deb42f7dbb36115fa27f31469b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.3" get_it: dependency: transitive description: name: get_it - sha256: "290fde3a86072e4b37dbb03c07bec6126f0ecc28dad403c12ffe2e5a2d751ab7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "7.2.0" + version: "7.5.0" glob: dependency: transitive description: name: glob - sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.1" google_fonts: dependency: "direct main" description: name: google_fonts - sha256: e70521755a6b08c6bde14ddae27dff5bf21010033888fc61da6c595f8a9f58c1 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.3.3" hive: dependency: transitive description: name: hive - sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.2.3" html: dependency: transitive description: name: html - sha256: "79d498e6d6761925a34ee5ea8fa6dfef38607781d2fa91e37523474282af55cb" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.15.2" + version: "0.15.3" http: dependency: "direct main" description: name: http - sha256: "6aa2946395183537c8b880962d935877325d6a09a2867c3970c05c0fed6ac482" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.13.5" http_multi_server: dependency: transitive description: name: http_multi_server - sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.3.0" image_compression: dependency: transitive description: name: image_compression - sha256: "911ae4a59196ebcc33c70a38bbc1fa0e2d07243589803dd616120e1a6125bfe9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.3" image_picker: dependency: "direct main" description: name: image_picker - sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.6" image_picker_android: dependency: transitive description: name: image_picker_android - sha256: dfb5b0f28b8786fcc662b7ed42bfb4b82a6cbbd74da1958384b10d40bdf212a7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.8.6+6" + version: "0.8.6+11" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.12" image_picker_ios: dependency: transitive description: name: image_picker_ios - sha256: d4cb8ab04f770dab9d04c7959e5f6d22e8c5280343d425f9344f93832cf58445 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.8.7+2" + version: "0.8.7+3" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.6.3" internet_connection_checker: dependency: transitive description: name: internet_connection_checker - sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0+1" intl: dependency: "direct main" description: name: intl - sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.4" js: dependency: transitive description: name: js - sha256: "5528c2f391ededb7775ec1daa69e65a2d61276f7552de2b5f7b8d34ee9fd4ab7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.6.5" + version: "0.6.4" local_notifier: dependency: "direct main" description: name: local_notifier - sha256: cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.5" logging: dependency: transitive description: name: logging - sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.1" matcher: dependency: transitive description: name: matcher - sha256: "16db949ceee371e9b99d22f88fa3a73c4e59fd0afed0bd25fc336eb76c198b72" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.12.13" + version: "0.12.12" material_color_utilities: dependency: transitive description: name: material_color_utilities - sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.2.0" + version: "0.1.5" meta: dependency: transitive description: name: meta - sha256: "6c268b42ed578a53088d834796959e4a1814b5e9e164f147f580a386e5decf42" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.8.0" mime: dependency: transitive description: name: mime - sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.4" mocktail: dependency: transitive description: name: mocktail - sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.0" msix: dependency: "direct dev" description: name: msix - sha256: e3de4d9f52543ad6e4b0f534991e1303cbd379d24be28dd241ac60bd9439a201 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.7.0" mutex: dependency: transitive description: name: mutex - sha256: "03116a4e46282a671b46c12de649d72c0ed18188ffe12a8d0fc63e83f4ad88f4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" nested: dependency: transitive description: name: nested - sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.0" new_version: dependency: "direct main" description: name: new_version - sha256: "2eabd66e53c882dbaab4f3f8824d139a35a0521e2e04b8fd6d9fb358112691e9" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.3.1" ninja_asn1: dependency: transitive description: name: ninja_asn1 - sha256: b0f04877243fda51c475ec2bcaadb55a92759baee9f02888124c60775760ccf7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.0" node_preamble: dependency: transitive description: name: node_preamble - sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.2" open_file: dependency: "direct main" description: name: open_file - sha256: "5cd0288033d613ee7908aa974b7ff00805ae55d253f64d311603cf2e30613ca8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.2.1" package_config: dependency: transitive description: name: package_config - sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - sha256: "7a6114becdf042be2b0777d77ace954d4a205644171a1cbd8712976b9bbb837c" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.2" package_info_plus_linux: dependency: transitive description: name: package_info_plus_linux - sha256: "04b575f44233d30edbb80a94e57cad9107aada334fc02aabb42b6becd13c43fc" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.5" package_info_plus_macos: dependency: transitive description: name: package_info_plus_macos - sha256: a2ad8b4acf4cd479d4a0afa5a74ea3f5b1c7563b77e52cc32b3ee6956d5482a6 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.0" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - sha256: f7a0c8f1e7e981bc65f8b64137a53fd3c195b18d429fba960babc59a5a1c7ae8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.2" package_info_plus_web: dependency: transitive description: name: package_info_plus_web - sha256: f0829327eb534789e0a16ccac8936a80beed4e2401c4d3a74f3f39094a822d3b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.6" package_info_plus_windows: dependency: transitive description: name: package_info_plus_windows - sha256: a6040b8695c82f8dd3c3d4dfab7ef96fbe9c67aac21b9bcf5db272589ef84441 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.5" path: dependency: transitive description: name: path - sha256: db9d4f58c908a4ba5953fcee2ae317c94889433e5024c27ce74a37f94267945b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.8.2" path_drawing: dependency: transitive description: name: path_drawing - sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" path_provider: dependency: transitive description: name: path_provider - sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.14" path_provider_android: dependency: transitive description: name: path_provider_android - sha256: "019f18c9c10ae370b08dce1f3e3b73bc9f58e7f087bb5e921f06529438ac0ae7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.24" + version: "2.0.27" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - sha256: "818b2dc38b0f178e0ea3f7cf3b28146faab11375985d815942a68eee11c2d0f7" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.2.1" + version: "2.2.2" path_provider_linux: dependency: transitive description: name: path_provider_linux - sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - sha256: a34ecd7fb548f8e57321fd8e50d865d266941b54e6c3b7758cf8f37c24116905 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.7" pedantic: dependency: "direct main" description: name: pedantic - sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - sha256: "5749ebeb7ec0c3865ea17e3eb337174b87747be816dab582c551e1aff6f6bbf3" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.0.2+1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.9.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.2" petitparser: dependency: transitive description: name: petitparser - sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "5.1.0" pin_code_fields: dependency: transitive description: name: pin_code_fields - sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "7.4.0" platform: dependency: transitive description: name: platform - sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - sha256: c3120a968135aead39699267f4c74bc9a08e4e909e86bc1b0af5bfd78691123c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.7.2" + version: "3.7.3" pool: dependency: transitive description: name: pool - sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver - sha256: "307de764d305289ff24ad257ad5c5793ce56d04947599ad68b3baa124105fc17" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.3" + version: "2.1.4" qr: dependency: transitive description: name: qr - sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.0" qr_code_scanner: dependency: transitive description: name: qr_code_scanner - sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.1" qr_flutter: dependency: "direct main" description: name: qr_flutter - sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.0.0" receive_sharing_intent: dependency: "direct main" description: name: receive_sharing_intent - sha256: "912bebb551bce75a14098891fd750305b30d53eba0d61cc70cd9973be9866e8d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.4.5" rxdart: dependency: "direct main" description: name: rxdart - sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.27.7" share_plus: dependency: "direct main" description: name: share_plus - sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "4.5.3" share_plus_linux: dependency: transitive description: name: share_plus_linux - sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" share_plus_macos: dependency: transitive description: name: share_plus_macos - sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - sha256: "82ddd4ab9260c295e6e39612d4ff00390b9a7a21f1bb1da771e2f232d80ab8a1" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.2.0" + version: "3.2.1" share_plus_web: dependency: transitive description: name: share_plus_web - sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.0" share_plus_windows: dependency: transitive description: name: share_plus_windows - sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.1" shared_preferences: dependency: transitive description: name: shared_preferences - sha256: "78528fd87d0d08ffd3e69551173c026e8eacc7b7079c82eb6a77413957b7e394" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.20" + version: "2.1.0" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - sha256: ad423a80fe7b4e48b50d6111b3ea1027af0e959e49d485712e134863d9c1c521 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.17" + version: "2.1.4" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - sha256: "1e755f8583229f185cfca61b1d80fb2344c9d660e1c69ede5450d8f478fa5310" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.2.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - sha256: "3a59ed10890a8409ad0faad7bb2957dab4b92b8fbe553257b05d30ed8af2c707" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.2.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - sha256: "0dc2633f215a3d4aa3184c9b2c5766f4711e4e5a6b256e62aafee41f89f1bfb8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.0.6" + version: "2.1.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - sha256: "71bcd669bb9cdb6b39f22c4a7728b6d49e934f6cba73157ffa5a54f1eed67436" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.5" + version: "2.2.0" shelf: dependency: transitive description: name: shelf - sha256: c24a96135a2ccd62c64b69315a14adc5c3419df63b4d7c05832a346fdb73682c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.4.0" + version: "1.4.1" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - sha256: aef74dc9195746a384843102142ab65b6a4735bb3beea791e63527b88cc83306 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.2" shelf_static: dependency: transitive description: name: shelf_static - sha256: e792b76b96a36d4a41b819da593aff4bdd413576b3ba6150df5d8d9996d2e74c - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.1.1" + version: "1.1.2" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - sha256: a988c0e8d8ffbdb8a28aa7ec8e449c260f3deb808781fe1284d22c5bba7156e8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.0.3" + version: "1.0.4" showcaseview: dependency: "direct main" description: name: showcaseview - sha256: "09b534d806572135c38e06901de4b36b2bbd61739ec56c5fa9242d10748e19df" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.1.8" sky_engine: @@ -1290,304 +1133,266 @@ packages: dependency: transitive description: name: source_map_stack_trace - sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.1" source_maps: dependency: transitive description: name: source_maps - sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.10.12" source_span: dependency: transitive description: name: source_span - sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.9.1" + version: "1.9.0" stack_trace: dependency: transitive description: name: stack_trace - sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.11.0" + version: "1.10.0" stream_channel: dependency: transitive description: name: stream_channel - sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.1.0" string_scanner: dependency: transitive description: name: string_scanner - sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.2.0" + version: "1.1.1" term_glyph: dependency: transitive description: name: term_glyph - sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.1" test: dependency: transitive description: name: test - sha256: a5fcd2d25eeadbb6589e80198a47d6a464ba3e2049da473943b8af9797900c2d - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "1.22.0" + version: "1.21.4" test_api: dependency: transitive description: name: test_api - sha256: ad540f65f92caa91bf21dfc8ffb8c589d6e4dc0c2267818b4cc2792857706206 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.4.16" + version: "0.4.12" test_core: dependency: transitive description: name: test_core - sha256: "0ef9755ec6d746951ba0aabe62f874b707690b5ede0fecc818b138fcc9b14888" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "0.4.20" + version: "0.4.16" timezone: dependency: transitive description: name: timezone - sha256: "57b35f6e8ef731f18529695bffc62f92c6189fac2e52c12d478dec1931afb66e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.8.0" typed_data: dependency: transitive description: name: typed_data - sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android - sha256: dd729390aa936bf1bdf5cd1bc7468ff340263f80a2c4f569416507667de8e3c8 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.0.26" + version: "6.0.31" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - sha256: "3dedc66ca3c0bef9e6a93c0999aee102556a450afcc1b7bcfeace7a424927d92" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "6.1.3" + version: "6.1.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - sha256: "206fb8334a700ef7754d6a9ed119e7349bc830448098f21a69bf1b4ed038cabc" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.0.5" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - sha256: "0ef2b4f97942a16523e51256b799e9aa1843da6c60c55eefbfa9dbc2dcb8331a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.4" + version: "3.0.5" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - sha256: a83ba3607a507758669cfafb03f9de09bf6e6280c14d9b9cb18f013e406dcacd - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "3.0.5" + version: "3.0.6" uuid: dependency: transitive description: name: uuid - sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.1.4" + version: "2.1.2" version: dependency: transitive description: name: version - sha256: "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.2" video_compress: dependency: "direct main" description: name: video_compress - sha256: "407693726e674a1e1958801deb2d9daf5a5297707ba6d03375007012dae7389a" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.2" video_thumbnail: dependency: "direct main" description: name: video_thumbnail - sha256: "005bf7898bf6cddbf5f079e2618f3d3cb83dd2712714f0042b5a018c2b32e7d6" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.4.6" vm_service: dependency: transitive description: name: vm_service - sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "9.4.0" watcher: dependency: transitive description: name: watcher - sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - sha256: ca49c0bc209c687b887f30527fb6a9d80040b072cc2990f34b9bec3e7663101b - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted - version: "2.3.0" + version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.2.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.9.5" win32: dependency: transitive description: name: win32 - sha256: c0e3a4f7be7dae51d8f152230b86627e3397c1ba8c3fa58e63d44a9f3edc9cef - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "2.6.1" xdg_directories: dependency: transitive description: name: xdg_directories - sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.2.0+3" xml: dependency: transitive description: name: xml - sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "6.1.0" yaml: dependency: transitive description: name: yaml - sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "3.1.1" zxing2: dependency: transitive description: name: zxing2 - sha256: "1913c33844c68b62573741134ef5f987f1e15e331c95ac7dc327afbb9896e9ec" - url: "https://pub.dev" + url: "https://pub.dartlang.org" source: hosted version: "0.1.1" sdks: From a3b6f24a6b16bd8ea388acf98fa4fde2b17580f2 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 9 May 2023 10:10:41 +0700 Subject: [PATCH 67/94] feat: update Filter Dialog --- lib/data_models/enums/file_category_type.dart | 17 + lib/data_models/file_modal.dart | 16 +- .../history/transfer_history_screen.dart | 714 ++---------------- .../widgets/filter_history_widget.dart | 164 ++-- .../history/widgets/filter_option_item.dart | 78 ++ lib/view_models/history_provider.dart | 265 ++----- 6 files changed, 284 insertions(+), 970 deletions(-) create mode 100644 lib/screens/history/widgets/filter_option_item.dart diff --git a/lib/data_models/enums/file_category_type.dart b/lib/data_models/enums/file_category_type.dart index 08c4a2f2..e7912142 100644 --- a/lib/data_models/enums/file_category_type.dart +++ b/lib/data_models/enums/file_category_type.dart @@ -38,6 +38,23 @@ extension GenderTypeExtension on FileType { } } + String get icon { + switch (this) { + case FileType.photo: + return AppVectors.icPhotos; + case FileType.file: + return AppVectors.icFiles; + case FileType.audio: + return AppVectors.icAudio; + case FileType.video: + return AppVectors.icVideos; + case FileType.zips: + return AppVectors.icZips; + case FileType.other: + return AppVectors.icOther; + } + } + List get backgroundColor { switch (this) { case FileType.photo: diff --git a/lib/data_models/file_modal.dart b/lib/data_models/file_modal.dart index cc9ff5fe..94fe51d8 100644 --- a/lib/data_models/file_modal.dart +++ b/lib/data_models/file_modal.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_status.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; enum HistoryType { all, received, send } @@ -12,7 +13,20 @@ extension HistoryTypeExtension on HistoryType { case HistoryType.received: return 'Received'; case HistoryType.send: - return 'Send'; + return 'Sent'; + default: + return ''; + } + } + + String? get icon { + switch (this) { + case HistoryType.all: + return null; + case HistoryType.received: + return AppVectors.icReceived; + case HistoryType.send: + return AppVectors.icSent; default: return ''; } diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 99249ceb..8a7c6b3b 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -5,14 +5,10 @@ import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/app_bar_custom.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_button.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/labelled_circular_progress.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/option_header_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/provider_handler.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_history_widget.dart'; -import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_item_widget.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/history_card_widget.dart'; -import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -20,7 +16,6 @@ import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:intl/intl.dart'; import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; @@ -28,7 +23,6 @@ import '../../data_models/file_entity.dart'; import '../../services/backend_service.dart'; import '../../services/navigation_service.dart'; import '../../utils/text_strings.dart'; -import '../../view_models/file_progress_provider.dart'; import '../../view_models/file_transfer_provider.dart'; import '../common_widgets/confirmation_dialog.dart'; @@ -42,14 +36,12 @@ class TransferHistoryScreen extends StatefulWidget { class _TransferHistoryScreenState extends State { bool isLoading = false; late HistoryProvider historyProvider; - late HistoryProvider provider; late TextEditingController searchController; GlobalKey filterKey = GlobalKey(); @override void initState() { historyProvider = context.read(); - provider = context.read(); searchController = TextEditingController(); super.initState(); } @@ -124,7 +116,7 @@ class _TransferHistoryScreenState extends State { await historyProvider.getAllFileTransferHistory(); }, successBuilder: (provider) { - if ((provider.allFilesHistory.isEmpty)) { + if ((provider.displayFilesHistory.isEmpty)) { return ListView.separated( padding: EdgeInsets.only(bottom: 170.toHeight), physics: AlwaysScrollableScrollPhysics(), @@ -150,7 +142,7 @@ class _TransferHistoryScreenState extends State { } else { List filteredFileHistory = []; - provider.allFilesHistory.forEach((element) { + provider.displayFilesHistory.forEach((element) { if (element.type == HistoryType.send) { if (element.sharedWith!.any( (ShareStatus sharedStatus) => sharedStatus.atsign! @@ -238,184 +230,6 @@ class _TransferHistoryScreenState extends State { ); } - Widget buildBody() { - return Column( - children: [ - OptionHeaderWidget( - controller: searchController, - margin: EdgeInsets.symmetric(horizontal: 22), - onSearch: (content) { - provider.setHistorySearchText = content; - provider.searchFiles(); - }, - searchOffCallBack: () { - searchController.clear(); - provider.setHistorySearchText = ''; - provider.searchFiles(); - }, - onReloadCallback: () async { - provider.refreshData(); - }, - filterWidget: Consumer( - builder: (context, provider, _) { - return DropdownButtonHideUnderline( - child: Padding( - padding: EdgeInsets.zero, - child: DropdownButton( - value: provider.typeSelected, - icon: SvgPicture.asset( - AppVectors.icArrowDown, - ), - itemHeight: 56, - isExpanded: true, - isDense: true, - underline: null, - alignment: AlignmentDirectional.bottomEnd, - hint: Text( - "All", - style: TextStyle( - fontSize: 16.toFont, - fontWeight: FontWeight.w700, - color: ColorConstants.grey, - ), - ), - items: HistoryType.values.map( - (key) { - return key == HistoryType.all - ? DropdownMenuItem( - value: key, - child: Center( - child: Text( - "All", - style: TextStyle( - fontSize: 14.toFont, - fontWeight: FontWeight.bold, - color: - ColorConstants.sidebarTextUnselected, - ), - ), - ), - ) - : DropdownMenuItem( - value: key, - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Container( - color: ColorConstants.sidebarTileSelected, - height: 1, - width: double.infinity, - ), - key == HistoryType.received - ? Container( - width: double.infinity, - child: FilterItemWidget( - backgroundColor: ColorConstants - .yellow - .withOpacity(0.37), - borderColor: ColorConstants.yellow - .withOpacity(0.37), - prefixIcon: AppVectors.icReceive, - title: "Received", - ), - ) - : FilterItemWidget( - backgroundColor: ColorConstants - .orangeColor - .withOpacity(0.37), - borderColor: ColorConstants - .orangeColor - .withOpacity(0.37), - prefixIcon: AppVectors.icSend, - title: "Sent", - ), - ], - ), - ); - }, - ).toList(), - selectedItemBuilder: (BuildContext context) { - return HistoryType.values.map( - (key) { - return DropdownMenuItem( - value: key, - child: Text( - key.text, - style: TextStyle( - fontSize: 16.toFont, - fontWeight: FontWeight.bold, - color: ColorConstants.grey, - ), - ), - ); - }, - ).toList(); - }, - onChanged: (type) { - provider.changeTypeSelected(type!); - }, - borderRadius: BorderRadius.circular(10), - ), - ), - ); - }, - ), - ), - Expanded( - child: ProviderHandler( - errorBuilder: (provider) { - return Center( - child: Text('Something went wrong'), - ); - }, - load: (provider) async { - await provider.getAllFiles(); - }, - functionName: 'get_file_status', - showError: false, - successBuilder: (provider) { - return Container( - margin: EdgeInsets.only( - top: 16, - left: 25, - right: 21, - ), - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - height: 24, - padding: EdgeInsets.only(left: 19), - decoration: BoxDecoration( - color: ColorConstants.textBoxBg, - borderRadius: BorderRadius.only( - topLeft: Radius.circular(6), - topRight: Radius.circular(6), - ), - ), - child: Row( - children: [ - _buildTableTitle(title: "FileName", flex: 2), - _buildTableTitle(title: "Size", flex: 1), - _buildTableTitle(title: "Date", flex: 1), - _buildTableTitle(title: "Delivery", flex: 1), - _buildTableTitle(title: "atSign", flex: 2), - SizedBox(width: 36), - ], - ), - ), - _buildTableRow(), - ], - ), - ); - }, - ), - ), - ], - ); - } - void _onTapFilterIcon() async { RenderBox box = filterKey.currentContext!.findRenderObject() as RenderBox; Offset position = box.localToGlobal(Offset.zero); @@ -425,493 +239,68 @@ class _TransferHistoryScreenState extends State { useRootNavigator: true, context: context, builder: (context) { - return FilterHistoryWidget( - position: position, - onSelected: (value) {}, - setOrder: (value) {}, - ); - }, - ); - } - - Widget _buildTableTitle({ - required String title, - int flex = 1, - }) { - return Expanded( - flex: flex, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Flexible( - child: Text( - title, - style: TextStyle( - fontSize: 9.toFont, - fontWeight: FontWeight.w600, - color: ColorConstants.sidebarTextUnselected, - ), - overflow: TextOverflow.ellipsis, - ), - ), - SvgPicture.asset( - AppVectors.icSort, - ) - ], - ), - ); - } - - Widget _buildTableRow() { - return ProviderHandler( - functionName: provider.SENT_HISTORY, - showError: false, - successBuilder: (provider) { - final files = provider.displayFiles; - return Expanded( - child: Scrollbar( - child: RefreshIndicator( - onRefresh: () async { - provider.refreshData(); + return Consumer( + builder: (context, provider, _) { + return FilterHistoryWidget( + position: position, + typeSelected: provider.typeSelected, + isDesc: provider.isDesc, + onSelected: (value) { + provider.changeFilterType(value); }, - child: ListView.builder( - padding: EdgeInsets.only(bottom: 110), - itemCount: files.length, - itemBuilder: (context, index) { - final DateFormat formatter = DateFormat('MM/dd/yy'); - final String date = (files[index].date ?? '').isNotEmpty - ? formatter.format(DateTime.parse( - files[index].date!, - )) - : ''; - bool isDownloadExpired = - AppUtils.isFilesAvailableToDownload(files[index].date!); - - GlobalKey key = GlobalKey(); - - return SizedBox( - key: key, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Padding( - padding: EdgeInsets.only( - left: 19, - top: 7, - bottom: 6, - ), - child: InkWell( - onTap: () { - openFile(files[index]); - }, - child: Row( - children: [ - Expanded( - flex: 2, - child: Text( - files[index].file?.name ?? '', - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textBlack, - ), - ), - ), - Expanded( - flex: 1, - child: Text( - AppUtils.getFileSizeString( - bytes: (files[index].file?.size ?? 0) - .toDouble(), - decimals: 2, - ), - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textGray, - ), - ), - ), - Expanded( - flex: 1, - child: Text( - date, - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textGrey, - ), - ), - ), - files[index].historyType == HistoryType.received - ? Expanded( - flex: 1, - child: Align( - alignment: Alignment.centerLeft, - child: FutureBuilder( - future: isFilesAlreadyDownloaded( - files[index]), - builder: (_context, - AsyncSnapshot snapsot) { - if (snapsot.hasData) { - return SvgPicture.asset( - files[index].historyType == - HistoryType.received - ? AppVectors - .icReceiveBorder - : AppVectors.icSendBorder, - color: snapsot.data == true - ? Colors.green - : Color(0xFF939393), - ); - } else { - return SizedBox(); - } - }, - ), - ), - ) - : Expanded( - flex: 1, - child: Align( - alignment: Alignment.centerLeft, - child: SvgPicture.asset( - AppVectors.icSendBorder, - color: files[index].isUploaded - ? Colors.blue[200] - : Color(0xFF939393), - ), - ), - ), - Expanded( - flex: 2, - child: Text( - files[index].atSign ?? '', - style: TextStyle( - fontSize: 9, - fontWeight: FontWeight.w500, - color: ColorConstants.textBlack, - ), - ), - ), - SizedBox(width: 8), - (files[index].note ?? '').isNotEmpty - ? InkWell( - onTap: () { - _onTapNoteIcon( - key: key, - note: files[index].note!, - ); - }, - child: SvgPicture.asset( - AppVectors.icNote, - ), - ) - : SizedBox(width: 16), - isDownloadExpired - ? Consumer( - builder: (_c, provider, _) { - var fileTransferProgress = - provider.receivedFileProgress[ - files[index].transferId]; - - bool _showDownloadProgress = false; - if (fileTransferProgress != null && - files[index] - .file - ?.name - ?.toLowerCase() == - fileTransferProgress.fileName - ?.toLowerCase()) { - _showDownloadProgress = true; - } - - if (_showDownloadProgress && - fileTransferProgress != null) { - return fileTransferProgress.percent != - null - ? Container( - width: 30, - height: 30, - margin: EdgeInsets.all(6), - child: - LabelledCircularProgressIndicator( - value: (fileTransferProgress - .percent! / - 100), - ), - ) - : InfiniteSpinner(); - } else { - return files[index].isUploading - ? InfiniteSpinner() - : InkWell( - onTap: () { - _onTapMoreIcon( - key, files[index]); - }, - child: Padding( - padding: EdgeInsets.only( - left: 8), - child: Icon( - Icons.more_vert_outlined, - size: 16, - color: - ColorConstants.grey, - ), - ), - ); - } - }) - : SizedBox(), - ], - ), - ), - ), - Container( - height: 1, - color: ColorConstants.textBoxBg, - ) - ], - ), - ); - }, - ), - ), - ), + setOrder: (value) { + provider.changeDesc(value); + print(value); + }, + ); + }, ); }, ); } - void _onTapMoreIcon(GlobalKey key, FileEntity fileEntity) async { - RenderBox box = key.currentContext!.findRenderObject() as RenderBox; - Offset position = box.localToGlobal(Offset.zero); - final size = box.size; - + void reUploadFileConfirmation(FileEntity fileEntity) async { await showDialog( - barrierDismissible: true, - useRootNavigator: true, - context: context, + context: NavService.navKey.currentContext!, builder: (context) { - return Scaffold( - backgroundColor: Colors.transparent, - body: WillPopScope( - onWillPop: () async { - return true; - }, - child: Stack( - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - color: Colors.transparent, - height: double.infinity, - width: double.infinity, - ), - ), - Positioned( - right: 19, - top: position.dy - size.height - 28, - child: Container( - width: 188, - height: 40, - decoration: BoxDecoration( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(12), - bottomLeft: Radius.circular(12), - ), - border: Border.all( - color: ColorConstants.sidebarTextUnselected, - ), - color: Colors.white, - ), - child: Row( - children: [ - fileEntity.historyType == HistoryType.send - ? Expanded( - child: Center( - child: InkWell( - onTap: () { - if (Navigator.of(context).canPop()) { - Navigator.of(context).pop(); - } - reuploadFileConfirmation(fileEntity); - }, - child: Text( - "Resend", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w500, - color: ColorConstants.textLightGrey, - ), - ), - ), - ), - ) - : SizedBox(), - /*Container( - color: ColorConstants.sidebarTextUnselected, - height: double.infinity, - width: 1, - ),*/ - fileEntity.historyType == HistoryType.received - ? Expanded( - child: Center( - child: InkWell( - onTap: () { - if (Navigator.of(context).canPop()) { - Navigator.of(context).pop(); - } - - provider.downloadSingleFile( - fileEntity.transferId, - fileEntity.atSign, - false, - fileEntity.file!.name ?? '', - ); - }, - child: Text( - "Download", - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w500, - color: ColorConstants.textLightGrey, - ), - ), - ), - ), - ) - : SizedBox(), - ], - ), - ), - ), - ], - ), + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.toWidth), ), - ); - }, - ); - } + content: ConfirmationDialog( + TextStrings.reUploadFileMsg, + () async { + FileData fileData = FileData( + name: fileEntity.file!.name, + size: fileEntity.file!.size, + url: fileEntity.fileTransferObject.fileUrl, + ); - void _onTapNoteIcon({ - required GlobalKey key, - required String note, - }) { - RenderBox box = key.currentContext!.findRenderObject() as RenderBox; - Offset position = box.localToGlobal(Offset.zero); - final size = box.size; + var sentItemIndex = + Provider.of(context, listen: false) + .sentHistory + .indexWhere((element) => + element.fileTransferObject?.transferId == + fileEntity.transferId); + FileHistory? sentHistory; - showDialog( - barrierDismissible: true, - useRootNavigator: true, - context: context, - builder: (context) { - return Scaffold( - backgroundColor: Colors.transparent, - body: WillPopScope( - onWillPop: () async { - return true; + if (sentItemIndex != -1) { + sentHistory = + Provider.of(context, listen: false) + .sentHistory[sentItemIndex]; + } else { + throw ('sent history not found'); + } + + await Provider.of(context, listen: false) + .reuploadFiles([fileData], 0, sentHistory); }, - child: Stack( - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - color: Colors.transparent, - height: double.infinity, - width: double.infinity, - ), - ), - Positioned( - right: 32, - top: position.dy - size.height - 4, - child: Container( - width: 247, - constraints: BoxConstraints( - minHeight: 79, - ), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(12), - border: Border.all( - color: ColorConstants.sidebarTextUnselected, - ), - color: Colors.white, - ), - padding: EdgeInsets.symmetric( - vertical: 10, - horizontal: 12, - ), - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Expanded( - child: Text( - note, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w400, - ), - ), - ), - SizedBox(width: 8), - SvgPicture.asset( - AppVectors.icNote, - ), - ], - ), - ), - ), - ], - ), ), ); }, ); } - reuploadFileConfirmation(FileEntity fileEntity) async { - await showDialog( - context: NavService.navKey.currentContext!, - builder: (context) { - return AlertDialog( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.toWidth), - ), - content: - ConfirmationDialog(TextStrings.reUploadFileMsg, () async { - FileData fileData = FileData( - name: fileEntity.file!.name, - size: fileEntity.file!.size, - url: fileEntity.fileTransferObject.fileUrl); - - var sentItemIndex = - Provider.of(context, listen: false) - .sentHistory - .indexWhere((element) => - element.fileTransferObject?.transferId == - fileEntity.transferId); - FileHistory? sentHistory; - - if (sentItemIndex != -1) { - sentHistory = - Provider.of(context, listen: false) - .sentHistory[sentItemIndex]; - } else { - throw ('sent history not found'); - } - - await Provider.of(context, listen: false) - .reuploadFiles([fileData], 0, sentHistory); - })); - }); - } - Future isFilesAlreadyDownloaded(FileEntity fileEntity) async { bool isFilesAvailableOfline = false; String path = BackendService.getInstance().downloadDirectory!.path + @@ -924,7 +313,7 @@ class _TransferHistoryScreenState extends State { return isFilesAvailableOfline; } - openFile(FileEntity fileEntity) async { + void openFile(FileEntity fileEntity) async { String path = MixedConstants.RECEIVED_FILE_DIRECTORY + Platform.pathSeparator + (fileEntity.file!.name ?? ''); @@ -941,13 +330,4 @@ class _TransferHistoryScreenState extends State { await OpenFile.open(path); } } - - Widget InfiniteSpinner() { - return Container( - width: 30, - height: 30, - margin: EdgeInsets.all(6), - child: CircularProgressIndicator(), - ); - } } diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart index 519e414b..9df986ba 100644 --- a/lib/screens/history/widgets/filter_history_widget.dart +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -1,27 +1,32 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_option_item.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; -class FilterHistoryWidget extends StatefulWidget { - final Offset position; - final Function(int) onSelected; - final Function(bool) setOrder; +class FilterHistoryWidget extends StatelessWidget { + final Offset? position; + final Function(HistoryType type)? onSelected; + final Function(bool)? setOrder; + final bool isDesc; + final HistoryType? typeSelected; FilterHistoryWidget({ Key? key, - required this.position, - required this.onSelected, - required this.setOrder, + this.position, + this.onSelected, + this.setOrder, + this.isDesc = true, + this.typeSelected, }) : super(key: key); - @override - State createState() => _FilterHistoryWidgetState(); -} - -class _FilterHistoryWidgetState extends State { - bool isDesc = true; + final List historyTypes = [ + HistoryType.received, + HistoryType.send, + HistoryType.all, + ]; @override Widget build(BuildContext context) { @@ -45,7 +50,7 @@ class _FilterHistoryWidgetState extends State { ), Positioned( right: 15, - top: widget.position.dy, + top: position?.dy, child: Column( mainAxisSize: MainAxisSize.min, children: [ @@ -99,16 +104,60 @@ class _FilterHistoryWidgetState extends State { }), value: isDesc, onChanged: (value) { - setState(() { - isDesc = value; - }); - widget.setOrder; + print(value); + setOrder?.call(value); }, ) ], ), ), - Container( + SizedBox( + width: MediaQuery.of(context).size.width - 30.toWidth, + child: ListView.separated( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: historyTypes.length, + separatorBuilder: (context, index) { + return Divider( + color: ColorConstants.disableColor, + height: 1, + // thickness: 0.65, + ); + }, + itemBuilder: (context, index) { + return FilterOptionItem( + icon: historyTypes[index].icon, + title: historyTypes[index].text, + isCheck: historyTypes[index] == typeSelected, + onTap: () { + onSelected?.call( + historyTypes[index], + ); + }, + ); + }, + ), + ), + /*SizedBox( + width: MediaQuery.of(context).size.width - 30.toWidth, + child: ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: FileType.values.length, + itemBuilder: (context, index) { + return FilterOptionItem( + icon: FileType.values[index].icon, + title: FileType.values[index].text, + onTap: (){ + + }, + ); + }, + ), + ),*/ + /*Container( width: MediaQuery.of(context).size.width - 30.toWidth, decoration: BoxDecoration( color: Colors.white, @@ -140,7 +189,6 @@ class _FilterHistoryWidgetState extends State { }, separatorBuilder: (context, index) { return Divider( - //TODO: add isDisable variable to check color: (index > 2 && true) ? ColorConstants.disableColor : ColorConstants.lightSliver, @@ -151,7 +199,7 @@ class _FilterHistoryWidgetState extends State { }, itemCount: filterOptionsList.length, ), - ), + ),*/ ], ), ), @@ -160,78 +208,4 @@ class _FilterHistoryWidgetState extends State { ), ); } - - Widget _buildFilterOptionItem({ - required String icon, - required String title, - bool isDisable = false, - required bool isCheck, - required int index, - }) { - Color color = - isDisable && index > 2 ? ColorConstants.disableColor : Colors.black; - Color backgroundColor = isDisable && index > 2 - ? ColorConstants.disableBackgroundColor - : Colors.white; - return InkWell( - onTap: () {}, - child: Container( - height: 36, - padding: EdgeInsets.symmetric(horizontal: 20), - decoration: BoxDecoration( - color: backgroundColor, - borderRadius: index == filterOptionsList.length - 1 - ? BorderRadius.vertical(bottom: Radius.circular(12)) - : BorderRadius.zero, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - icon.isNotEmpty - ? SvgPicture.asset( - icon, - color: color, - height: 16, - width: 12, - fit: BoxFit.cover, - ) - : SizedBox(width: 12), - SizedBox(width: 16), - Text( - title, - style: TextStyle( - color: color, - fontSize: 13, - fontWeight: FontWeight.w500, - ), - ), - ], - ), - SvgPicture.asset( - isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, - width: 16, - height: 16, - color: color, - fit: BoxFit.cover, - ), - ], - ), - ), - ); - } - - Map filterOptionsList = { - AppVectors.icReceived: 'Received', - AppVectors.icSent: 'Sent', - '': 'All', - AppVectors.icPhotos: 'Photos', - AppVectors.icFiles: 'Files', - AppVectors.icAudio: 'Audio', - AppVectors.icVideos: 'Videos', - AppVectors.icZips: 'Zips', - AppVectors.icOther: 'Other' - }; } diff --git a/lib/screens/history/widgets/filter_option_item.dart b/lib/screens/history/widgets/filter_option_item.dart new file mode 100644 index 00000000..5a838e6f --- /dev/null +++ b/lib/screens/history/widgets/filter_option_item.dart @@ -0,0 +1,78 @@ +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; + +class FilterOptionItem extends StatelessWidget { + final String? icon; + final String? title; + final bool isDisable, isCheck; + final BorderRadiusGeometry? borderRadius; + final Function()? onTap; + + const FilterOptionItem({ + Key? key, + this.icon, + this.isDisable = false, + this.borderRadius, + this.title, + this.isCheck = false, + this.onTap, + }) : super(key: key); + + @override + Widget build(BuildContext context) { + Color color = isDisable ? ColorConstants.disableColor : Colors.black; + Color backgroundColor = + isDisable ? ColorConstants.disableBackgroundColor : Colors.white; + + return InkWell( + onTap: () { + onTap?.call(); + }, + child: Container( + height: 36, + padding: EdgeInsets.symmetric(horizontal: 20), + decoration: BoxDecoration( + color: backgroundColor, + borderRadius: BorderRadius.zero, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + (icon ?? '').isNotEmpty + ? SvgPicture.asset( + icon!, + color: color, + height: 16, + width: 12, + fit: BoxFit.cover, + ) + : SizedBox(width: 12), + SizedBox(width: 16), + Text( + title ?? '', + style: TextStyle( + color: color, + fontSize: 13, + fontWeight: FontWeight.w500, + ), + ), + ], + ), + SvgPicture.asset( + isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, + width: 16, + height: 16, + color: color, + fit: BoxFit.cover, + ), + ], + ), + ), + ); + } +} diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index c1408b92..3fc759d8 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -21,8 +21,6 @@ import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; import 'package:flutter/cupertino.dart'; - -// import 'package:at_client/src/stream/file_transfer_object.dart'; import 'package:flutter/services.dart'; import 'package:provider/provider.dart'; @@ -42,22 +40,22 @@ class HistoryProvider extends BaseModel { String GET_FILE_STATUS = 'get_file_status'; String DOWNLOAD_FILE = 'download_file'; String DOWNLOAD_ACK = 'download_ack'; + List sentHistory = [], tempSentHistory = [], receivedFileHistory = [], - allFilesHistory = []; + allFilesHistory = [], + displayFilesHistory = []; + List receivedHistoryLogs = []; - ///SONLT2 List Received Map> downloadedFileAcknowledgement = {}; Map individualSentFileId = {}, receivedItemsId = {}; String? state; String _historySearchText = ''; + bool isDesc = true; - List receivedFiles = [], - sentFiles = [], - allFiles = [], - displayFiles = []; + List allFiles = []; // on first transfer history fetch, we show loader in history screen. // on second attempt we keep the status as idle. @@ -68,25 +66,10 @@ class HistoryProvider extends BaseModel { sentApk, sentDocument = []; - List receivedPhotos = [], - receivedVideos = [], - receivedAudio = [], - receivedApk = [], - receivedDocument = [], - recentFile = [], - receivedUnknown = []; - List tabNames = ['Recents']; - - List tabs = [Recents()]; - + List recentFile = []; List desktopTabs = [DesktopRecents()]; - String SORT_FILES = 'sort_files'; - String POPULATE_TABS = 'populate_tabs'; Map sendFileHistory = {'history': []}; - String SORT_LIST = 'sort_list'; - BackendService backendService = BackendService.getInstance(); String? app_lifecycle_state; - HistoryType typeSelected = HistoryType.all; resetData() { @@ -95,13 +78,7 @@ class HistoryProvider extends BaseModel { receivedHistoryLogs = []; sendFileHistory = {'history': []}; downloadedFileAcknowledgement = {}; - receivedPhotos = []; - receivedVideos = []; - receivedAudio = []; - receivedApk = []; - receivedDocument = []; recentFile = []; - receivedUnknown = []; individualSentFileId = {}; receivedItemsId = {}; } @@ -113,166 +90,6 @@ class HistoryProvider extends BaseModel { notifyListeners(); } - Future getAllFiles() async { - setStatus(GET_FILE_STATUS, Status.Loading); - try { - allFiles = []; - - await Future.wait([ - getReceivedFiles(), - getSentFiles(), - ]); - - allFiles.addAll(sentFiles); - allFiles.addAll(receivedFiles); - - allFiles.sort((a, b) => (b.date ?? '').compareTo(a.date ?? '')); - displayFiles = allFiles; - - setStatus(GET_FILE_STATUS, Status.Done); - } catch (e) { - setStatus(GET_FILE_STATUS, Status.Error); - } - } - - Future getReceivedFiles() async { - List listReceivedFile = []; - await getAllFileTransferData(); - if (receivedHistoryLogs.isNotEmpty) { - for (int i = 0; i < receivedHistoryLogs.length; i++) { - FileTransfer? fileTransfer = receivedHistoryLogs[i]; - if ((fileTransfer.files?.length ?? 0) > 0) { - for (int j = 0; j < fileTransfer.files!.length; j++) { - var fileTransferObject = FileTransferObject( - fileTransfer.key, - fileTransfer.fileEncryptionKey!, - fileTransfer.url, - '', - [], - ); - listReceivedFile.add( - FileEntity( - file: fileTransfer.files![j], - date: fileTransfer.date != null - ? fileTransfer.date.toString() - : '', - atSign: fileTransfer.sender, - historyType: HistoryType.received, - note: fileTransfer.notes, - transferId: fileTransfer.key, - isUploaded: fileTransfer.files?[j].isUploaded ?? false, - fileTransferObject: fileTransferObject, - ), - ); - } - } - } - receivedFiles = listReceivedFile; - } - } - - Future getSentFiles() async { - List listSentFile = []; - await getSentHistory(); - if (sentHistory.isNotEmpty) { - for (int i = 0; i < sentHistory.length; i++) { - FileTransfer? fileTransfer = sentHistory[i].fileDetails; - if ((fileTransfer?.files?.length ?? 0) > 0) { - for (int j = 0; j < fileTransfer!.files!.length; j++) { - for (int k = 0; k < sentHistory[i].sharedWith!.length; k++) { - listSentFile.add( - FileEntity( - file: fileTransfer.files![j], - date: fileTransfer.date != null - ? fileTransfer.date.toString() - : '', - atSign: sentHistory[i].sharedWith![k].atsign, - historyType: HistoryType.send, - note: fileTransfer.notes, - transferId: fileTransfer.key, - isUploaded: fileTransfer.files?[j].isUploaded ?? false, - fileTransferObject: sentHistory[i].fileTransferObject!), - ); - } - } - } - } - sentFiles = listSentFile; - } - } - - void changeTypeSelected(HistoryType type) { - typeSelected = type; - displayFiles = filterFiles(type); - notifyListeners(); - } - - void refreshData() async { - try { - if (typeSelected != HistoryType.all) { - setStatus(GET_FILE_STATUS, Status.Loading); - typeSelected == HistoryType.send - ? await getSentFiles() - : await getReceivedFiles(); - setStatus(GET_FILE_STATUS, Status.Done); - } else { - await getAllFiles(); - } - } catch (e) { - setStatus(GET_FILE_STATUS, Status.Error); - } - } - - void searchFiles() { - List resultsFilter = []; - List listFiles = []; - - if (typeSelected == HistoryType.received) { - listFiles = receivedFiles; - } else if (typeSelected == HistoryType.send) { - listFiles = sentFiles; - } else { - listFiles = allFiles; - } - - if (_historySearchText.isNotEmpty) { - listFiles.forEach( - //filter by atSign - (FileEntity element) { - if ((element.atSign ?? '').contains(_historySearchText)) { - resultsFilter.add(element); - } else { - // filter by file name - if (element.file!.name! - .toLowerCase() - .contains(_historySearchText)) { - resultsFilter.add(element); - } - } - }, - ); - - displayFiles = resultsFilter; - } else { - displayFiles = listFiles; - } - - notifyListeners(); - } - - List filterFiles(HistoryType type) { - switch (type) { - case HistoryType.all: - return allFiles; - case HistoryType.received: - return receivedFiles; - case HistoryType.send: - return sentFiles; - default: - return []; - } - } - updateFileHistoryDetail(FileHistory fileHistory) async { // checking whether sent file is stored in individual atKey or in sentHistory list. if (individualSentFileId[fileHistory.fileDetails!.key] != null) { @@ -615,7 +432,7 @@ class HistoryProvider extends BaseModel { // ExceptionService.instance.showGetExceptionOverlay(e); return AtValue(); }); - if (atValue != null && atValue.value != null) { + if (atValue.value != null) { var downloadAcknowledgement = DownloadAcknowledgement.fromJson(jsonDecode(atValue.value)); @@ -861,16 +678,14 @@ class HistoryProvider extends BaseModel { receivedItemsId[atKey.key] = true; AtValue atvalue = - await AtClientManager.getInstance().atClient.get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { - print("error in getting atValue in getAllFileTransferData : $e"); - //// Removing exception as called in a loop - // ExceptionService.instance.showGetExceptionOverlay(e); - return AtValue(); - }); + await AtClientManager.getInstance().atClient.get(atKey).catchError( + (e) { + print("error in getting atValue in getAllFileTransferData : $e"); + return AtValue(); + }, + ); - if (atvalue != null && atvalue.value != null) { + if (atvalue.value != null) { try { FileTransferObject fileTransferObject = FileTransferObject.fromJson(jsonDecode(atvalue.value))!; @@ -920,12 +735,46 @@ class HistoryProvider extends BaseModel { .sort((a, b) => b.fileDetails!.date!.compareTo(a.fileDetails!.date!)); allFilesHistory = tempFileHistoryLogs; + displayFilesHistory = allFilesHistory; + changeFilterType(typeSelected); + setStatus(GET_ALL_FILE_DATA, Status.Done); } catch (e) { setStatus(GET_ALL_FILE_DATA, Status.Error); } } + void changeDesc(bool desc) { + isDesc = desc; + if (desc) { + displayFilesHistory + .sort((a, b) => b.fileDetails!.date!.compareTo(a.fileDetails!.date!)); + } else { + displayFilesHistory + .sort((a, b) => a.fileDetails!.date!.compareTo(b.fileDetails!.date!)); + } + notifyListeners(); + } + + void changeFilterType(HistoryType type) { + typeSelected = type; + displayFilesHistory = filterFileHistory(type); + notifyListeners(); + } + + List filterFileHistory(HistoryType type) { + switch (type) { + case HistoryType.all: + return allFilesHistory; + case HistoryType.received: + return receivedFileHistory; + case HistoryType.send: + return sentHistory; + default: + return []; + } + } + getrecentHistoryFiles() async { // finding last 15 received files data for recent tab setStatus(RECENT_HISTORY, Status.Loading); @@ -1283,13 +1132,15 @@ class HistoryProvider extends BaseModel { ..metadata!.ttl = 518400000 ..sharedWith = fileTransfer.sender; try { - var notificationResult = - await AtClientManager.getInstance().notificationService.notify( - NotificationParams.forUpdate( - atKey, - value: jsonEncode(downloadAcknowledgement.toJson()), - ), - ); + var notificationResult = await AtClientManager.getInstance() + .atClient + .notificationService + .notify( + NotificationParams.forUpdate( + atKey, + value: jsonEncode(downloadAcknowledgement.toJson()), + ), + ); if (notificationResult.notificationStatusEnum == NotificationStatusEnum.delivered) { From 2709168b8b8daf2f775b31458e9f691ee3bedfb7 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 9 May 2023 10:55:53 +0700 Subject: [PATCH 68/94] feat: update UI History Screen --- lib/screens/history/transfer_history_screen.dart | 15 +-------------- lib/view_models/history_provider.dart | 7 ++++--- 2 files changed, 5 insertions(+), 17 deletions(-) diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 8a7c6b3b..b48f2996 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -20,7 +20,6 @@ import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; import '../../data_models/file_entity.dart'; -import '../../services/backend_service.dart'; import '../../services/navigation_service.dart'; import '../../utils/text_strings.dart'; import '../../view_models/file_transfer_provider.dart'; @@ -110,7 +109,7 @@ class _TransferHistoryScreenState extends State { } }, child: ProviderHandler( - functionName: historyProvider.GET_ALL_FILE_DATA, + functionName: historyProvider.GET_ALL_FILE_HISTORY, showError: false, load: (provider) async { await historyProvider.getAllFileTransferHistory(); @@ -301,18 +300,6 @@ class _TransferHistoryScreenState extends State { ); } - Future isFilesAlreadyDownloaded(FileEntity fileEntity) async { - bool isFilesAvailableOfline = false; - String path = BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - (fileEntity.file!.name ?? ''); - File test = File(path); - bool fileExists = await test.exists(); - - isFilesAvailableOfline = fileExists; - return isFilesAvailableOfline; - } - void openFile(FileEntity fileEntity) async { String path = MixedConstants.RECEIVED_FILE_DIRECTORY + Platform.pathSeparator + diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 3fc759d8..3d2b0ff6 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -7,7 +7,6 @@ import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer_object.dart'; import 'package:atsign_atmosphere_pro/desktop_screens/desktop_my_files/widgets/desktop_recent.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/exception_service.dart'; import 'package:atsign_atmosphere_pro/services/file_transfer_service.dart'; @@ -554,6 +553,8 @@ class HistoryProvider extends BaseModel { ); } } + + } else { // showing notification for new recieved file switch (app_lifecycle_state) { @@ -738,9 +739,9 @@ class HistoryProvider extends BaseModel { displayFilesHistory = allFilesHistory; changeFilterType(typeSelected); - setStatus(GET_ALL_FILE_DATA, Status.Done); + setStatus(GET_ALL_FILE_HISTORY, Status.Done); } catch (e) { - setStatus(GET_ALL_FILE_DATA, Status.Error); + setStatus(GET_ALL_FILE_HISTORY, Status.Error); } } From d2c3d4147f88752153a7fe08042c44b7f34db71e Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 9 May 2023 15:37:23 +0700 Subject: [PATCH 69/94] feat: update UI History Screen --- assets/images/2x/ic_cloud_downloading.png | Bin 0 -> 2188 bytes assets/images/3x/ic_cloud_downloading.png | Bin 0 -> 3477 bytes assets/images/ic_cloud_downloading.png | Bin 0 -> 1063 bytes .../widget/contact_attachment_card.dart | 10 ++++++---- lib/utils/images.dart | 1 + lib/view_models/history_provider.dart | 11 +++++------ 6 files changed, 12 insertions(+), 10 deletions(-) create mode 100644 assets/images/2x/ic_cloud_downloading.png create mode 100644 assets/images/3x/ic_cloud_downloading.png create mode 100644 assets/images/ic_cloud_downloading.png diff --git a/assets/images/2x/ic_cloud_downloading.png b/assets/images/2x/ic_cloud_downloading.png new file mode 100644 index 0000000000000000000000000000000000000000..b97fb54aaabc8f042ea97589ddd4cce772957c29 GIT binary patch literal 2188 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 DXI6l` literal 0 HcmV?d00001 diff --git a/assets/images/ic_cloud_downloading.png b/assets/images/ic_cloud_downloading.png new file mode 100644 index 0000000000000000000000000000000000000000..977e530d2c230eeec857fde5d33a278e97f79b47 GIT binary patch literal 1063 zcmV+?1laqDP)s>Z3FA4pTtY9mrG@e(C+FTfGv}K*=giExz{ZeU+kzV;4rB;{ zjiKO9i--VHKnMj=wv$13(-nBu8kiQbl+sGdL2_2 zs$mV$XcW)e+Hk45T754mEmbENjm1z}Qj*l|yR4O}o}Y)+l!|z0a1hQjXA(#mF(PIX z4dvzKsI=P=92-+Z!4osWjslzZXfq)NB9RETS}Y0QI%uW5I>uXyEysOFQ4#i6RKR)m zEJ|p_zNN%7f_89d#EMZT3z3E=CKA4}2ZF(%nsD5Hpt3Tdy{Nbt)6`~!xrM3aXD!A7 zqmH~yx+t-VXhmAwSaU}6ggCY%PHIzJx+8nMTyBOB%waoj9Amm3*12Y|F8;*N-U^)pe^MAR+lhL%*OOCHv%Ui$2%ED#yu2c`JSIwo?LDt zV$Go5t(l_7{{*uO3MZF)RpWXu{&YZ9$s*m$evM1Noo-?i@bX6^*J5-l;$G5DG`R+u zMfk?M)ha|^0 { return CommonUtilityFunctions() .checkForDownloadAvailability( - widget.fileTransfer) + widget.fileTransfer, + ) ? fileTransferProgress != null - ? CommonUtilityFunctions().getDownloadStatus( - fileTransferProgress, + ? Image.asset( + ImageConstants.icCloudDownloading, ) : isDownloaded ? SvgPicture.asset( - AppVectors.icCloudDownloaded) + AppVectors.icCloudDownloaded, + ) : InkWell( onTap: () async { await downloadFiles( diff --git a/lib/utils/images.dart b/lib/utils/images.dart index 05875600..fe7eeedb 100644 --- a/lib/utils/images.dart +++ b/lib/utils/images.dart @@ -96,4 +96,5 @@ class ImageConstants { static String icGridType = '$_basePath/ic_grid_type.png'; static String icListTypeActivate = '$_basePath/ic_list_type_activate.png'; static String icListType = '$_basePath/ic_list_type.png'; + static String icCloudDownloading = '$_basePath/ic_cloud_downloading.png'; } diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 3d2b0ff6..372ce51e 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -553,8 +553,6 @@ class HistoryProvider extends BaseModel { ); } } - - } else { // showing notification for new recieved file switch (app_lifecycle_state) { @@ -1046,13 +1044,14 @@ class HistoryProvider extends BaseModel { FileTransferObject? fileTransferObject; - var fileEntityIndex = allFiles - .indexWhere((FileEntity element) => element.transferId == transferId); + var fileEntityIndex = allFilesHistory.indexWhere( + (element) => element.fileTransferObject?.transferId == transferId); if (fileEntityIndex == -1) { throw Exception('file object not found.'); } - fileTransferObject = allFiles[fileEntityIndex].fileTransferObject; - String formattedFileUrl = fileTransferObject.fileUrl; + + fileTransferObject = allFilesHistory[fileEntityIndex].fileTransferObject; + String formattedFileUrl = fileTransferObject!.fileUrl; try { formattedFileUrl = formattedFileUrl.replaceFirst('/archive', ''); From f86b2dc150de7af24c4253104a386102648c2ec7 Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Mon, 8 May 2023 10:56:24 +0530 Subject: [PATCH 70/94] feat: added download functionality --- lib/screens/my_files/files_detail_screen.dart | 150 +++++++++++++++++- 1 file changed, 145 insertions(+), 5 deletions(-) diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index d2a7976e..02ac0980 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -3,6 +3,7 @@ import 'dart:io'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/sliver_grid_delegate.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/image_view_widget.dart'; @@ -17,6 +18,14 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; +import '../../services/common_utility_functions.dart'; +import '../../services/navigation_service.dart'; +import '../../services/snackbar_service.dart'; +import '../../utils/text_strings.dart'; +import '../../view_models/file_progress_provider.dart'; +import '../../view_models/history_provider.dart'; +import '../../view_models/internet_connectivity_checker.dart'; + class FilesDetailScreen extends StatefulWidget { final FileType? type; @@ -145,6 +154,9 @@ class _FilesDetailScreenState extends State { child: Consumer( builder: (context, provider, _) { final files = provider.displayFiles; + + //TODO - get file transfer data object from this files(FilesDetail) object. + // TODO - add download consumer using the filetranferData object. return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -234,16 +246,57 @@ class _FilesDetailScreenState extends State { final shortDate = DateFormat('MM/dd/yy').format(date); final time = DateFormat('kk:mm').format(date); + late FileTransfer fileTransfer; + bool isDownloaded = false; + + for (var filetransfer in provider.myFiles) { + if (filetransfer.key == files[index].fileTransferId) { + fileTransfer = filetransfer; + break; + } + } + return Slidable( actionPane: const SlidableDrawerActionPane(), actionExtentRatio: 0.11, secondaryActions: [ - Padding( - padding: const EdgeInsets.only(left: 6.0), - child: SvgPicture.asset( - AppVectors.icDownloadFile, - ), + Consumer( + builder: (_c, provider, _) { + var fileTransferProgress = + provider.receivedFileProgress[fileTransfer.key]; + + return CommonUtilityFunctions() + .checkForDownloadAvailability(fileTransfer) + ? fileTransferProgress != null + ? CommonUtilityFunctions().getDownloadStatus( + fileTransferProgress, + ) + : isDownloaded + ? SvgPicture.asset(AppVectors.icCloudDownloaded) + : InkWell( + onTap: () async { + var res = await downloadFiles( + fileTransfer, + fileName: files[index].fileName, + ); + + setState(() { + isDownloaded = res; + }); + }, + child: SvgPicture.asset( + AppVectors.icDownloadFile, + ), + ) + : SizedBox(); + }, ), + // Padding( + // padding: const EdgeInsets.only(left: 6.0), + // child: SvgPicture.asset( + // AppVectors.icDownloadFile, + // ), + // ), Padding( padding: const EdgeInsets.only(left: 6.0), child: SvgPicture.asset( @@ -359,6 +412,93 @@ class _FilesDetailScreenState extends State { ); } + Future downloadFiles( + FileTransfer? file, { + String? fileName, + }) async { + var fileTransferProgress = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .receivedFileProgress[file!.key]; + + if (fileTransferProgress != null) { + return false; //returning because download is still in progress + } + + var isConnected = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .isInternetAvailable; + + if (!isConnected) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings.noInternetMsg, + bgColor: ColorConstants.redAlert, + ); + return false; + } + + var result; + if (fileName != null) { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadSingleFile( + file.key, + file.sender, + false, + fileName, + ); + } else { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadFiles( + file.key, + file.sender!, + false, + ); + } + + if (result is bool && result) { + // if (mounted) { + // // setState(() { + // // isDownloaded = true; + // // }); + // } + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .saveNewDataInMyFiles(file); + + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().fileDownloadd, + bgColor: ColorConstants.successGreen, + ); + // send download acknowledgement + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .sendFileDownloadAcknowledgement(file); + + return true; + } else if (result is bool && !result) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().downloadFailed, + bgColor: ColorConstants.redAlert, + ); + // if (mounted) { + // setState(() { + // // isDownloaded = false; + // }); + // } + return false; + } + + return false; + } + void _onTapPhotoItem(FilesDetail file) { showDialog( context: context, From 12fb234c2f9f00532deb429f8e9e95be7e25d8ae Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Tue, 9 May 2023 10:21:33 +0530 Subject: [PATCH 71/94] feat: added delete file functionality --- .../widget/contact_attachment_card.dart | 15 +- lib/screens/my_files/files_detail_screen.dart | 210 ++++++------------ 2 files changed, 81 insertions(+), 144 deletions(-) diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index 2953e38c..e7c87e0b 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -19,6 +19,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; +import '../../my_files/widgets/downloads_folders.dart'; + class ContactAttachmentCard extends StatefulWidget { final FileTransfer fileTransfer; final FileData singleFile; @@ -160,8 +162,17 @@ class _ContactAttachmentCardState extends State { const SizedBox( width: 10, ), - SvgPicture.asset( - AppVectors.icSendFile, + GestureDetector( + onTap: () async { + await openFilePath(BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + widget.singleFile.name!); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + ), ), Spacer(), Text( diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 02ac0980..5466a776 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -7,6 +7,7 @@ import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/sliver_grid_delegate.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/image_view_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; @@ -18,13 +19,8 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import '../../services/common_utility_functions.dart'; -import '../../services/navigation_service.dart'; -import '../../services/snackbar_service.dart'; -import '../../utils/text_strings.dart'; -import '../../view_models/file_progress_provider.dart'; -import '../../view_models/history_provider.dart'; -import '../../view_models/internet_connectivity_checker.dart'; +import '../../services/backend_service.dart'; +import 'widgets/downloads_folders.dart'; class FilesDetailScreen extends StatefulWidget { final FileType? type; @@ -154,9 +150,6 @@ class _FilesDetailScreenState extends State { child: Consumer( builder: (context, provider, _) { final files = provider.displayFiles; - - //TODO - get file transfer data object from this files(FilesDetail) object. - // TODO - add download consumer using the filetranferData object. return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -246,67 +239,87 @@ class _FilesDetailScreenState extends State { final shortDate = DateFormat('MM/dd/yy').format(date); final time = DateFormat('kk:mm').format(date); - late FileTransfer fileTransfer; - bool isDownloaded = false; + // late FileTransfer fileTransfer; + // bool isDownloaded = false; - for (var filetransfer in provider.myFiles) { - if (filetransfer.key == files[index].fileTransferId) { - fileTransfer = filetransfer; - break; - } - } + // for (var filetransfer in provider.myFiles) { + // if (filetransfer.key == files[index].fileTransferId) { + // fileTransfer = filetransfer; + // break; + // } + // } return Slidable( actionPane: const SlidableDrawerActionPane(), actionExtentRatio: 0.11, secondaryActions: [ - Consumer( - builder: (_c, provider, _) { - var fileTransferProgress = - provider.receivedFileProgress[fileTransfer.key]; + // Consumer( + // builder: (_c, provider, _) { + // var fileTransferProgress = + // provider.receivedFileProgress[fileTransfer.key]; - return CommonUtilityFunctions() - .checkForDownloadAvailability(fileTransfer) - ? fileTransferProgress != null - ? CommonUtilityFunctions().getDownloadStatus( - fileTransferProgress, - ) - : isDownloaded - ? SvgPicture.asset(AppVectors.icCloudDownloaded) - : InkWell( - onTap: () async { - var res = await downloadFiles( - fileTransfer, - fileName: files[index].fileName, - ); + // return CommonUtilityFunctions() + // .checkForDownloadAvailability(fileTransfer) + // ? fileTransferProgress != null + // ? CommonUtilityFunctions().getDownloadStatus( + // fileTransferProgress, + // ) + // : isDownloaded + // ? SvgPicture.asset(AppVectors.icCloudDownloaded) + // : InkWell( + // onTap: () async { + // var res = await downloadFiles( + // fileTransfer, + // fileName: files[index].fileName, + // ); - setState(() { - isDownloaded = res; - }); - }, - child: SvgPicture.asset( - AppVectors.icDownloadFile, - ), - ) - : SizedBox(); - }, - ), - // Padding( - // padding: const EdgeInsets.only(left: 6.0), - // child: SvgPicture.asset( - // AppVectors.icDownloadFile, - // ), + // setState(() { + // isDownloaded = res; + // }); + // }, + // child: SvgPicture.asset( + // AppVectors.icDownloadFile, + // ), + // ) + // : SizedBox(); + // }, // ), Padding( padding: const EdgeInsets.only(left: 6.0), child: SvgPicture.asset( - AppVectors.icSendFile, + AppVectors.icDownloadFile, ), ), Padding( padding: const EdgeInsets.only(left: 6.0), - child: SvgPicture.asset( - AppVectors.icDeleteFile, + child: GestureDetector( + onTap: () async { + await openFilePath( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId); + + files.removeAt(index); + setState(() {}); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + ), ), ), ], @@ -412,93 +425,6 @@ class _FilesDetailScreenState extends State { ); } - Future downloadFiles( - FileTransfer? file, { - String? fileName, - }) async { - var fileTransferProgress = Provider.of( - NavService.navKey.currentContext!, - listen: false) - .receivedFileProgress[file!.key]; - - if (fileTransferProgress != null) { - return false; //returning because download is still in progress - } - - var isConnected = Provider.of( - NavService.navKey.currentContext!, - listen: false) - .isInternetAvailable; - - if (!isConnected) { - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings.noInternetMsg, - bgColor: ColorConstants.redAlert, - ); - return false; - } - - var result; - if (fileName != null) { - result = await Provider.of( - NavService.navKey.currentContext!, - listen: false) - .downloadSingleFile( - file.key, - file.sender, - false, - fileName, - ); - } else { - result = await Provider.of( - NavService.navKey.currentContext!, - listen: false) - .downloadFiles( - file.key, - file.sender!, - false, - ); - } - - if (result is bool && result) { - // if (mounted) { - // // setState(() { - // // isDownloaded = true; - // // }); - // } - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .saveNewDataInMyFiles(file); - - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings().fileDownloadd, - bgColor: ColorConstants.successGreen, - ); - // send download acknowledgement - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .sendFileDownloadAcknowledgement(file); - - return true; - } else if (result is bool && !result) { - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings().downloadFailed, - bgColor: ColorConstants.redAlert, - ); - // if (mounted) { - // setState(() { - // // isDownloaded = false; - // }); - // } - return false; - } - - return false; - } - void _onTapPhotoItem(FilesDetail file) { showDialog( context: context, From b7a767d5751e14ce9689c8ae6831c1b023fed07a Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Tue, 9 May 2023 10:40:15 +0530 Subject: [PATCH 72/94] feat: added thumbnail preview in my files screens --- lib/screens/my_files/files_detail_screen.dart | 33 ++++++++++++++----- lib/screens/my_files/my_files_screen.dart | 15 +++++++++ lib/screens/my_files/widgets/recents.dart | 2 +- 3 files changed, 40 insertions(+), 10 deletions(-) diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 5466a776..9115233a 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -204,19 +204,27 @@ class _FilesDetailScreenState extends State { child: Column( children: [ Container( - height: 85, + height: 80, decoration: BoxDecoration( - color: ColorConstants.lightSliver, borderRadius: BorderRadius.circular(5), ), + child: thumbnail( + files[index].fileName?.split(".").last ?? "", + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + ), ), Spacer(), - Text( - files[index].fileName ?? "", - style: TextStyle( - color: Colors.black, - fontSize: 8.toFont, - fontWeight: FontWeight.w500, + Flexible( + child: Text( + files[index].fileName ?? "", + style: TextStyle( + color: Colors.black, + fontSize: 8.toFont, + fontWeight: FontWeight.w500, + overflow: TextOverflow.ellipsis, + ), ), ) ], @@ -336,9 +344,16 @@ class _FilesDetailScreenState extends State { height: 49, width: 38, decoration: BoxDecoration( - color: ColorConstants.lightSliver, borderRadius: BorderRadius.circular(5), ), + child: Center( + child: thumbnail( + files[index].fileName?.split(".").last ?? "", + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + ), + ), ), SizedBox(width: 14), Expanded( diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 21dc8033..c351805f 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -8,6 +8,7 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart' import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/files_detail_screen.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/videos.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; @@ -20,6 +21,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; import 'package:provider/provider.dart'; +import '../../services/backend_service.dart'; + class MyFilesScreen extends StatefulWidget { @override _MyFilesScreenState createState() => _MyFilesScreenState(); @@ -128,6 +131,18 @@ class _MyFilesScreenState extends State { borderRadius: BorderRadius.circular(5), ), + child: thumbnail( + provider.recentFile[index].fileName + ?.split(".") + .last ?? + "", + BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + provider + .recentFile[index].fileName!, + ), ), Align( alignment: Alignment.topRight, diff --git a/lib/screens/my_files/widgets/recents.dart b/lib/screens/my_files/widgets/recents.dart index 56e7b90b..869ea595 100644 --- a/lib/screens/my_files/widgets/recents.dart +++ b/lib/screens/my_files/widgets/recents.dart @@ -198,7 +198,7 @@ Widget thumbnail(String extension, String path) { // await openDownloadsFolder(context); }, child: Container( - padding: EdgeInsets.only(left: 10), + // padding: EdgeInsets.only(left: 10), height: 50.toHeight, width: 50.toWidth, child: Image.asset( From 8620993cf951603e4d020ebfdd356d2dd0a8f60b Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 9 May 2023 17:59:41 +0700 Subject: [PATCH 73/94] feat: removed issues of history list --- .../history/transfer_history_screen.dart | 10 ++++++++ .../history/widgets/history_card_widget.dart | 4 +++- lib/view_models/file_transfer_provider.dart | 2 ++ lib/view_models/history_provider.dart | 24 +++++++++++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index b48f2996..7904d345 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -42,9 +42,19 @@ class _TransferHistoryScreenState extends State { void initState() { historyProvider = context.read(); searchController = TextEditingController(); + WidgetsBinding.instance.addPostFrameCallback((_) { + reloadView(); + }); super.initState(); } + void reloadView() async { + if (context.read().hadNewFile) { + await historyProvider.getAllFileTransferHistory(); + historyProvider.changeIsUpcomingEvent(); + } + } + @override Widget build(BuildContext context) { return Scaffold( diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 7f5b505a..359e768d 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -275,7 +275,9 @@ class _HistoryCardWidgetState extends State { children: [ Expanded( child: Text( - "${widget.fileHistory?.notes ?? ''}", + widget.fileHistory?.type == HistoryType.send + ? widget.fileHistory?.notes ?? '' + : widget.fileHistory?.fileDetails?.notes ?? '', style: TextStyle( fontSize: 8.toFont, color: Color(0xFF747474), diff --git a/lib/view_models/file_transfer_provider.dart b/lib/view_models/file_transfer_provider.dart index f23b35bf..05188d1a 100644 --- a/lib/view_models/file_transfer_provider.dart +++ b/lib/view_models/file_transfer_provider.dart @@ -260,6 +260,8 @@ class FileTransferProvider extends BaseModel { groupName: groupName, ); + _historyProvider.changeIsUpcomingEvent(); + // checking if everyone received the notification or not. for (var atsignStatus in uploadResult.entries) { if (atsignStatus.value.sharedStatus != null && diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 3d2b0ff6..1098951f 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -53,6 +53,7 @@ class HistoryProvider extends BaseModel { String? state; String _historySearchText = ''; bool isDesc = true; + bool hadNewFile = false; List allFiles = []; @@ -89,6 +90,11 @@ class HistoryProvider extends BaseModel { notifyListeners(); } + void changeIsUpcomingEvent() { + hadNewFile = !hadNewFile; + notifyListeners(); + } + updateFileHistoryDetail(FileHistory fileHistory) async { // checking whether sent file is stored in individual atKey or in sentHistory list. if (individualSentFileId[fileHistory.fileDetails!.key] != null) { @@ -577,6 +583,24 @@ class HistoryProvider extends BaseModel { filesModel, fileTransferObject: fileTransferObject, ); + receivedFileHistory.insert( + 0, + FileHistory( + filesModel, + [], + HistoryType.received, + fileTransferObject, + ), + ); + allFilesHistory.insert( + 0, + FileHistory( + filesModel, + [], + HistoryType.received, + fileTransferObject, + ), + ); } setStatus(UPDATE_RECEIVED_RECORD, Status.Done); } From 63ab42d5e2cbe7427ec7a55a632cb9c9153b5433 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 10 May 2023 09:17:36 +0700 Subject: [PATCH 74/94] feat: edit search file --- lib/screens/common_widgets/search_widget.dart | 43 +++++++++++-------- .../history/transfer_history_screen.dart | 1 - lib/screens/my_files/files_detail_screen.dart | 3 ++ 3 files changed, 27 insertions(+), 20 deletions(-) diff --git a/lib/screens/common_widgets/search_widget.dart b/lib/screens/common_widgets/search_widget.dart index 140938e3..c02c4b80 100644 --- a/lib/screens/common_widgets/search_widget.dart +++ b/lib/screens/common_widgets/search_widget.dart @@ -1,9 +1,8 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:flutter/material.dart'; - import '../../utils/colors.dart'; -class SearchWidget extends StatefulWidget { +class SearchWidget extends StatelessWidget { final Color? backgroundColor, borderColor; final TextEditingController controller; final String? hintText; @@ -22,56 +21,62 @@ class SearchWidget extends StatefulWidget { this.onChange, }) : super(key: key); - @override - State createState() => _SearchWidgetState(); -} - -class _SearchWidgetState extends State { @override Widget build(BuildContext context) { return Container( height: 44.toHeight, decoration: BoxDecoration( borderRadius: BorderRadius.circular(10), - color: widget.backgroundColor, + color: backgroundColor, ), - margin: widget.margin ?? + margin: margin ?? EdgeInsets.symmetric( horizontal: 32.toWidth, vertical: 18.toHeight, ), child: TextFormField( - controller: widget.controller, + controller: controller, onChanged: (value) { - widget.onChange?.call(value); + onChange?.call(value); }, decoration: InputDecoration( enabledBorder: OutlineInputBorder( borderSide: BorderSide( width: 1, - color: widget.borderColor ?? ColorConstants.grey, + color: borderColor ?? ColorConstants.grey, ), borderRadius: BorderRadius.circular(10), ), focusedBorder: OutlineInputBorder( borderSide: BorderSide( width: 1, - color: widget.borderColor ?? ColorConstants.grey, + color: borderColor ?? ColorConstants.grey, ), borderRadius: BorderRadius.circular(10), ), contentPadding: const EdgeInsets.only(top: 12, left: 14), - hintStyle: widget.hintStyle ?? + hintStyle: hintStyle ?? TextStyle( fontSize: 14.toFont, color: ColorConstants.grey, fontWeight: FontWeight.normal, ), - suffixIcon: const Icon( - Icons.search, - color: ColorConstants.darkSliver, - ), - hintText: widget.hintText ?? 'Search by atSign or nickname', + suffixIcon: controller.text.isEmpty + ? Icon( + Icons.search, + color: ColorConstants.darkSliver, + ) + : InkWell( + onTap: () { + controller.clear(); + onChange?.call(''); + }, + child: Icon( + Icons.close, + color: ColorConstants.darkSliver, + ), + ), + hintText: hintText ?? 'Search by atSign or nickname', ), textInputAction: TextInputAction.search, style: TextStyle( diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 7904d345..efa73108 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -87,7 +87,6 @@ class _TransferHistoryScreenState extends State { hintText: "Search", onChange: (text) { setState(() {}); - // provider.setHistorySearchText = text; }, hintStyle: TextStyle( color: ColorConstants.darkSliver, diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 9115233a..cd6d2f54 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -136,6 +136,9 @@ class _FilesDetailScreenState extends State { borderColor: Colors.white, backgroundColor: Colors.white, hintText: "Search", + onChange: (value) { + setState(() {}); + }, hintStyle: TextStyle( color: ColorConstants.darkSliver, fontSize: 15, From 89bbbbe4c1abf80a95e5f754c1b735dd57ec5359 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 10 May 2023 11:14:16 +0700 Subject: [PATCH 75/94] feat: added search files func --- lib/screens/common_widgets/search_widget.dart | 7 +++++++ lib/screens/my_files/files_detail_screen.dart | 9 ++++++++- lib/screens/my_files/my_files_screen.dart | 12 ++++++++++-- lib/view_models/my_files_provider.dart | 16 ++++++++++++++++ 4 files changed, 41 insertions(+), 3 deletions(-) diff --git a/lib/screens/common_widgets/search_widget.dart b/lib/screens/common_widgets/search_widget.dart index c02c4b80..caad7be7 100644 --- a/lib/screens/common_widgets/search_widget.dart +++ b/lib/screens/common_widgets/search_widget.dart @@ -9,6 +9,9 @@ class SearchWidget extends StatelessWidget { final TextStyle? hintStyle; final EdgeInsetsGeometry? margin; final Function(String value)? onChange; + final bool? readOnly; + final Function()? onTap; + final bool? autoFocus; const SearchWidget({ Key? key, @@ -19,6 +22,7 @@ class SearchWidget extends StatelessWidget { this.hintStyle, this.margin, this.onChange, + this.readOnly, this.onTap, this.autoFocus, }) : super(key: key); @override @@ -36,6 +40,9 @@ class SearchWidget extends StatelessWidget { ), child: TextFormField( controller: controller, + autofocus: autoFocus ?? false, + readOnly: readOnly ?? false, + onTap: onTap, onChanged: (value) { onChange?.call(value); }, diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index cd6d2f54..e6d6dae7 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -24,10 +24,12 @@ import 'widgets/downloads_folders.dart'; class FilesDetailScreen extends StatefulWidget { final FileType? type; + final bool? autoFocus; const FilesDetailScreen({ Key? key, required this.type, + this.autoFocus, }) : super(key: key); @override @@ -133,11 +135,15 @@ class _FilesDetailScreenState extends State { padding: EdgeInsets.symmetric(horizontal: 32, vertical: 28), child: SearchWidget( controller: searchController, + autoFocus: widget.autoFocus, borderColor: Colors.white, backgroundColor: Colors.white, hintText: "Search", onChange: (value) { - setState(() {}); + provider.searchFileByKeyword( + key: value, + type: widget.type, + ); }, hintStyle: TextStyle( color: ColorConstants.darkSliver, @@ -375,6 +381,7 @@ class _FilesDetailScreenState extends State { ), ), ), + SizedBox(width: 12), Text( "$shortDate", style: TextStyle( diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index c351805f..29004613 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -80,9 +80,13 @@ class _MyFilesScreenState extends State { ), child: SearchWidget( controller: searchController, + readOnly: true, borderColor: Colors.white, backgroundColor: Colors.white, hintText: "Search", + onTap: () { + navigateToFilesDetail(autoFocus: true); + }, hintStyle: TextStyle( color: ColorConstants.darkSliver, fontSize: 15, @@ -290,12 +294,16 @@ class _MyFilesScreenState extends State { return items; } - void navigateToFilesDetail({FileType? type}) { + void navigateToFilesDetail({ + FileType? type, + bool? autoFocus, + }) { Navigator.push( context, MaterialPageRoute( builder: (_) => FilesDetailScreen( type: type, + autoFocus: autoFocus, ), ), ); @@ -550,4 +558,4 @@ class _MyFilesScreenState extends State { ), ); } -} \ No newline at end of file +} diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index c61358c4..028b8a46 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -227,6 +227,22 @@ class MyFilesProvider extends BaseModel { } } + void searchFileByKeyword({ + required String key, + FileType? type, + }) { + final result = filterFiles(type) + .where( + (element) => (element.fileName ?? '') + .toLowerCase() + .trim() + .contains(key.toLowerCase().trim()), + ) + .toList(); + displayFiles = result; + notifyListeners(); + } + populateTabs() { bool isDesktop = false; tabNames = ['Recents']; From 7b66972b5b6d865ae6d056957f21586f668fa08e Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Mon, 8 May 2023 10:56:24 +0530 Subject: [PATCH 76/94] feat: added download functionality --- lib/screens/my_files/files_detail_screen.dart | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index e6d6dae7..c60c9023 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -22,6 +22,14 @@ import 'package:provider/provider.dart'; import '../../services/backend_service.dart'; import 'widgets/downloads_folders.dart'; +import '../../services/common_utility_functions.dart'; +import '../../services/navigation_service.dart'; +import '../../services/snackbar_service.dart'; +import '../../utils/text_strings.dart'; +import '../../view_models/file_progress_provider.dart'; +import '../../view_models/history_provider.dart'; +import '../../view_models/internet_connectivity_checker.dart'; + class FilesDetailScreen extends StatefulWidget { final FileType? type; final bool? autoFocus; @@ -159,6 +167,9 @@ class _FilesDetailScreenState extends State { child: Consumer( builder: (context, provider, _) { final files = provider.displayFiles; + + //TODO - get file transfer data object from this files(FilesDetail) object. + // TODO - add download consumer using the filetranferData object. return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -450,6 +461,93 @@ class _FilesDetailScreenState extends State { ); } + Future downloadFiles( + FileTransfer? file, { + String? fileName, + }) async { + var fileTransferProgress = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .receivedFileProgress[file!.key]; + + if (fileTransferProgress != null) { + return false; //returning because download is still in progress + } + + var isConnected = Provider.of( + NavService.navKey.currentContext!, + listen: false) + .isInternetAvailable; + + if (!isConnected) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings.noInternetMsg, + bgColor: ColorConstants.redAlert, + ); + return false; + } + + var result; + if (fileName != null) { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadSingleFile( + file.key, + file.sender, + false, + fileName, + ); + } else { + result = await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .downloadFiles( + file.key, + file.sender!, + false, + ); + } + + if (result is bool && result) { + // if (mounted) { + // // setState(() { + // // isDownloaded = true; + // // }); + // } + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .saveNewDataInMyFiles(file); + + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().fileDownloadd, + bgColor: ColorConstants.successGreen, + ); + // send download acknowledgement + await Provider.of(NavService.navKey.currentContext!, + listen: false) + .sendFileDownloadAcknowledgement(file); + + return true; + } else if (result is bool && !result) { + SnackbarService().showSnackbar( + NavService.navKey.currentContext!, + TextStrings().downloadFailed, + bgColor: ColorConstants.redAlert, + ); + // if (mounted) { + // setState(() { + // // isDownloaded = false; + // }); + // } + return false; + } + + return false; + } + void _onTapPhotoItem(FilesDetail file) { showDialog( context: context, From 90def0cc7135a1d8f1c2ea88a76ec100509bbf70 Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Tue, 9 May 2023 10:21:33 +0530 Subject: [PATCH 77/94] feat: added delete file functionality --- lib/screens/my_files/files_detail_screen.dart | 90 ------------------- 1 file changed, 90 deletions(-) diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index c60c9023..302ed469 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -167,9 +167,6 @@ class _FilesDetailScreenState extends State { child: Consumer( builder: (context, provider, _) { final files = provider.displayFiles; - - //TODO - get file transfer data object from this files(FilesDetail) object. - // TODO - add download consumer using the filetranferData object. return Column( mainAxisSize: MainAxisSize.min, children: [ @@ -461,93 +458,6 @@ class _FilesDetailScreenState extends State { ); } - Future downloadFiles( - FileTransfer? file, { - String? fileName, - }) async { - var fileTransferProgress = Provider.of( - NavService.navKey.currentContext!, - listen: false) - .receivedFileProgress[file!.key]; - - if (fileTransferProgress != null) { - return false; //returning because download is still in progress - } - - var isConnected = Provider.of( - NavService.navKey.currentContext!, - listen: false) - .isInternetAvailable; - - if (!isConnected) { - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings.noInternetMsg, - bgColor: ColorConstants.redAlert, - ); - return false; - } - - var result; - if (fileName != null) { - result = await Provider.of( - NavService.navKey.currentContext!, - listen: false) - .downloadSingleFile( - file.key, - file.sender, - false, - fileName, - ); - } else { - result = await Provider.of( - NavService.navKey.currentContext!, - listen: false) - .downloadFiles( - file.key, - file.sender!, - false, - ); - } - - if (result is bool && result) { - // if (mounted) { - // // setState(() { - // // isDownloaded = true; - // // }); - // } - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .saveNewDataInMyFiles(file); - - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings().fileDownloadd, - bgColor: ColorConstants.successGreen, - ); - // send download acknowledgement - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .sendFileDownloadAcknowledgement(file); - - return true; - } else if (result is bool && !result) { - SnackbarService().showSnackbar( - NavService.navKey.currentContext!, - TextStrings().downloadFailed, - bgColor: ColorConstants.redAlert, - ); - // if (mounted) { - // setState(() { - // // isDownloaded = false; - // }); - // } - return false; - } - - return false; - } - void _onTapPhotoItem(FilesDetail file) { showDialog( context: context, From 601d5976b8561e1f1cdad18b56f09159822a8278 Mon Sep 17 00:00:00 2001 From: Sarthak Suresh Bakre Date: Wed, 10 May 2023 12:33:47 +0530 Subject: [PATCH 78/94] feat: added image description screen --- lib/data_models/file_modal.dart | 10 +- lib/screens/my_files/files_detail_screen.dart | 44 ++- lib/services/common_utility_functions.dart | 292 +++++++++++++++++- lib/view_models/my_files_provider.dart | 1 + 4 files changed, 338 insertions(+), 9 deletions(-) diff --git a/lib/data_models/file_modal.dart b/lib/data_models/file_modal.dart index 94fe51d8..c9069030 100644 --- a/lib/data_models/file_modal.dart +++ b/lib/data_models/file_modal.dart @@ -41,6 +41,7 @@ class FilesDetail { String? contactName; int? id; String? date; + String? message; String? fileTransferId; FileTransferStatus? status; @@ -53,6 +54,7 @@ class FilesDetail { this.contactName, this.id, this.date, + this.message, this.fileTransferId}); FilesDetail copyWith({ @@ -61,6 +63,7 @@ class FilesDetail { double? size, String? type, String? date, + String? message, FileTransferStatus? status, String? contactName, int? id, @@ -71,6 +74,7 @@ class FilesDetail { size: size ?? this.size, type: type ?? this.type, date: date ?? this.date, + message: message ?? this.message, status: status ?? this.status, id: id ?? this.id, contactName: contactName ?? this.contactName); @@ -83,6 +87,7 @@ class FilesDetail { 'size': size, 'type': type, 'date': date, + 'message': message, 'id': id, 'status': status, 'contactName': contactName @@ -98,6 +103,7 @@ class FilesDetail { size: map['size'], type: map['type'], date: map['date'], + message: map['message'], id: map['id'], status: map['status'], contactName: map['contactName']); @@ -110,7 +116,7 @@ class FilesDetail { @override String toString() { - return 'FilesDetail(fileName: $fileName, filePath: $filePath, size: $size, type: $type, date: $date, id:$id, contactName:$contactName, status:$status)'; + return 'FilesDetail(fileName: $fileName, filePath: $filePath, size: $size, type: $type, date: $date, message: $message, id:$id, contactName:$contactName, status:$status)'; } @override @@ -123,6 +129,7 @@ class FilesDetail { o.size == size && o.type == type && o.date == date && + o.message == message && o.status == status && o.contactName == contactName && o.id == id; @@ -135,6 +142,7 @@ class FilesDetail { size.hashCode ^ type.hashCode ^ date.hashCode ^ + message.hashCode ^ id.hashCode ^ status.hashCode ^ contactName.hashCode; diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 302ed469..3899f2c9 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -1,4 +1,5 @@ import 'dart:io'; +import 'dart:typed_data'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; @@ -8,6 +9,7 @@ import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart' import 'package:atsign_atmosphere_pro/screens/common_widgets/sliver_grid_delegate.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/image_view_widget.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; +import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; @@ -20,6 +22,7 @@ import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import '../../services/backend_service.dart'; +import '../../utils/file_types.dart'; import 'widgets/downloads_folders.dart'; import '../../services/common_utility_functions.dart'; @@ -48,6 +51,7 @@ class _FilesDetailScreenState extends State { bool isGridType = true; late TextEditingController searchController; late MyFilesProvider provider; + Uint8List? videoThumbnail; @override void initState() { @@ -225,11 +229,25 @@ class _FilesDetailScreenState extends State { decoration: BoxDecoration( borderRadius: BorderRadius.circular(5), ), - child: thumbnail( + child: CommonUtilityFunctions().interactableThumbnail( files[index].fileName?.split(".").last ?? "", BackendService.getInstance().downloadDirectory!.path + Platform.pathSeparator + files[index].fileName!, + files[index], + () async { + await deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId); + + files.removeAt(index); + if(mounted) { + Navigator.pop(context); + } + setState(() {}); + }, ), ), Spacer(), @@ -364,12 +382,24 @@ class _FilesDetailScreenState extends State { borderRadius: BorderRadius.circular(5), ), child: Center( - child: thumbnail( - files[index].fileName?.split(".").last ?? "", - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - ), + child: CommonUtilityFunctions().interactableThumbnail( + files[index].fileName?.split(".").last ?? "", + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + files[index], () async { + await deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId); + + files.removeAt(index); + if(mounted) { + Navigator.pop(context); + } + setState(() {}); + }), ), ), SizedBox(width: 14), diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 37ffd669..afdbe1a5 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -3,10 +3,13 @@ import 'dart:typed_data'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:at_contacts_flutter/utils/init_contacts_service.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/confirmation_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_button.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_screen.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -16,11 +19,17 @@ import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter_svg/svg.dart'; +import 'package:provider/provider.dart'; import 'package:showcaseview/showcaseview.dart'; import 'package:video_thumbnail/video_thumbnail.dart'; +import '../data_models/file_modal.dart'; import '../data_models/file_transfer.dart'; import '../screens/common_widgets/labelled_circular_progress.dart'; +import '../screens/my_files/widgets/downloads_folders.dart'; +import '../screens/my_files/widgets/recents.dart'; +import '../utils/vectors.dart'; class CommonUtilityFunctions { static final CommonUtilityFunctions _singleton = @@ -633,7 +642,6 @@ class CommonUtilityFunctions { } bool checkForDownloadAvailability(FileTransfer file) { - bool isDownloadAvailable = false; var expiryDate = file.date!.add(Duration(days: 6)); @@ -656,6 +664,288 @@ class CommonUtilityFunctions { return isDownloadAvailable; } + Future getNickname(String atSign) async { + var res = await ContactService().getContactDetails(atSign, null); + return res['nickname'] ?? ""; + } + + Widget interactableThumbnail(String extension, String path, + FilesDetail fileDetail, Function onDelete) { + GroupService().allContacts; + String nickname = ""; + for (var contact in GroupService().allContacts) { + if (contact?.contact?.atSign == fileDetail.contactName) { + nickname = contact?.contact?.tags?["nickname"] ?? ""; + break; + } + } + return FileTypes.IMAGE_TYPES.contains(extension) + ? ClipRRect( + borderRadius: BorderRadius.circular(10.toHeight), + child: GestureDetector( + onTap: () async { + await showDialog( + context: NavService.navKey.currentContext!, + builder: (_) => Material( + type: MaterialType.transparency, + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 25), + child: Column( + children: [ + SizedBox( + height: 10, + ), + Align( + alignment: Alignment.centerLeft, + child: InkWell( + onTap: () { + Navigator.pop( + NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), + ), + ), + SizedBox( + height: 10, + ), + Flexible( + child: Image.file( + File(path), + width: double.infinity, + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30.toFont, + ), + ); + }, + ), + ), + SizedBox( + height: 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icDownloadFile, + height: 50, + width: 50, + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await openFilePath( + BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + fileDetail.fileName!); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + height: 50, + width: 50, + ), + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await onDelete(); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + height: 50, + width: 50, + ), + ), + ), + ], + ), + SizedBox( + height: 40, + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + padding: EdgeInsets.all(20), + width: double.infinity, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + fileDetail.fileName ?? "", + style: TextStyle( + fontSize: 16, + fontWeight: FontWeight.bold), + ), + SizedBox(height: 5), + Text( + double.parse(fileDetail.size.toString()) <= + 1024 + ? '${fileDetail.size} ' + TextStrings().kb + : '${(fileDetail.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + textAlign: TextAlign.left, + ), + SizedBox(height: 10), + nickname.isNotEmpty + ? Text( + nickname, + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.bold), + ) + : SizedBox(), + SizedBox(height: 5), + Text( + fileDetail.contactName ?? "", + style: TextStyle( + fontSize: 12, + ), + ), + SizedBox(height: 10), + fileDetail.message.isNotNull + ? Text( + "Message", + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ) + : SizedBox(), + SizedBox(height: 5), + Text( + fileDetail.message ?? "", + style: TextStyle( + fontSize: 12, + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + }, + child: Container( + height: 50.toHeight, + width: 50.toWidth, + child: Image.file( + File(path), + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30.toFont, + ), + ); + }, + ), + ), + ), + ) + : FileTypes.VIDEO_TYPES.contains(extension) + ? FutureBuilder( + future: videoThumbnailBuilder(path), + builder: (context, snapshot) => ClipRRect( + borderRadius: BorderRadius.circular(10.toHeight), + child: GestureDetector( + onTap: () async { + // await openDownloadsFolder(context); + await openFilePath(path); + }, + child: Container( + padding: EdgeInsets.only(left: 10), + height: 50.toHeight, + width: 50.toWidth, + child: (snapshot.data == null) + ? Image.asset(ImageConstants.videoLogo, + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30.toFont, + ), + ); + }) + : Image.memory( + snapshot.data as Uint8List, + fit: BoxFit.cover, + errorBuilder: (BuildContext _context, _, __) { + return Container( + child: Icon( + Icons.image, + size: 30.toFont, + ), + ); + }, + ), + ), + ), + ), + ) + : Builder( + builder: (context) => ClipRRect( + borderRadius: BorderRadius.circular(10.toHeight), + child: GestureDetector( + onTap: () async { + await openFilePath(path); + // await openDownloadsFolder(context); + }, + child: Container( + // padding: EdgeInsets.only(left: 10), + height: 50.toHeight, + width: 50.toWidth, + child: Image.asset( + FileTypes.PDF_TYPES.contains(extension) + ? ImageConstants.pdfLogo + : FileTypes.AUDIO_TYPES.contains(extension) + ? ImageConstants.musicLogo + : FileTypes.WORD_TYPES.contains(extension) + ? ImageConstants.wordLogo + : FileTypes.EXEL_TYPES.contains(extension) + ? ImageConstants.exelLogo + : FileTypes.TEXT_TYPES + .contains(extension) + ? ImageConstants.txtLogo + : ImageConstants.unknownLogo, + fit: BoxFit.cover, + ), + ), + ), + ), + ); + } + void showNoFileDialog({double deviceTextFactor = 1}) { showDialog( context: NavService.navKey.currentContext!, diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index 028b8a46..5d43043b 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -419,6 +419,7 @@ class MyFilesProvider extends BaseModel { type: file.name!.split('.').last, contactName: fileData.sender, fileTransferId: fileData.key, + message: fileData.notes, ); allFiles.add(fileDetail); From 45ec2040d2fb156aea264a140279f031a31a8713 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 10 May 2023 16:40:24 +0700 Subject: [PATCH 79/94] feat: update UI File Detail Screen --- lib/screens/my_files/files_detail_screen.dart | 112 +++----- lib/services/common_utility_functions.dart | 246 ++++++++++-------- lib/view_models/my_files_provider.dart | 3 + 3 files changed, 184 insertions(+), 177 deletions(-) diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 3899f2c9..ec7db942 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -4,11 +4,11 @@ import 'dart:typed_data'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; -import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/sliver_grid_delegate.dart'; -import 'package:atsign_atmosphere_pro/screens/my_files/image_view_widget.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; +import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -21,18 +21,6 @@ import 'package:flutter_svg/flutter_svg.dart'; import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; -import '../../services/backend_service.dart'; -import '../../utils/file_types.dart'; -import 'widgets/downloads_folders.dart'; - -import '../../services/common_utility_functions.dart'; -import '../../services/navigation_service.dart'; -import '../../services/snackbar_service.dart'; -import '../../utils/text_strings.dart'; -import '../../view_models/file_progress_provider.dart'; -import '../../view_models/history_provider.dart'; -import '../../view_models/internet_connectivity_checker.dart'; - class FilesDetailScreen extends StatefulWidget { final FileType? type; final bool? autoFocus; @@ -214,56 +202,47 @@ class _FilesDetailScreenState extends State { height: 104, ), itemBuilder: (context, index) { - return InkWell( - onTap: () { - if (widget.type == FileType.photo) { - _onTapPhotoItem.call(files[index]); - } else { - /// handler - } - }, - child: Column( - children: [ - Container( - height: 80, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5), - ), - child: CommonUtilityFunctions().interactableThumbnail( - files[index].fileName?.split(".").last ?? "", - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - files[index], - () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); + return Column( + children: [ + Container( + height: 80, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + ), + child: CommonUtilityFunctions().interactableThumbnail( + files[index].fileName?.split(".").last ?? "", + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + files[index], + () async { + await deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId); - files.removeAt(index); - if(mounted) { - Navigator.pop(context); - } - setState(() {}); - }, - ), + files.removeAt(index); + if (mounted) { + Navigator.pop(context); + } + setState(() {}); + }, ), - Spacer(), - Flexible( - child: Text( - files[index].fileName ?? "", - style: TextStyle( - color: Colors.black, - fontSize: 8.toFont, - fontWeight: FontWeight.w500, - overflow: TextOverflow.ellipsis, - ), + ), + Spacer(), + Flexible( + child: Text( + files[index].fileName ?? "", + style: TextStyle( + color: Colors.black, + fontSize: 8.toFont, + fontWeight: FontWeight.w500, + overflow: TextOverflow.ellipsis, ), - ) - ], - ), + ), + ) + ], ); }, ), @@ -395,7 +374,7 @@ class _FilesDetailScreenState extends State { fileTransferId: files[index].fileTransferId); files.removeAt(index); - if(mounted) { + if (mounted) { Navigator.pop(context); } setState(() {}); @@ -487,13 +466,4 @@ class _FilesDetailScreenState extends State { }, ); } - - void _onTapPhotoItem(FilesDetail file) { - showDialog( - context: context, - builder: (context) => ImageViewWidget( - image: file, - ), - ); - } } diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index afdbe1a5..3e59b167 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -9,7 +9,6 @@ import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/confirmation_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_button.dart'; -import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_screen.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -18,9 +17,8 @@ import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; -import 'package:flutter/rendering.dart'; import 'package:flutter_svg/svg.dart'; -import 'package:provider/provider.dart'; +import 'package:intl/intl.dart'; import 'package:showcaseview/showcaseview.dart'; import 'package:video_thumbnail/video_thumbnail.dart'; @@ -28,12 +26,12 @@ import '../data_models/file_modal.dart'; import '../data_models/file_transfer.dart'; import '../screens/common_widgets/labelled_circular_progress.dart'; import '../screens/my_files/widgets/downloads_folders.dart'; -import '../screens/my_files/widgets/recents.dart'; import '../utils/vectors.dart'; class CommonUtilityFunctions { static final CommonUtilityFunctions _singleton = CommonUtilityFunctions._internal(); + CommonUtilityFunctions._internal(); factory CommonUtilityFunctions() { @@ -410,8 +408,8 @@ class CommonUtilityFunctions { var videoThumbnail = await VideoThumbnail.thumbnailData( video: path, imageFormat: ImageFormat.JPEG, - maxWidth: - 50, // specify the width of the thumbnail, let the height auto-scaled to keep the source aspect ratio + maxWidth: 50, + // specify the width of the thumbnail, let the height auto-scaled to keep the source aspect ratio quality: 100, ); return videoThumbnail; @@ -673,6 +671,10 @@ class CommonUtilityFunctions { FilesDetail fileDetail, Function onDelete) { GroupService().allContacts; String nickname = ""; + final date = DateTime.parse(fileDetail.date ?? "").toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + for (var contact in GroupService().allContacts) { if (contact?.contact?.atSign == fileDetail.contactName) { nickname = contact?.contact?.tags?["nickname"] ?? ""; @@ -688,111 +690,142 @@ class CommonUtilityFunctions { context: NavService.navKey.currentContext!, builder: (_) => Material( type: MaterialType.transparency, - child: Padding( - padding: const EdgeInsets.symmetric(horizontal: 25), - child: Column( - children: [ - SizedBox( - height: 10, + child: Column( + children: [ + SizedBox( + height: 10, + ), + Align( + alignment: Alignment.centerLeft, + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), ), - Align( - alignment: Alignment.centerLeft, - child: InkWell( - onTap: () { - Navigator.pop( - NavService.navKey.currentContext!); - }, - child: Icon( - Icons.clear, - color: Colors.white, - size: 24, + ), + SizedBox( + height: 10, + ), + Expanded( + child: Container( + // height: double.infinity, + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + image: DecorationImage( + image: FileImage( + File(path), + ), + fit: BoxFit.cover, ), ), ), - SizedBox( - height: 10, - ), - Flexible( - child: Image.file( - File(path), - width: double.infinity, - fit: BoxFit.cover, - errorBuilder: (BuildContext _context, _, __) { - return Container( - child: Icon( - Icons.image, - size: 30.toFont, - ), - ); - }, + ), + SizedBox( + height: 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icDownloadFile, + height: 50, + width: 50, + ), ), - ), - SizedBox( - height: 40, - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: const EdgeInsets.only(left: 6.0), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await openFilePath( + BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + fileDetail.fileName!); + }, child: SvgPicture.asset( - AppVectors.icDownloadFile, + AppVectors.icSendFile, height: 50, width: 50, ), ), - SizedBox( - width: 10, - ), - Padding( - padding: const EdgeInsets.only(left: 6.0), - child: GestureDetector( - onTap: () async { - await openFilePath( - BackendService.getInstance() - .downloadDirectory! - .path + - Platform.pathSeparator + - fileDetail.fileName!); - }, - child: SvgPicture.asset( - AppVectors.icSendFile, - height: 50, - width: 50, - ), - ), - ), - SizedBox( - width: 10, - ), - Padding( - padding: const EdgeInsets.only(left: 6.0), - child: GestureDetector( - onTap: () async { - await onDelete(); - }, - child: SvgPicture.asset( - AppVectors.icDeleteFile, - height: 50, - width: 50, - ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await onDelete(); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + height: 50, + width: 50, ), ), - ], - ), - SizedBox( - height: 40, - ), - Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(5), ), - padding: EdgeInsets.all(20), - width: double.infinity, + ], + ), + SizedBox( + height: 40, + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + padding: EdgeInsets.all(20), + margin: EdgeInsets.symmetric(horizontal: 25), + width: double.infinity, + child: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ + Align( + alignment: Alignment.topRight, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ), + SizedBox(height: 12), Text( fileDetail.fileName ?? "", style: TextStyle( @@ -829,15 +862,16 @@ class CommonUtilityFunctions { ), ), SizedBox(height: 10), - fileDetail.message.isNotNull - ? Text( - "Message", - style: TextStyle( - fontSize: 12, - color: Colors.grey, - ), - ) - : SizedBox(), + // fileDetail.message.isNotNull + // ? + Text( + "Message", + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + // : SizedBox(), SizedBox(height: 5), Text( fileDetail.message ?? "", @@ -848,8 +882,8 @@ class CommonUtilityFunctions { ], ), ), - ], - ), + ), + ], ), ), ); diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index 5d43043b..eb4b9d62 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -163,6 +163,7 @@ class MyFilesProvider extends BaseModel { date: fileData.date?.toLocal().toString(), type: file.name.split('.').last, contactName: fileData.sender, + message: fileData.notes, fileTransferId: fileData.key); // check if file exists @@ -373,6 +374,7 @@ class MyFilesProvider extends BaseModel { date: fileData.date?.toLocal().toString(), type: file.name!.split('.').last, contactName: fileData.sender, + message: fileData.notes, fileTransferId: fileData.key); // File tempFile = File(fileDetail.filePath!); @@ -540,6 +542,7 @@ class MyFilesProvider extends BaseModel { date: fileTransfer.date?.toLocal().toString(), type: file.name!.split('.').last, contactName: fileTransfer.sender, + message: fileTransfer.notes, fileTransferId: fileTransfer.key, ); From 5ffff0228d9fcc4aef44d1fd3fd8dc323375a961 Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 11 May 2023 09:34:14 +0700 Subject: [PATCH 80/94] feat: update Files screen --- lib/screens/my_files/files_detail_screen.dart | 56 +++++++++++-------- lib/screens/my_files/my_files_screen.dart | 2 +- lib/screens/my_files/widgets/recents.dart | 25 +-------- lib/utils/file_utils.dart | 44 +++++++++++++++ 4 files changed, 81 insertions(+), 46 deletions(-) create mode 100644 lib/utils/file_utils.dart diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index ec7db942..211ce9cb 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -12,6 +12,7 @@ import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; @@ -83,7 +84,9 @@ class _FilesDetailScreenState extends State { InkWell( onTap: () { setState(() { - isGridType = !isGridType; + if (!isGridType) { + isGridType = !isGridType; + } }); }, child: Container( @@ -104,7 +107,9 @@ class _FilesDetailScreenState extends State { InkWell( onTap: () { setState(() { - isGridType = !isGridType; + if (isGridType) { + isGridType = !isGridType; + } }); }, child: Container( @@ -216,13 +221,15 @@ class _FilesDetailScreenState extends State { files[index].fileName!, files[index], () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); - - files.removeAt(index); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); if (mounted) { Navigator.pop(context); } @@ -330,13 +337,15 @@ class _FilesDetailScreenState extends State { padding: const EdgeInsets.only(left: 6.0), child: GestureDetector( onTap: () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); - - files.removeAt(index); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); setState(() {}); }, child: SvgPicture.asset( @@ -367,13 +376,16 @@ class _FilesDetailScreenState extends State { Platform.pathSeparator + files[index].fileName!, files[index], () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); - files.removeAt(index); if (mounted) { Navigator.pop(context); } diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 29004613..5076fe3c 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -63,8 +63,8 @@ class _MyFilesScreenState extends State { padding: EdgeInsets.only(left: 34, bottom: 32), child: ProviderHandler( load: (provider) async { - await provider.getMyFilesRecords(); await provider.getAllFiles(); + await provider.getMyFilesRecords(); }, functionName: 'all_files', showError: false, diff --git a/lib/screens/my_files/widgets/recents.dart b/lib/screens/my_files/widgets/recents.dart index 869ea595..d502cad8 100644 --- a/lib/screens/my_files/widgets/recents.dart +++ b/lib/screens/my_files/widgets/recents.dart @@ -8,6 +8,7 @@ import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; @@ -59,32 +60,10 @@ class _RecentsState extends State { } } -deleteFile(String filePath, {String? fileTransferId}) async { - await showModalBottomSheet( - context: NavService.navKey.currentContext!, - backgroundColor: Colors.white, - builder: (context) => EditBottomSheet( - onConfirmation: () async { - var file = File(filePath); - if (await file.exists()) { - file.deleteSync(); - } - if (fileTransferId != null) { - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .removeParticularFile( - fileTransferId, filePath.split(Platform.pathSeparator).last); - } - }, - deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, - ), - ); -} - Widget fileCard(String? title, String? filePath, {String? fileTransferId}) { return InkWell( onLongPress: () { - deleteFile(filePath!, fileTransferId: fileTransferId); + FileUtils.deleteFile(filePath!, fileTransferId: fileTransferId); }, child: Column( children: [ diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart new file mode 100644 index 00000000..ddc2a02a --- /dev/null +++ b/lib/utils/file_utils.dart @@ -0,0 +1,44 @@ +import 'dart:io'; + +import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class FileUtils { + static Future deleteFile( + String filePath, { + String? fileTransferId, + Function()? onComplete, + }) async { + await showModalBottomSheet( + context: NavService.navKey.currentContext!, + backgroundColor: Colors.white, + builder: (context) => EditBottomSheet( + onConfirmation: () async { + var file = File(filePath); + if (await file.exists()) { + file.deleteSync(); + } + if (fileTransferId != null) { + await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .removeParticularFile(fileTransferId, + filePath.split(Platform.pathSeparator).last); + + await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .getAllFiles(); + + onComplete; + } + }, + deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, + ), + ); + } +} From 8edae74d7f1bbd20a3790819f9ee36ed19f7f64c Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 11 May 2023 09:34:14 +0700 Subject: [PATCH 81/94] feat: update Files screen --- .../contact_detail_screen.dart | 138 +++++++++++------- lib/screens/my_files/files_detail_screen.dart | 56 ++++--- lib/screens/my_files/my_files_screen.dart | 2 +- lib/screens/my_files/widgets/recents.dart | 25 +--- lib/utils/file_utils.dart | 44 ++++++ 5 files changed, 169 insertions(+), 96 deletions(-) create mode 100644 lib/utils/file_utils.dart diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index 58add477..4fa7d9fc 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -1,14 +1,10 @@ -import 'dart:io'; - import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; -import 'package:atsign_atmosphere_pro/data_models/file_entity.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/avatar_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_attachment_card.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/option_dialog.dart'; -import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; @@ -45,8 +41,7 @@ class _ContactDetailScreenState extends State { GlobalKey optionKey = GlobalKey(); TextEditingController nicknameController = TextEditingController(); bool isTrusted = false; - bool isDownloaded = false; - + bool isLoading = false; bool isEditNickname = false; @override @@ -83,7 +78,10 @@ class _ContactDetailScreenState extends State { return tempfiles; } - editNickname(e) async { + editNickname() async { + setState(() { + isLoading = true; + }); AtContact contact = widget.contact; contact.tags = await _contactService.getContactDetails(contact.atSign, null); @@ -98,6 +96,7 @@ class _ContactDetailScreenState extends State { } setState(() { isEditNickname = false; + isLoading = false; }); } @@ -154,30 +153,43 @@ class _ContactDetailScreenState extends State { fontWeight: FontWeight.w500), ) : SizedBox(), - SizedBox(height: 5), + SizedBox(height: 4), Flexible( child: isEditNickname ? Row( children: [ Flexible( child: TextField( - // onTapOutside: editNickname, + maxLines: 1, decoration: InputDecoration( + contentPadding: EdgeInsets.only( + left: 16, + ), hintText: 'Enter Nickname', hintStyle: TextStyle( - fontSize: 15.toFont, + fontSize: 14.toFont, fontWeight: FontWeight.w500, color: ColorConstants.textBlack, ), - border: InputBorder.none, - labelStyle: - TextStyle(fontSize: 15.toFont), + border: OutlineInputBorder( + borderRadius: + BorderRadius.circular(5), + borderSide: BorderSide.none, + ), + labelStyle: TextStyle( + fontSize: 14.toFont, + ), fillColor: Colors.white, filled: true, - suffixIcon: Icon( - Icons.clear, - color: Colors.black, - size: 16, + suffixIcon: InkWell( + onTap: () { + nicknameController.clear(); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 16, + ), ), ), controller: nicknameController, @@ -195,15 +207,31 @@ class _ContactDetailScreenState extends State { overflow: TextOverflow.ellipsis, ), ), - const SizedBox(height: 5), + const SizedBox(height: 8), Flexible( - child: Text( - widget.contact.atSign ?? '', - style: const TextStyle( - fontSize: 14, - fontWeight: FontWeight.w400, - ), - ), + child: isEditNickname + ? _buildButtonIcon( + height: 36, + backgroundColor: Colors.black, + borderRadius: 5, + title: 'Save', + titleStyle: TextStyle( + color: Colors.white, + fontSize: 12.toFont, + fontWeight: FontWeight.bold, + ), + useLoadingIndicator: true, + onTap: () async { + await editNickname(); + }, + ) + : Text( + widget.contact.atSign ?? '', + style: const TextStyle( + fontSize: 14, + fontWeight: FontWeight.w400, + ), + ), ), ], ), @@ -254,7 +282,7 @@ class _ContactDetailScreenState extends State { title: "Transfer File", titleStyle: TextStyle( color: Colors.white, - fontSize: 14, + fontSize: 14.toFont, fontWeight: FontWeight.bold, ), margin: EdgeInsets.symmetric(horizontal: 44), @@ -343,42 +371,52 @@ class _ContactDetailScreenState extends State { Widget _buildButtonIcon({ String title = '', TextStyle? titleStyle, - required String imageUrl, + String? imageUrl, Color backgroundColor = Colors.black, EdgeInsetsGeometry? margin, - Function? onTap, + Function()? onTap, + double height = 51, + double borderRadius = 10, + bool useLoadingIndicator = false, }) { return Container( - height: 51, + height: height, width: double.infinity, decoration: BoxDecoration( color: backgroundColor, - borderRadius: BorderRadius.circular(10), + borderRadius: BorderRadius.circular(borderRadius), ), margin: margin, child: InkWell( - onTap: () { - onTap?.call(); - }, + onTap: onTap, child: Center( - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - title, - style: titleStyle ?? - TextStyle( - fontSize: 20, - fontWeight: FontWeight.w700, - color: Colors.white, + child: useLoadingIndicator && isLoading + ? SizedBox( + width: 20, + height: 20, + child: CircularProgressIndicator( + color: Colors.white, + ), + ) + : Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + title, + style: titleStyle ?? + TextStyle( + fontSize: 20, + fontWeight: FontWeight.w700, + color: Colors.white, + ), ), - ), - const SizedBox(width: 14), - SvgPicture.asset( - imageUrl, - ), - ], - ), + if (imageUrl != null) const SizedBox(width: 14), + if (imageUrl != null) + SvgPicture.asset( + imageUrl, + ), + ], + ), ), ), ); diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index ec7db942..211ce9cb 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -12,6 +12,7 @@ import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/common_utility_functions.dart'; import 'package:atsign_atmosphere_pro/utils/app_utils.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; @@ -83,7 +84,9 @@ class _FilesDetailScreenState extends State { InkWell( onTap: () { setState(() { - isGridType = !isGridType; + if (!isGridType) { + isGridType = !isGridType; + } }); }, child: Container( @@ -104,7 +107,9 @@ class _FilesDetailScreenState extends State { InkWell( onTap: () { setState(() { - isGridType = !isGridType; + if (isGridType) { + isGridType = !isGridType; + } }); }, child: Container( @@ -216,13 +221,15 @@ class _FilesDetailScreenState extends State { files[index].fileName!, files[index], () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); - - files.removeAt(index); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); if (mounted) { Navigator.pop(context); } @@ -330,13 +337,15 @@ class _FilesDetailScreenState extends State { padding: const EdgeInsets.only(left: 6.0), child: GestureDetector( onTap: () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); - - files.removeAt(index); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); setState(() {}); }, child: SvgPicture.asset( @@ -367,13 +376,16 @@ class _FilesDetailScreenState extends State { Platform.pathSeparator + files[index].fileName!, files[index], () async { - await deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId); + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); - files.removeAt(index); if (mounted) { Navigator.pop(context); } diff --git a/lib/screens/my_files/my_files_screen.dart b/lib/screens/my_files/my_files_screen.dart index 29004613..5076fe3c 100644 --- a/lib/screens/my_files/my_files_screen.dart +++ b/lib/screens/my_files/my_files_screen.dart @@ -63,8 +63,8 @@ class _MyFilesScreenState extends State { padding: EdgeInsets.only(left: 34, bottom: 32), child: ProviderHandler( load: (provider) async { - await provider.getMyFilesRecords(); await provider.getAllFiles(); + await provider.getMyFilesRecords(); }, functionName: 'all_files', showError: false, diff --git a/lib/screens/my_files/widgets/recents.dart b/lib/screens/my_files/widgets/recents.dart index 869ea595..d502cad8 100644 --- a/lib/screens/my_files/widgets/recents.dart +++ b/lib/screens/my_files/widgets/recents.dart @@ -8,6 +8,7 @@ import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; @@ -59,32 +60,10 @@ class _RecentsState extends State { } } -deleteFile(String filePath, {String? fileTransferId}) async { - await showModalBottomSheet( - context: NavService.navKey.currentContext!, - backgroundColor: Colors.white, - builder: (context) => EditBottomSheet( - onConfirmation: () async { - var file = File(filePath); - if (await file.exists()) { - file.deleteSync(); - } - if (fileTransferId != null) { - await Provider.of(NavService.navKey.currentContext!, - listen: false) - .removeParticularFile( - fileTransferId, filePath.split(Platform.pathSeparator).last); - } - }, - deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, - ), - ); -} - Widget fileCard(String? title, String? filePath, {String? fileTransferId}) { return InkWell( onLongPress: () { - deleteFile(filePath!, fileTransferId: fileTransferId); + FileUtils.deleteFile(filePath!, fileTransferId: fileTransferId); }, child: Column( children: [ diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart new file mode 100644 index 00000000..ddc2a02a --- /dev/null +++ b/lib/utils/file_utils.dart @@ -0,0 +1,44 @@ +import 'dart:io'; + +import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; + +class FileUtils { + static Future deleteFile( + String filePath, { + String? fileTransferId, + Function()? onComplete, + }) async { + await showModalBottomSheet( + context: NavService.navKey.currentContext!, + backgroundColor: Colors.white, + builder: (context) => EditBottomSheet( + onConfirmation: () async { + var file = File(filePath); + if (await file.exists()) { + file.deleteSync(); + } + if (fileTransferId != null) { + await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .removeParticularFile(fileTransferId, + filePath.split(Platform.pathSeparator).last); + + await Provider.of( + NavService.navKey.currentContext!, + listen: false) + .getAllFiles(); + + onComplete; + } + }, + deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, + ), + ); + } +} From e0c98b15b42d7b4d99a5a62fb6bdf7db1e6628e1 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 16 May 2023 06:43:57 +0700 Subject: [PATCH 82/94] feat: update sort History --- assets/svg/ic_filter_opened.svg | 4 + lib/data_models/enums/file_category_type.dart | 20 + .../history/transfer_history_screen.dart | 23 +- .../widgets/filter_history_widget.dart | 345 ++++++++++-------- .../history/widgets/filter_option_item.dart | 57 ++- lib/utils/colors.dart | 1 + lib/utils/file_types.dart | 1 + lib/utils/vectors.dart | 1 + lib/view_models/history_provider.dart | 133 +++++-- lib/view_models/my_files_provider.dart | 11 +- 10 files changed, 401 insertions(+), 195 deletions(-) create mode 100644 assets/svg/ic_filter_opened.svg diff --git a/assets/svg/ic_filter_opened.svg b/assets/svg/ic_filter_opened.svg new file mode 100644 index 00000000..a7fcd3da --- /dev/null +++ b/assets/svg/ic_filter_opened.svg @@ -0,0 +1,4 @@ + + + + diff --git a/lib/data_models/enums/file_category_type.dart b/lib/data_models/enums/file_category_type.dart index e7912142..9f9a66b7 100644 --- a/lib/data_models/enums/file_category_type.dart +++ b/lib/data_models/enums/file_category_type.dart @@ -1,3 +1,4 @@ +import 'package:atsign_atmosphere_pro/utils/file_types.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; @@ -55,6 +56,25 @@ extension GenderTypeExtension on FileType { } } + List get suffixName { + switch (this) { + case FileType.photo: + return FileTypes.IMAGE_TYPES; + case FileType.file: + return FileTypes.PDF_TYPES + + FileTypes.WORD_TYPES + + FileTypes.EXEL_TYPES; + case FileType.audio: + return FileTypes.AUDIO_TYPES; + case FileType.video: + return FileTypes.VIDEO_TYPES; + case FileType.zips: + return FileTypes.ZIP_TYPES; + default: + return []; + } + } + List get backgroundColor { switch (this) { case FileType.photo: diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index efa73108..d0508716 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -33,7 +33,7 @@ class TransferHistoryScreen extends StatefulWidget { } class _TransferHistoryScreenState extends State { - bool isLoading = false; + bool isFilterOpened = false; late HistoryProvider historyProvider; late TextEditingController searchController; GlobalKey filterKey = GlobalKey(); @@ -100,9 +100,14 @@ class _TransferHistoryScreenState extends State { InkWell( onTap: () { _onTapFilterIcon(); + setState(() { + isFilterOpened = true; + }); }, child: SvgPicture.asset( - AppVectors.icFilter, + isFilterOpened + ? AppVectors.icFilterOpened + : AppVectors.icFilter, key: filterKey, ), ), @@ -253,8 +258,14 @@ class _TransferHistoryScreenState extends State { position: position, typeSelected: provider.typeSelected, isDesc: provider.isDesc, - onSelected: (value) { + onSelectedFilter: (value) { provider.changeFilterType(value); + print(value); + setState(() {}); + }, + onSelectedOptionalFilter: (value) { + print(value); + setState(() {}); }, setOrder: (value) { provider.changeDesc(value); @@ -264,7 +275,11 @@ class _TransferHistoryScreenState extends State { }, ); }, - ); + ).whenComplete(() { + setState(() { + isFilterOpened = false; + }); + }); } void reUploadFileConfirmation(FileEntity fileEntity) async { diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart index 9df986ba..b672036b 100644 --- a/lib/screens/history/widgets/filter_history_widget.dart +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -1,14 +1,14 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/filter_option_item.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; -import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_svg/flutter_svg.dart'; -class FilterHistoryWidget extends StatelessWidget { +class FilterHistoryWidget extends StatefulWidget { final Offset? position; - final Function(HistoryType type)? onSelected; + final Function(HistoryType historyType)? onSelectedFilter; + final Function(FileType fileType)? onSelectedOptionalFilter; final Function(bool)? setOrder; final bool isDesc; final HistoryType? typeSelected; @@ -16,195 +16,238 @@ class FilterHistoryWidget extends StatelessWidget { FilterHistoryWidget({ Key? key, this.position, - this.onSelected, + this.onSelectedFilter, this.setOrder, this.isDesc = true, this.typeSelected, + this.onSelectedOptionalFilter, }) : super(key: key); + @override + State createState() => _FilterHistoryWidgetState(); +} + +class _FilterHistoryWidgetState extends State { + bool isShowOptional = false; final List historyTypes = [ HistoryType.received, HistoryType.send, HistoryType.all, ]; + final List optionalHistoryTypes = [ + FileType.photo, + FileType.file, + FileType.audio, + FileType.video, + FileType.zips, + FileType.other, + ]; + @override Widget build(BuildContext context) { return Scaffold( backgroundColor: Colors.transparent, - body: WillPopScope( - onWillPop: () async { - return true; - }, - child: Stack( - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Container( - color: Colors.transparent, - height: double.infinity, - width: double.infinity, - ), + body: Stack( + children: [ + InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + color: Colors.transparent, + height: double.infinity, + width: double.infinity, ), - Positioned( - right: 15, - top: position?.dy, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Container( - width: MediaQuery.of(context).size.width - 30.toWidth, - height: 40, - padding: EdgeInsets.symmetric(vertical: 8, horizontal: 16), - decoration: BoxDecoration( - borderRadius: BorderRadius.vertical( - top: Radius.circular(12), - ), - color: Colors.black, - ), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Row( - mainAxisSize: MainAxisSize.min, - children: [ - SvgPicture.asset( - isDesc - ? AppVectors.icArrowDesc - : AppVectors.icArrowAsc, - width: 8, - height: 12, - fit: BoxFit.cover, - ), - SizedBox(width: 20), - Text( - 'Date', - style: TextStyle( - fontSize: 13, - color: Colors.white, - fontWeight: FontWeight.w500, - ), - ) - ], - ), - Switch( - trackColor: MaterialStateColor.resolveWith((states) { - if (states.contains(MaterialState.selected)) { - return Colors.white; - } - return ColorConstants.disableBackgroundColor; - }), - thumbColor: MaterialStateColor.resolveWith((states) { - if (states.contains(MaterialState.selected)) { - return ColorConstants.orange; - } - return Colors.white; - }), - value: isDesc, - onChanged: (value) { - print(value); - setOrder?.call(value); + ), + Positioned( + right: 15, + top: widget.position?.dy, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + SizedBox( + width: MediaQuery.of(context).size.width - 30.toWidth, + child: ListView.separated( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: historyTypes.length, + separatorBuilder: (context, index) { + return Divider( + color: ColorConstants.disableColor, + height: 0, + thickness: 1, + // thickness: 0.65, + ); + }, + itemBuilder: (context, index) { + if (index == 0 || index == historyTypes.length - 1) { + return FilterOptionItem( + icon: historyTypes[index].icon, + title: historyTypes[index].text, + isCheck: historyTypes[index] == widget.typeSelected, + isAllOption: historyTypes[index] == HistoryType.all, + allOptionOnTap: () { + setState(() { + isShowOptional = !isShowOptional; + }); }, - ) - ], - ), + borderRadius: index == 0 + ? BorderRadius.vertical( + top: Radius.circular(13), + ) + : isShowOptional || + widget.typeSelected == HistoryType.all + ? null + : BorderRadius.vertical( + bottom: Radius.circular(13), + ), + onTap: () { + widget.onSelectedFilter?.call( + historyTypes[index], + ); + }, + ); + } + return FilterOptionItem( + icon: historyTypes[index].icon, + title: historyTypes[index].text, + isCheck: historyTypes[index] == widget.typeSelected, + onTap: () { + widget.onSelectedFilter?.call( + historyTypes[index], + ); + }, + ); + }, ), + ), + if (isShowOptional || widget.typeSelected == HistoryType.all) + Divider( + color: ColorConstants.disableColor, + height: 0, + thickness: 1, + // thickness: 0.65, + ), + if (isShowOptional || widget.typeSelected == HistoryType.all) SizedBox( width: MediaQuery.of(context).size.width - 30.toWidth, child: ListView.separated( shrinkWrap: true, physics: NeverScrollableScrollPhysics(), padding: EdgeInsets.zero, - itemCount: historyTypes.length, + itemCount: optionalHistoryTypes.length, separatorBuilder: (context, index) { return Divider( - color: ColorConstants.disableColor, - height: 1, + color: widget.typeSelected == HistoryType.all + ? ColorConstants.orange + : ColorConstants.disableColor, + height: 0, + thickness: 1, // thickness: 0.65, ); }, itemBuilder: (context, index) { + if (index == optionalHistoryTypes.length - 1) { + return FilterOptionItem( + icon: optionalHistoryTypes[index].icon, + title: optionalHistoryTypes[index].text, + isDisable: true, + isCheck: false, + borderRadius: index == 0 + ? BorderRadius.vertical( + top: Radius.circular(13), + ) + : BorderRadius.vertical( + bottom: Radius.circular(13), + ), + onTap: () { + widget.onSelectedOptionalFilter?.call( + optionalHistoryTypes[index], + ); + }, + ); + } return FilterOptionItem( - icon: historyTypes[index].icon, - title: historyTypes[index].text, - isCheck: historyTypes[index] == typeSelected, + icon: optionalHistoryTypes[index].icon, + title: optionalHistoryTypes[index].text, + isDisable: true, + isCheck: false, onTap: () { - onSelected?.call( - historyTypes[index], + widget.onSelectedOptionalFilter?.call( + optionalHistoryTypes[index], ); }, ); }, ), ), - /*SizedBox( - width: MediaQuery.of(context).size.width - 30.toWidth, - child: ListView.builder( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.zero, - itemCount: FileType.values.length, - itemBuilder: (context, index) { - return FilterOptionItem( - icon: FileType.values[index].icon, - title: FileType.values[index].text, - onTap: (){ + /*SizedBox( + width: MediaQuery.of(context).size.width - 30.toWidth, + child: ListView.builder( + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + padding: EdgeInsets.zero, + itemCount: FileType.values.length, + itemBuilder: (context, index) { + return FilterOptionItem( + icon: FileType.values[index].icon, + title: FileType.values[index].text, + onTap: (){ - }, - ); - }, - ), - ),*/ - /*Container( - width: MediaQuery.of(context).size.width - 30.toWidth, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical( - bottom: Radius.circular(12), - ), + }, + ); + }, + ), + ),*/ + /*Container( + width: MediaQuery.of(context).size.width - 30.toWidth, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(12), ), - child: ListView.separated( - shrinkWrap: true, - padding: EdgeInsets.zero, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - if (index > 2) { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: true, - isDisable: true, - index: index, - ); - } else { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: false, - index: index, - ); - } - }, - separatorBuilder: (context, index) { - return Divider( - color: (index > 2 && true) - ? ColorConstants.disableColor - : ColorConstants.lightSliver, - height: 0, - indent: 0, - thickness: 0.65, + ), + child: ListView.separated( + shrinkWrap: true, + padding: EdgeInsets.zero, + physics: NeverScrollableScrollPhysics(), + itemBuilder: (context, index) { + if (index > 2) { + return _buildFilterOptionItem( + icon: filterOptionsList.keys.elementAt(index), + title: filterOptionsList.values.elementAt(index), + isCheck: true, + isDisable: true, + index: index, ); - }, - itemCount: filterOptionsList.length, - ), - ),*/ - ], - ), + } else { + return _buildFilterOptionItem( + icon: filterOptionsList.keys.elementAt(index), + title: filterOptionsList.values.elementAt(index), + isCheck: false, + index: index, + ); + } + }, + separatorBuilder: (context, index) { + return Divider( + color: (index > 2 && true) + ? ColorConstants.disableColor + : ColorConstants.lightSliver, + height: 0, + indent: 0, + thickness: 0.65, + ); + }, + itemCount: filterOptionsList.length, + ), + ),*/ + ], ), - ], - ), + ), + ], ), ); } diff --git a/lib/screens/history/widgets/filter_option_item.dart b/lib/screens/history/widgets/filter_option_item.dart index 5a838e6f..24294a73 100644 --- a/lib/screens/history/widgets/filter_option_item.dart +++ b/lib/screens/history/widgets/filter_option_item.dart @@ -9,6 +9,8 @@ class FilterOptionItem extends StatelessWidget { final bool isDisable, isCheck; final BorderRadiusGeometry? borderRadius; final Function()? onTap; + final Function()? allOptionOnTap; + final bool isAllOption; const FilterOptionItem({ Key? key, @@ -18,24 +20,37 @@ class FilterOptionItem extends StatelessWidget { this.title, this.isCheck = false, this.onTap, + this.isAllOption = false, + this.allOptionOnTap, }) : super(key: key); @override Widget build(BuildContext context) { - Color color = isDisable ? ColorConstants.disableColor : Colors.black; + Color color = isCheck + ? isDisable + ? Colors.black + : Colors.white + : isDisable + ? ColorConstants.lightSliver + : Colors.black; + Color backgroundColor = isDisable ? ColorConstants.disableBackgroundColor : Colors.white; + Color checkedBackgroundColor = isDisable + ? ColorConstants.optionalFilterBackgroundColor + : ColorConstants.orange; + return InkWell( onTap: () { - onTap?.call(); + isAllOption ? allOptionOnTap?.call() : onTap?.call(); }, child: Container( height: 36, padding: EdgeInsets.symmetric(horizontal: 20), decoration: BoxDecoration( - color: backgroundColor, - borderRadius: BorderRadius.zero, + color: isCheck ? checkedBackgroundColor : backgroundColor, + borderRadius: borderRadius ?? BorderRadius.zero, ), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -63,12 +78,34 @@ class FilterOptionItem extends StatelessWidget { ), ], ), - SvgPicture.asset( - isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, - width: 16, - height: 16, - color: color, - fit: BoxFit.cover, + Row( + mainAxisSize: MainAxisSize.min, + children: [ + if (isAllOption) + SvgPicture.asset( + //TODO: Use another boolean variable to check isAllType or not + isCheck + ? AppVectors.icArrowUpOutline + : AppVectors.icArrowDownOutline, + width: 20, + height: 20, + color: color, + fit: BoxFit.cover, + ), + if (isAllOption) SizedBox(width: 16), + InkWell( + onTap: () { + isAllOption ? onTap?.call() : null; + }, + child: SvgPicture.asset( + isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, + width: 16, + height: 16, + color: color, + fit: BoxFit.cover, + ), + ), + ], ), ], ), diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 9a8fce20..2d89eaec 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -49,6 +49,7 @@ class ColorConstants { static const Color orange = Color(0xFFF07C50); static const Color portlandOrange = Color(0xFFFB6232); static const Color unbleachedSilk = Color(0xFFFFDACC); + static const Color optionalFilterBackgroundColor = Color(0xFFFFE9E1); static const Color lightGrey = Color(0xFFF1F1F1); static const Color boxGrey = Color(0xFFEFEFEF); static const Color darkGray = Color(0xFFC0C0C0); diff --git a/lib/utils/file_types.dart b/lib/utils/file_types.dart index 01818a18..6d65947e 100644 --- a/lib/utils/file_types.dart +++ b/lib/utils/file_types.dart @@ -25,4 +25,5 @@ class FileTypes { static List WORD_TYPES = ['doc', 'docx', 'DOC', 'DOCX']; static List EXEL_TYPES = ['xls', 'xlsx', 'XLS', 'XLSX']; static List TEXT_TYPES = ['txt', 'TXT']; + static List ZIP_TYPES = ['zip', 'zipx', '7z', 'rar', 'tar.gz', 'z', 'jar']; } diff --git a/lib/utils/vectors.dart b/lib/utils/vectors.dart index f2d011b2..72b28a5d 100644 --- a/lib/utils/vectors.dart +++ b/lib/utils/vectors.dart @@ -39,6 +39,7 @@ class AppVectors { static String icSettingContactUs = '$_basePath/ic_setting_contact_us.svg'; static String icSettingPrivacy = '$_basePath/ic_setting_privacy.svg'; static String icFilter = '$_basePath/ic_filter.svg'; + static String icFilterOpened = '$_basePath/ic_filter_opened.svg'; static String icBannerOverlay = '$_basePath/ic_banner_overlay.svg'; static String icCategoryVolume = '$_basePath/ic_category_volume.svg'; diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 0a92f78e..6fef4b46 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -2,6 +2,7 @@ import 'dart:convert'; import 'dart:io'; import 'package:at_client_mobile/at_client_mobile.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/enums/file_category_type.dart'; import 'package:atsign_atmosphere_pro/data_models/file_entity.dart'; import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; @@ -198,7 +199,10 @@ class HistoryProvider extends BaseModel { // with new approach we are saving data in individual keys // 2 -- every sent file data is stored individually in `file_transfer_[ID]` key. /// [getSentHistory] will get data from both keys and store them into [sentHistory] variable. - getSentHistory({bool setLoading = true}) async { + getSentHistory({ + bool setLoading = true, + List? listFileTypeSelect, + }) async { if (setLoading) { setStatus(SENT_HISTORY, Status.Loading); } @@ -251,15 +255,49 @@ class HistoryProvider extends BaseModel { Map historyFile = json.decode((keyValue.value) as String) as Map; sendFileHistory['history'] = historyFile['history']; - historyFile['history'].forEach((value) { - FileHistory filesModel = FileHistory.fromJson(value); - // checking for download acknowledged - filesModel.sharedWith = checkIfileDownloaded( - filesModel.sharedWith, - filesModel.fileTransferObject!.transferId, - ); - tempSentHistory.add(filesModel); - }); + historyFile['history'].forEach( + (value) { + FileHistory filesModel = FileHistory.fromJson(value); + // checking for download acknowledged + filesModel.sharedWith = checkIfileDownloaded( + filesModel.sharedWith, + filesModel.fileTransferObject!.transferId, + ); + + if ((listFileTypeSelect ?? []).isNotEmpty) { + List files = []; + + if ((filesModel.fileDetails?.files ?? []).isNotEmpty) { + Future.forEach( + filesModel.fileDetails!.files!, + (dynamic file) async { + String? fileExtension = file.name.split('.').last; + for (int i = 0; i < listFileTypeSelect!.length; i++) { + if (listFileTypeSelect[i] == FileType.other) { + files.add(file); + break; + } + + if (listFileTypeSelect[i] + .suffixName + .contains(fileExtension)) { + files.add(file); + break; + } + } + }, + ); + } + + if (files.isNotEmpty) { + filesModel.fileDetails?.files = files; + tempSentHistory.add(filesModel); + } + } else { + tempSentHistory.add(filesModel); + } + }, + ); } catch (e) { print('error in file model conversion in getSentHistory: $e'); } @@ -668,7 +706,9 @@ class HistoryProvider extends BaseModel { } } - Future getAllFileTransferData() async { + Future getAllFileTransferData({ + List? listFileTypeSelect, + }) async { setStatus(GET_ALL_FILE_DATA, Status.Loading); List tempReceivedHistoryLogs = []; List tempReceivedFiles = []; @@ -716,19 +756,57 @@ class HistoryProvider extends BaseModel { convertFiletransferObjectToFileTransfer(fileTransferObject); filesModel.sender = atKey.sharedBy!; - if (filesModel.key != null) { - tempReceivedHistoryLogs.insert(0, filesModel); - } + if ((listFileTypeSelect ?? []).isNotEmpty) { + List files = []; + + if ((filesModel.files ?? []).isNotEmpty) { + await Future.forEach( + filesModel.files!, + (dynamic file) async { + String? fileExtension = file.name.split('.').last; + for (int i = 0; i < listFileTypeSelect!.length; i++) { + if (listFileTypeSelect[i] == FileType.other) { + files.add(file); + break; + } + + if (listFileTypeSelect[i] + .suffixName + .contains(fileExtension)) { + files.add(file); + break; + } + } + }, + ); + } - final file = FileHistory( - filesModel, - [], - HistoryType.received, - fileTransferObject, - ); + if (files.isNotEmpty) { + filesModel.files = files; + tempReceivedHistoryLogs.insert(0, filesModel); + final file = FileHistory( + filesModel, + [], + HistoryType.received, + fileTransferObject, + ); + tempReceivedFiles.insert(0, file); + } + } else { + if (filesModel.key != null) { + tempReceivedHistoryLogs.insert(0, filesModel); + } + + final file = FileHistory( + filesModel, + [], + HistoryType.received, + fileTransferObject, + ); - if (filesModel.key != null) { - tempReceivedFiles.insert(0, file); + if (filesModel.key != null) { + tempReceivedFiles.insert(0, file); + } } } catch (e) { print('error in getAllFileTransferData file model conversion: $e'); @@ -798,6 +876,8 @@ class HistoryProvider extends BaseModel { } } + void filterByFileType(FileType fileType) {} + getrecentHistoryFiles() async { // finding last 15 received files data for recent tab setStatus(RECENT_HISTORY, Status.Loading); @@ -1330,10 +1410,11 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = - await AtClientManager.getInstance().atClient.get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = await AtClientManager.getInstance() + .atClient + .get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); diff --git a/lib/view_models/my_files_provider.dart b/lib/view_models/my_files_provider.dart index eb4b9d62..178c8ac7 100644 --- a/lib/view_models/my_files_provider.dart +++ b/lib/view_models/my_files_provider.dart @@ -32,6 +32,7 @@ class MyFilesProvider extends BaseModel { receivedVideos = [], receivedAudio = [], receivedApk = [], + receivedZip = [], receivedDocument = [], recentFile = [], allFiles = [], @@ -63,6 +64,7 @@ class MyFilesProvider extends BaseModel { receivedVideos = []; receivedAudio = []; receivedApk = []; + receivedZip = []; receivedDocument = []; recentFile = []; receivedUnknown = []; @@ -84,7 +86,7 @@ class MyFilesProvider extends BaseModel { case FileType.audio: return receivedAudio; case FileType.zips: - return receivedApk; + return receivedZip; case FileType.file: return receivedDocument; case FileType.other: @@ -133,6 +135,7 @@ class MyFilesProvider extends BaseModel { setStatus(SORT_FILES, Status.Loading); receivedAudio = []; receivedApk = []; + receivedZip = []; receivedDocument = []; receivedPhotos = []; receivedVideos = []; @@ -205,11 +208,11 @@ class MyFilesProvider extends BaseModel { if (index == -1) { receivedDocument.add(fileDetail); } - } else if (FileTypes.APK_TYPES.contains(fileExtension)) { - int index = receivedApk.indexWhere( + } else if (FileTypes.ZIP_TYPES.contains(fileExtension)) { + int index = receivedZip.indexWhere( (element) => element.fileName == fileDetail.fileName); if (index == -1) { - receivedApk.add(fileDetail); + receivedZip.add(fileDetail); } } else { int index = receivedUnknown.indexWhere( From 0aa602f0af1e7bf7519a724377eb916bf596b978 Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 16 May 2023 21:30:56 +0700 Subject: [PATCH 83/94] feat: added unblock dialog and preview for files --- .../blocked_contact_screen.dart | 38 +- .../widget/contact_attachment_card.dart | 507 ++++++++++++++---- .../history/transfer_history_screen.dart | 14 +- .../widgets/filter_history_widget.dart | 125 ++--- .../history/widgets/filter_option_item.dart | 18 +- .../history/widgets/history_card_widget.dart | 4 +- lib/services/common_utility_functions.dart | 19 +- lib/utils/file_utils.dart | 3 +- lib/view_models/history_provider.dart | 46 +- 9 files changed, 527 insertions(+), 247 deletions(-) diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index a790d2b3..cc2e2e2f 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -1,11 +1,17 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/models/contact_base_model.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:at_contacts_flutter/utils/text_strings.dart'; +import 'package:at_contacts_flutter/utils/text_styles.dart'; +import 'package:at_contacts_group_flutter/widgets/confirmation_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_card_widget.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; class BlockedContactScreen extends StatefulWidget { const BlockedContactScreen({Key? key}) : super(key: key); @@ -17,6 +23,7 @@ class BlockedContactScreen extends StatefulWidget { class _BlockedContactScreenState extends State { late ContactService _contactService; late TextEditingController searchController; + bool isUnblocking = false; @override void initState() { @@ -185,9 +192,8 @@ class _BlockedContactScreenState extends State { contact: contact!, onTap: () async { print("unblock"); - await _contactService.blockUnblockContact( - contact: contactsForAlphabet[index].contact!, - blockAction: false, + await unblockAtsign( + contact, ); }, suffixIcon: Padding( @@ -258,4 +264,30 @@ class _BlockedContactScreenState extends State { return contactsForAlphabet; } + + Future unblockAtsign(AtContact atsign) async { + await showDialog( + context: context, + builder: (context) { + Uint8List? image; + if (atsign.tags != null && atsign.tags?['image'] != null) { + List intList = atsign.tags?['image'].cast(); + image = Uint8List.fromList(intList); + } + return ConfirmationDialog( + title: atsign.atSign!, + heading: 'Do you want to unblock this atSign?', + atsign: atsign.atSign, + image: image, + onYesPressed: () async { + await _contactService + .blockUnblockContact(contact: atsign, blockAction: false) + .then( + (value) => Navigator.pop(context), + ); + }, + ); + }, + ); + } } diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index e7c87e0b..fbf7a4e0 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -1,5 +1,7 @@ +import 'dart:convert'; import 'dart:io'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; @@ -8,6 +10,7 @@ import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -15,8 +18,11 @@ import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; +import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; import '../../my_files/widgets/downloads_folders.dart'; @@ -26,6 +32,7 @@ class ContactAttachmentCard extends StatefulWidget { final FileData singleFile; final bool isShowDate; final EdgeInsetsGeometry? margin; + final Function()? onDownloaded; const ContactAttachmentCard({ Key? key, @@ -33,6 +40,7 @@ class ContactAttachmentCard extends StatefulWidget { required this.singleFile, this.isShowDate = true, this.margin, + this.onDownloaded, }) : super(key: key); @override @@ -41,6 +49,8 @@ class ContactAttachmentCard extends StatefulWidget { class _ContactAttachmentCardState extends State { bool isDownloaded = false; + bool isDownloading = false; + String? filePath; @override void initState() { @@ -67,130 +77,153 @@ class _ContactAttachmentCardState extends State { @override Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - margin: widget.margin ?? - EdgeInsets.symmetric( - horizontal: 25, - vertical: 5, - ), - padding: EdgeInsets.all(15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - decoration: BoxDecoration( - color: ColorConstants.MILD_GREY, - borderRadius: BorderRadius.circular(5), + return InkWell( + onTap: isDownloading + ? null + : () async { + bool isExist = await isFilePresent(widget.singleFile.name ?? ''); + if (!isExist) { + await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name, + isPreview: true, + ); + } + // String filePath = + // await BackendService.getInstance().downloadDirectory!.path + + // Platform.pathSeparator + + // (widget.singleFile.name ?? ''); + await openPreview().whenComplete( + () => setState(() { + isDownloading = false; + }), + ); + }, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + margin: widget.margin ?? + EdgeInsets.symmetric( + horizontal: 25, + vertical: 5, ), - child: Center( - child: thumbnail( - widget.singleFile.name?.split(".").last, - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - widget.singleFile.name!, + padding: EdgeInsets.all(15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + decoration: BoxDecoration( + color: ColorConstants.MILD_GREY, + borderRadius: BorderRadius.circular(5), + ), + child: Center( + child: thumbnail( + widget.singleFile.name?.split(".").last, + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + widget.singleFile.name!, + ), ), ), - ), - SizedBox(width: 15), - Expanded( - child: Column( - children: [ - Row( - children: [ - Expanded( - child: Text( - widget.singleFile.name ?? "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 10, + SizedBox(width: 15), + Expanded( + child: Column( + children: [ + Row( + children: [ + Expanded( + child: Text( + widget.singleFile.name ?? "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 10, + ), ), ), - ), - Visibility( - visible: widget.isShowDate, - child: Text( - CommonUtilityFunctions() - .formatDateTime(widget.fileTransfer.date!), - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, + Visibility( + visible: widget.isShowDate, + child: Text( + CommonUtilityFunctions() + .formatDateTime(widget.fileTransfer.date!), + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), ), ), - ), - ], - ), - SizedBox(height: 10), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Consumer( - builder: (_c, provider, _) { - var fileTransferProgress = provider - .receivedFileProgress[widget.fileTransfer.key]; + ], + ), + SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Consumer( + builder: (_c, provider, _) { + var fileTransferProgress = provider + .receivedFileProgress[widget.fileTransfer.key]; - return CommonUtilityFunctions() - .checkForDownloadAvailability( - widget.fileTransfer, - ) - ? fileTransferProgress != null - ? Image.asset( - ImageConstants.icCloudDownloading, - ) - : isDownloaded - ? SvgPicture.asset( - AppVectors.icCloudDownloaded, - ) - : InkWell( - onTap: () async { - await downloadFiles( - widget.fileTransfer, - fileName: widget.singleFile.name, - ); - }, - child: SvgPicture.asset( - AppVectors.icDownloadFile, - ), - ) - : SizedBox(); - }, - ), - const SizedBox( - width: 10, - ), - GestureDetector( - onTap: () async { - await openFilePath(BackendService.getInstance() - .downloadDirectory! - .path + - Platform.pathSeparator + - widget.singleFile.name!); - }, - child: SvgPicture.asset( - AppVectors.icSendFile, + return CommonUtilityFunctions() + .checkForDownloadAvailability( + widget.fileTransfer, + ) + ? fileTransferProgress != null + ? Image.asset( + ImageConstants.icCloudDownloading, + ) + : isDownloaded + ? SvgPicture.asset( + AppVectors.icCloudDownloaded, + ) + : InkWell( + onTap: () async { + await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name, + ); + }, + child: SvgPicture.asset( + AppVectors.icDownloadFile, + ), + ) + : SizedBox(); + }, ), - ), - Spacer(), - Text( - double.parse(widget.singleFile.size.toString()) <= 1024 - ? '${widget.singleFile.size} ' + TextStrings().kb - : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + - TextStrings().mb, - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, + const SizedBox( + width: 10, ), - ), - ], - ), - ], + GestureDetector( + onTap: () async { + await openFilePath(BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + widget.singleFile.name!); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + ), + ), + Spacer(), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + ), + ], + ), + ], + ), ), - ), - ], + ], + ), ), ); } @@ -278,7 +311,11 @@ class _ContactAttachmentCardState extends State { Future downloadFiles( FileTransfer? file, { String? fileName, + bool isPreview = false, }) async { + setState(() { + isDownloading = true; + }); var fileTransferProgress = Provider.of( NavService.navKey.currentContext!, listen: false) @@ -327,12 +364,14 @@ class _ContactAttachmentCardState extends State { if (result is bool && result) { if (mounted) { setState(() { + if (!isPreview) isDownloading = false; isDownloaded = true; }); } await Provider.of(NavService.navKey.currentContext!, listen: false) .saveNewDataInMyFiles(file); + print(file.url); SnackbarService().showSnackbar( NavService.navKey.currentContext!, @@ -351,9 +390,251 @@ class _ContactAttachmentCardState extends State { ); if (mounted) { setState(() { + if (!isPreview) isDownloading = false; isDownloaded = false; }); } } } + + Future openPreview() async { + if (FileTypes.IMAGE_TYPES + .contains(widget.singleFile.name?.split(".").last)) { + String nickname = ""; + String filePath = + await BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (widget.singleFile.name ?? ''); + File image = File(filePath); + Uint8List imageBytes = base64Decode(await imageToBase64(filePath)); + final date = (widget.fileTransfer.date ?? DateTime.now()).toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + + for (var contact in GroupService().allContacts) { + if (contact?.contact?.atSign == widget.fileTransfer.sender) { + nickname = contact?.contact?.tags?["nickname"] ?? ""; + break; + } + } + await showDialog( + context: NavService.navKey.currentContext!, + builder: (_) => Material( + type: MaterialType.transparency, + child: Column( + children: [ + SizedBox( + height: 10, + ), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), + ), + ), + ), + SizedBox( + height: 10, + ), + Expanded( + child: Container( + // height: double.infinity, + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + image: DecorationImage( + image: MemoryImage( + imageBytes, + ), + fit: BoxFit.cover, + ), + ), + ), + ), + SizedBox( + height: 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icCloudDownloaded, + height: 50, + width: 50, + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await openFilePath(BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + (widget.singleFile.name ?? '')); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + height: 50, + width: 50, + ), + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await FileUtils.deleteFile( + filePath, + fileTransferId: widget.fileTransfer.key, + ).then((value) => isDownloaded = false); + if (mounted) { + Navigator.pop(context); + } + setState(() {}); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + height: 50, + width: 50, + ), + ), + ), + ], + ), + SizedBox( + height: 40, + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + padding: EdgeInsets.all(20), + margin: EdgeInsets.symmetric(horizontal: 25), + width: double.infinity, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topRight, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ), + SizedBox(height: 12), + Text( + (widget.singleFile.name ?? ''), + style: TextStyle( + fontSize: 16, fontWeight: FontWeight.bold), + ), + SizedBox(height: 5), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + textAlign: TextAlign.left, + ), + SizedBox(height: 10), + nickname.isNotEmpty + ? Text( + nickname, + style: TextStyle( + fontSize: 14, fontWeight: FontWeight.bold), + ) + : SizedBox(), + SizedBox(height: 5), + Text( + widget.fileTransfer.sender ?? '', + style: TextStyle( + fontSize: 12, + ), + ), + SizedBox(height: 10), + // fileDetail.message.isNotNull + // ? + Text( + "Message", + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + // : SizedBox(), + SizedBox(height: 5), + Text( + widget.fileTransfer.notes ?? "", + style: TextStyle( + fontSize: 12, + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } else { + await OpenFile.open(BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (widget.singleFile.name ?? '')); + } + } + + Future imageToBase64(String imagePath) async { + File imageFile = File(imagePath); + List imageBytes = await imageFile.readAsBytes(); + String base64Image = base64Encode(imageBytes); + return base64Image; + } } diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index d0508716..c1da77cb 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -186,6 +186,9 @@ class _TransferHistoryScreenState extends State { itemBuilder: (context, index) { return HistoryCardWidget( fileHistory: filteredFileHistory[index], + onDownloaded: () async { + await provider.getAllFileTransferHistory(); + }, ); // SentFilesListTile( @@ -257,7 +260,6 @@ class _TransferHistoryScreenState extends State { return FilterHistoryWidget( position: position, typeSelected: provider.typeSelected, - isDesc: provider.isDesc, onSelectedFilter: (value) { provider.changeFilterType(value); print(value); @@ -265,12 +267,14 @@ class _TransferHistoryScreenState extends State { }, onSelectedOptionalFilter: (value) { print(value); + provider.filterByFileType(value); setState(() {}); }, - setOrder: (value) { - provider.changeDesc(value); - print(value); - }, + onSelectedAll: ((value) { + provider.filterByAllFileType(value); + setState(() {}); + }), + listFileType: provider.listType, ); }, ); diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart index b672036b..aceab0ed 100644 --- a/lib/screens/history/widgets/filter_history_widget.dart +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -9,18 +9,18 @@ class FilterHistoryWidget extends StatefulWidget { final Offset? position; final Function(HistoryType historyType)? onSelectedFilter; final Function(FileType fileType)? onSelectedOptionalFilter; - final Function(bool)? setOrder; - final bool isDesc; + final Function(List list)? onSelectedAll; final HistoryType? typeSelected; + final List? listFileType; FilterHistoryWidget({ Key? key, this.position, this.onSelectedFilter, - this.setOrder, - this.isDesc = true, this.typeSelected, this.onSelectedOptionalFilter, + this.listFileType, + this.onSelectedAll, }) : super(key: key); @override @@ -82,30 +82,29 @@ class _FilterHistoryWidgetState extends State { ); }, itemBuilder: (context, index) { - if (index == 0 || index == historyTypes.length - 1) { + if (historyTypes[index] == HistoryType.all) { return FilterOptionItem( icon: historyTypes[index].icon, title: historyTypes[index].text, isCheck: historyTypes[index] == widget.typeSelected, - isAllOption: historyTypes[index] == HistoryType.all, + isAllOption: true, + isShowOptional: isShowOptional, allOptionOnTap: () { setState(() { isShowOptional = !isShowOptional; }); }, - borderRadius: index == 0 - ? BorderRadius.vertical( - top: Radius.circular(13), - ) - : isShowOptional || - widget.typeSelected == HistoryType.all - ? null - : BorderRadius.vertical( - bottom: Radius.circular(13), - ), + borderRadius: isShowOptional + ? null + : BorderRadius.vertical( + bottom: Radius.circular(13), + ), onTap: () { - widget.onSelectedFilter?.call( - historyTypes[index], + setState(() { + isShowOptional = !isShowOptional; + }); + widget.onSelectedAll?.call( + optionalHistoryTypes, ); }, ); @@ -114,6 +113,11 @@ class _FilterHistoryWidgetState extends State { icon: historyTypes[index].icon, title: historyTypes[index].text, isCheck: historyTypes[index] == widget.typeSelected, + borderRadius: index == 0 + ? BorderRadius.vertical( + top: Radius.circular(13), + ) + : null, onTap: () { widget.onSelectedFilter?.call( historyTypes[index], @@ -123,14 +127,14 @@ class _FilterHistoryWidgetState extends State { }, ), ), - if (isShowOptional || widget.typeSelected == HistoryType.all) + if (isShowOptional) Divider( color: ColorConstants.disableColor, height: 0, thickness: 1, // thickness: 0.65, ), - if (isShowOptional || widget.typeSelected == HistoryType.all) + if (isShowOptional) SizedBox( width: MediaQuery.of(context).size.width - 30.toWidth, child: ListView.separated( @@ -153,15 +157,12 @@ class _FilterHistoryWidgetState extends State { return FilterOptionItem( icon: optionalHistoryTypes[index].icon, title: optionalHistoryTypes[index].text, - isDisable: true, - isCheck: false, - borderRadius: index == 0 - ? BorderRadius.vertical( - top: Radius.circular(13), - ) - : BorderRadius.vertical( - bottom: Radius.circular(13), - ), + isOptional: true, + isCheck: (widget.listFileType ?? []) + .contains(optionalHistoryTypes[index]), + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(13), + ), onTap: () { widget.onSelectedOptionalFilter?.call( optionalHistoryTypes[index], @@ -172,8 +173,9 @@ class _FilterHistoryWidgetState extends State { return FilterOptionItem( icon: optionalHistoryTypes[index].icon, title: optionalHistoryTypes[index].text, - isDisable: true, - isCheck: false, + isOptional: true, + isCheck: (widget.listFileType ?? []) + .contains(optionalHistoryTypes[index]), onTap: () { widget.onSelectedOptionalFilter?.call( optionalHistoryTypes[index], @@ -183,67 +185,6 @@ class _FilterHistoryWidgetState extends State { }, ), ), - /*SizedBox( - width: MediaQuery.of(context).size.width - 30.toWidth, - child: ListView.builder( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.zero, - itemCount: FileType.values.length, - itemBuilder: (context, index) { - return FilterOptionItem( - icon: FileType.values[index].icon, - title: FileType.values[index].text, - onTap: (){ - - }, - ); - }, - ), - ),*/ - /*Container( - width: MediaQuery.of(context).size.width - 30.toWidth, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical( - bottom: Radius.circular(12), - ), - ), - child: ListView.separated( - shrinkWrap: true, - padding: EdgeInsets.zero, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - if (index > 2) { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: true, - isDisable: true, - index: index, - ); - } else { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: false, - index: index, - ); - } - }, - separatorBuilder: (context, index) { - return Divider( - color: (index > 2 && true) - ? ColorConstants.disableColor - : ColorConstants.lightSliver, - height: 0, - indent: 0, - thickness: 0.65, - ); - }, - itemCount: filterOptionsList.length, - ), - ),*/ ], ), ), diff --git a/lib/screens/history/widgets/filter_option_item.dart b/lib/screens/history/widgets/filter_option_item.dart index 24294a73..169618cf 100644 --- a/lib/screens/history/widgets/filter_option_item.dart +++ b/lib/screens/history/widgets/filter_option_item.dart @@ -6,38 +6,39 @@ import 'package:flutter_svg/flutter_svg.dart'; class FilterOptionItem extends StatelessWidget { final String? icon; final String? title; - final bool isDisable, isCheck; + final bool isOptional, isCheck; final BorderRadiusGeometry? borderRadius; final Function()? onTap; final Function()? allOptionOnTap; final bool isAllOption; + final bool? isShowOptional; const FilterOptionItem({ Key? key, this.icon, - this.isDisable = false, + this.isOptional = false, this.borderRadius, this.title, this.isCheck = false, this.onTap, this.isAllOption = false, - this.allOptionOnTap, + this.allOptionOnTap, this.isShowOptional, }) : super(key: key); @override Widget build(BuildContext context) { Color color = isCheck - ? isDisable + ? isOptional ? Colors.black : Colors.white - : isDisable + : isOptional ? ColorConstants.lightSliver : Colors.black; Color backgroundColor = - isDisable ? ColorConstants.disableBackgroundColor : Colors.white; + isOptional ? ColorConstants.disableBackgroundColor : Colors.white; - Color checkedBackgroundColor = isDisable + Color checkedBackgroundColor = isOptional ? ColorConstants.optionalFilterBackgroundColor : ColorConstants.orange; @@ -83,8 +84,7 @@ class FilterOptionItem extends StatelessWidget { children: [ if (isAllOption) SvgPicture.asset( - //TODO: Use another boolean variable to check isAllType or not - isCheck + isShowOptional ?? false ? AppVectors.icArrowUpOutline : AppVectors.icArrowDownOutline, width: 20, diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 359e768d..4b88e4a2 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -16,10 +16,11 @@ import 'package:intl/intl.dart'; class HistoryCardWidget extends StatefulWidget { final FileHistory? fileHistory; + final Function()? onDownloaded; const HistoryCardWidget({ Key? key, - this.fileHistory, + this.fileHistory, this.onDownloaded, }) : super(key: key); @override @@ -314,6 +315,7 @@ class _HistoryCardWidgetState extends State { singleFile: widget.fileHistory!.fileDetails!.files![index], isShowDate: false, margin: EdgeInsets.fromLTRB(36, 6, 20, 0), + onDownloaded: widget.onDownloaded, ); }, ) diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 3e59b167..4a970216 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -697,14 +697,17 @@ class CommonUtilityFunctions { ), Align( alignment: Alignment.centerLeft, - child: InkWell( - onTap: () { - Navigator.pop(NavService.navKey.currentContext!); - }, - child: Icon( - Icons.clear, - color: Colors.white, - size: 24, + child: Padding( + padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), ), ), ), diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index ddc2a02a..d5fce91b 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -33,9 +33,8 @@ class FileUtils { NavService.navKey.currentContext!, listen: false) .getAllFiles(); - - onComplete; } + onComplete; }, deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, ), diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 6fef4b46..04050a9b 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -47,6 +47,8 @@ class HistoryProvider extends BaseModel { allFilesHistory = [], displayFilesHistory = []; + List listType = []; + List receivedHistoryLogs = []; Map> downloadedFileAcknowledgement = {}; @@ -273,10 +275,10 @@ class HistoryProvider extends BaseModel { (dynamic file) async { String? fileExtension = file.name.split('.').last; for (int i = 0; i < listFileTypeSelect!.length; i++) { - if (listFileTypeSelect[i] == FileType.other) { - files.add(file); - break; - } + // if (listFileTypeSelect[i] == FileType.other) { + // files.add(file); + // break; + // } if (listFileTypeSelect[i] .suffixName @@ -765,10 +767,10 @@ class HistoryProvider extends BaseModel { (dynamic file) async { String? fileExtension = file.name.split('.').last; for (int i = 0; i < listFileTypeSelect!.length; i++) { - if (listFileTypeSelect[i] == FileType.other) { - files.add(file); - break; - } + // if (listFileTypeSelect[i] == FileType.other) { + // files.add(file); + // break; + // } if (listFileTypeSelect[i] .suffixName @@ -776,6 +778,7 @@ class HistoryProvider extends BaseModel { files.add(file); break; } + print(file); } }, ); @@ -876,7 +879,23 @@ class HistoryProvider extends BaseModel { } } - void filterByFileType(FileType fileType) {} + void filterByFileType(FileType fileType) { + if (!listType.contains(fileType)) { + listType.add(fileType); + } else { + listType.remove(fileType); + } + + getAllFileTransferData(listFileTypeSelect: listType); + notifyListeners(); + } + + void filterByAllFileType(List filetype) async { + typeSelected = HistoryType.all; + displayFilesHistory = filterFileHistory(typeSelected); + listType = filetype; + notifyListeners(); + } getrecentHistoryFiles() async { // finding last 15 received files data for recent tab @@ -1410,11 +1429,10 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = await AtClientManager.getInstance() - .atClient - .get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = + await AtClientManager.getInstance().atClient.get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); From f4d5ba888a79b58fa5df45f33c13df3cf5f0259c Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 16 May 2023 21:30:56 +0700 Subject: [PATCH 84/94] feat: added unblock dialog and preview for files --- .../blocked_contact_screen.dart | 38 +- .../widget/contact_attachment_card.dart | 507 ++++++++++++++---- .../history/transfer_history_screen.dart | 12 +- .../widgets/filter_history_widget.dart | 157 ++---- .../history/widgets/filter_option_item.dart | 18 +- .../history/widgets/history_card_widget.dart | 4 +- lib/services/common_utility_functions.dart | 19 +- lib/utils/file_utils.dart | 3 +- lib/view_models/history_provider.dart | 42 +- 9 files changed, 544 insertions(+), 256 deletions(-) diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index a790d2b3..cc2e2e2f 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -1,11 +1,17 @@ import 'package:at_common_flutter/services/size_config.dart'; +import 'package:at_contact/at_contact.dart'; import 'package:at_contacts_flutter/models/contact_base_model.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:at_contacts_flutter/utils/text_strings.dart'; +import 'package:at_contacts_flutter/utils/text_styles.dart'; +import 'package:at_contacts_group_flutter/widgets/confirmation_dialog.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/contact_card_widget.dart'; +import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; class BlockedContactScreen extends StatefulWidget { const BlockedContactScreen({Key? key}) : super(key: key); @@ -17,6 +23,7 @@ class BlockedContactScreen extends StatefulWidget { class _BlockedContactScreenState extends State { late ContactService _contactService; late TextEditingController searchController; + bool isUnblocking = false; @override void initState() { @@ -185,9 +192,8 @@ class _BlockedContactScreenState extends State { contact: contact!, onTap: () async { print("unblock"); - await _contactService.blockUnblockContact( - contact: contactsForAlphabet[index].contact!, - blockAction: false, + await unblockAtsign( + contact, ); }, suffixIcon: Padding( @@ -258,4 +264,30 @@ class _BlockedContactScreenState extends State { return contactsForAlphabet; } + + Future unblockAtsign(AtContact atsign) async { + await showDialog( + context: context, + builder: (context) { + Uint8List? image; + if (atsign.tags != null && atsign.tags?['image'] != null) { + List intList = atsign.tags?['image'].cast(); + image = Uint8List.fromList(intList); + } + return ConfirmationDialog( + title: atsign.atSign!, + heading: 'Do you want to unblock this atSign?', + atsign: atsign.atSign, + image: image, + onYesPressed: () async { + await _contactService + .blockUnblockContact(contact: atsign, blockAction: false) + .then( + (value) => Navigator.pop(context), + ); + }, + ); + }, + ); + } } diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index e7c87e0b..fbf7a4e0 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -1,5 +1,7 @@ +import 'dart:convert'; import 'dart:io'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; import 'package:atsign_atmosphere_pro/services/backend_service.dart'; @@ -8,6 +10,7 @@ import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/services/snackbar_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -15,8 +18,11 @@ import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; +import 'package:open_file/open_file.dart'; import 'package:provider/provider.dart'; import '../../my_files/widgets/downloads_folders.dart'; @@ -26,6 +32,7 @@ class ContactAttachmentCard extends StatefulWidget { final FileData singleFile; final bool isShowDate; final EdgeInsetsGeometry? margin; + final Function()? onDownloaded; const ContactAttachmentCard({ Key? key, @@ -33,6 +40,7 @@ class ContactAttachmentCard extends StatefulWidget { required this.singleFile, this.isShowDate = true, this.margin, + this.onDownloaded, }) : super(key: key); @override @@ -41,6 +49,8 @@ class ContactAttachmentCard extends StatefulWidget { class _ContactAttachmentCardState extends State { bool isDownloaded = false; + bool isDownloading = false; + String? filePath; @override void initState() { @@ -67,130 +77,153 @@ class _ContactAttachmentCardState extends State { @override Widget build(BuildContext context) { - return Container( - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - margin: widget.margin ?? - EdgeInsets.symmetric( - horizontal: 25, - vertical: 5, - ), - padding: EdgeInsets.all(15), - child: Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - children: [ - Container( - decoration: BoxDecoration( - color: ColorConstants.MILD_GREY, - borderRadius: BorderRadius.circular(5), + return InkWell( + onTap: isDownloading + ? null + : () async { + bool isExist = await isFilePresent(widget.singleFile.name ?? ''); + if (!isExist) { + await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name, + isPreview: true, + ); + } + // String filePath = + // await BackendService.getInstance().downloadDirectory!.path + + // Platform.pathSeparator + + // (widget.singleFile.name ?? ''); + await openPreview().whenComplete( + () => setState(() { + isDownloading = false; + }), + ); + }, + child: Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + margin: widget.margin ?? + EdgeInsets.symmetric( + horizontal: 25, + vertical: 5, ), - child: Center( - child: thumbnail( - widget.singleFile.name?.split(".").last, - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - widget.singleFile.name!, + padding: EdgeInsets.all(15), + child: Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + children: [ + Container( + decoration: BoxDecoration( + color: ColorConstants.MILD_GREY, + borderRadius: BorderRadius.circular(5), + ), + child: Center( + child: thumbnail( + widget.singleFile.name?.split(".").last, + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + widget.singleFile.name!, + ), ), ), - ), - SizedBox(width: 15), - Expanded( - child: Column( - children: [ - Row( - children: [ - Expanded( - child: Text( - widget.singleFile.name ?? "", - overflow: TextOverflow.ellipsis, - style: TextStyle( - fontWeight: FontWeight.bold, - fontSize: 10, + SizedBox(width: 15), + Expanded( + child: Column( + children: [ + Row( + children: [ + Expanded( + child: Text( + widget.singleFile.name ?? "", + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontWeight: FontWeight.bold, + fontSize: 10, + ), ), ), - ), - Visibility( - visible: widget.isShowDate, - child: Text( - CommonUtilityFunctions() - .formatDateTime(widget.fileTransfer.date!), - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, + Visibility( + visible: widget.isShowDate, + child: Text( + CommonUtilityFunctions() + .formatDateTime(widget.fileTransfer.date!), + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), ), ), - ), - ], - ), - SizedBox(height: 10), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - Consumer( - builder: (_c, provider, _) { - var fileTransferProgress = provider - .receivedFileProgress[widget.fileTransfer.key]; + ], + ), + SizedBox(height: 10), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + Consumer( + builder: (_c, provider, _) { + var fileTransferProgress = provider + .receivedFileProgress[widget.fileTransfer.key]; - return CommonUtilityFunctions() - .checkForDownloadAvailability( - widget.fileTransfer, - ) - ? fileTransferProgress != null - ? Image.asset( - ImageConstants.icCloudDownloading, - ) - : isDownloaded - ? SvgPicture.asset( - AppVectors.icCloudDownloaded, - ) - : InkWell( - onTap: () async { - await downloadFiles( - widget.fileTransfer, - fileName: widget.singleFile.name, - ); - }, - child: SvgPicture.asset( - AppVectors.icDownloadFile, - ), - ) - : SizedBox(); - }, - ), - const SizedBox( - width: 10, - ), - GestureDetector( - onTap: () async { - await openFilePath(BackendService.getInstance() - .downloadDirectory! - .path + - Platform.pathSeparator + - widget.singleFile.name!); - }, - child: SvgPicture.asset( - AppVectors.icSendFile, + return CommonUtilityFunctions() + .checkForDownloadAvailability( + widget.fileTransfer, + ) + ? fileTransferProgress != null + ? Image.asset( + ImageConstants.icCloudDownloading, + ) + : isDownloaded + ? SvgPicture.asset( + AppVectors.icCloudDownloaded, + ) + : InkWell( + onTap: () async { + await downloadFiles( + widget.fileTransfer, + fileName: widget.singleFile.name, + ); + }, + child: SvgPicture.asset( + AppVectors.icDownloadFile, + ), + ) + : SizedBox(); + }, ), - ), - Spacer(), - Text( - double.parse(widget.singleFile.size.toString()) <= 1024 - ? '${widget.singleFile.size} ' + TextStrings().kb - : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + - TextStrings().mb, - style: TextStyle( - color: ColorConstants.grey, - fontSize: 10, + const SizedBox( + width: 10, ), - ), - ], - ), - ], + GestureDetector( + onTap: () async { + await openFilePath(BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + widget.singleFile.name!); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + ), + ), + Spacer(), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + ), + ], + ), + ], + ), ), - ), - ], + ], + ), ), ); } @@ -278,7 +311,11 @@ class _ContactAttachmentCardState extends State { Future downloadFiles( FileTransfer? file, { String? fileName, + bool isPreview = false, }) async { + setState(() { + isDownloading = true; + }); var fileTransferProgress = Provider.of( NavService.navKey.currentContext!, listen: false) @@ -327,12 +364,14 @@ class _ContactAttachmentCardState extends State { if (result is bool && result) { if (mounted) { setState(() { + if (!isPreview) isDownloading = false; isDownloaded = true; }); } await Provider.of(NavService.navKey.currentContext!, listen: false) .saveNewDataInMyFiles(file); + print(file.url); SnackbarService().showSnackbar( NavService.navKey.currentContext!, @@ -351,9 +390,251 @@ class _ContactAttachmentCardState extends State { ); if (mounted) { setState(() { + if (!isPreview) isDownloading = false; isDownloaded = false; }); } } } + + Future openPreview() async { + if (FileTypes.IMAGE_TYPES + .contains(widget.singleFile.name?.split(".").last)) { + String nickname = ""; + String filePath = + await BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (widget.singleFile.name ?? ''); + File image = File(filePath); + Uint8List imageBytes = base64Decode(await imageToBase64(filePath)); + final date = (widget.fileTransfer.date ?? DateTime.now()).toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + + for (var contact in GroupService().allContacts) { + if (contact?.contact?.atSign == widget.fileTransfer.sender) { + nickname = contact?.contact?.tags?["nickname"] ?? ""; + break; + } + } + await showDialog( + context: NavService.navKey.currentContext!, + builder: (_) => Material( + type: MaterialType.transparency, + child: Column( + children: [ + SizedBox( + height: 10, + ), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), + ), + ), + ), + SizedBox( + height: 10, + ), + Expanded( + child: Container( + // height: double.infinity, + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + image: DecorationImage( + image: MemoryImage( + imageBytes, + ), + fit: BoxFit.cover, + ), + ), + ), + ), + SizedBox( + height: 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icCloudDownloaded, + height: 50, + width: 50, + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await openFilePath(BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + (widget.singleFile.name ?? '')); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + height: 50, + width: 50, + ), + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await FileUtils.deleteFile( + filePath, + fileTransferId: widget.fileTransfer.key, + ).then((value) => isDownloaded = false); + if (mounted) { + Navigator.pop(context); + } + setState(() {}); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + height: 50, + width: 50, + ), + ), + ), + ], + ), + SizedBox( + height: 40, + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + padding: EdgeInsets.all(20), + margin: EdgeInsets.symmetric(horizontal: 25), + width: double.infinity, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Align( + alignment: Alignment.topRight, + child: Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ), + SizedBox(height: 12), + Text( + (widget.singleFile.name ?? ''), + style: TextStyle( + fontSize: 16, fontWeight: FontWeight.bold), + ), + SizedBox(height: 5), + Text( + double.parse(widget.singleFile.size.toString()) <= 1024 + ? '${widget.singleFile.size} ' + TextStrings().kb + : '${(widget.singleFile.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 10, + ), + textAlign: TextAlign.left, + ), + SizedBox(height: 10), + nickname.isNotEmpty + ? Text( + nickname, + style: TextStyle( + fontSize: 14, fontWeight: FontWeight.bold), + ) + : SizedBox(), + SizedBox(height: 5), + Text( + widget.fileTransfer.sender ?? '', + style: TextStyle( + fontSize: 12, + ), + ), + SizedBox(height: 10), + // fileDetail.message.isNotNull + // ? + Text( + "Message", + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + // : SizedBox(), + SizedBox(height: 5), + Text( + widget.fileTransfer.notes ?? "", + style: TextStyle( + fontSize: 12, + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } else { + await OpenFile.open(BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + (widget.singleFile.name ?? '')); + } + } + + Future imageToBase64(String imagePath) async { + File imageFile = File(imagePath); + List imageBytes = await imageFile.readAsBytes(); + String base64Image = base64Encode(imageBytes); + return base64Image; + } } diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index d0508716..d1f3e4ec 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -186,6 +186,9 @@ class _TransferHistoryScreenState extends State { itemBuilder: (context, index) { return HistoryCardWidget( fileHistory: filteredFileHistory[index], + onDownloaded: () async { + await provider.getAllFileTransferHistory(); + }, ); // SentFilesListTile( @@ -257,20 +260,17 @@ class _TransferHistoryScreenState extends State { return FilterHistoryWidget( position: position, typeSelected: provider.typeSelected, - isDesc: provider.isDesc, onSelectedFilter: (value) { provider.changeFilterType(value); print(value); setState(() {}); }, - onSelectedOptionalFilter: (value) { + onSelectedOptionalFilter: (value) async { print(value); + await provider.filterByAllFileType(value); setState(() {}); }, - setOrder: (value) { - provider.changeDesc(value); - print(value); - }, + listFileType: provider.listType, ); }, ); diff --git a/lib/screens/history/widgets/filter_history_widget.dart b/lib/screens/history/widgets/filter_history_widget.dart index b672036b..28867fc9 100644 --- a/lib/screens/history/widgets/filter_history_widget.dart +++ b/lib/screens/history/widgets/filter_history_widget.dart @@ -8,19 +8,17 @@ import 'package:flutter/material.dart'; class FilterHistoryWidget extends StatefulWidget { final Offset? position; final Function(HistoryType historyType)? onSelectedFilter; - final Function(FileType fileType)? onSelectedOptionalFilter; - final Function(bool)? setOrder; - final bool isDesc; + final Function(List fileTypes)? onSelectedOptionalFilter; final HistoryType? typeSelected; + final List? listFileType; FilterHistoryWidget({ Key? key, this.position, this.onSelectedFilter, - this.setOrder, - this.isDesc = true, this.typeSelected, this.onSelectedOptionalFilter, + this.listFileType, }) : super(key: key); @override @@ -29,6 +27,8 @@ class FilterHistoryWidget extends StatefulWidget { class _FilterHistoryWidgetState extends State { bool isShowOptional = false; + List listFileType = []; + final List historyTypes = [ HistoryType.received, HistoryType.send, @@ -44,6 +44,12 @@ class _FilterHistoryWidgetState extends State { FileType.other, ]; + @override + void initState() { + listFileType = widget.listFileType ?? []; + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -82,31 +88,27 @@ class _FilterHistoryWidgetState extends State { ); }, itemBuilder: (context, index) { - if (index == 0 || index == historyTypes.length - 1) { + if (historyTypes[index] == HistoryType.all) { return FilterOptionItem( icon: historyTypes[index].icon, title: historyTypes[index].text, isCheck: historyTypes[index] == widget.typeSelected, - isAllOption: historyTypes[index] == HistoryType.all, + isAllOption: true, + isShowOptional: isShowOptional, allOptionOnTap: () { setState(() { isShowOptional = !isShowOptional; }); }, - borderRadius: index == 0 - ? BorderRadius.vertical( - top: Radius.circular(13), - ) - : isShowOptional || - widget.typeSelected == HistoryType.all - ? null - : BorderRadius.vertical( - bottom: Radius.circular(13), - ), + borderRadius: isShowOptional + ? null + : BorderRadius.vertical( + bottom: Radius.circular(13), + ), onTap: () { - widget.onSelectedFilter?.call( - historyTypes[index], - ); + setState(() { + isShowOptional = !isShowOptional; + }); }, ); } @@ -114,6 +116,11 @@ class _FilterHistoryWidgetState extends State { icon: historyTypes[index].icon, title: historyTypes[index].text, isCheck: historyTypes[index] == widget.typeSelected, + borderRadius: index == 0 + ? BorderRadius.vertical( + top: Radius.circular(13), + ) + : null, onTap: () { widget.onSelectedFilter?.call( historyTypes[index], @@ -123,14 +130,13 @@ class _FilterHistoryWidgetState extends State { }, ), ), - if (isShowOptional || widget.typeSelected == HistoryType.all) + if (isShowOptional) ...[ Divider( color: ColorConstants.disableColor, height: 0, thickness: 1, // thickness: 0.65, ), - if (isShowOptional || widget.typeSelected == HistoryType.all) SizedBox( width: MediaQuery.of(context).size.width - 30.toWidth, child: ListView.separated( @@ -149,101 +155,36 @@ class _FilterHistoryWidgetState extends State { ); }, itemBuilder: (context, index) { - if (index == optionalHistoryTypes.length - 1) { - return FilterOptionItem( - icon: optionalHistoryTypes[index].icon, - title: optionalHistoryTypes[index].text, - isDisable: true, - isCheck: false, - borderRadius: index == 0 - ? BorderRadius.vertical( - top: Radius.circular(13), - ) - : BorderRadius.vertical( - bottom: Radius.circular(13), - ), - onTap: () { - widget.onSelectedOptionalFilter?.call( - optionalHistoryTypes[index], - ); - }, - ); - } return FilterOptionItem( icon: optionalHistoryTypes[index].icon, title: optionalHistoryTypes[index].text, - isDisable: true, - isCheck: false, + isOptional: true, + isCheck: listFileType + .contains(optionalHistoryTypes[index]), + borderRadius: index == optionalHistoryTypes.length - 1 + ? BorderRadius.vertical( + bottom: Radius.circular(13), + ) + : null, onTap: () { - widget.onSelectedOptionalFilter?.call( - optionalHistoryTypes[index], - ); + final fileType = optionalHistoryTypes[index]; + if (listFileType.isNotEmpty) { + final check = listFileType.contains(fileType); + if (check) { + listFileType.remove(fileType); + } else { + listFileType.add(fileType); + } + } else { + listFileType.add(fileType); + } + widget.onSelectedOptionalFilter?.call(listFileType); }, ); }, ), ), - /*SizedBox( - width: MediaQuery.of(context).size.width - 30.toWidth, - child: ListView.builder( - shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - padding: EdgeInsets.zero, - itemCount: FileType.values.length, - itemBuilder: (context, index) { - return FilterOptionItem( - icon: FileType.values[index].icon, - title: FileType.values[index].text, - onTap: (){ - - }, - ); - }, - ), - ),*/ - /*Container( - width: MediaQuery.of(context).size.width - 30.toWidth, - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.vertical( - bottom: Radius.circular(12), - ), - ), - child: ListView.separated( - shrinkWrap: true, - padding: EdgeInsets.zero, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (context, index) { - if (index > 2) { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: true, - isDisable: true, - index: index, - ); - } else { - return _buildFilterOptionItem( - icon: filterOptionsList.keys.elementAt(index), - title: filterOptionsList.values.elementAt(index), - isCheck: false, - index: index, - ); - } - }, - separatorBuilder: (context, index) { - return Divider( - color: (index > 2 && true) - ? ColorConstants.disableColor - : ColorConstants.lightSliver, - height: 0, - indent: 0, - thickness: 0.65, - ); - }, - itemCount: filterOptionsList.length, - ), - ),*/ + ] ], ), ), diff --git a/lib/screens/history/widgets/filter_option_item.dart b/lib/screens/history/widgets/filter_option_item.dart index 24294a73..169618cf 100644 --- a/lib/screens/history/widgets/filter_option_item.dart +++ b/lib/screens/history/widgets/filter_option_item.dart @@ -6,38 +6,39 @@ import 'package:flutter_svg/flutter_svg.dart'; class FilterOptionItem extends StatelessWidget { final String? icon; final String? title; - final bool isDisable, isCheck; + final bool isOptional, isCheck; final BorderRadiusGeometry? borderRadius; final Function()? onTap; final Function()? allOptionOnTap; final bool isAllOption; + final bool? isShowOptional; const FilterOptionItem({ Key? key, this.icon, - this.isDisable = false, + this.isOptional = false, this.borderRadius, this.title, this.isCheck = false, this.onTap, this.isAllOption = false, - this.allOptionOnTap, + this.allOptionOnTap, this.isShowOptional, }) : super(key: key); @override Widget build(BuildContext context) { Color color = isCheck - ? isDisable + ? isOptional ? Colors.black : Colors.white - : isDisable + : isOptional ? ColorConstants.lightSliver : Colors.black; Color backgroundColor = - isDisable ? ColorConstants.disableBackgroundColor : Colors.white; + isOptional ? ColorConstants.disableBackgroundColor : Colors.white; - Color checkedBackgroundColor = isDisable + Color checkedBackgroundColor = isOptional ? ColorConstants.optionalFilterBackgroundColor : ColorConstants.orange; @@ -83,8 +84,7 @@ class FilterOptionItem extends StatelessWidget { children: [ if (isAllOption) SvgPicture.asset( - //TODO: Use another boolean variable to check isAllType or not - isCheck + isShowOptional ?? false ? AppVectors.icArrowUpOutline : AppVectors.icArrowDownOutline, width: 20, diff --git a/lib/screens/history/widgets/history_card_widget.dart b/lib/screens/history/widgets/history_card_widget.dart index 359e768d..4b88e4a2 100644 --- a/lib/screens/history/widgets/history_card_widget.dart +++ b/lib/screens/history/widgets/history_card_widget.dart @@ -16,10 +16,11 @@ import 'package:intl/intl.dart'; class HistoryCardWidget extends StatefulWidget { final FileHistory? fileHistory; + final Function()? onDownloaded; const HistoryCardWidget({ Key? key, - this.fileHistory, + this.fileHistory, this.onDownloaded, }) : super(key: key); @override @@ -314,6 +315,7 @@ class _HistoryCardWidgetState extends State { singleFile: widget.fileHistory!.fileDetails!.files![index], isShowDate: false, margin: EdgeInsets.fromLTRB(36, 6, 20, 0), + onDownloaded: widget.onDownloaded, ); }, ) diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 3e59b167..4a970216 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -697,14 +697,17 @@ class CommonUtilityFunctions { ), Align( alignment: Alignment.centerLeft, - child: InkWell( - onTap: () { - Navigator.pop(NavService.navKey.currentContext!); - }, - child: Icon( - Icons.clear, - color: Colors.white, - size: 24, + child: Padding( + padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), ), ), ), diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index ddc2a02a..d5fce91b 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -33,9 +33,8 @@ class FileUtils { NavService.navKey.currentContext!, listen: false) .getAllFiles(); - - onComplete; } + onComplete; }, deleteMessage: TextStrings.deleteFileConfirmationMsgMyFiles, ), diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 6fef4b46..c0d70599 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -47,6 +47,8 @@ class HistoryProvider extends BaseModel { allFilesHistory = [], displayFilesHistory = []; + List listType = []; + List receivedHistoryLogs = []; Map> downloadedFileAcknowledgement = {}; @@ -776,6 +778,7 @@ class HistoryProvider extends BaseModel { files.add(file); break; } + print(file); } }, ); @@ -876,7 +879,35 @@ class HistoryProvider extends BaseModel { } } - void filterByFileType(FileType fileType) {} + void filterByFileType(FileType fileType) { + if (!listType.contains(fileType)) { + listType.add(fileType); + } else { + listType.remove(fileType); + } + + getAllFileTransferData(listFileTypeSelect: listType); + notifyListeners(); + } + + Future filterByAllFileType(List filetype) async { + if(typeSelected != HistoryType.all){ + return; + } + List tempFileHistoryLogs = []; + + await getAllFileTransferData(listFileTypeSelect: filetype); + await getSentHistory(listFileTypeSelect: filetype); + + tempFileHistoryLogs.addAll(receivedFileHistory); + tempFileHistoryLogs.addAll(sentHistory); + + tempFileHistoryLogs + .sort((a, b) => b.fileDetails!.date!.compareTo(a.fileDetails!.date!)); + + displayFilesHistory = tempFileHistoryLogs; + notifyListeners(); + } getrecentHistoryFiles() async { // finding last 15 received files data for recent tab @@ -1410,11 +1441,10 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = await AtClientManager.getInstance() - .atClient - .get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = + await AtClientManager.getInstance().atClient.get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); From ef26eac7f12433ca18df71c85be4ad6bafed9454 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 17 May 2023 12:16:34 +0700 Subject: [PATCH 85/94] feat: added moveToSentFile func --- .../contact_detail_screen.dart | 1 + .../widget/contact_attachment_card.dart | 35 ++++++++++++++----- lib/services/common_utility_functions.dart | 15 ++++---- lib/utils/file_utils.dart | 22 ++++++++++++ 4 files changed, 58 insertions(+), 15 deletions(-) diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index 4fa7d9fc..679c8593 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -343,6 +343,7 @@ class _ContactDetailScreenState extends State { ContactAttachmentCard( fileTransfer: files[index], singleFile: file, + fromContact: true, ), ); } diff --git a/lib/screens/contact_new_version/widget/contact_attachment_card.dart b/lib/screens/contact_new_version/widget/contact_attachment_card.dart index 8f0d1608..e5fd42a2 100644 --- a/lib/screens/contact_new_version/widget/contact_attachment_card.dart +++ b/lib/screens/contact_new_version/widget/contact_attachment_card.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'dart:io'; +import 'package:at_contacts_group_flutter/at_contacts_group_flutter.dart'; import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/screens/my_files/widgets/recents.dart'; @@ -15,9 +16,12 @@ import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/internet_connectivity_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -33,6 +37,7 @@ class ContactAttachmentCard extends StatefulWidget { final bool isShowDate; final EdgeInsetsGeometry? margin; final Function()? onDownloaded; + final bool fromContact; const ContactAttachmentCard({ Key? key, @@ -41,6 +46,7 @@ class ContactAttachmentCard extends StatefulWidget { this.isShowDate = true, this.margin, this.onDownloaded, + this.fromContact = false, }) : super(key: key); @override @@ -50,11 +56,15 @@ class ContactAttachmentCard extends StatefulWidget { class _ContactAttachmentCardState extends State { bool isDownloaded = false; bool isDownloading = false; + late WelcomeScreenProvider _welcomeScreenProvider; + late FileTransferProvider _fileTransferProvider; @override void initState() { super.initState(); initDownloads(); + _welcomeScreenProvider = Provider.of(context, listen: false); + _fileTransferProvider = Provider.of(context, listen: false); } void initDownloads() async { @@ -191,11 +201,15 @@ class _ContactAttachmentCardState extends State { ), GestureDetector( onTap: () async { - await openFilePath(BackendService.getInstance() + if (widget.fromContact) { + Navigator.pop(context); + } + await FileUtils.moveToSendFile( + BackendService.getInstance() .downloadDirectory! .path + - Platform.pathSeparator + - widget.singleFile.name!); + Platform.pathSeparator + + widget.singleFile.name!); }, child: SvgPicture.asset( AppVectors.icSendFile, @@ -474,11 +488,16 @@ class _ContactAttachmentCardState extends State { padding: const EdgeInsets.only(left: 6.0), child: GestureDetector( onTap: () async { - await openFilePath(BackendService.getInstance() - .downloadDirectory! - .path + - Platform.pathSeparator + - (widget.singleFile.name ?? '')); + if (widget.fromContact) { + Navigator.pop(context); + } + Navigator.pop(context); + await FileUtils.moveToSendFile( + BackendService.getInstance() + .downloadDirectory! + .path + + Platform.pathSeparator + + widget.singleFile.name!); }, child: SvgPicture.asset( AppVectors.icSendFile, diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index 4a970216..e458489f 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -13,6 +13,7 @@ import 'package:atsign_atmosphere_pro/services/backend_service.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/file_types.dart'; +import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; @@ -701,7 +702,8 @@ class CommonUtilityFunctions { padding: const EdgeInsets.only(left: 32), child: InkWell( onTap: () { - Navigator.pop(NavService.navKey.currentContext!); + Navigator.pop( + NavService.navKey.currentContext!); }, child: Icon( Icons.clear, @@ -751,12 +753,11 @@ class CommonUtilityFunctions { padding: const EdgeInsets.only(left: 6.0), child: GestureDetector( onTap: () async { - await openFilePath( - BackendService.getInstance() - .downloadDirectory! - .path + - Platform.pathSeparator + - fileDetail.fileName!); + Navigator.pop( + NavService.navKey.currentContext!); + Navigator.pop( + NavService.navKey.currentContext!); + await FileUtils.moveToSendFile(path); }, child: SvgPicture.asset( AppVectors.icSendFile, diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index d5fce91b..1480e8b1 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -3,9 +3,13 @@ import 'dart:io'; import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; +import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; +import 'package:path/path.dart' show basename; class FileUtils { static Future deleteFile( @@ -40,4 +44,22 @@ class FileUtils { ), ); } + + static Future moveToSendFile(String filePath) async { + final file = File(filePath); + final length = await file.length(); + FileTransferProvider.appClosedSharedFiles.add( + PlatformFile( + name: basename(file.path), + path: file.path, + size: length.round(), + bytes: await file.readAsBytes()), + ); + Provider.of(NavService.navKey.currentContext!, + listen: false) + .setFiles(); + Provider.of(NavService.navKey.currentContext!, + listen: false) + .changeBottomNavigationIndex(0); + } } From 1709da5819e86c71d5762ac33ef0eba3082e424a Mon Sep 17 00:00:00 2001 From: sonle Date: Tue, 23 May 2023 14:04:46 +0700 Subject: [PATCH 86/94] fix: resolve mention issues --- lib/app.dart | 4 +- .../contact_new_version/contact_screen.dart | 15 +- .../create_group_screen.dart | 406 ++++++++---------- .../widget/contact_card_widget.dart | 2 +- .../widgets/welcome_sceen_home.dart | 2 +- lib/view_models/add_contact_provider.dart | 1 + lib/view_models/create_group_provider.dart | 81 ++++ pubspec.yaml | 5 +- 8 files changed, 289 insertions(+), 227 deletions(-) create mode 100644 lib/view_models/create_group_provider.dart diff --git a/lib/app.dart b/lib/app.dart index c070f41b..50b08d50 100644 --- a/lib/app.dart +++ b/lib/app.dart @@ -1,4 +1,5 @@ import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; +import 'package:atsign_atmosphere_pro/view_models/create_group_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/desktop_routes/desktop_routes.dart'; import 'package:atsign_atmosphere_pro/view_models/file_progress_provider.dart'; @@ -58,7 +59,8 @@ class _MyAppState extends State { ChangeNotifierProvider(create: (context) => FileProgressProvider()), ChangeNotifierProvider( create: (context) => InternetConnectivityChecker()), - ChangeNotifierProvider(create: (context) => MyFilesProvider()) + ChangeNotifierProvider(create: (context) => MyFilesProvider()), + ChangeNotifierProvider(create: (context) => CreateGroupProvider()) ], child: MaterialApp( builder: (BuildContext context, Widget? child) { diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index e90708ae..cb6b9983 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -9,6 +9,7 @@ import 'package:atsign_atmosphere_pro/screens/contact_new_version/contact_detail import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; import 'package:atsign_atmosphere_pro/screens/contact_new_version/widget/list_contact_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/view_models/create_group_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/trusted_sender_view_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -23,6 +24,7 @@ class ContactScreen extends StatefulWidget { class _ContactScreenState extends State with SingleTickerProviderStateMixin { late TrustedContactProvider trustedProvider; + late CreateGroupProvider createGroupProvider; late GroupService _groupService; late TabController _tabController; late TextEditingController searchController; @@ -31,6 +33,7 @@ class _ContactScreenState extends State @override void initState() { trustedProvider = context.read(); + createGroupProvider = context.read(); _groupService = GroupService(); _tabController = TabController(length: 3, initialIndex: 0, vsync: this); searchController = TextEditingController(); @@ -60,8 +63,10 @@ class _ContactScreenState extends State ); }, ); - - if (result == true) { + if (createGroupProvider.selectedImageByteData != null) { + createGroupProvider.removeSelectedImage(); + } + if (result ?? false) { await _groupService.fetchGroupsAndContacts(); setState(() {}); } @@ -77,7 +82,7 @@ class _ContactScreenState extends State ); if (result == true) { - reloadPage(); + await reloadPage(); } } }, @@ -189,7 +194,7 @@ class _ContactScreenState extends State ); if (result != false) { - reloadPage(); + await reloadPage(); } }, ), @@ -261,7 +266,7 @@ class _ContactScreenState extends State ); } - void reloadPage() async { + Future reloadPage() async { await Future.delayed(Duration(milliseconds: 500), () async { await _groupService.fetchGroupsAndContacts(); setState(() {}); diff --git a/lib/screens/contact_new_version/create_group_screen.dart b/lib/screens/contact_new_version/create_group_screen.dart index 38b077be..6f96d46e 100644 --- a/lib/screens/contact_new_version/create_group_screen.dart +++ b/lib/screens/contact_new_version/create_group_screen.dart @@ -1,10 +1,6 @@ -import 'dart:io'; -import 'dart:typed_data'; - import 'package:at_common_flutter/at_common_flutter.dart'; import 'package:at_commons/at_commons.dart'; import 'package:at_contact/at_contact.dart'; -import 'package:at_contacts_group_flutter/services/group_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_toast.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/input_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/search_widget.dart'; @@ -13,9 +9,11 @@ import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; +import 'package:atsign_atmosphere_pro/view_models/create_group_provider.dart'; import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_svg/flutter_svg.dart'; -import 'package:image_picker/image_picker.dart'; +import 'package:provider/provider.dart'; class CreateGroupScreen extends StatefulWidget { final List? trustContacts; @@ -30,205 +28,231 @@ class CreateGroupScreen extends StatefulWidget { } class _CreateGroupScreenState extends State { - List listContact = []; late TextEditingController groupNameController; late TextEditingController searchController; - late GroupService _groupService; - bool isLoading = false; - Uint8List? selectedImageByteData; + late CreateGroupProvider _provider; @override void initState() { groupNameController = TextEditingController(); searchController = TextEditingController(); - _groupService = GroupService(); + _provider = context.read(); super.initState(); } @override Widget build(BuildContext context) { - return Scaffold( - backgroundColor: Colors.transparent, - body: Container( - margin: EdgeInsets.only(top: 60), - decoration: BoxDecoration( - color: ColorConstants.culturedColor, - borderRadius: const BorderRadius.only( - topLeft: Radius.circular(20), - topRight: Radius.circular(20), + return Consumer(builder: (context, value, child) { + return Scaffold( + backgroundColor: Colors.transparent, + body: Container( + margin: EdgeInsets.only(top: 60), + decoration: BoxDecoration( + color: ColorConstants.culturedColor, + borderRadius: const BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withOpacity(0.25), + offset: const Offset(0, 4), + ) + ], ), - boxShadow: [ - BoxShadow( - color: Colors.black.withOpacity(0.25), - offset: const Offset(0, 4), - ) - ], - ), - child: Stack( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: Padding( - padding: EdgeInsets.only(left: 31, top: 36), - child: SvgPicture.asset( - AppVectors.icBack, + child: Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + InkWell( + onTap: () { + _provider.removeSelectedImage(); + Navigator.of(context).pop(); + }, + child: Padding( + padding: EdgeInsets.only(left: 31, top: 36), + child: SvgPicture.asset( + AppVectors.icBack, + ), ), ), - ), - Padding( - padding: const EdgeInsets.only( - top: 24, - left: 38, - bottom: 14, - ), - child: Text( - "Add New Group", - style: TextStyle( - fontSize: 20.toFont, - fontWeight: FontWeight.w500, - color: Colors.black, + Padding( + padding: const EdgeInsets.only( + top: 24, + left: 38, + bottom: 14, + ), + child: Text( + "Add New Group", + style: TextStyle( + fontSize: 20.toFont, + fontWeight: FontWeight.w500, + color: Colors.black, + ), ), ), - ), - Expanded( - child: SingleChildScrollView( - padding: EdgeInsets.zero, - child: Column( - mainAxisSize: MainAxisSize.min, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.symmetric( - horizontal: 27, - ), - child: InputWidget( - hintText: 'Group Name', - controller: groupNameController, - hintTextStyle: TextStyle( - fontSize: 14.toFont, - fontWeight: FontWeight.w500, - color: ColorConstants.grey, + Expanded( + child: SingleChildScrollView( + padding: EdgeInsets.zero, + child: Column( + mainAxisSize: MainAxisSize.min, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.symmetric( + horizontal: 27, + ), + child: InputWidget( + hintText: 'Group Name', + controller: groupNameController, + hintTextStyle: TextStyle( + fontSize: 14.toFont, + fontWeight: FontWeight.w500, + color: ColorConstants.grey, + ), + onchange: (value) { + _provider.setGroupName(value); + }, ), ), - ), - _buildImage(), - Padding( - padding: const EdgeInsets.only( - top: 22, - left: 31, + _buildImage(value.selectedImageByteData), + Padding( + padding: const EdgeInsets.only( + top: 22, + left: 31, + ), + child: Text( + "Select Members ${value.listContact.isNotEmpty ? value.listContact.length : ''}", + style: const TextStyle( + fontSize: 16, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), ), - child: Text( - "Select Members ${listContact.isNotEmpty ? listContact.length : ''}", - style: const TextStyle( - fontSize: 16, + SearchWidget( + controller: searchController, + borderColor: Colors.white, + backgroundColor: Colors.white, + hintText: "Search", + hintStyle: TextStyle( + color: ColorConstants.darkSliver, + fontSize: 15, fontWeight: FontWeight.w500, - color: Colors.black, ), + margin: EdgeInsets.fromLTRB( + 28.toWidth, + 8.toHeight, + 28.toWidth, + 14.toHeight, + ), + onChange: (value) { + _provider.setSearchKeyword(value); + }, ), - ), - SearchWidget( - controller: searchController, - borderColor: Colors.white, - backgroundColor: Colors.white, - hintText: "Search", - hintStyle: TextStyle( - color: ColorConstants.darkSliver, - fontSize: 15, - fontWeight: FontWeight.w500, - ), - margin: EdgeInsets.fromLTRB( - 28.toWidth, - 8.toHeight, - 28.toWidth, - 14.toHeight, + Flexible( + child: ListContactWidget( + searchKeywords: value.searchKeyword, + trustedContacts: widget.trustContacts, + isSelectMultiContacts: true, + onSelectContacts: (contacts) { + _provider.addGroupContacts(contacts); + }, + ), ), - ), - Flexible( - child: ListContactWidget( - trustedContacts: widget.trustContacts, - isSelectMultiContacts: true, - onSelectContacts: (contacts) { - setState(() { - listContact = []; - for (var element in contacts) { - listContact.add(element.contact!); + ], + ), + ), + ), + SafeArea( + child: Padding( + padding: const EdgeInsets.symmetric( + vertical: 16, + ), + child: InkWell( + onTap: () { + _provider.createGroup( + whenComplete: (result) { + if (result is AtGroup) { + if (!mounted) return; + Navigator.of(context).pop(true); + } else if (result != null) { + if (result.runtimeType == + AlreadyExistsException) { + if (!mounted) return; + CustomToast().show( + TextStrings().groupAlreadyExists, + context); + } else if (result.runtimeType == + InvalidAtSignException) { + CustomToast().show(result.message, context); + } else { + if (!mounted) return; + CustomToast().show( + TextStrings().serviceError, context); } - }); + } else { + if (!mounted) return; + CustomToast() + .show(TextStrings().serviceError, context); + } }, + whenNameIsEmpty: () { + if (!mounted) return; + CustomToast() + .show(TextStrings().groupEmptyName, context); + }, + ); + }, + child: Container( + height: 51.toHeight, + margin: const EdgeInsets.symmetric(horizontal: 27), + width: double.infinity, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8), + color: value.groupName.isNotEmpty && + value.listContact.isNotEmpty + ? Colors.black + : ColorConstants.buttonGrey, ), - ), - ], - ), - ), - ), - SafeArea( - child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 16, - ), - child: InkWell( - onTap: () { - createGroup(); - }, - child: Container( - height: 51.toHeight, - margin: const EdgeInsets.symmetric(horizontal: 27), - width: double.infinity, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8), - color: groupNameController.text.isNotEmpty && - listContact.isNotEmpty - ? Colors.black - : ColorConstants.buttonGrey, - ), - child: const Center( - child: Text( - "Create Group", - style: TextStyle( - color: Colors.white, - fontSize: 16, - fontWeight: FontWeight.bold, + child: const Center( + child: Text( + "Create Group", + style: TextStyle( + color: Colors.white, + fontSize: 16, + fontWeight: FontWeight.bold, + ), ), ), ), ), ), ), - ), - ], - ), - isLoading - ? Align( - alignment: Alignment.center, - child: CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation( - ColorConstants.orange, + ], + ), + value.isLoading + ? Align( + alignment: Alignment.center, + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), ), - ), - ) - : const SizedBox(), - ], + ) + : const SizedBox(), + ], + ), ), - ), - ); + ); + }); } - Widget _buildImage() { + Widget _buildImage(Uint8List? selectedImage) { return InkWell( onTap: () async { - var image = await ImagePicker().pickImage( - source: ImageSource.gallery, - ); - if (image != null) { - setState(() { - selectedImageByteData = File(image.path).readAsBytesSync(); - }); - } + await _provider.selectCoverImage(); }, child: Container( height: 89, @@ -238,11 +262,11 @@ class _CreateGroupScreenState extends State { borderRadius: BorderRadius.circular(10), color: Color(0xFFECECEC), ), - child: selectedImageByteData != null + child: selectedImage != null ? ClipRRect( borderRadius: BorderRadius.circular(10), child: Image.memory( - selectedImageByteData!, + selectedImage, fit: BoxFit.cover, ), ) @@ -268,52 +292,4 @@ class _CreateGroupScreenState extends State { ), ); } - - void createGroup() async { - if (groupNameController.text.isNotEmpty) { - setState(() { - isLoading = true; - }); - - var group = AtGroup( - groupNameController.text.trim(), - description: 'group desc', - displayName: groupNameController.text.trim(), - members: Set.from(listContact), - createdBy: _groupService.currentAtsign, - updatedBy: _groupService.currentAtsign, - ); - - if (selectedImageByteData != null) { - group.groupPicture = selectedImageByteData; - } - - var result = await _groupService.createGroup(group); - - setState(() { - isLoading = false; - }); - - if (result is AtGroup) { - if (!mounted) return; - Navigator.of(context).pop(true); - } else if (result != null) { - if (result.runtimeType == AlreadyExistsException) { - if (!mounted) return; - CustomToast().show(TextStrings().groupAlreadyExists, context); - } else if (result.runtimeType == InvalidAtSignException) { - CustomToast().show(result.message, context); - } else { - if (!mounted) return; - CustomToast().show(TextStrings().serviceError, context); - } - } else { - if (!mounted) return; - CustomToast().show(TextStrings().serviceError, context); - } - } else { - if (!mounted) return; - CustomToast().show(TextStrings().groupEmptyName, context); - } - } } diff --git a/lib/screens/contact_new_version/widget/contact_card_widget.dart b/lib/screens/contact_new_version/widget/contact_card_widget.dart index 5be6d802..a8695898 100644 --- a/lib/screens/contact_new_version/widget/contact_card_widget.dart +++ b/lib/screens/contact_new_version/widget/contact_card_widget.dart @@ -116,7 +116,7 @@ class _ContactCardWidgetState extends State { ), ), Text( - widget.contact.tags?['name'] ?? + widget.contact.tags?['nickname'] ?? widget.contact.atSign!.substring(1), style: const TextStyle( fontSize: 11, diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index e1352916..86595f91 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -275,7 +275,7 @@ class _WelcomeScreenHomeState extends State { Widget _buildChoiceContact() { return InkWell( onTap: () { - _choiceContact(clearSelectedContact: true); + _choiceContact(clearSelectedContact: false); }, child: Container( height: 56.toHeight, diff --git a/lib/view_models/add_contact_provider.dart b/lib/view_models/add_contact_provider.dart index fd10b8e2..767ecd7d 100644 --- a/lib/view_models/add_contact_provider.dart +++ b/lib/view_models/add_contact_provider.dart @@ -36,6 +36,7 @@ class AddContactProvider extends BaseModel { return true; } else { atSignError = contactService.getAtSignError; + changeVerifyStatus(false); setStatus(addContactStatus, Status.Done); } } catch (e) { diff --git a/lib/view_models/create_group_provider.dart b/lib/view_models/create_group_provider.dart new file mode 100644 index 00000000..90ee9756 --- /dev/null +++ b/lib/view_models/create_group_provider.dart @@ -0,0 +1,81 @@ +import 'dart:io'; + +import 'package:at_contact/at_contact.dart'; +import 'package:at_contacts_group_flutter/models/group_contacts_model.dart'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; +import 'package:flutter/services.dart'; +import 'package:image_picker/image_picker.dart'; + +class CreateGroupProvider extends BaseModel { + bool isLoading = false; + Uint8List? selectedImageByteData; + List listContact = []; + GroupService groupService = GroupService(); + String groupName = ''; + String searchKeyword = ''; + + Future selectCoverImage() async { + var image = await ImagePicker().pickImage( + source: ImageSource.gallery, + ); + if (image != null) { + selectedImageByteData = await File(image.path).readAsBytes(); + notifyListeners(); + } + } + + void removeSelectedImage() { + selectedImageByteData = null; + } + + void setGroupName(String name) { + groupName = name; + notifyListeners(); + } + + void setSearchKeyword(String keyword) { + searchKeyword = keyword; + notifyListeners(); + } + + void addGroupContacts(List list) { + listContact = []; + for (var element in list) { + listContact.add(element.contact!); + } + notifyListeners(); + } + + Future createGroup({ + required Function(dynamic) whenComplete, + required Function() whenNameIsEmpty, + }) async { + if (groupName.isNotEmpty) { + isLoading = true; + notifyListeners(); + + var group = AtGroup( + groupName.trim(), + description: 'group desc', + displayName: groupName.trim(), + members: Set.from(listContact), + createdBy: groupService.currentAtsign, + updatedBy: groupService.currentAtsign, + ); + + if (selectedImageByteData != null) { + group.groupPicture = selectedImageByteData; + } + + var result = await groupService.createGroup(group); + + isLoading = false; + notifyListeners(); + + whenComplete(result); + } else { + whenNameIsEmpty; + } + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 39133d2e..af07679d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -87,10 +87,7 @@ dependency_overrides: biometric_storage: ^4.1.3 file_picker: ^4.5.1 at_contacts_group_flutter: - git: - url: https://github.com/atsign-foundation/at_widgets - path: packages/at_contacts_group_flutter - ref: trunk + path: ../../user/at_widgets/packages/at_contacts_group_flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From d0010f975991d413b1cad35fd116c4316a231122 Mon Sep 17 00:00:00 2001 From: sonle Date: Wed, 24 May 2023 13:47:46 +0700 Subject: [PATCH 87/94] feat: remove dependeny_override package in pubspec.yaml --- pubspec.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index af07679d..273a666e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -86,8 +86,6 @@ dependency_overrides: at_client: ^3.0.56 biometric_storage: ^4.1.3 file_picker: ^4.5.1 - at_contacts_group_flutter: - path: ../../user/at_widgets/packages/at_contacts_group_flutter # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From a51c65cef6f87340e19f65a4d3dcf3dc3482caf2 Mon Sep 17 00:00:00 2001 From: sonle Date: Thu, 25 May 2023 17:27:41 +0700 Subject: [PATCH 88/94] feat: remove old history when switching atKey and enable add button when empty in contact screen --- .../contact_new_version/contact_screen.dart | 34 +++++++++++++++++++ .../widget/empty_contact_widget.dart | 5 ++- .../widget/list_contact_widget.dart | 3 ++ lib/services/backend_service.dart | 10 ++++-- lib/view_models/create_group_provider.dart | 5 +++ lib/view_models/history_provider.dart | 5 +++ pubspec.yaml | 6 ++++ 7 files changed, 65 insertions(+), 3 deletions(-) diff --git a/lib/screens/contact_new_version/contact_screen.dart b/lib/screens/contact_new_version/contact_screen.dart index cb6b9983..994f4dae 100644 --- a/lib/screens/contact_new_version/contact_screen.dart +++ b/lib/screens/contact_new_version/contact_screen.dart @@ -197,6 +197,20 @@ class _ContactScreenState extends State await reloadPage(); } }, + onTapAddButton: () async { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return AddContactScreen(); + }, + ); + if (result == true) { + await reloadPage(); + } + }, ), ListContactWidget( contactsType: ListContactType.trusted, @@ -232,6 +246,26 @@ class _ContactScreenState extends State ), ); }, + onTapAddButton: () async { + final result = await showModalBottomSheet( + context: context, + isScrollControlled: true, + useRootNavigator: true, + backgroundColor: Colors.transparent, + builder: (BuildContext context) { + return CreateGroupScreen( + trustContacts: trustedProvider.trustedContacts, + ); + }, + ); + if (createGroupProvider.selectedImageByteData != null) { + createGroupProvider.removeSelectedImage(); + } + if (result ?? false) { + await _groupService.fetchGroupsAndContacts(); + setState(() {}); + } + }, ), ], ), diff --git a/lib/screens/contact_new_version/widget/empty_contact_widget.dart b/lib/screens/contact_new_version/widget/empty_contact_widget.dart index b610acb5..51e53325 100644 --- a/lib/screens/contact_new_version/widget/empty_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/empty_contact_widget.dart @@ -1,4 +1,5 @@ import 'package:atsign_atmosphere_pro/data_models/enums/contact_type.dart'; +import 'package:atsign_atmosphere_pro/screens/contact_new_version/create_group_screen.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -7,10 +8,12 @@ import 'package:flutter_svg/flutter_svg.dart'; class EmptyContactsWidget extends StatelessWidget { final ListContactType? contactsType; + final Function() onTapAddButton; const EmptyContactsWidget({ Key? key, this.contactsType, + required this.onTapAddButton, }) : super(key: key); @override @@ -120,7 +123,7 @@ class EmptyContactsWidget extends StatelessWidget { ), InkWell( borderRadius: BorderRadius.circular(46), - onTap: () async {}, + onTap: onTapAddButton, child: Container( decoration: BoxDecoration( color: ColorConstants.orange, diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index 1850497c..a28e4b59 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -20,6 +20,7 @@ class ListContactWidget extends StatefulWidget { final List? selectedContacts; final ListContactType? contactsType; final String searchKeywords; + final Function()? onTapAddButton; const ListContactWidget({ Key? key, @@ -32,6 +33,7 @@ class ListContactWidget extends StatefulWidget { this.selectedContacts, this.contactsType, this.searchKeywords = '', + this.onTapAddButton, }) : super(key: key); @override @@ -83,6 +85,7 @@ class _ListContactWidgetState extends State { if (_filteredList.isEmpty) { return EmptyContactsWidget( contactsType: widget.contactsType, + onTapAddButton: widget.onTapAddButton ?? () {}, ); } // renders contacts according to the initial alphabet diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart index 13211bed..6ad25ac4 100644 --- a/lib/services/backend_service.dart +++ b/lib/services/backend_service.dart @@ -21,7 +21,9 @@ import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/constants.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; +import 'package:atsign_atmosphere_pro/view_models/add_contact_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; +import 'package:atsign_atmosphere_pro/view_models/create_group_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/file_download_checker.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/history_provider.dart'; @@ -56,6 +58,7 @@ class BackendService { late AtClientPreference atClientPreference; bool autoAcceptFiles = false; final String AUTH_SUCCESS = "Authentication successful"; + // Timer? periodicHistoryRefresh; String? get currentAtsign => currentAtSign; Directory? downloadDirectory; @@ -521,13 +524,16 @@ class BackendService { // clearing file and contact informations. Provider.of(NavService.navKey.currentState!.context, listen: false) - .selectedContacts = []; + .resetData(); Provider.of(NavService.navKey.currentState!.context, listen: false) - .selectedFiles = []; + .resetData(); Provider.of(NavService.navKey.currentState!.context, listen: false) .resetData(); + Provider.of(NavService.navKey.currentState!.context, + listen: false) + .resetData(); await KeychainUtil.makeAtSignPrimary(onboardedAtsign); startMonitor(); diff --git a/lib/view_models/create_group_provider.dart b/lib/view_models/create_group_provider.dart index 90ee9756..7d6babfe 100644 --- a/lib/view_models/create_group_provider.dart +++ b/lib/view_models/create_group_provider.dart @@ -25,6 +25,11 @@ class CreateGroupProvider extends BaseModel { } } + void resetData() { + listContact = []; + notifyListeners(); + } + void removeSelectedImage() { selectedImageByteData = null; } diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 1654a557..76346d60 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -85,6 +85,11 @@ class HistoryProvider extends BaseModel { recentFile = []; individualSentFileId = {}; receivedItemsId = {}; + tempSentHistory = []; + receivedFileHistory = []; + allFilesHistory = []; + displayFilesHistory = []; + notifyListeners(); } String get getSearchText => _historySearchText; diff --git a/pubspec.yaml b/pubspec.yaml index 273a666e..e70b151a 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -86,6 +86,12 @@ dependency_overrides: at_client: ^3.0.56 biometric_storage: ^4.1.3 file_picker: ^4.5.1 + at_contacts_group_flutter: + git: + url: https://github.com/atsign-foundation/at_widgets + path: packages/at_contacts_group_flutter + ref: trunk + # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From db5c902b7e30c38bde3af94cb1bf9f38d6c168f7 Mon Sep 17 00:00:00 2001 From: sonle Date: Fri, 26 May 2023 15:09:52 +0700 Subject: [PATCH 89/94] feat: add dependency override --- pubspec.yaml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pubspec.yaml b/pubspec.yaml index e70b151a..cbf4a9aa 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -91,7 +91,11 @@ dependency_overrides: url: https://github.com/atsign-foundation/at_widgets path: packages/at_contacts_group_flutter ref: trunk - + at_contacts_flutter: + git: + url: https://github.com/atsign-foundation/at_widgets + path: packages/at_contacts_flutter + ref: trunk # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec From 016f45e2711cd83c138597588f1d7c06aabc9d4c Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Fri, 26 May 2023 13:53:01 +0530 Subject: [PATCH 90/94] fix: onboard and trusted issue --- android/build.gradle | 2 +- ios/Podfile.lock | 10 +- ios/Runner.xcodeproj/project.pbxproj | 1 + .../contact_detail_screen.dart | 2 +- lib/services/backend_service.dart | 4 +- macos/Flutter/GeneratedPluginRegistrant.swift | 2 +- pubspec.lock | 661 +++++++++++------- pubspec.yaml | 8 +- 8 files changed, 427 insertions(+), 263 deletions(-) diff --git a/android/build.gradle b/android/build.gradle index 9f81b70e..2c5c4dd6 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -26,6 +26,6 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/ios/Podfile.lock b/ios/Podfile.lock index 1dae9316..6203d15c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -149,12 +149,12 @@ DEPENDENCIES: - image_picker_ios (from `.symlinks/plugins/image_picker_ios/ios`) - open_file (from `.symlinks/plugins/open_file/ios`) - package_info_plus (from `.symlinks/plugins/package_info_plus/ios`) - - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/ios`) + - path_provider_foundation (from `.symlinks/plugins/path_provider_foundation/darwin`) - permission_handler_apple (from `.symlinks/plugins/permission_handler_apple/ios`) - qr_code_scanner (from `.symlinks/plugins/qr_code_scanner/ios`) - receive_sharing_intent (from `.symlinks/plugins/receive_sharing_intent/ios`) - share_plus (from `.symlinks/plugins/share_plus/ios`) - - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/ios`) + - shared_preferences_foundation (from `.symlinks/plugins/shared_preferences_foundation/darwin`) - url_launcher_ios (from `.symlinks/plugins/url_launcher_ios/ios`) - video_compress (from `.symlinks/plugins/video_compress/ios`) - video_thumbnail (from `.symlinks/plugins/video_thumbnail/ios`) @@ -208,7 +208,7 @@ EXTERNAL SOURCES: package_info_plus: :path: ".symlinks/plugins/package_info_plus/ios" path_provider_foundation: - :path: ".symlinks/plugins/path_provider_foundation/ios" + :path: ".symlinks/plugins/path_provider_foundation/darwin" permission_handler_apple: :path: ".symlinks/plugins/permission_handler_apple/ios" qr_code_scanner: @@ -218,7 +218,7 @@ EXTERNAL SOURCES: share_plus: :path: ".symlinks/plugins/share_plus/ios" shared_preferences_foundation: - :path: ".symlinks/plugins/shared_preferences_foundation/ios" + :path: ".symlinks/plugins/shared_preferences_foundation/darwin" url_launcher_ios: :path: ".symlinks/plugins/url_launcher_ios/ios" video_compress: @@ -240,7 +240,7 @@ SPEC CHECKSUMS: DKImagePickerController: b512c28220a2b8ac7419f21c491fc8534b7601ac DKPhotoGallery: fdfad5125a9fdda9cc57df834d49df790dbb4179 emoji_picker_flutter: df19dac03a2b39ac667dc8d1da939ef3a9e21347 - file_picker: 817ab1d8cd2da9d2da412a417162deee3500fc95 + file_picker: ce3938a0df3cc1ef404671531facef740d03f920 Flutter: f04841e97a9d0b0a8025694d0796dd46242b2854 flutter_image_compress: 5a5e9aee05b6553048b8df1c3bc456d0afaac433 flutter_keychain: 01aabf894ffe8b01adfda1d9df21c210c1b4b452 diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index b84e6ffd..a5de809a 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -287,6 +287,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( diff --git a/lib/screens/contact_new_version/contact_detail_screen.dart b/lib/screens/contact_new_version/contact_detail_screen.dart index 679c8593..d2c9bead 100644 --- a/lib/screens/contact_new_version/contact_detail_screen.dart +++ b/lib/screens/contact_new_version/contact_detail_screen.dart @@ -52,7 +52,7 @@ class _ContactDetailScreenState extends State { historyProvider = Provider.of(NavService.navKey.currentContext!); checkTrustedContact(); - nicknameController.text = widget.contact.tags!['nickname'] ?? ""; + nicknameController.text = widget.contact.tags?['nickname'] ?? ""; super.initState(); } diff --git a/lib/services/backend_service.dart b/lib/services/backend_service.dart index 6ad25ac4..f936fd69 100644 --- a/lib/services/backend_service.dart +++ b/lib/services/backend_service.dart @@ -453,9 +453,7 @@ class BackendService { late var atClientPrefernce; AtOnboardingResult result; - if ((atSign ?? '').isNotEmpty) { - _onboardingService.setAtsign = atSign; - } + _onboardingService.setAtsign = atSign; // await getAtClientPreference(); await getAtClientPreference() diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index a153d5bd..751b188d 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -12,7 +12,7 @@ import emoji_picker_flutter import file_selector_macos import flutter_local_notifications import local_notifier -import package_info_plus_macos +import package_info_plus import path_provider_foundation import share_plus_macos import shared_preferences_foundation diff --git a/pubspec.lock b/pubspec.lock index 94c4e7a5..524645f9 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -5,105 +5,120 @@ packages: dependency: transitive description: name: _fe_analyzer_shared - url: "https://pub.dartlang.org" + sha256: "4897882604d919befd350648c7f91926a9d5de99e67b455bf0917cc2362f4bb8" + url: "https://pub.dev" source: hosted version: "47.0.0" analyzer: dependency: transitive description: name: analyzer - url: "https://pub.dartlang.org" + sha256: "690e335554a8385bc9d787117d9eb52c0c03ee207a607e593de3c9d71b1cfe80" + url: "https://pub.dev" source: hosted version: "4.7.0" archive: dependency: "direct main" description: name: archive - url: "https://pub.dartlang.org" + sha256: "0c8368c9b3f0abbc193b9d6133649a614204b528982bebc7026372d61677ce3a" + url: "https://pub.dev" source: hosted version: "3.3.7" args: dependency: transitive description: name: args - url: "https://pub.dartlang.org" + sha256: c372bb384f273f0c2a8aaaa226dad84dc27c8519a691b888725dec59518ad53a + url: "https://pub.dev" source: hosted version: "2.4.1" asn1lib: dependency: transitive description: name: asn1lib - url: "https://pub.dartlang.org" + sha256: ab96a1cb3beeccf8145c52e449233fe68364c9641623acd3adad66f8184f1039 + url: "https://pub.dev" source: hosted version: "1.4.0" async: dependency: transitive description: name: async - url: "https://pub.dartlang.org" + sha256: "947bfcf187f74dbc5e146c9eb9c0f10c9f8b30743e341481c1e2ed3ecc18c20c" + url: "https://pub.dev" source: hosted - version: "2.9.0" + version: "2.11.0" at_backupkey_flutter: dependency: "direct main" description: name: at_backupkey_flutter - url: "https://pub.dartlang.org" + sha256: "63a8fb9ba7b091aa8ff1a300509eb6933aeff02621bfbdabd738f42230f7b306" + url: "https://pub.dev" source: hosted version: "4.0.8" at_base2e15: dependency: transitive description: name: at_base2e15 - url: "https://pub.dartlang.org" + sha256: "06ee6ffba9b3439f1c41f9bf0c01f579ce0a8b25f42da8c374ba3a14d721937f" + url: "https://pub.dev" source: hosted version: "1.0.0" at_chops: dependency: transitive description: name: at_chops - url: "https://pub.dartlang.org" + sha256: "4bd63f0bb9b61ad8087455f5ab303101cbc07b6b87892d4a7dba197ca2b3eb6c" + url: "https://pub.dev" source: hosted version: "1.0.3" at_client: dependency: "direct overridden" description: name: at_client - url: "https://pub.dartlang.org" + sha256: "08dae4ab49aa971bffd3504dbfdb17e42995e4aa048e1511a953fbd06862f9f5" + url: "https://pub.dev" source: hosted version: "3.0.59" at_client_mobile: dependency: "direct main" description: name: at_client_mobile - url: "https://pub.dartlang.org" + sha256: f056674b02bdf13e5442725934e834f7757abcd7062d302ec2e65e46432ca134 + url: "https://pub.dev" source: hosted version: "3.2.9" at_common_flutter: dependency: "direct main" description: name: at_common_flutter - url: "https://pub.dartlang.org" + sha256: "75f7b1070d9aa5d42f9878859995f2a24654733a118012b83eb552baaba8ce13" + url: "https://pub.dev" source: hosted version: "2.0.11" at_commons: dependency: "direct main" description: name: at_commons - url: "https://pub.dartlang.org" + sha256: "2028941bd97196dd5d0b3c6075fd338d3086915d79b616891242bcd4c9673085" + url: "https://pub.dev" source: hosted version: "3.0.45" at_contact: dependency: "direct main" description: name: at_contact - url: "https://pub.dartlang.org" + sha256: "232a7dd140bd4c22f4d99c7866633338de57e50f0e1eb84e515dc1ed0f7b0fee" + url: "https://pub.dev" source: hosted version: "3.0.7" at_contacts_flutter: dependency: "direct main" description: name: at_contacts_flutter - url: "https://pub.dartlang.org" + sha256: "159656f0387d17471dfe90337d767a989f067de3da0bf74af0894191a4460cea" + url: "https://pub.dev" source: hosted version: "4.0.9" at_contacts_group_flutter: @@ -119,308 +134,352 @@ packages: dependency: transitive description: name: at_file_saver - url: "https://pub.dartlang.org" + sha256: d1d5322be265ff395b6160f8880b4ebd713b673ea739662eca463def9c588f00 + url: "https://pub.dev" source: hosted version: "0.1.2" at_lookup: dependency: transitive description: name: at_lookup - url: "https://pub.dartlang.org" + sha256: d1ecc7b48c0843289efe90ee3f7948805ddcc7077c984a35fabbc89c3ba7d958 + url: "https://pub.dev" source: hosted version: "3.0.36" at_onboarding_flutter: dependency: "direct main" description: name: at_onboarding_flutter - url: "https://pub.dartlang.org" + sha256: "57f5753460487129a306ffb523f4800146bae885968e9f3f1ec52598867998e9" + url: "https://pub.dev" source: hosted version: "5.0.5" at_persistence_secondary_server: dependency: transitive description: name: at_persistence_secondary_server - url: "https://pub.dartlang.org" + sha256: a1b0e9819d6d22072caf15e52ea3bf459c8b161404ed92bb199bfd32f5ff63a9 + url: "https://pub.dev" source: hosted version: "3.0.52" at_persistence_spec: dependency: transitive description: name: at_persistence_spec - url: "https://pub.dartlang.org" + sha256: "2ee8f0433783633d2375dba2acf27f8778bcbcd40dda8659bf54f80925db224f" + url: "https://pub.dev" source: hosted version: "2.0.12" at_server_status: dependency: transitive description: name: at_server_status - url: "https://pub.dartlang.org" + sha256: "01190ba0886dfafb02a7ec247faff405527e7efaa5c21f567e4f45e10699e12d" + url: "https://pub.dev" source: hosted version: "1.0.3" at_sync_ui_flutter: dependency: "direct main" description: name: at_sync_ui_flutter - url: "https://pub.dartlang.org" + sha256: "9297d27ad1219f61a13372d554d94b5610027df7bd566f08e351a7f9ea09aa17" + url: "https://pub.dev" source: hosted version: "1.0.8" at_utf7: dependency: transitive description: name: at_utf7 - url: "https://pub.dartlang.org" + sha256: c88e964e307bfe0e53e0048cff1ebf5ab60e23ceb4273f1ca664e724a9a5c5c9 + url: "https://pub.dev" source: hosted version: "1.0.0" at_utils: dependency: transitive description: name: at_utils - url: "https://pub.dartlang.org" + sha256: a244ea7f6411b177ba2f011d36d23ec786b0d41b0e62b58bb0e8bf9ad61cf530 + url: "https://pub.dev" source: hosted version: "3.0.12" biometric_storage: dependency: "direct main" description: name: biometric_storage - url: "https://pub.dartlang.org" + sha256: f6d7f5f4c28323797658423e4c5982c9dee42e18f59a8a8d4bc5df38eaf2e2f1 + url: "https://pub.dev" source: hosted version: "4.1.3" boolean_selector: dependency: transitive description: name: boolean_selector - url: "https://pub.dartlang.org" + sha256: "6cfb5af12253eaf2b368f07bacc5a80d1301a071c73360d746b7f2e32d762c66" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" carousel_slider: dependency: "direct main" description: name: carousel_slider - url: "https://pub.dartlang.org" + sha256: "9c695cc963bf1d04a47bd6021f68befce8970bcd61d24938e1fb0918cf5d9c42" + url: "https://pub.dev" source: hosted version: "4.2.1" characters: dependency: transitive description: name: characters - url: "https://pub.dartlang.org" + sha256: "04a925763edad70e8443c99234dc3328f442e811f1d8fd1a72f1c8ad0f69a605" + url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "1.3.0" charcode: dependency: transitive description: name: charcode - url: "https://pub.dartlang.org" + sha256: fb98c0f6d12c920a02ee2d998da788bca066ca5f148492b7085ee23372b12306 + url: "https://pub.dev" source: hosted version: "1.3.1" cli_util: dependency: transitive description: name: cli_util - url: "https://pub.dartlang.org" + sha256: "66f86e916d285c1a93d3b79587d94bd71984a66aac4ff74e524cfa7877f1395c" + url: "https://pub.dev" source: hosted version: "0.3.5" clock: dependency: transitive description: name: clock - url: "https://pub.dartlang.org" + sha256: cb6d7f03e1de671e34607e909a7213e31d7752be4fb66a86d29fe1eb14bfb5cf + url: "https://pub.dev" source: hosted version: "1.1.1" collection: dependency: transitive description: name: collection - url: "https://pub.dartlang.org" + sha256: "4a07be6cb69c84d677a6c3096fcf960cc3285a8330b4603e0d463d15d9bd934c" + url: "https://pub.dev" source: hosted - version: "1.16.0" + version: "1.17.1" console: dependency: transitive description: name: console - url: "https://pub.dartlang.org" + sha256: e04e7824384c5b39389acdd6dc7d33f3efe6b232f6f16d7626f194f6a01ad69a + url: "https://pub.dev" source: hosted version: "4.1.0" convert: dependency: transitive description: name: convert - url: "https://pub.dartlang.org" + sha256: "0f08b14755d163f6e2134cb58222dd25ea2a2ee8a195e53983d57c075324d592" + url: "https://pub.dev" source: hosted version: "3.1.1" coverage: dependency: transitive description: name: coverage - url: "https://pub.dartlang.org" + sha256: "2fb815080e44a09b85e0f2ca8a820b15053982b2e714b59267719e8a9ff17097" + url: "https://pub.dev" source: hosted version: "1.6.3" cron: dependency: transitive description: name: cron - url: "https://pub.dartlang.org" + sha256: d98aa8cdad0cccdb6b098e6a1fb89339c180d8a229145fa4cd8c6fc538f0e35f + url: "https://pub.dev" source: hosted version: "0.5.1" cross_file: dependency: transitive description: name: cross_file - url: "https://pub.dartlang.org" + sha256: "0b0036e8cccbfbe0555fd83c1d31a6f30b77a96b598b35a5d36dd41f718695e9" + url: "https://pub.dev" source: hosted version: "0.3.3+4" crypto: dependency: transitive description: name: crypto - url: "https://pub.dartlang.org" + sha256: aa274aa7774f8964e4f4f38cc994db7b6158dd36e9187aaceaddc994b35c6c67 + url: "https://pub.dev" source: hosted version: "3.0.2" crypton: dependency: transitive description: name: crypton - url: "https://pub.dartlang.org" + sha256: "886462e83bf642ba10f5382002654d27da8c2e6e1f42d928f12764cfa204f124" + url: "https://pub.dev" source: hosted version: "2.1.0" csslib: dependency: transitive description: name: csslib - url: "https://pub.dartlang.org" + sha256: b36c7f7e24c0bdf1bf9a3da461c837d1de64b9f8beb190c9011d8c72a3dfd745 + url: "https://pub.dev" source: hosted version: "0.17.2" cupertino_icons: dependency: "direct main" description: name: cupertino_icons - url: "https://pub.dartlang.org" + sha256: e35129dc44c9118cee2a5603506d823bab99c68393879edb440e0090d07586be + url: "https://pub.dev" source: hosted - version: "0.1.3" + version: "1.0.5" dbus: dependency: transitive description: name: dbus - url: "https://pub.dartlang.org" + sha256: "6f07cba3f7b3448d42d015bfd3d53fe12e5b36da2423f23838efc1d5fb31a263" + url: "https://pub.dev" source: hosted - version: "0.7.4" + version: "0.7.8" desktop_window: dependency: "direct main" description: name: desktop_window - url: "https://pub.dartlang.org" + sha256: "6256fb6feb7b5ec1311c76a3503f89202825bfe92c0458ec5fe7a728ffa216d5" + url: "https://pub.dev" source: hosted version: "0.4.0" ecdsa: dependency: transitive description: name: ecdsa - url: "https://pub.dartlang.org" + sha256: dd1efbaf6c18bfde9347dddcfe10dce3dd044e5a1b237457a49b5c24850dfb95 + url: "https://pub.dev" source: hosted version: "0.0.4" elliptic: dependency: transitive description: name: elliptic - url: "https://pub.dartlang.org" + sha256: "8c7396126c81c574fe970ac4afe9ba919b1ca754da20b509664be2345ffb2845" + url: "https://pub.dev" source: hosted version: "0.3.8" emoji_picker_flutter: dependency: transitive description: name: emoji_picker_flutter - url: "https://pub.dartlang.org" + sha256: ece466d8da2dfcb773ae38c90a5548b8f0c6882a5cc51840429ac5dbdc43b5cb + url: "https://pub.dev" source: hosted version: "1.5.4" encrypt: dependency: transitive description: name: encrypt - url: "https://pub.dartlang.org" + sha256: "4fd4e4fdc21b9d7d4141823e1e6515cd94e7b8d84749504c232999fba25d9bbb" + url: "https://pub.dev" source: hosted version: "5.0.1" fake_async: dependency: transitive description: name: fake_async - url: "https://pub.dartlang.org" + sha256: "511392330127add0b769b75a987850d136345d9227c6b94c96a04cf4a391bf78" + url: "https://pub.dev" source: hosted version: "1.3.1" ffi: dependency: transitive description: name: ffi - url: "https://pub.dartlang.org" + sha256: ed5337a5660c506388a9f012be0288fb38b49020ce2b45fe1f8b8323fe429f99 + url: "https://pub.dev" source: hosted - version: "1.2.1" + version: "2.0.2" file: dependency: transitive description: name: file - url: "https://pub.dartlang.org" + sha256: "1b92bec4fc2a72f59a8e15af5f52cd441e4a7860b49499d69dfa817af20e925d" + url: "https://pub.dev" source: hosted version: "6.1.4" file_picker: dependency: "direct main" description: name: file_picker - url: "https://pub.dartlang.org" + sha256: b85eb92b175767fdaa0c543bf3b0d1f610fe966412ea72845fe5ba7801e763ff + url: "https://pub.dev" source: hosted - version: "4.6.1" + version: "5.2.10" file_selector: dependency: "direct main" description: name: file_selector - url: "https://pub.dartlang.org" + sha256: "9e34368bfacdf644e2c8a59e2b241cfb722bcbbd09876410e8775ae4905d6a49" + url: "https://pub.dev" source: hosted version: "0.8.4+3" file_selector_linux: dependency: transitive description: name: file_selector_linux - url: "https://pub.dartlang.org" + sha256: c06249f2082e88aca55f4aad9e4c70ff0f2b61d753c1577d51adeab88b3f0178 + url: "https://pub.dev" source: hosted version: "0.0.3" file_selector_macos: dependency: "direct main" description: name: file_selector_macos - url: "https://pub.dartlang.org" + sha256: e87311d719039da30d26ae829aab3ae66f82deb3318cd70ffecb608c99e3da68 + url: "https://pub.dev" source: hosted version: "0.8.2+2" file_selector_platform_interface: dependency: transitive description: name: file_selector_platform_interface - url: "https://pub.dartlang.org" + sha256: bf15ba6978161e4bb28beeb7cc8106d9d7febcfaf9f7daeab11ba5f54fa8148e + url: "https://pub.dev" source: hosted version: "2.5.0" file_selector_web: dependency: transitive description: name: file_selector_web - url: "https://pub.dartlang.org" + sha256: bf166d08f4c3f79286774cdfa39ed301e076c5a903c435f5199818288f24a66d + url: "https://pub.dev" source: hosted version: "0.8.1+5" file_selector_windows: dependency: transitive description: name: file_selector_windows - url: "https://pub.dartlang.org" + sha256: "8bbcc82fe0d3cdf5ae5c289492ddfd703ec028028d9f194dbceae04cfbde1c48" + url: "https://pub.dev" source: hosted version: "0.8.2+2" filesystem_picker: dependency: "direct main" description: name: filesystem_picker - url: "https://pub.dartlang.org" + sha256: "41bb01c65cbd8abc389509adfbd08fc4c9090d2d4d15c5fa8813d0efd980f523" + url: "https://pub.dev" source: hosted version: "2.0.1" fixnum: dependency: transitive description: name: fixnum - url: "https://pub.dartlang.org" + sha256: "04be3e934c52e082558cc9ee21f42f5c1cd7a1262f4c63cd0357c08d5bba81ec" + url: "https://pub.dev" source: hosted version: "1.0.1" flutter: @@ -432,56 +491,64 @@ packages: dependency: transitive description: name: flutter_image_compress - url: "https://pub.dartlang.org" + sha256: "37f1b26399098e5f97b74c1483f534855e7dff68ead6ddaccf747029fb03f29f" + url: "https://pub.dev" source: hosted version: "1.1.3" flutter_keychain: dependency: "direct main" description: name: flutter_keychain - url: "https://pub.dartlang.org" + sha256: "777ea8d3e1f55536bc8489a9ced73a912da4065645d9a1f751aae3548825b140" + url: "https://pub.dev" source: hosted version: "2.2.1" flutter_local_notifications: dependency: "direct main" description: name: flutter_local_notifications - url: "https://pub.dartlang.org" + sha256: "57d0012730780fe137260dd180e072c18a73fbeeb924cdc029c18aaa0f338d64" + url: "https://pub.dev" source: hosted version: "9.9.1" flutter_local_notifications_linux: dependency: transitive description: name: flutter_local_notifications_linux - url: "https://pub.dartlang.org" + sha256: b472bfc173791b59ede323661eae20f7fff0b6908fea33dd720a6ef5d576bae8 + url: "https://pub.dev" source: hosted version: "0.5.1" flutter_local_notifications_platform_interface: dependency: transitive description: name: flutter_local_notifications_platform_interface - url: "https://pub.dartlang.org" + sha256: "21bceee103a66a53b30ea9daf677f990e5b9e89b62f222e60dd241cd08d63d3a" + url: "https://pub.dev" source: hosted version: "5.0.0" flutter_plugin_android_lifecycle: dependency: transitive description: name: flutter_plugin_android_lifecycle - url: "https://pub.dartlang.org" + sha256: "96af49aa6b57c10a312106ad6f71deed5a754029c24789bbf620ba784f0bd0b0" + url: "https://pub.dev" source: hosted version: "2.0.14" flutter_slidable: dependency: "direct main" description: name: flutter_slidable - url: "https://pub.dartlang.org" + sha256: c7607eb808cdef19c8468246e95a133308aeaeb3971cdd9edfb9d5e31cedfbe9 + url: "https://pub.dev" source: hosted version: "0.6.0" flutter_svg: dependency: "direct main" description: name: flutter_svg - url: "https://pub.dartlang.org" + sha256: "6ff9fa12892ae074092de2fa6a9938fb21dbabfdaa2ff57dc697ff912fc8d4b2" + url: "https://pub.dev" source: hosted version: "1.1.6" flutter_test: @@ -493,7 +560,8 @@ packages: dependency: "direct main" description: name: flutter_toastr - url: "https://pub.dartlang.org" + sha256: "60e4af64bfba2c43ca4bedf09d2e84ba36ac242f0b13ac26681eb547ccd8489e" + url: "https://pub.dev" source: hosted version: "1.0.3" flutter_web_plugins: @@ -505,623 +573,680 @@ packages: dependency: "direct main" description: name: fluttertoast - url: "https://pub.dartlang.org" + sha256: "7cc92eabe01e3f1babe1571c5560b135dfc762a34e41e9056881e2196b178ec1" + url: "https://pub.dev" source: hosted version: "8.1.2" frontend_server_client: dependency: transitive description: name: frontend_server_client - url: "https://pub.dartlang.org" + sha256: "408e3ca148b31c20282ad6f37ebfa6f4bdc8fede5b74bc2f08d9d92b55db3612" + url: "https://pub.dev" source: hosted - version: "2.1.3" + version: "3.2.0" get_it: dependency: transitive description: name: get_it - url: "https://pub.dartlang.org" + sha256: "43133b45f32f1d96bbaeb43ea35a50ce854981baa80f47c3e26ee2ad23bef113" + url: "https://pub.dev" source: hosted version: "7.5.0" glob: dependency: transitive description: name: glob - url: "https://pub.dartlang.org" + sha256: "4515b5b6ddb505ebdd242a5f2cc5d22d3d6a80013789debfbda7777f47ea308c" + url: "https://pub.dev" source: hosted version: "2.1.1" google_fonts: dependency: "direct main" description: name: google_fonts - url: "https://pub.dartlang.org" + sha256: "2776c66b3e97c6cdd58d1bd3281548b074b64f1fd5c8f82391f7456e38849567" + url: "https://pub.dev" source: hosted - version: "2.3.3" + version: "4.0.5" hive: dependency: transitive description: name: hive - url: "https://pub.dartlang.org" + sha256: "8dcf6db979d7933da8217edcec84e9df1bdb4e4edc7fc77dbd5aa74356d6d941" + url: "https://pub.dev" source: hosted version: "2.2.3" html: dependency: transitive description: name: html - url: "https://pub.dartlang.org" + sha256: "58e3491f7bf0b6a4ea5110c0c688877460d1a6366731155c4a4580e7ded773e8" + url: "https://pub.dev" source: hosted version: "0.15.3" http: dependency: "direct main" description: name: http - url: "https://pub.dartlang.org" + sha256: "4c3f04bfb64d3efd508d06b41b825542f08122d30bda4933fb95c069d22a4fa3" + url: "https://pub.dev" source: hosted - version: "0.13.5" + version: "1.0.0" http_multi_server: dependency: transitive description: name: http_multi_server - url: "https://pub.dartlang.org" + sha256: "97486f20f9c2f7be8f514851703d0119c3596d14ea63227af6f7a481ef2b2f8b" + url: "https://pub.dev" source: hosted version: "3.2.1" http_parser: dependency: transitive description: name: http_parser - url: "https://pub.dartlang.org" + sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b" + url: "https://pub.dev" source: hosted version: "4.0.2" image: dependency: transitive description: name: image - url: "https://pub.dartlang.org" + sha256: "8e9d133755c3e84c73288363e6343157c383a0c6c56fc51afcc5d4d7180306d6" + url: "https://pub.dev" source: hosted version: "3.3.0" image_compression: dependency: transitive description: name: image_compression - url: "https://pub.dartlang.org" + sha256: "911ae4a59196ebcc33c70a38bbc1fa0e2d07243589803dd616120e1a6125bfe9" + url: "https://pub.dev" source: hosted version: "1.0.3" image_picker: dependency: "direct main" description: name: image_picker - url: "https://pub.dartlang.org" + sha256: a8f2f0aed50c03230ab37e93ca2905c50b6c4097245345956eb24a88f45328cd + url: "https://pub.dev" source: hosted version: "0.8.6" image_picker_android: dependency: transitive description: name: image_picker_android - url: "https://pub.dartlang.org" + sha256: "271e0448e82268b3fa1cb2a48e4a911cbc2135587123d7df8e7ca703c5b10da2" + url: "https://pub.dev" source: hosted version: "0.8.6+11" image_picker_for_web: dependency: transitive description: name: image_picker_for_web - url: "https://pub.dartlang.org" + sha256: "98f50d6b9f294c8ba35e25cc0d13b04bfddd25dbc8d32fa9d566a6572f2c081c" + url: "https://pub.dev" source: hosted version: "2.1.12" image_picker_ios: dependency: transitive description: name: image_picker_ios - url: "https://pub.dartlang.org" + sha256: a1546ff5861fc15812953d4733b520c3d371cec3d2859a001ff04c46c4d81883 + url: "https://pub.dev" source: hosted version: "0.8.7+3" image_picker_platform_interface: dependency: transitive description: name: image_picker_platform_interface - url: "https://pub.dartlang.org" + sha256: "1991219d9dbc42a99aff77e663af8ca51ced592cd6685c9485e3458302d3d4f8" + url: "https://pub.dev" source: hosted version: "2.6.3" internet_connection_checker: dependency: transitive description: name: internet_connection_checker - url: "https://pub.dartlang.org" + sha256: "1c683e63e89c9ac66a40748b1b20889fd9804980da732bf2b58d6d5456c8e876" + url: "https://pub.dev" source: hosted version: "1.0.0+1" intl: dependency: "direct main" description: name: intl - url: "https://pub.dartlang.org" + sha256: "910f85bce16fb5c6f614e117efa303e85a1731bb0081edf3604a2ae6e9a3cc91" + url: "https://pub.dev" source: hosted version: "0.17.0" io: dependency: transitive description: name: io - url: "https://pub.dartlang.org" + sha256: "2ec25704aba361659e10e3e5f5d672068d332fc8ac516421d483a11e5cbd061e" + url: "https://pub.dev" source: hosted version: "1.0.4" js: dependency: transitive description: name: js - url: "https://pub.dartlang.org" + sha256: f2c445dce49627136094980615a031419f7f3eb393237e4ecd97ac15dea343f3 + url: "https://pub.dev" source: hosted - version: "0.6.4" + version: "0.6.7" local_notifier: dependency: "direct main" description: name: local_notifier - url: "https://pub.dartlang.org" + sha256: cc855aa6362c8840e3d3b35b1c3b058a3a8becdb2b03d5a9aa3f3a1e861f0a03 + url: "https://pub.dev" source: hosted version: "0.1.5" logging: dependency: transitive description: name: logging - url: "https://pub.dartlang.org" + sha256: "04094f2eb032cbb06c6f6e8d3607edcfcb0455e2bb6cbc010cb01171dcb64e6d" + url: "https://pub.dev" source: hosted version: "1.1.1" matcher: dependency: transitive description: name: matcher - url: "https://pub.dartlang.org" + sha256: "6501fbd55da300384b768785b83e5ce66991266cec21af89ab9ae7f5ce1c4cbb" + url: "https://pub.dev" source: hosted - version: "0.12.12" + version: "0.12.15" material_color_utilities: dependency: transitive description: name: material_color_utilities - url: "https://pub.dartlang.org" + sha256: d92141dc6fe1dad30722f9aa826c7fbc896d021d792f80678280601aff8cf724 + url: "https://pub.dev" source: hosted - version: "0.1.5" + version: "0.2.0" meta: dependency: transitive description: name: meta - url: "https://pub.dartlang.org" + sha256: "3c74dbf8763d36539f114c799d8a2d87343b5067e9d796ca22b5eb8437090ee3" + url: "https://pub.dev" source: hosted - version: "1.8.0" + version: "1.9.1" mime: dependency: transitive description: name: mime - url: "https://pub.dartlang.org" + sha256: e4ff8e8564c03f255408decd16e7899da1733852a9110a58fe6d1b817684a63e + url: "https://pub.dev" source: hosted version: "1.0.4" mocktail: dependency: transitive description: name: mocktail - url: "https://pub.dartlang.org" + sha256: "80a996cd9a69284b3dc521ce185ffe9150cde69767c2d3a0720147d93c0cef53" + url: "https://pub.dev" source: hosted version: "0.3.0" msix: dependency: "direct dev" description: name: msix - url: "https://pub.dartlang.org" + sha256: e3de4d9f52543ad6e4b0f534991e1303cbd379d24be28dd241ac60bd9439a201 + url: "https://pub.dev" source: hosted version: "3.7.0" mutex: dependency: transitive description: name: mutex - url: "https://pub.dartlang.org" + sha256: "03116a4e46282a671b46c12de649d72c0ed18188ffe12a8d0fc63e83f4ad88f4" + url: "https://pub.dev" source: hosted version: "3.0.1" nested: dependency: transitive description: name: nested - url: "https://pub.dartlang.org" + sha256: "03bac4c528c64c95c722ec99280375a6f2fc708eec17c7b3f07253b626cd2a20" + url: "https://pub.dev" source: hosted version: "1.0.0" new_version: dependency: "direct main" description: name: new_version - url: "https://pub.dartlang.org" + sha256: "2eabd66e53c882dbaab4f3f8824d139a35a0521e2e04b8fd6d9fb358112691e9" + url: "https://pub.dev" source: hosted version: "0.3.1" ninja_asn1: dependency: transitive description: name: ninja_asn1 - url: "https://pub.dartlang.org" + sha256: b0f04877243fda51c475ec2bcaadb55a92759baee9f02888124c60775760ccf7 + url: "https://pub.dev" source: hosted version: "2.0.0" node_preamble: dependency: transitive description: name: node_preamble - url: "https://pub.dartlang.org" + sha256: "6e7eac89047ab8a8d26cf16127b5ed26de65209847630400f9aefd7cd5c730db" + url: "https://pub.dev" source: hosted version: "2.0.2" open_file: dependency: "direct main" description: name: open_file - url: "https://pub.dartlang.org" + sha256: c85fbdc6ea2f44adcd999a74821a1436e620f9dfc167cda1ad0c9fb243616257 + url: "https://pub.dev" source: hosted - version: "3.2.1" + version: "3.3.1" package_config: dependency: transitive description: name: package_config - url: "https://pub.dartlang.org" + sha256: "1c5b77ccc91e4823a5af61ee74e6b972db1ef98c2ff5a18d3161c982a55448bd" + url: "https://pub.dev" source: hosted version: "2.1.0" package_info_plus: dependency: "direct main" description: name: package_info_plus - url: "https://pub.dartlang.org" + sha256: "10259b111176fba5c505b102e3a5b022b51dd97e30522e906d6922c745584745" + url: "https://pub.dev" source: hosted - version: "1.4.2" - package_info_plus_linux: - dependency: transitive - description: - name: package_info_plus_linux - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.5" - package_info_plus_macos: - dependency: transitive - description: - name: package_info_plus_macos - url: "https://pub.dartlang.org" - source: hosted - version: "1.3.0" + version: "3.1.2" package_info_plus_platform_interface: dependency: transitive description: name: package_info_plus_platform_interface - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.2" - package_info_plus_web: - dependency: transitive - description: - name: package_info_plus_web - url: "https://pub.dartlang.org" + sha256: "9bc8ba46813a4cc42c66ab781470711781940780fd8beddd0c3da62506d3a6c6" + url: "https://pub.dev" source: hosted - version: "1.0.6" - package_info_plus_windows: - dependency: transitive - description: - name: package_info_plus_windows - url: "https://pub.dartlang.org" - source: hosted - version: "1.0.5" + version: "2.0.1" path: dependency: transitive description: name: path - url: "https://pub.dartlang.org" + sha256: "8829d8a55c13fc0e37127c29fedf290c102f4e40ae94ada574091fe0ff96c917" + url: "https://pub.dev" source: hosted - version: "1.8.2" + version: "1.8.3" path_drawing: dependency: transitive description: name: path_drawing - url: "https://pub.dartlang.org" + sha256: bbb1934c0cbb03091af082a6389ca2080345291ef07a5fa6d6e078ba8682f977 + url: "https://pub.dev" source: hosted version: "1.0.1" path_parsing: dependency: transitive description: name: path_parsing - url: "https://pub.dartlang.org" + sha256: e3e67b1629e6f7e8100b367d3db6ba6af4b1f0bb80f64db18ef1fbabd2fa9ccf + url: "https://pub.dev" source: hosted version: "1.0.1" path_provider: dependency: transitive description: name: path_provider - url: "https://pub.dartlang.org" + sha256: c7edf82217d4b2952b2129a61d3ad60f1075b9299e629e149a8d2e39c2e6aad4 + url: "https://pub.dev" source: hosted version: "2.0.14" path_provider_android: dependency: transitive description: name: path_provider_android - url: "https://pub.dartlang.org" + sha256: "2cec049d282c7f13c594b4a73976b0b4f2d7a1838a6dd5aaf7bd9719196bee86" + url: "https://pub.dev" source: hosted version: "2.0.27" path_provider_foundation: dependency: transitive description: name: path_provider_foundation - url: "https://pub.dartlang.org" + sha256: ad4c4d011830462633f03eb34445a45345673dfd4faf1ab0b4735fbd93b19183 + url: "https://pub.dev" source: hosted version: "2.2.2" path_provider_linux: dependency: transitive description: name: path_provider_linux - url: "https://pub.dartlang.org" + sha256: "2ae08f2216225427e64ad224a24354221c2c7907e448e6e0e8b57b1eb9f10ad1" + url: "https://pub.dev" source: hosted version: "2.1.10" path_provider_platform_interface: dependency: transitive description: name: path_provider_platform_interface - url: "https://pub.dartlang.org" + sha256: "57585299a729335f1298b43245842678cb9f43a6310351b18fb577d6e33165ec" + url: "https://pub.dev" source: hosted version: "2.0.6" path_provider_windows: dependency: transitive description: name: path_provider_windows - url: "https://pub.dartlang.org" + sha256: d3f80b32e83ec208ac95253e0cd4d298e104fbc63cb29c5c69edaed43b0c69d6 + url: "https://pub.dev" source: hosted - version: "2.0.7" + version: "2.1.6" pedantic: dependency: "direct main" description: name: pedantic - url: "https://pub.dartlang.org" + sha256: "67fc27ed9639506c856c840ccce7594d0bdcd91bc8d53d6e52359449a1d50602" + url: "https://pub.dev" source: hosted version: "1.11.1" permission_handler: dependency: "direct main" description: name: permission_handler - url: "https://pub.dartlang.org" + sha256: "5749ebeb7ec0c3865ea17e3eb337174b87747be816dab582c551e1aff6f6bbf3" + url: "https://pub.dev" source: hosted version: "9.2.0" permission_handler_android: dependency: transitive description: name: permission_handler_android - url: "https://pub.dartlang.org" + sha256: a512e0fa8abcb0659d938ec2df93a70eb1df1fdea5fdc6d79a866bfd858a28fc + url: "https://pub.dev" source: hosted version: "9.0.2+1" permission_handler_apple: dependency: transitive description: name: permission_handler_apple - url: "https://pub.dartlang.org" + sha256: ee96ac32f5a8e6f80756e25b25b9f8e535816c8e6665a96b6d70681f8c4f7e85 + url: "https://pub.dev" source: hosted version: "9.0.8" permission_handler_platform_interface: dependency: transitive description: name: permission_handler_platform_interface - url: "https://pub.dartlang.org" + sha256: "68abbc472002b5e6dfce47fe9898c6b7d8328d58b5d2524f75e277c07a97eb84" + url: "https://pub.dev" source: hosted version: "3.9.0" permission_handler_windows: dependency: transitive description: name: permission_handler_windows - url: "https://pub.dartlang.org" + sha256: f67cab14b4328574938ecea2db3475dad7af7ead6afab6338772c5f88963e38b + url: "https://pub.dev" source: hosted version: "0.1.2" petitparser: dependency: transitive description: name: petitparser - url: "https://pub.dartlang.org" + sha256: "49392a45ced973e8d94a85fdb21293fbb40ba805fc49f2965101ae748a3683b4" + url: "https://pub.dev" source: hosted version: "5.1.0" pin_code_fields: dependency: transitive description: name: pin_code_fields - url: "https://pub.dartlang.org" + sha256: c8652519d14688f3fe2a8288d86910a46aa0b9046d728f292d3bf6067c31b4c7 + url: "https://pub.dev" source: hosted version: "7.4.0" platform: dependency: transitive description: name: platform - url: "https://pub.dartlang.org" + sha256: "4a451831508d7d6ca779f7ac6e212b4023dd5a7d08a27a63da33756410e32b76" + url: "https://pub.dev" source: hosted version: "3.1.0" plugin_platform_interface: dependency: transitive description: name: plugin_platform_interface - url: "https://pub.dartlang.org" + sha256: "6a2128648c854906c53fa8e33986fc0247a1116122f9534dd20e3ab9e16a32bc" + url: "https://pub.dev" source: hosted version: "2.1.4" pointycastle: dependency: transitive description: name: pointycastle - url: "https://pub.dartlang.org" + sha256: "7c1e5f0d23c9016c5bbd8b1473d0d3fb3fc851b876046039509e18e0c7485f2c" + url: "https://pub.dev" source: hosted version: "3.7.3" pool: dependency: transitive description: name: pool - url: "https://pub.dartlang.org" + sha256: "20fe868b6314b322ea036ba325e6fc0711a22948856475e2c2b6306e8ab39c2a" + url: "https://pub.dev" source: hosted version: "1.5.1" process: dependency: transitive description: name: process - url: "https://pub.dartlang.org" + sha256: "53fd8db9cec1d37b0574e12f07520d582019cb6c44abf5479a01505099a34a09" + url: "https://pub.dev" source: hosted version: "4.2.4" provider: dependency: "direct main" description: name: provider - url: "https://pub.dartlang.org" + sha256: cdbe7530b12ecd9eb455bdaa2fcb8d4dad22e80b8afb4798b41479d5ce26847f + url: "https://pub.dev" source: hosted version: "6.0.5" pub_semver: dependency: transitive description: name: pub_semver - url: "https://pub.dartlang.org" + sha256: "40d3ab1bbd474c4c2328c91e3a7df8c6dd629b79ece4c4bd04bee496a224fb0c" + url: "https://pub.dev" source: hosted version: "2.1.4" qr: dependency: transitive description: name: qr - url: "https://pub.dartlang.org" + sha256: "5c4208b4dc0d55c3184d10d83ee0ded6212dc2b5e2ba17c5a0c0aab279128d21" + url: "https://pub.dev" source: hosted version: "2.1.0" qr_code_scanner: dependency: transitive description: name: qr_code_scanner - url: "https://pub.dartlang.org" + sha256: f23b68d893505a424f0bd2e324ebea71ed88465d572d26bb8d2e78a4749591fd + url: "https://pub.dev" source: hosted version: "1.0.1" qr_flutter: dependency: "direct main" description: name: qr_flutter - url: "https://pub.dartlang.org" + sha256: c5c121c54cb6dd837b9b9d57eb7bc7ec6df4aee741032060c8833a678c80b87e + url: "https://pub.dev" source: hosted version: "4.0.0" receive_sharing_intent: dependency: "direct main" description: name: receive_sharing_intent - url: "https://pub.dartlang.org" + sha256: "912bebb551bce75a14098891fd750305b30d53eba0d61cc70cd9973be9866e8d" + url: "https://pub.dev" source: hosted version: "1.4.5" rxdart: dependency: "direct main" description: name: rxdart - url: "https://pub.dartlang.org" + sha256: "0c7c0cedd93788d996e33041ffecda924cc54389199cde4e6a34b440f50044cb" + url: "https://pub.dev" source: hosted version: "0.27.7" share_plus: dependency: "direct main" description: name: share_plus - url: "https://pub.dartlang.org" + sha256: f582d5741930f3ad1bf0211d358eddc0508cc346e5b4b248bd1e569c995ebb7a + url: "https://pub.dev" source: hosted version: "4.5.3" share_plus_linux: dependency: transitive description: name: share_plus_linux - url: "https://pub.dartlang.org" + sha256: dc32bf9f1151b9864bb86a997c61a487967a08f2e0b4feaa9a10538712224da4 + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_macos: dependency: transitive description: name: share_plus_macos - url: "https://pub.dartlang.org" + sha256: "44daa946f2845045ecd7abb3569b61cd9a55ae9cc4cbec9895b2067b270697ae" + url: "https://pub.dev" source: hosted version: "3.0.1" share_plus_platform_interface: dependency: transitive description: name: share_plus_platform_interface - url: "https://pub.dartlang.org" + sha256: "0c6e61471bd71b04a138b8b588fa388e66d8b005e6f2deda63371c5c505a0981" + url: "https://pub.dev" source: hosted version: "3.2.1" share_plus_web: dependency: transitive description: name: share_plus_web - url: "https://pub.dartlang.org" + sha256: eaef05fa8548b372253e772837dd1fbe4ce3aca30ea330765c945d7d4f7c9935 + url: "https://pub.dev" source: hosted version: "3.1.0" share_plus_windows: dependency: transitive description: name: share_plus_windows - url: "https://pub.dartlang.org" + sha256: "3a21515ae7d46988d42130cd53294849e280a5de6ace24bae6912a1bffd757d4" + url: "https://pub.dev" source: hosted version: "3.0.1" shared_preferences: dependency: transitive description: name: shared_preferences - url: "https://pub.dartlang.org" + sha256: "858aaa72d8f61637d64e776aca82e1c67e6d9ee07979123c5d17115031c1b13b" + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_android: dependency: transitive description: name: shared_preferences_android - url: "https://pub.dartlang.org" + sha256: "6478c6bbbecfe9aced34c483171e90d7c078f5883558b30ec3163cf18402c749" + url: "https://pub.dev" source: hosted version: "2.1.4" shared_preferences_foundation: dependency: transitive description: name: shared_preferences_foundation - url: "https://pub.dartlang.org" + sha256: "0c1c16c56c9708aa9c361541a6f0e5cc6fc12a3232d866a687a7b7db30032b07" + url: "https://pub.dev" source: hosted version: "2.2.1" shared_preferences_linux: dependency: transitive description: name: shared_preferences_linux - url: "https://pub.dartlang.org" + sha256: "9d387433ca65717bbf1be88f4d5bb18f10508917a8fa2fb02e0fd0d7479a9afa" + url: "https://pub.dev" source: hosted version: "2.2.0" shared_preferences_platform_interface: dependency: transitive description: name: shared_preferences_platform_interface - url: "https://pub.dartlang.org" + sha256: fb5cf25c0235df2d0640ac1b1174f6466bd311f621574997ac59018a6664548d + url: "https://pub.dev" source: hosted version: "2.2.0" shared_preferences_web: dependency: transitive description: name: shared_preferences_web - url: "https://pub.dartlang.org" + sha256: "74083203a8eae241e0de4a0d597dbedab3b8fef5563f33cf3c12d7e93c655ca5" + url: "https://pub.dev" source: hosted version: "2.1.0" shared_preferences_windows: dependency: transitive description: name: shared_preferences_windows - url: "https://pub.dartlang.org" + sha256: "5e588e2efef56916a3b229c3bfe81e6a525665a454519ca51dbcc4236a274173" + url: "https://pub.dev" source: hosted version: "2.2.0" shelf: dependency: transitive description: name: shelf - url: "https://pub.dartlang.org" + sha256: ad29c505aee705f41a4d8963641f91ac4cee3c8fad5947e033390a7bd8180fa4 + url: "https://pub.dev" source: hosted version: "1.4.1" shelf_packages_handler: dependency: transitive description: name: shelf_packages_handler - url: "https://pub.dartlang.org" + sha256: "89f967eca29607c933ba9571d838be31d67f53f6e4ee15147d5dc2934fee1b1e" + url: "https://pub.dev" source: hosted version: "3.0.2" shelf_static: dependency: transitive description: name: shelf_static - url: "https://pub.dartlang.org" + sha256: a41d3f53c4adf0f57480578c1d61d90342cd617de7fc8077b1304643c2d85c1e + url: "https://pub.dev" source: hosted version: "1.1.2" shelf_web_socket: dependency: transitive description: name: shelf_web_socket - url: "https://pub.dartlang.org" + sha256: "9ca081be41c60190ebcb4766b2486a7d50261db7bd0f5d9615f2d653637a84c1" + url: "https://pub.dev" source: hosted version: "1.0.4" showcaseview: dependency: "direct main" description: name: showcaseview - url: "https://pub.dartlang.org" + sha256: "09b534d806572135c38e06901de4b36b2bbd61739ec56c5fa9242d10748e19df" + url: "https://pub.dev" source: hosted version: "1.1.8" sky_engine: @@ -1133,268 +1258,306 @@ packages: dependency: transitive description: name: source_map_stack_trace - url: "https://pub.dartlang.org" + sha256: "84cf769ad83aa6bb61e0aa5a18e53aea683395f196a6f39c4c881fb90ed4f7ae" + url: "https://pub.dev" source: hosted version: "2.1.1" source_maps: dependency: transitive description: name: source_maps - url: "https://pub.dartlang.org" + sha256: "708b3f6b97248e5781f493b765c3337db11c5d2c81c3094f10904bfa8004c703" + url: "https://pub.dev" source: hosted version: "0.10.12" source_span: dependency: transitive description: name: source_span - url: "https://pub.dartlang.org" + sha256: dd904f795d4b4f3b870833847c461801f6750a9fa8e61ea5ac53f9422b31f250 + url: "https://pub.dev" source: hosted - version: "1.9.0" + version: "1.9.1" stack_trace: dependency: transitive description: name: stack_trace - url: "https://pub.dartlang.org" + sha256: c3c7d8edb15bee7f0f74debd4b9c5f3c2ea86766fe4178eb2a18eb30a0bdaed5 + url: "https://pub.dev" source: hosted - version: "1.10.0" + version: "1.11.0" stream_channel: dependency: transitive description: name: stream_channel - url: "https://pub.dartlang.org" + sha256: "83615bee9045c1d322bbbd1ba209b7a749c2cbcdcb3fdd1df8eb488b3279c1c8" + url: "https://pub.dev" source: hosted - version: "2.1.0" + version: "2.1.1" string_scanner: dependency: transitive description: name: string_scanner - url: "https://pub.dartlang.org" + sha256: "556692adab6cfa87322a115640c11f13cb77b3f076ddcc5d6ae3c20242bedcde" + url: "https://pub.dev" source: hosted - version: "1.1.1" + version: "1.2.0" term_glyph: dependency: transitive description: name: term_glyph - url: "https://pub.dartlang.org" + sha256: a29248a84fbb7c79282b40b8c72a1209db169a2e0542bce341da992fe1bc7e84 + url: "https://pub.dev" source: hosted version: "1.2.1" test: dependency: transitive description: name: test - url: "https://pub.dartlang.org" + sha256: "3dac9aecf2c3991d09b9cdde4f98ded7b30804a88a0d7e4e7e1678e78d6b97f4" + url: "https://pub.dev" source: hosted - version: "1.21.4" + version: "1.24.1" test_api: dependency: transitive description: name: test_api - url: "https://pub.dartlang.org" + sha256: eb6ac1540b26de412b3403a163d919ba86f6a973fe6cc50ae3541b80092fdcfb + url: "https://pub.dev" source: hosted - version: "0.4.12" + version: "0.5.1" test_core: dependency: transitive description: name: test_core - url: "https://pub.dartlang.org" + sha256: "5138dbffb77b2289ecb12b81c11ba46036590b72a64a7a90d6ffb880f1a29e93" + url: "https://pub.dev" source: hosted - version: "0.4.16" + version: "0.5.1" timezone: dependency: transitive description: name: timezone - url: "https://pub.dartlang.org" + sha256: "57b35f6e8ef731f18529695bffc62f92c6189fac2e52c12d478dec1931afb66e" + url: "https://pub.dev" source: hosted version: "0.8.0" typed_data: dependency: transitive description: name: typed_data - url: "https://pub.dartlang.org" + sha256: "26f87ade979c47a150c9eaab93ccd2bebe70a27dc0b4b29517f2904f04eb11a5" + url: "https://pub.dev" source: hosted version: "1.3.1" url_launcher: dependency: "direct main" description: name: url_launcher - url: "https://pub.dartlang.org" + sha256: "75f2846facd11168d007529d6cd8fcb2b750186bea046af9711f10b907e1587e" + url: "https://pub.dev" source: hosted version: "6.1.10" url_launcher_android: dependency: transitive description: name: url_launcher_android - url: "https://pub.dartlang.org" + sha256: "22f8db4a72be26e9e3a4aa3f194b1f7afbc76d20ec141f84be1d787db2155cbd" + url: "https://pub.dev" source: hosted version: "6.0.31" url_launcher_ios: dependency: transitive description: name: url_launcher_ios - url: "https://pub.dartlang.org" + sha256: "9af7ea73259886b92199f9e42c116072f05ff9bea2dcb339ab935dfc957392c2" + url: "https://pub.dev" source: hosted version: "6.1.4" url_launcher_linux: dependency: transitive description: name: url_launcher_linux - url: "https://pub.dartlang.org" + sha256: "207f4ddda99b95b4d4868320a352d374b0b7e05eefad95a4a26f57da413443f5" + url: "https://pub.dev" source: hosted version: "3.0.5" url_launcher_macos: dependency: transitive description: name: url_launcher_macos - url: "https://pub.dartlang.org" + sha256: "91ee3e75ea9dadf38036200c5d3743518f4a5eb77a8d13fda1ee5764373f185e" + url: "https://pub.dev" source: hosted version: "3.0.5" url_launcher_platform_interface: dependency: transitive description: name: url_launcher_platform_interface - url: "https://pub.dartlang.org" + sha256: "6c9ca697a5ae218ce56cece69d46128169a58aa8653c1b01d26fcd4aad8c4370" + url: "https://pub.dev" source: hosted version: "2.1.2" url_launcher_web: dependency: transitive description: name: url_launcher_web - url: "https://pub.dartlang.org" + sha256: "81fe91b6c4f84f222d186a9d23c73157dc4c8e1c71489c4d08be1ad3b228f1aa" + url: "https://pub.dev" source: hosted version: "2.0.16" url_launcher_windows: dependency: transitive description: name: url_launcher_windows - url: "https://pub.dartlang.org" + sha256: "254708f17f7c20a9c8c471f67d86d76d4a3f9c1591aad1e15292008aceb82771" + url: "https://pub.dev" source: hosted version: "3.0.6" uuid: dependency: transitive description: name: uuid - url: "https://pub.dartlang.org" + sha256: "648e103079f7c64a36dc7d39369cabb358d377078a051d6ae2ad3aa539519313" + url: "https://pub.dev" source: hosted version: "3.0.7" vector_math: dependency: transitive description: name: vector_math - url: "https://pub.dartlang.org" + sha256: "80b3257d1492ce4d091729e3a67a60407d227c27241d6927be0130c98e741803" + url: "https://pub.dev" source: hosted - version: "2.1.2" + version: "2.1.4" version: dependency: transitive description: name: version - url: "https://pub.dartlang.org" + sha256: "3d4140128e6ea10d83da32fef2fa4003fccbf6852217bb854845802f04191f94" + url: "https://pub.dev" source: hosted version: "3.0.2" video_compress: dependency: "direct main" description: name: video_compress - url: "https://pub.dartlang.org" + sha256: "407693726e674a1e1958801deb2d9daf5a5297707ba6d03375007012dae7389a" + url: "https://pub.dev" source: hosted version: "3.1.2" video_thumbnail: dependency: "direct main" description: name: video_thumbnail - url: "https://pub.dartlang.org" + sha256: "005bf7898bf6cddbf5f079e2618f3d3cb83dd2712714f0042b5a018c2b32e7d6" + url: "https://pub.dev" source: hosted version: "0.4.6" vm_service: dependency: transitive description: name: vm_service - url: "https://pub.dartlang.org" + sha256: e7fb6c2282f7631712b69c19d1bff82f3767eea33a2321c14fa59ad67ea391c7 + url: "https://pub.dev" source: hosted version: "9.4.0" watcher: dependency: transitive description: name: watcher - url: "https://pub.dartlang.org" + sha256: "6a7f46926b01ce81bfc339da6a7f20afbe7733eff9846f6d6a5466aa4c6667c0" + url: "https://pub.dev" source: hosted version: "1.0.2" web_socket_channel: dependency: transitive description: name: web_socket_channel - url: "https://pub.dartlang.org" + sha256: d88238e5eac9a42bb43ca4e721edba3c08c6354d4a53063afaa568516217621b + url: "https://pub.dev" source: hosted version: "2.4.0" webkit_inspection_protocol: dependency: transitive description: name: webkit_inspection_protocol - url: "https://pub.dartlang.org" + sha256: "67d3a8b6c79e1987d19d848b0892e582dbb0c66c57cc1fef58a177dd2aa2823d" + url: "https://pub.dev" source: hosted version: "1.2.0" webview_flutter: dependency: "direct main" description: name: webview_flutter - url: "https://pub.dartlang.org" + sha256: "392c1d83b70fe2495de3ea2c84531268d5b8de2de3f01086a53334d8b6030a88" + url: "https://pub.dev" source: hosted version: "3.0.4" webview_flutter_android: dependency: transitive description: name: webview_flutter_android - url: "https://pub.dartlang.org" + sha256: "8b3b2450e98876c70bfcead876d9390573b34b9418c19e28168b74f6cb252dbd" + url: "https://pub.dev" source: hosted version: "2.10.4" webview_flutter_platform_interface: dependency: transitive description: name: webview_flutter_platform_interface - url: "https://pub.dartlang.org" + sha256: "812165e4e34ca677bdfbfa58c01e33b27fd03ab5fa75b70832d4b7d4ca1fa8cf" + url: "https://pub.dev" source: hosted version: "1.9.5" webview_flutter_wkwebview: dependency: transitive description: name: webview_flutter_wkwebview - url: "https://pub.dartlang.org" + sha256: a5364369c758892aa487cbf59ea41d9edd10f9d9baf06a94e80f1bd1b4c7bbc0 + url: "https://pub.dev" source: hosted version: "2.9.5" win32: dependency: transitive description: name: win32 - url: "https://pub.dartlang.org" + sha256: a6f0236dbda0f63aa9a25ad1ff9a9d8a4eaaa5012da0dc59d21afdb1dc361ca4 + url: "https://pub.dev" source: hosted - version: "2.6.1" + version: "3.1.4" xdg_directories: dependency: transitive description: name: xdg_directories - url: "https://pub.dartlang.org" + sha256: bd512f03919aac5f1313eb8249f223bacf4927031bf60b02601f81f687689e86 + url: "https://pub.dev" source: hosted version: "0.2.0+3" xml: dependency: transitive description: name: xml - url: "https://pub.dartlang.org" + sha256: ac0e3f4bf00ba2708c33fbabbbe766300e509f8c82dbd4ab6525039813f7e2fb + url: "https://pub.dev" source: hosted version: "6.1.0" yaml: dependency: transitive description: name: yaml - url: "https://pub.dartlang.org" + sha256: "23812a9b125b48d4007117254bca50abb6c712352927eece9e155207b1db2370" + url: "https://pub.dev" source: hosted version: "3.1.1" zxing2: dependency: transitive description: name: zxing2 - url: "https://pub.dartlang.org" + sha256: "1913c33844c68b62573741134ef5f987f1e15e331c95ac7dc327afbb9896e9ec" + url: "https://pub.dev" source: hosted version: "0.1.1" sdks: - dart: ">=2.18.0 <3.0.0" + dart: ">=3.0.0-0 <4.0.0" flutter: ">=3.3.0" diff --git a/pubspec.yaml b/pubspec.yaml index e70b151a..063a2c03 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -32,14 +32,14 @@ dependencies: flutter: sdk: flutter archive: ^3.2.2 - cupertino_icons: ^0.1.3 + cupertino_icons: ^1.0.5 file_picker: ^4.5.1 filesystem_picker: ^2.0.0-nullsafety.0 desktop_window: ^0.4.0 flutter_keychain: ^2.1.0 flutter_local_notifications: ^9.4.0 flutter_slidable: ^0.6.0 - google_fonts: ^2.3.1 + google_fonts: ^4.0.5 intl: ^0.17.0 open_file: ^3.2.1 pedantic: ^1.11.1 @@ -83,9 +83,11 @@ dev_dependencies: msix: ^3.3.1 dependency_overrides: + http: ^1.0.0 + package_info_plus: ^3.0.0 at_client: ^3.0.56 biometric_storage: ^4.1.3 - file_picker: ^4.5.1 + file_picker: ^5.0.0 at_contacts_group_flutter: git: url: https://github.com/atsign-foundation/at_widgets From d46a7a2d3b6bff6758a4c46087c210bc1154ae7c Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Fri, 26 May 2023 15:48:06 +0530 Subject: [PATCH 91/94] fix: trusted contacts message not showing --- .../widget/list_contact_widget.dart | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/lib/screens/contact_new_version/widget/list_contact_widget.dart b/lib/screens/contact_new_version/widget/list_contact_widget.dart index a28e4b59..bd66a63c 100644 --- a/lib/screens/contact_new_version/widget/list_contact_widget.dart +++ b/lib/screens/contact_new_version/widget/list_contact_widget.dart @@ -80,6 +80,7 @@ class _ListContactWidgetState extends State { } else { // filtering contacts and groups var _filteredList = []; + List trustedContacts = []; _filteredList = getAllContactList(snapshot.data ?? []); if (_filteredList.isEmpty) { @@ -88,6 +89,24 @@ class _ListContactWidgetState extends State { onTapAddButton: widget.onTapAddButton ?? () {}, ); } + + if (widget.contactsType == ListContactType.trusted) { + for (var element in (widget.trustedContacts ?? [])) { + trustedContacts.add( + GroupContactsModel( + contact: element, + ), + ); + } + + if (trustedContacts.isEmpty) { + return EmptyContactsWidget( + contactsType: widget.contactsType, + onTapAddButton: widget.onTapAddButton ?? () {}, + ); + } + } + // renders contacts according to the initial alphabet return Scrollbar( radius: const Radius.circular(11), From 1dd7697fcf8e6d23beffd477fa22b4987801a951 Mon Sep 17 00:00:00 2001 From: Sachin Singh Date: Mon, 29 May 2023 21:26:49 +0530 Subject: [PATCH 92/94] build: release changes for 1.0.10+55 mobile platforms --- android/app/build.gradle | 2 +- android/app/src/main/AndroidManifest.xml | 1 + ios/Runner.xcodeproj/project.pbxproj | 12 ++++++------ pubspec.lock | 11 ++++++----- pubspec.yaml | 2 +- 5 files changed, 15 insertions(+), 13 deletions(-) diff --git a/android/app/build.gradle b/android/app/build.gradle index a97f5335..7d9d82ac 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -47,7 +47,7 @@ android { applicationId "com.atsign.atsign_atmosphere_pro" multiDexEnabled true minSdkVersion 24 - targetSdkVersion 30 + targetSdkVersion 31 versionCode flutterVersionCode.toInteger() versionName flutterVersionName } diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 2459d853..1412bebe 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:icon="@mipmap/ic_launcher"> Date: Wed, 31 May 2023 18:23:12 +0700 Subject: [PATCH 93/94] fix: resolve related problems and migrate to Dart 3.0 What I did: - Transfer Screen: make atSign font smaller - Font: Imake it Poppins - "atSign Valid" should only show up if the atSign exits (for example if someone type "xyafdsef" then it would show as invalid) - The load to have be orange (#F07C50) instead of the blue - Blur the background of 'Sending Files Screen' - Load bar gets cut-off (on sending) - maybe slide everything down so it can be fixed at the top - Files: Expanded view, move text a little higher - Files: Increase font on 'Stacked-view' cards - Settings: have app version in grey (like the contact numbers) and at the bottom --- assets/fonts/Poppins/Poppins-Bold.ttf | Bin 0 -> 150292 bytes assets/fonts/Poppins/Poppins-Light.ttf | Bin 0 -> 156188 bytes assets/fonts/Poppins/Poppins-Medium.ttf | Bin 0 -> 152860 bytes assets/fonts/Poppins/Poppins-Regular.ttf | Bin 0 -> 154628 bytes assets/fonts/Poppins/Poppins-SemiBold.ttf | Bin 0 -> 151516 bytes assets/fonts/Poppins/Poppins-Thin.ttf | Bin 0 -> 157916 bytes lib/app.dart | 2 +- .../desktop_received_file_details.dart | 6 +- .../desktop_my_files/desktop_my_files.dart | 7 +- lib/screens/common_widgets/add_contact.dart | 7 +- .../common_widgets/app_bar_custom.dart | 2 +- .../labelled_circular_progress.dart | 7 +- .../common_widgets/loading_widget.dart | 6 +- .../common_widgets/provider_handler.dart | 13 +- .../add_contact_screen.dart | 32 ++- .../blocked_contact_screen.dart | 1 + .../widget/contacts_widget.dart | 1 + lib/screens/history/history_screen.dart | 2 + .../history/transfer_history_screen.dart | 1 + .../widgets/received_file_list_tile.dart | 8 +- lib/screens/my_files/my_files.dart | 7 +- lib/screens/settings/settings_screen.dart | 14 +- .../remove_trusted_contact_dialog.dart | 6 +- .../welcome_screen/welcome_screen.dart | 220 +++++++++--------- .../widgets/welcome_sceen_home.dart | 4 - lib/services/common_utility_functions.dart | 81 ++++--- lib/services/overlay_service.dart | 148 ++++++------ lib/view_models/add_contact_provider.dart | 20 ++ lib/view_models/history_provider.dart | 9 +- pubspec.yaml | 19 +- 30 files changed, 360 insertions(+), 263 deletions(-) create mode 100644 assets/fonts/Poppins/Poppins-Bold.ttf create mode 100644 assets/fonts/Poppins/Poppins-Light.ttf create mode 100644 assets/fonts/Poppins/Poppins-Medium.ttf create mode 100644 assets/fonts/Poppins/Poppins-Regular.ttf create mode 100644 assets/fonts/Poppins/Poppins-SemiBold.ttf create mode 100644 assets/fonts/Poppins/Poppins-Thin.ttf diff --git a/assets/fonts/Poppins/Poppins-Bold.ttf b/assets/fonts/Poppins/Poppins-Bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..89b46e7b8d40b8eedb4363aede515c64929c8f2d GIT binary patch literal 150292 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

dtXmc5a9{XIxg4 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 TVIOuZ&Q*fE@DJH4yej_>eOgBL literal 0 HcmV?d00001 diff --git a/assets/fonts/Poppins/Poppins-Light.ttf b/assets/fonts/Poppins/Poppins-Light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b8f5b061fff300636ad483ba976fb07cce91904a GIT binary patch literal 156188 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%0D04h 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ΠKS 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Poppins/Poppins-Regular.ttf b/assets/fonts/Poppins/Poppins-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..e48144efaf4f3e8d2b3899c0127f26640bcc8e9b GIT binary patch literal 154628 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%0A&K;XT3w60_10CnVP$@8smz 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 literal 0 HcmV?d00001 diff --git a/assets/fonts/Poppins/Poppins-SemiBold.ttf b/assets/fonts/Poppins/Poppins-SemiBold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..8421552499a7efa1a504ac6c8fb04710b0ae01b2 GIT binary patch literal 151516 zcmdSCcX(CB6F0uQ=iD0-0-+|zTbU&KPULrZa`* zWu~QP*gM;|WsLVnXi{cguYxX}oStLMbq8ZDPi7YMNtyfYrZtQe3}wvQw^u>e&@)>m z3#5M;>4y#*T{0%ZzFRBCl!J_kqvchTMzor4d5p38rx^dLu%fJFc)M9%)kyD#^pO<^ za11sr2K^VDSH zmy9m+Dov>czu)1GkEt0~SLIf`gRxM^t2}Ai|t_SPodRKtr6qg7@JSYg}>Ma=D_;u;bw$K>U2|3j8&lJ>)04Jj>WRB z_#4NDv07G%kUG#oaFwhIxCWu+i0{QRSPsjBe+>RASv690VFj#=jfO7;;Z^9paO4Qa zUpVW|3X!81>xPma&gJ$mxhTzpoTV(9<%4fI8xNi(DF1)uPnA+llJb|!nz^x1NI}jG za#VoZze1UYzJP15pHJfKs7;`)3_aP&pmkvkK$Q;ATQ(7_*_1Z z-xuvgk=QEsiv8levcq1nZ*1ShzPWuXdtdut`!M?$`*i#6_C4+M?1$Kw+1J>Qv9EP~ z+;yAlPp*HsHF0a@*3Qk<&BM*dE!ZvAEzNDU+j_SxZrj{jx_h|$xCeO%53`4pM+=YE z9_>6_Jpw$kJcfFdc^~jT_@}T~AekncJ6pybxGVSNkvxXy@FBcH%J!FNBW2qI*-k+= zZf~-8w0E*^Y2Vu3-#)}X!amME)4m5}>u*2QeuR{5y6aZgA6ZQl79=N*q>Yl5+ zuYP*;<%=r^uk6131-N%gtcbQ%mwpdTj*nZ%!jU+89kwu?wAi7Lq9vPj_eusESsa;l|}h5?XQMyXMaK? zX7WSOg*x$t60cM%8&n5%ygEaDPJKmPs~%H-Gqp7(nTDF?nXZ|$%*Eze=9T87=G*39 z?RwfRvD;;5Y1F;ZNwtU zt>f7yc1`*=nbYJ*lY32rn@(u@xl?p(_2ozHA`tWyxGEL zuQ&U$xpVV`=8rUgyZOh>_clM){9+5Gg?EdR7Nc9NZ*i$5YZ=k9w&go5FSc@O)xOo> zRxh+V(CUZQ?ybADp4s|9>wC^-=N8Vc&i>Ak&NyhfQ#^buDm**7EyIo5uZo)jocqq6m={* zBl>tuYRt#6U1GO%>)q{4+^~4J_zelo6FMf$O%#bu6Q?FVop>+Fob*`I+~k(Yxyi33 zpG#?%Qk=3qH9mD`TGO=gX$R8X)0d>*$_UDMB;!(Mm(2RilUb2j^Rv!&PwRd#+bw%+ z_VymWJzmYR&&kdikh46;(sOvvow?4r19I2re%&j$*OXqz^W5?(^6K(F>mAU0LGM5F zd**K~a3~mG@KK?;aB$(9g@5$v(`RL$hQ34le%h~XznT4R_0Q=4O#c%_K1GidZ6Dw` zpznY;209IVZr~q-9v$@U;G)6%2mdrAX~>)*H;RLbpD*4wR2@2T=oclfWsT zeti7+RTElGm^sm5;?jw~*N>{-KB?WLDU*Ji{PL7mQ>ISYGR5*p%p(gPIXAWS)at35 zr{147XxbaozJE0H(SDDvpU$T@nLcLv_8EaQ;%3aB*?8u-nO7c*dMx#^_hz}z8aM0k zqtv>^ZZ)d#2!-Q_p5R`~0(4pNoI)@#l`r z37@lRZil&#K5u@$>IL>fzZX`|Yd^1k-sSnR^Ow*6bwT!mnG3#paqx@3y;T3w!G)a{ zhAn(y;mNmHn?y$OS z^{F*}Yeua(wAOxY_qD6m{<5xk-I{g3u8&#&-iEFl_PiDM*6g>=zU}+=i*H|kr{JB< z@5a45_uX$cMsA$7@tgPZ-dp>=+xxZe-`JG0>D5iYeo*qkp%1%!_~vGZ%~Lin+x*4m z)0=<($m63~A3guk?k$d6+HC2$Wxy68uTgCy#!z@{|3ae6yqZj_4i5JD%S0-j0hq8}E$TIeg~} zJGbxr=F|3{W`8>A(>Fgo`I+gn@Xzu;8}ZpopIzD2c~|YOM|UmWwPn}2T|exy?6%w8 zad(&9MY}6@Kfn9n?wfns>?zn&zUSRNclP|YSJ~TgZ|A*Hdq?j*y7!xXp8I<5tJ^nw z-;#Y_?z_G3xBV^m2k!5-zu*4R`T#(5p=S?mICT23)8X{PgATuX zc=O@2hrj)z@fY4-bo-*$7xTYZ`o+~Fm|&0iA1ONW!jUhI{Q9N+mqWjN{L8aP?T>mK z4LKTfbmq~yM>ickeDs%N0mq_`4LmmC*z{ws9b13w)Uh9qcR1eX_?ySiAOHIJFDLkk zCMVjS@IH}s;+Yc*PrQEO?GqoL*n8sGiHj%hoOC|vaWd#+?8%Ii`6q{*tUtNq5qrLC9tU23@ObvgKQ+~usxg_qY{zIVlZ zrNx!#D^*wOue@>P-7DL!?7wp2%H=EHUissy>1y+<9j_K#efsK)SC?PifE~#0t6yF{ zfA#CDzg*+jnp{i1Hu~D6YmZ+$e%<|g%Ju5&%dfAw{?YXV*NPrn10;*8zL79()F{ z3a85}ypXmd{5JB)^1+KSi?eKBGYc0zSrYud@J|*`un0bqd5HuTDEhH3;zia~%woO7 zbe0Z&p5ieUD{9fF{w#}MflFcwMJ!vW&PDt%<_|t!!%Y{@;Jn5xLA(c*b^mAEHv6}I zXl-k1lh@&>-DjiCs)2U^Qy-#DWFO`OTl?@G#M$(rP5*V2{r5Q1>g}PnKw8qHR&a&T zUr)r@w9WtQD;v3FUqRRYXv(ln%NRFk~jI zrhuMexnt)CJP%ruF9gf#{}iZGO8Y6BX5VuIeP&{J}zQNWXdn*;BJ17CFk9Ar{|&>huV z0S#R-W$Eru;AeE#4|Ravm>b}q0q2dhZ^J=1)UV;Fjf#M&9WmZa9Wzpa2<3EBY|eIb^DMw^M(;4|>Q%V87-KI%J~%m_hgz-^HjPIZ_>(g|jX20Ac3FNG zL&57V%P@b$GE8Qcp}qx&nuo7$RpPogf#C@L%EH0iA;~TO$5PxR>FF9-4ven*o#lVLnkv zCTF-#h)4a^C2+_?ZLOl7Y6%>rwTGiN_0*iH0%_2nCN z0^C*5Zy+oH_{ppMlXfvW^%#>Rq@g2!}j&)HjK66i)r0jB)sr=1j|gH^8C& z)X|88UZ|^ehcGkg0LG>%4K&)rgmyG<1jaZ}QD+myQ(yFgO9h<_cN1#i~;o{xN-2e1@=YxuYkVIdXQ6MSVz-X)bL%3mB_X-qVn=4m7n}F~aA; z?MK=Pz^J>K^bqwSeWmea3I|@QIn%emA0iC=?NDDiN01DNCmj&)0aN)dsOwbtcf!qq zADBnnzl?Pf>m~~W#(v1MiuPF8|9C%e_b*dAEo}qsk*v-gv~);IdnT(Z04*KjXMx_L z#G=f5aM`*mfGk<8Bkh+E|NpHkWdnH?^HwIZc47{TP~t&5;4bPj=FP9OQE)AUnWc#p zxG8R6P9l?Ka+L-08_fHk?nk&C(x)*$k%hg=6*g2vu_Doqd8qAKrZ|XlA7kmbu=Ny& zuuo|P*W!VnJHsD~JBAK~~k65bM%bMbH-&wrH ze8eNHu}H%Af*;tE;%Byjf6uDLYUZvuqi#;jL9Al#aOq-z#O|V!x$`2{T86)fGM!l@ zcgD?UmZa0wHb{$bF^zf1e8|ri!0*mF^I5Dd;*zj8b5L@ao#?og_$6jv@+7E3nRMv&h zV-9>PYcE!^0$#yfc^PZY?#a6J5Q~@_Z_2`WXMB^m##-@DW&Tic2L1I5`ZfT3+OYuH z?$q{wbIKZKFZ+V}!N#E-T4>Jl8`|R=aT4{@`+@qx)`=yo6#h1{FQ`APj`{+9CceVH zR%>@^`-hww0YCKx`oY$557tI=miyep@*~>c-RKAE3tRUT>nyGmOj!8EaAEc*xuLq{KAsPP%mV8i-fjRUQezf6NsK*81L%_$VO{reMziSTq z=7Dq0a+E{52i=$Le^Apyeg}A`9$p0e1+zzbd+HO}E{K;{_f!8+8~q)t!OTuHX`-3%Ne=(OeROY61 zVlGNH>iHaVMjxi5-ffi@7>_@oUHf5fJHT3rTdWLd(CFYmSFN+Ccj2J0~iy`JZ(O=}7OU;8sj>s@)<2zKW2sej{AhVC~#YeVQ zqJz1Sa2CykgHTPkO}E7u(*@pOI*PwNrX6rw@b{K!wP^+ao&U(cG0n!`G*i8)p5Ne? z_!)lOG=LxG`%GD;EdHq}l5gc7n7sHqd@WyTa^y?+%lKCKta=xJSNIcrI-ktzc(uA+ z-HvZ{rF;LQ-Uv(=eAjVGvM)RF2)9j^Lg3JrBg=H5(3Rlm|G+QOzlDRN0E?WKo+-sSS*jyQVglKbb z%U#B?PXkXi%hCW2-%*I_Lp*U;0B+cMAf-|x^B$5ZPfA!w&@^At6J%KdL@Q<~k3EGb z<&?{`O41{Vvoc50*GVchNv6Lg%Y9SE?vi;wrZjv*!vVla4f`eB2{_Nv3h-447g<_@ z+jqoAnJx2flbq*E&dZ5&qaO&G`%tWTIK`S?pb+&M>7rUnA>v2Nb?~gWOa#5lQVn{O zrZ9Pr(aIH0Ct7x70dS`sr2+K?}lbvZ>+ zfhQzk%(M}Z<7=KVCQK_K4L8lAF`?$E*=m}aphl~qYM|<)x~c8dR%%nVkt&qGlwXza zmD|cS<$`ibIjS5~_NZ>k4rPn-zVeo`T3MkiR$fw`S7s}-@Hb7VS8A0iWrQ+R8K4v@ zxk{FjqQohYO0eRucqy(*8>NNfsF-2waZmhgjK!1Uh*D4EkVc^#fg7!3P{{Eo9x=un zMjVYd8f)4}!#7`yGSR_0!gzx=imYRYMh^d!#*8*%tm6gP7%Rp&!3d%8!J}zZ=wo7i z!$Gv=7X%e|OF8I|h*pnUz64B{ed|rVs;seWLr8?>6hR7CmPqJg83@|NvKw$|!`FcA zEyE>5dSwHpS2jpKH;JdRTk`2(`2an9(XtNQGA&aGQW|m85(T=yOnHWAa}nu|X_%Df z4aw&%%VDH>i=NLqGQl?o=A&Qf%V+#sbYKf=mEt$qc#x_`-kjq)h<}6!m97&}tl@bUkBq|c;bih7`-%O`{@{Wu+|1i>FCKuA8OmdMHy#gbnI5n} z$mP9wZ=TN!cpt2F{do}|04th7yo3+qWB6D;fj`Qp^BJ&Ic#J=eQU4U5&7bG<`2zkT ze+~1%Qob5CBOCc9%n=`Aruc;K;`{jlevlvM=lC^#lmCo4MaUIKg?f6u>N7v z{)cRU9(J5g_t?*H*kp7BWz5=Y6?VuN`Pf13S6$UMY75m-HN!d5<_Ujh?N7OfkQU0% z1d)#ZD3;QapGjwyVMG%jEw3w5{GD$bJr2BW_)@+He08pfC$5e zR7d5cazr_x>{7NPjGXoFBvM>K%yyaLiiGEs&G7HS-x2(6lxepkgwmX}@tsrFOW!Ks zTS#|KSq6$Aao7w#aVSn@Tut&61Nsf!amH2H2zq^otYE6GcFOyJfwTSheqDt0ix9S1mPb4{6Gs_;7kSSi4TUX|n5bKDB*jT7 zhZavgA@h*lAkRjr3B;9Trt}BUl3HI<4owFrj5r<8OV|t^_b3Nyb56=be32ghlaO

c751H64Wtm$*8;1DI!tT(9@(RbCjphwwj(Ul09sVUxYa8ykHGm zrstTcJn~Rl;xhq%x0Er;NM$(whA91&d?iQ8P?D5bB^-Z2im&3KbWog?W{QKNDw{=v zazOkpepgiSqxeSL5SPRmaU6e##Xj*V>?^m555zlgYsE^jL|G+X7W2fj;t4Swf0JR^ zRwt@Og(!tpa9>y)W{WiZC5UJdDgrUzyI}=rC7Oyx;QFZ$SSSACzw+<-ZLAy@_$huA ze+R`kd=KA&zb*KCpTC8_)qDm17W0>|7R~0fVDnkeYk4hdI0yENBhaILs3-Vc3HKAk zx!T|);qY|b|$O$U9B^@E@B@#B3aEOEhCEP$zy&>Ut2{UE5ucZ4)7(&pzj-aVj zhP)x+GZH=_VV#7Z5)?9}azuuFC7~+eMG1=uDz6eWy(U9sz0@6&4wtd3B{WM|AmKiO zrtb)<9x~)>34fGuw}ht%s&ggmLJ+-7P|&CY1kE=SR6J#PC_%Nm3|UCfv{=&XWw?)o zGMBPT(k6oZri8~Od_}@L5?+_^8bNiDgt8Px3$c?S{UuD0P-`XGK8^mQ5cAs-zD3X^ z+eg*%UX|%(3y2pa{TD%;g$UM2Xd%c?OZt$c_exs!9ls|-evt5(g!3enJtAgGT1tYw z3iv2bE0~YO4+Qyaf~wXgt0-1{Ceyzx>1`4Yk|DB3c)6ryFSCu9c^WZ$+`=@*Y|%to zoHoO~a0}KFcR>HTFHHE`&af9NWCPehHi!*oC9u^V^I!LhpRnC*58KQ3!DjvhJM;g` zy`#2s{O|il>>9;*oP#HddND~%k@Iy1=Ix|^<6;p;aaQ+m8g5xmy@fAG1m&m(H?sTn zfR*rMHV-phIcB^{+;EK&Rbm`C(fu0!SvHZq#=ri<%M7RpuGti>auasycDxa{hZS~X z?#P?)rre1) z%iVq#9>lxyVA#ip@-QCGBVdajg)@4LJO#wz9FV{hc@j_NDLfVD_jI1YGjTTPj?+Ay z4|>WILY{s`D3qs!em3WX!LVvC=0kB_D8-3kI4|QPcscF_D)~r03Ul#jUd?OdNurjI z!`<3=oG2z@ww{EWwkiA(J{5EKgA>LqdB%7Wr;MjDuRp_|<?bPuS zUx-_~SNJ0SDpmmP46=+b$9nKOU&-I#tN5GpOtO}*>o9mp5_2>%i*(J`E9PVkfb zE38bXakqFDC!F(Gr!MkK{4&47uVU4@j=Pha{1*QjYuFwB4gZ$k<=Fs*nnt8szN zcw4NT?H@Wlc?eJ8CA{S+%2z)}1?nfMV4S5wMVJT|5jaytVf~H4O=~xKx=IjYCK z;ZCrc^2Ikbq#4PbR_6|?t-uP*} z5qbtYiRW;OHCH^3S$v+DFBXUw#Y|VCv-s}^xL+r%<<1^f% z?G}6RW@H~;W*iWoi-Y12b~<0+ru$2AR2;*;=Y%*Zz7nUzY3x|e;x7C=c9R#eE4qxE zajZJxI`&96aZmoWxGnBr$Mh|3>b?`-iyyGE{)BtGU&OECH|(hXz%AaN;xBPuGzeVJ zC|nVWf*qF$H+*(VBgG#3ug19VYoat&oUj{fj@!SMN-L!`_GT`)3v8>jQ`%#v))6;@ zofJ349s4#<+!J~$K1yfo;{0%H7@!0yU9hL?iaW#*B~%H+4le>Xicw0m5`!IIH{37A zD+x*>_J7H^ZA?|tlyvL{GjaFWUCCB@U~kwHH<7)RJf$~wiUqir?4$Hm`eEN#gj>pi z${=Mhc9F%nvn)|cm0{RZmf;4oT&YkhvBw;R`^?dJ*HD8U=UCisj#KKC@z{Y*#9ikk zWwJ5_JJhMT`FvEFuFOzoDv#kF^l{}0_~Cwq?!dbkw=AJ73~#C;SR{+Wd#V_` z^6JLoSUjT@HVJQ?Qdp|IgUMi-xQFS^vRM!PHl`O|FZITE^#ZKDeei;;AM4MGj8%9D zD`rDkiL!vb&StU4**5kPZfBlgbMP|cHMWMWR9A z+4K|Kj_<_n)m7zFLpnw7-kp7&UWIG66jBw!W;#?_Jk9rcMM^-&$%#<)&2BoFdQ#yz!y?I)S z{CeuV9$?%f3q&S}%q)Q1O!!hkq*8D;h-?{L1gfwQtWj@}X=xzA5@c>J5*AW4oTfJh;tCtML6sSs&JUqloTmx2QL$dM<9dXy>%MD;^Zk9rh{+JVd@kWGHn z1znn4J$~GTlG>6c5L#+fX=U~B@ldP2mE%fk%S$N9gp%^wl8TZ>6j)m_x&#f9JAPDM z2?`icR$BvJy{gLq3n$hfs<5KAtPD{ZHREduRZgI|g35Zt6_iaVs|HT5EU&0TWNu}3 z8RY3Tx&?|UEv+q^P+3w}SyMf(vb@?f9P*Sj9$quPw5m+frrPmi%E}r;z{-+pNw=7c z@+VdfudBd|qLDS=R_kO0X@1AyHFb4m!-rMY4yz)u^2^3l(D<2DR#h^t0@cn3s;e!b zA`#uAIA1DA7BIY-nm3cYRBiGjI92ne>Z!6dZ?-j6k>)Qf1V*c&*R_DOG%WyquLb1h z0)rnVq^8sPQ8IXCD#YrE^0d%AJyDA0P0_tQ;YC_18Yo9YeYG?NdT|8>TCk4v&>TvP z;(F8rLtH3|7LcjqY&`-Rg9vmc8VP0eKz?}8B=ArR0Z{`X4DACCH4i*!9eAj5C;);8UZoX2GkT(Q+TNbfT#fwD(g>)ihIa*sxQX8L8*%|5z6pX4P|Sg znCoP0Zmt%rdFzV{W$xm_;vy@dwL3!k>N$0Oa(?Vltmn_ulIwcVqZo4`byqzRP-#hM z0@W9%Xhrsv{OXH)YThCZ zV$A6zRB-{SiOGWq64)SfWONoa85NqPw+0$qYo09BR*UGVr6l3C0Ij)@Qj<3et);80 zP891kKoU@TTmgxiS)55sfMm;N7RxTmEY`Xvvp7wQ#cG3Uz?-GjT2ivENJ*Eb9m?d88Jn5_2HQoUoQJRa1pj ztv^$dnv&_l(s0xAXG1|zN;YZ<8KAvb%pfHEwBAt=D1(qXhY(p7rO?=BQ>TJ`Hg&1w zCYNq_HJ?<tC@7VLAuN>vgcKN9>psj9nqo;p zrU4~01NSARq8S8^_z)>8MTFD{Oe>HbHJ60U4@%|-micMQfusCH%KSvg{FsNd@+Bb? zfznt?!WslMLcI|rD+sJrFc)ml4u#r$0i??ZLR%O>^d0YTyX;3AZT3^`U*Q4ct zqJD!=)NPcPilmMOMuZk38((&!=9fa`YK;$6EN6mTZEOK)I;U&7>{jqckCPNYS|y2) zeMN*Ev>;>;5k?vaAt}8uIs1W`HIptcLi9{hKA8zrzLp)7o?W(ZuC*s~i)Bv&AtmYr zLgykk0Ww6Je{#`SR$)Nt++;UHDG?*9rXxL8PTsjRQOlW{C`u`7PhBjt$VSSeBnT%g z`vipU*V5&oH;_CJ@k4GPR}H@0daDn0oJAxN+bI}MVtD8WO2X{4?=^GLZ_fGR3$~zQ6Smk zgf+oaw5sC$zLraCe|YubnxfSX&+(LgGmFQkRfPR>|6V#6%Z|DnMfC#rD+1 z>Z#4XJvAYEY7GGd{Q%dV+7JQ)6SO4}QgJ}YY7j;g8eCFR{Ujw-qNg^C>*~@|n+1BJ z+K{8CE;z7OlB`CNCI_t;j>ew)VUJ9gqYXkJM1mU#Jv@`RGIL+8?zDSCTwkrV`f5tj7fDb}Y&Ydjk+7^82)X1DmTLzHP1}jkvq+7AUruMh zvc-URm3(#m*QdY&tz&7a zlRV_O#juquY4{?P`br|H3e;25C#Ax{LbfXIVS-9>YO2efv@>Y2_2k|3!67`TWOR45 zH62ljZ27m86ovz9_wKfN!PoF2FL^0H@>)qFx|J4YEm#w$*@J{yK-&iaMoujTWsgob z!k}~TQCT>=>y#0RN{vo_STK04g6X7@ni%&oe8jky!C0e=NXfX5;iVcU_j$lrBaLWk z1^xQ!p)ma(%Ls!u?U7@Y_Swh~s(Ay&>IR?Z<-&LLLLAy&>IR?Z<-&LLLLp;peJ zR?eYT&Y@P$q2YGpt1E+plY@1frs0$byX4U&!)j})?Qj=F*qlr^H)VL6K*%n+ro5)Q zY?NJzh8~HA6^fs-8N{ zuDf1hrH*BMSfmyo7G=&U88*JI%v>dr9-5-#RCA6dUzJ2^4un#x0L-~su4=9As ze65^X4Hal<$JwUUONq$PN{iH6F*3|tsAa0tP#>*L$7^lc$116Y&3&|<9WRloPiz;kFNE`j~-D~R^ND{4P9hIPkKO`2Wa(~ERn+iLm?a{ z8>CjNXuWnBdaq|_${!jME#pH&VsxCWW37KfBlPeTEnjGAjJY2!Pcb+qYN($k!9

InI8fl_Gv2=~{l^G;@)bagsz@Y=)E~Bt0WWO&?!dLxG{e*x6`UiW(Xc z5+?m2p^^4wmKxOt67*#ILQj zz`Lk6_-(b0%pLEU#&M5_;HZjf-mc^UY=sw2BY0CA*a-AEE^J{%N!18;&j$Vsx|-d! zh1IyaX18qN7<2)<^bj0ZH;$bdV*_hP)sA4tbvUMC1Up=711FT!jmH-|hWgX*RN~W_ zgj8>idXk+8S^bcY{&BPoLHb2ZA-{Q&uel5}O9;CWgiva-cqS_oMYk6U_V~-=fX8Bw znQm!r{%*}&)ec^5`a3k3+|-TgJhcwrR@3mkx(@aOj<7%Y9<~d|VfU~Zuc8*i-eNjz z>4w7^JPS4=fv_)W#s$7X-oSUU1NZ{B0$;02WvTQ=OrZZ7iGi$%ZV4bQ01(><{holY ziDVB`Lbd@$4({Pg_V!YCyfO1=N3SAuAGLrG^8u+o&fs8;;STf$_<^qttau*y9Pm!m z@Y(+*CfWGzih3L0B{9*)cT`NU@$C}hZG0byIvd|=Sn@n5VG(|x<$>>6G1kU64e$9L z#ErqLg9pA+QElTZ6r*i?8KTO@7cEBF`1}Q4TUcAnz5`w54|hcD(!IY!wQC836PDK_97t1rWU!N(_mTU3*A>R-!z3j zPJztr(C-2-S|Xr@}<0}6aS1RL5WZW=4 zj^rCkA&}G_^O4I#mKF1C+6!&rnuYpNo6y@)j+x%7uk<^-D&*JxXx?fkUusZmtFWC& zfPDt_BU&2IEl7*3EskIH(ZV}^V}#>P4*ojm;m3{eE;78m9u8Ypoll?)ZzpAKV|vz9 zWeQe*R}ZVR)l$6SYXn<@mlYpa0}bFeU`sZE$8ks4MQnw|Mk#tsN@ZH{5VyvN|C2RH z%e_e0z`X#=t(GD|PfN3lR)YXgPV5``7AFd`>#ML-TL;^;_hCWy9jv-CMK3*1ijfC4 z<9O}dk-NcK?pav8Er&hZ4|=K&Mk+s0j_fMz0ms3nZZRy?zJYCZFs!|zMXHt>Z_cc8 z_<}OS!mvFo^A^G;&Z4I{Xr$;2stLQ!Zo=y1H})5-^j?>?aeK)YPNeJU7aQq)B=s%( z4lj*3*Q^#bYsE3JvOCC6O4~Nru<1EVjhx<~9ATaEJ0C3V?mmYdTqD@IIm04tfSx+s zNbLp68CEX8z;fiiw2LHr#%S0tCc$cv>=lQ=68uTn?tKqyIbV^aaZr9VICz5UDs5b^ z!J_4R*w>J~&Ck->l58x=vXU$%BVZkwChZtkVny7*-<7k_QP}uhgJs`cSn~Z$R(!$^ zwt20j)twLQ<#J&oSD=?U%_!3YlrPp!3v4$#z*5tldvPC5R+(|q=2Ek^?1}fq{a{D= z2y7mogPr3d*evdXg(2A#{>1MKvIBI3ZC?f~@nC_cmqN3Lrd{q-3WkCQY(UBSvn%G& zMA&l>r+ot>(*y9p*c*wA=<8%bl>7 zye{n`e-ZQ&%tg-W^u8-iw>8YyOH49K>;$S6_s2e@2(Qvc!hUqFZt=Mt)|e+?hj|m0 zknXT%Ocq&sZeir6IlC!rWxL@`+eGr5AH!nvci2wC{!z=pj~F>Rf@&gHAhKE= zi}hy*KQ7lDX*sEoq;)gYn-UDebXJz0TglYr4m< z^P=}{{q%IX21mR~#LTK$rjh+wGOW(hVT+szYqQ0$2V0F_G~dA9#aq9RU?uw@Ue0ya zdC;Co(}uR7959cD!;&o#c4`Y@Y4kSRjNdHLcAS@tl%zq;VGl>vaABC?;@QivPkNQD zgjLd8a&5i^Ti&Pje5;LoE}&XswbSh6l3*LBt>uF_H8F`&S znXt;PlD59H_4phkzBQ=!HhT@)Y2@J5V=tTi#{2*F?cz-2q&dP^bDOkb0ghgcZ#T|s z9NAbn{O&N>VW>lbLk9<8f60E2{j5ey8qI3tVfQP3nIOsZt7(WSPF<|dhV|MsrGu!) zY&#j2%Q>)&ZU$?-gQ(jqSjdfmo!uamqw=d*-{K`j`v{E+F(^+-saPeQan5l->kF2~ z|D;ga6VFSZ0$aX#NZdhBbpY|X{4>BF{4iiD-vby1hg}N~m*FXZ@mRwG(Z_CBKe6ZG zEfJQ=TL30QTEUWdQ%Z&PORzX@4;c1v4(#Yr60Ge6`tCPMg_%{r>hUMQ7|gSjgK8NA z%2q;J)sq(;Sb3M9Y7AzA21Obk9?THkWcghj1q-_q1XxS z!aDmtw0kAA{AKJ9o`sF%bhLLJ_DdC5e+OZAkOyr}!yX|TzsS)8`PPUuz?C8%@I}nN zXakWCm?U}wCgRsNsI*+bILv3LoyY-<5!ryzqB~#|<_*CjL__>GVVa9x8p!h$Ws%U{8k3V*;CF)s<0B4PoPglv8M(h}7m5->)P4&eP1 zV5sN{*i{4o1_?hvFA)tHNX9VWA;7`F1A&8p2Y_Fo#PQIkzqO}Tn}jR)WC>ruWXvrj zgAZV$@CJ+*UVw3ebUR9T0Mf6@Q0Z=f{-P70pXdnag)#00-EV_A$x(DbNSbI5n1o*~ zB5rK~<3$_5D2(?qEbpF#sZ!0fU1pXq?0n}$_F0QSIdsZa^dfT{TX7b=IwLLz?4 zlggnH5ht7gy9pW>v7!lJjG)mGEgS$N1f6BWg&km+Faw4N6JW4V0lNwXFi6m;Gyt1g z!F;fDf@W|U0bZgtTD1ykTLO>v&yM>0PMn229sqSE#Q#_)ZB(R?pp z6yFUP#&-b*@lOE*{__~YFE&w4b^s>vPXH77cEEVP4KR*x1&rYz14i>LfKhxiU>N@p zuq*!nFo=HyX)$M@h4A~X*u@58*XG9CU>Dj52cF-tJG}+l<5L(H2VqOR1Fulu$BMif zw=ava*LWVM$XT$?u7?G875Zx^#&#jrjWyuCmcI$OhOYp8lP>{Wh5yqAvn1aHn8x1) zOy%zYCh@lczI!;i~|n`AWbjz6>yuzXlk=7XgOzmjJ`~i-5s=0bmfH z59p6yQNifv&jWh#_ffwZ@ZKnK5Pu68^AcYVO!~G?;&}cB@GykG4otncT;h1X6u1Qb z#lS;>UzIqXzXDtg`4>tYkKcl#5tho|!x~ycCD_h8d@f{3;&TAw`E!7A{29O~{w#8# z)c?}MPaxeoJ{@o&pADFVT@Z133NQ}8ltpdzIAAQF1sKI21B~P|0VDVfz|Q%DJRm9^Fz$mQS7hs`(SXzpIfWBRYb?-m+EY|20thAB526@-;a=@4PFu)gi z8DIvl2TbJ?0h9Oyz(igL7|&|~#>7+wt+&8q;T_$a_|UI7@!M*w>B5qL|7|I6$hVX%a!F&Kz3An{ozaE{Q%>6U%(KXT~i+! zS199X7ZAep0cq{i^7fYTc{08iU{{;GxiYS&jHBH_SKb3K$RpKU;xho^yis? zeg^jp_~LmwU>r{ajKWEO!oT0OXmb*NK~UiL!BPS7@(wVbCjrLsM8H^{02syN0V8-E zU>NTP7|de2O|-)J!Hb23+;t(00!X(hSs2KfPU;Mpf_$VsJBh1a}DMI{5S(}7`+<> z4#pil;UL^b(Ox7TuXg0fME$gpX@*AE(AWhRdyLTn+_Ck+n;;cCmht!oGZCwa7v3Pv z$E>vtf1TM*{P|*Eb^sC_#h*XYGH4fWGnJQE4qj)?#7nMfy!sk|7h)NBO%{rmXRdgq z=AbaVbNdG07*65++%CMedk63G7UK=yQ+V%Jhqtjq@s2PDw+zwvr57*UIy4hzyoUS{ z_bV6hE#d&q-5=omwF37Db8xFe=dcmDXUNBDnSfg#f2@_xcpWRy!gtX|XYlT64|b0m zu|h5({m0rV(1S!>G^h&(b>5)P85He8v>ay)iuNR0*eQeh%Aigf)Cq$+Zcwyi(efTO zs4orbh(Uc}P=^ibkU`O&MdR|hK^-ut{RXwqp!OQn9)sF#P`eE3GlQbtj#kD_gW6$G zpBU73gW6_LTMdf#I~tcQ2KA9aZ8oS64eA4f+GJ4g8`OISwb7v7HK=zC>TQF1%b+$G z)Ov$jXHaVmYK=jyHmElZYL!8~VNfd#>UD#not9Sf@V>DE8yK@F8;hR-YYS#N8#095>C|hxKA?1 zGVU3CaND>AucTMu{&*hlm8RjQZ6qIxZ-8|B5slkQFW!zf<7UipKVq)BfR}{_uq*ul zv*ik$Wail1jN}{RZ>ll=G>XQbM$!1wC>nnnMdMGSX#8mujX#Z|@uyKV{xpilpGML6 z(b#{Am=8KaHaCr%^QiG>XQbM$!1wC>nnnMdNQO9LIOHEzp4n z{rfZ4_}lyvUalX+P5x$lby$fT=I8NiUXS2*xB~a)g}6P({sH&79yo(E#oBTYE7c9W zfINyX*4uIRSc^6BCERJugznJ)+BX2PG`rRtCWoYM4Ql8dQlv4K=7@gBoH`gAHnsK@Bvh z0R~lMQ2h<6pF#CCs6GZ&XixLnjn(-mECseehgRU5!febGwOE-4;8!A2pg;cjGSC9E#67Ia zS8%#H0NvS${nR4N5HqnS9*H|CZGPB-UCC735Oa*Ut&YQW<%5Y*_wvV&{lep4NYfiYxv7HG@Y@n;V;?H zFY2^F-~Ffc#?UL=c3L%Vp42$AzK2wRg}lF}FYEM`mmtU820@zBIP~KI9}lE<#&-?U z7`lO-insejXGl5)H0gYRO^y-RsSbj^Wr0sPcCT*8PdR!aC4He&F*>YNPlL)as2&ED zZBX3}Dodvtp;Y=+fdHI0L$Je7zzqadk$%ezzr~EbHrX+;=I+hixx0%J)tNW9YuVY3 z|J>k+-^N_OcHi2y{Q0%du3am(-cQ5-$J21!VrdY(K@yNMnK7lG_!cJx##?(f_iWzT zxpgbEr-zSEL|7~5u+Yeea34?42%YdSxAqK=j0_8g5{} z>=RoQT$&%%yO}UG!^vDqq&^3U@IOp(66pU$D0lU_ni-q^fm}YK{{B=j z$p@9+an@rz(#I2B(K?JcgZO7+kUXKzcA_8m?Bwb3+%ucJ|C>y_u77FKP*sWX=@J@} zUiIOBmM(3;gmV1ED#!m5rQkdDHRvm2q#dLr|6Y~!R^eYq1;(UDmStp(Nt}`z7TPT~ zHp)9Rs$rTKR>r@}vlmWfX-TC~F_r0|$q6A{)5b=HWK>o4)XP#vqpT>cENd@xjxajl zf0XXtno8d`YFc@bvs>fVej(k03tL2%rT<+NWoE-8QkK$T{Yp)xJfKULz|J9YLnHsK zRF-Y3H>AS<=*(M(g+@e#HP`zmG^#Z<1^OT=!t4p1jjlU*CvU{+&A{g#9-4a>WF`};O3Z!|DJ zsc*BQ<_)XA{L;*ObcyVj)oXHU-kVkUZ)njk7H5@yJuTfOG?A)Qp*e;}lH zURSS(kpAJmAz{ubZuw&){R1L$BLBU#-85;JbnDn*XuMl{r=j+ZyJvSvvR56Vy2iwr z2K_t1N$!so`USXDlAE;2?q3^I&QCNJJZYlR#)8q*r0*_ak!W%ng<@NBuV!{JQ87Ut zZG1h3jL(V|5y24=RpDXb(W!Cmo3yTfEVe8mtxrqEDK6;#I^|taKeE+?qVV9ZK7O6; z%IyaBjqTgCu}frHucWqZ6Z6uelQYFw{#0$wsK~4+|D+}rMr$jtLu%ZB7*apf*pdI* z+W)t;a7Wumh7^VSwvTS^oYJX4Hhu=I2>x4rHe2hX_kx3ox}is))(ugyjaoVW&$_Xe z_${PsIQL<0mg|H*;37PmYpX?=Ts$Ha&j@$1yd-~!OFO%!em=Jnq9fv_Jvw^Iqr4hF zkyJmpVx&^XyM`1s%uC5kh#FP@R2{F>bd^d_E@Som2PFgvTAEyiOW1!Xiyse+iVg`0 z${Rc|rTjk?n-<@)lDk!s1twNQ^*NL-N6P>6;$w*Q4_6@``9Mm!QvTBg>F<)OUO0*C z>-hiEvZ+ZP>g??DfcmGENQjFFj}7e_9U0~4lModY9-3D$DDVHOI({7+^|ov8mX_d@ z?>S>JthuqGkTzIw^Gd&gYR5eArO^>q-n46ZK~)e=J2-?Zy;(CY9Q{Y>X_rLdH?cpW zm5K3e=q;?BF(cE8+cgE34sayp^;#13mLZ9yW!5@7Q- zd~?N&UehwiE;Ws*nNd@tRBozM?q$sC-`pv&z&C#Yc!6X8sSuA_unO{QaBKr?<)P0} z#2s@}>()FQY{vOUMEXsw9Ct=a<>h;+!z?wTkUk)&>! z-CWz#+Tvg;p&BPQ__8JFRoqv#FxG>pe>cz4;%Br8trln+o3&=HQ-}6hMG^ko+tbIV z(A(SFFT~%;?BFz@bVx>6VpFAQT6kbqfTKCUFTkx~lBu^TJt;7$v0YQ&keHwrErMb~ z{DQ(ne_mGDXK=WmZ-ig(Xphbw?K{AFtReY6?4}@N4rKg?i^6{v_Q4Vp_L!ezvye6k zg}$BKI*0oF55e2Tx_9vLOisD~mz~WKfE@l#$R1Q|zeml-gZfwyeZVh5x-2BhAJ0!Azr3 z4X+mr?p>W2`S4_-dU?)V65wh~5a48?j?PB8c*$UlFr$2JX#LB?TJ>Pgr2n55|L+QY zIsAM6hi5>^YSMq1-m3mKbD@?~l^~X+`~+K9oD)dB^wU&W(%3O$YHMO*V`8h7S4WTT z9}pWGfSC?=YJ4ivd(b$?$<6~`=rBCwyhOh`8%&zaTU)i0wrdaey4dz$hSK-i+WAb| zO|nR<#$$CBU7UMGCJYXZ7!v2%$+2ZfLQ-gSw?|wGV-tsjN0cN*=e22wRsOg?IjTcq zYG%yZFJfR0Y2-hsv45LVmgI(Pm799 zgVflu{i%EoX&+V)Z&Be54_QF4=skp?m4NfP3D*@&uqUNb$Qe`9Bl zaXqKL;F_Az@E70d=js+(6xFv&!;6D@_DthFBO^kC;^Twlq`4_h#AeKS^y#GR!BzL4 zNb1l#q}$-|xMkJDN1Ef4detTc1SG};hsEggydNZNYxKF?#$aO}6(+aB5s**utC{h_ zkfDRi_|#4wi4D8;iTTH(nh^tAJ9P5uTKGF|2&r%In~m4dW4_=JcVca2&1`iBPmT3y@i52|W7@8{al&#$AaAF3`}f`0MX&9)unVMi{u+O`~ZZ;pMqu++@xI3%{)kSI6T zmv~L*h~&(O#j>0 z>fN07#IlhiG-Zk;ZNi^YSuP6F!k`;N-em0g!p&r9H8GdG?ekK^02S>t3oGwFKhi|?Q9eb z8zfITC*dZD>X}wR}u#d4EvS+dpZN-OPZrLEdkTlFqky%)=pEPEwc?!CwujBQ%LgmN)8 znBGG|0v7@VxRewUNOIE?NFa_WNiHSUzWQd)dFvM0aPR-)_XEqa(ay}7GiT;G&zS+i zBiVGJwzOK9YXyi2KW@%65iO5Y}KSKNr0ibK>M(ZyMbN5_X*|){x=}Ogw6q$cLqKY z0)uEVKBJ>PF9ro~17>d@>nU27nGl<<>R0#Gv<-S(UN<+B1hva-q-@7eTy3)n%o1qx<*l-**D5Nw|#+Ql$cxi2De0aPf?^ zNr2`mYAHVL18jz1co3^psnbWIwzsq$tkCp!P3Th7v(-D)mR`G~C-3BeNL6R6z0XQc zhBu96`Vr=E9IXM|iqt`Ag?9%7^sZHO_Yy}U09Wg&yF(ClLYu5I(Vq>AvhpvP78Jk0*~LPF4>ctjw`gk2bgTvqMZqa&l&a(`m6f z%k1kmz&l6J@n?+Yf%byBF!j>5vWCIl+U2WPCuU|R8%-Ot({GSjTWMQu`mN`4J^ZJWR z`*V)DJ%6xe>1+TrTj}RP|K;}}(}IkW>W;obPG5+}q*h`dpFV6E-?Vj*edXiN3X2>r z{Gp$go!s`O+x=#FL!F(M`y=={TFA97mT3te5Sb)?LT+@6y|B+@87xRoT(L5@uq3ab z@JR0P*wmm}<$3YF{CsNxyZfQ^Z0A@>^@J^KgQnDGDQ_v_{`j%$_?EZb?zdgFRdBRH z4h1U-83$;SK=KNO-_lqM5i2Mp3N4tP5{&L@(*{SfKb$(Srpr+=T~a(%k>44|MKH;_ z^AV{P#{bY&>k4!quO!a;&9tn->8eV1fiCrooBKHV`P8(GO5LmFsVUE=K;S}NQIM() zJV{G@iB_&Ob>KIkPk@OuMKDtIRJCn6a<0aKOBKpf)KbAzeMI9_=6NJIT#eWm}AC z8CgUQX2iL1yRj?3Z=_Xk%1&Lee04&(Ip|z^@~|gs1*0@Fu7hX+)6n z7=o_DjxlLuA748?dwODh|IDs|dhT}B;HRfgbN{T)w&bK`P*=jw-PGAP@{rs8&;RA8fT71lUrnnTydILmE-TN6;U+!?brv}vmYP|*rNMI&5h&uyyju)DWK zZELI9S^{0yYm01^O(l_$h=vx`!Z%zqHT9dUl{Q03_yoYA#IDdA9laTIhycC}nV}>i z`^412wVn3zahrX-EWcwdm&P0_OsFbx)YUnN=bX`I7rHCUHaWAk_q#nmN-s!atc}&q zf*SPRy7@0u{ouWsz`~T-S#D-(3@Pg4pApF-eq_kg84p62*1cCZjpgceM&_`}x}kK# zp6hq8?bAn@toFPDn_=nlku3){JyTq!w_5e-k&)o(+cwVZWS&9z=RJN0;~Wm`K!E5E zIe3JS5t5_{w%WAl0qk?rhs={xI|tdfKjQuklZi@}axM~@&Q)H!3qsQi_hzSkcUuMA zzr*?QImyHl@OFjl15#PQBKvV7bkz`(s&UIJ5$Y z`cjLxHPU-dbJ;s``dVr%O!5adc9k(P zJue5#QxZ$p5liyYk)i^Z(d*_CgPldSZu-zYHO5wRZgcd3-I~&zTzj=OiP?fK4t~zu zWE`}v%TA3y!K^jf9eS&Ce2<$Tw)4|u!cH>ocfeZ@!V9EYL~`d72{MpOZU^!Ed*&~Y z@BdDPQ85`1PWty#gPtMZzg~rvRWjIYTXu52p37^s3f|AMLmBqH@b-mBsfWD`O-1TR=ZFMI_m;mFlO z1qGrrGYFZq>q_#+TqFA&qs1w)N!uHFWJR@^i+QJ@ATQ79%wz5)fJwQ1u(&UGYM`V) zH^f=Z<0|f{Zf9<;6aOXN^qKztx1&Js4iAvDI#2)lavez@kds{aikz*EkeZX1vSBwtG@d~=v zC|Y46XHZ~Bf|h5v2NjCG*Zcc1GZkbd< z5hOBb2nvBG4)vFhgI1C6FCiF0GG-RUk3I^D<^2n*ejy?qU|t872>RV$6cOnF^V$6W z5G`&e^WzrNy(6obLxhT%ZSN=bGP~(Fe7WpXD&xws@Ma&a0eesdaYzJ!#9BF$b-XH- z$#3Cp*Oy|23?_v7xC<9@&NtP9G0Pqfu;-p(r)1^`aJ**xJ)+^8P)hkm-Yt}3~ z**-`6bKFAVnnmhW8+7V`&v}H*b%Xmep%M_n9f2|5EGo_~*=*ljxAV{-JYv{QD%6U} zB2umr4}!TUu<|i9rzU3<@UnuO6SylyaJ8$ z{j$lTvMr^>)0GvIh22nmre{=Uy;=cfXmTd0LhIQ(z!Q>?X(gO6feTPs0m$C*nxE?P zHST%7`V3Tf%4@-T5&>3Wtp+?EtjUN`1^g*eR_-z{|MHh&xye4xJto$g4^2pwCU=gn zG;#I&VEz=T1A~MNRxC2%;1-HZz&_b4t1j>EJyu1lO!hYJ&z)U^4S5Y&JDD}RE6NXb z$*Roy_KeDGl7Vr*Q)D&=n6vZeiPvPSTFF{M?8bPZ;gg#X>NyLPiIJ*}+>TY9)rITx zj|Qj?F}D24R%zQ*#|9_~;X^_9I?QV`O!>08kA18Y9ah?0b8iu;+h+S2eNSO<4Cv(-M`uy=Nl zZTioWaNseN0SfwgUcVE|JHsy>IeDEGKUP+}v5>F8xSyAsp~!-Yik{W zSDuU3Tjo+)Z}HU@#D|X{CXp&tNOl9)S&>QUvOLl>Q)hg@! z6RMx$-M+xpz@)WNpOmD>e^n!TeIkAt#L_!&bs79!K=0*$oA6e|8*q0*)arzU)lmr# z?Ql=-7 z$zVuIGzh;k&+!s*-vzM};Wro&N`lPHm+T!F(QSMr&>C3Cy2a!?DjtgU;FOYc3CYx=8)XU}JFp9W>kzY1#~q|%zA zdJZ0$k8BtGJdpWALEcADRFEF_BxFJ?R6~D-|K3eHSrWXA zg*Qs>V0|`1uc#-@E4LA)?{We+WE61w8j~n0@w7 zvby8&9da0hGGMb{iQWLeQv-bp&r5+Ch_L~_5ga0H2k~#ipDaKv$28PxViV)RSK{NN zCby4)tGG7qm}JUEF1swFK%dxCtu?fyw^xT*28$q4?6v9j7PvLYGTO}AO!IEwpAXD9 ztYOQYw!8ti>UexqR6;^jRQ!YBVugiSJ)3h6>^*eN4U62N{e35$MWZ!cnQUxgL3gfs zpa`xPvUSc$lUA3PqXmlkhBimbay1*QcaFKyH>-mlgDz|T26h?LRl?mmF-foxi$FW3 zaA2S|w=sLDF2iijNY4W{&cFL>s{3^HIW>I^dFk5R-1KxP5*g^C6vRZa@1qYfz&B%} z4zurjV&EI_S@35tr4#=Q_-pv5N%U_pyZOIF{-P?VV*Yb=75hEl%0(eV4zPliDJr}~ zOF~AIhR^F^eWIQ|>?&%qTgECj><+z3otu%NXU-z>fEIC$F?&#*NlgGkS zGy3Y+uZJHz|Ka@FplDSVS~?`c6cLs47j?vikMU0q!=D^h8IfzaQVV7a(b}}OC|guW z)L?Z^MN|fwfyJHKbPr>Ub!+F|J@^e@saQaQ!9MMZ4$m> zUKGCKa)hs#SB0;*G2ts_o$%Gi!Wa96FPPs)MXg*3|0eUl8u(vJ`CqH}U)S-!HuAqV zd;NJa|9cbvYZCt}uA+hcanPOcPGT8mFT}<`QGgHx9PziwlZF}c{(=2*H@;iI*A4J; zZvGs+FuRYO-^*#%vyvE&?hjie^F(+|bJpl7)jqb#k*Oo8%BK;l$J_<>h#T$RG=*}_4^LH7pA;BghSq1u?bZBSgy9v1l?1uR2{8$aW3!+MAiqbB zmzYJ6;sq&Q;mn(-ZtUAGk-Xdrj@JuI-~SI)Z;OOf=57#4Ug#|w31*3L1T_+&9dh1= zM5UmUrOTps3LjkXMpQVB$muCDy&SgLW8joWimO$Z!1uDZth#Y__M5AFix*&h&A-he z>nn-3jpVpq2&zE)TDtOqQ&%*P$}v=d_w`id(&w)ZUB6C_r1H$K`D+RDE0)@VFuz0# zfR5riTnhc`$j&2Zggui7E`bBK_2$^qv$I!6Om^tdS>?1gj8RK>s!=*>QqYq#eP9j9J+o$6VzGiCgV zKb@pr$$>dx45SHyS!EeOuZvhS;xMZ zTW4o)UVEU^FOO^^x#P+aG4@N@_5f2xrtoaCf_&oUM~fOyV^xwU=hW$ldz&>qLyH!RFCs~K5w-R$gt#9clh5X~?e z{z5eiezppGISZa9hIb6X8X-|s%}($6>-EeIo^SR|&*%3V(kb8UXLHb!Am%BgoIT}s zKc8tf>ClhhaDE4VHoT1Bf3o;0FWpMAVRTydo$3AmeIK(YvQ}T(euOEQsdM(kb848v z4sQC3Uj#GlNtun6bu&fTDbE6vF{otzdxUpphM!8$O*}Wqp?Pt9ou{5f#Hl>Dzc6(u z0L(6u&yu44JLI+{-`MUSZkPCH&#}8ePl(mxdLmdNooDjp69{O_m`6`t-#ElG&`!w- zXlIu{fAf;9eKH2x{Ii6ChB}i}0n-@iVvA&n5LIgEd36ikG9@3t=i{# zSH?&C#{10r-NrIohtUrujbwZ0$Sv72k^jNxbR=I8oE2GV;lDZc?7)bEm-g8b?)9)^ z6TttV)HM3@$SpSZ(FKnpj>%WkKCb{|pX7A`;6qPa6#Ukyr#t&D#!&m`V$J7oEIKl( zV5!aj5IQd*%P)!C9`RldOHNP~Vdwavsl7aT0Nm=z<0Yex1&L}mtzcd_p(z+ITZpR$ zYrK)*yy8wHi%jqbQf-+mW^!ReAzutyUTn3ETXy{AYG&%biNU_Dy9erP64F%%fv>iq z_df2uI-S*+uA_Xl8~)1lt~YGhHQEXj=Z3OUm#kX5blvFw2^*BTmuIJ?=xhK)V%GdH z$yU}ttP)-Y$VB300=M&}t?l^h)y(vniJ`)N^R9sg?u=^iZ)eVM=j(Mqn$u-tq&fWo z(>G<`up_74*1P@|xBHfHgEmcX&m|u6q6+zISbg%5Oc`-7jCoVoR#0{$Z<{u;y{G2eoqUb%57y=ZP4AwD9s@JmR zcbz=kJr;oLbT~^w6x6=CYCDkpkz9~{A0?}-N zdjY}$OH$o3J@epxCYFoPrX{6qVTL*eH&PzhqvyC3CJ8_A{=YCI3CFd$dD|ICkaiAW ztO&7^aKcVUHCe=WU8{^m#U?wz0l`Zjmf!%-7wQ7fsgh!crJ~%*eFjf^Vly-12qD?$ zh1Y#y%bycqfwTwUn$1<0OP_dI;muD*W-Pw>fxDvlZ8ChI3N<2o9@$8627NVzK&}sc z{B?JA4|WKXBs~i z#YJ1aO>V%_6*&;4Jp|q|0<#kDU-|csNX_#Dmjxu}Ed-O1b8jc%=aCnW0r`2}I|6P8 z7pCZ?#x7nap=B2#=|!%PVP$fn9+B_wFe?F>dT=WTzAXd}87j7ti40-e9+L6(e#u-n z2j`yx5A%dFv&TH7_I``-_Ov{I#f!IxoV5P9F?r@dcYG zsgL{kYUa!@Ra1ik)%$bk; zLrmj1kPk}5r^$NU}=lVfV=2_p;#TBF>W2=)sWd0WW*Q|v{k3MB-CiBz$- zpC$Z1=4ygobTfzk4w5UN3of3y?pkghEd@(AOe}@W6KW|&*;|Mm_MBi|y>SiqC}0?? zY7C_vN6PlMpfP?q(ZhX*hcDns2mAoQE*>MCK=P(AM02UA1+bOwHs^4k-SO(Nn*u-< z-80in>UiphA$MwSIP4#;@L~tT&98U?Fb^YR~ z1zCcTok@SZnOT@9NOGTtWlTZdLl@)v6NZ2)sW-N8%gDC<~DL6>tEP@GTg4co1L%FsJT3 zAXLP{0bqf2879CQ-@26vz5JHz-z*aV0qbi58o*?4eJS+sfCQY$94?|rKz^5D!VsE} zFQ5RJqn;xyz-7o-A}qiV6}ihr+%E`~11ccp0miQV$Ejy`9|k5Mca^Iw7ukTw1xzWA z;kfTH*X{&9;QmG=1k&C55_=WI_#}d@tb!ZI1uFl@6xGVe5MTuc&2uKNvY)-{H}U^I zh|Itd--_Q;$5>B2Ku^K}o*(!We}cU-KS|;qt-Mu)cSkyszA6l?r4*QhBR> z0oD`o0=~|Yum*wN{RkUb zxQj>6kU#yASB*Z;fCASToQ5yc{JaPXRBUjKVo8niOI1f2?)N}-N4l(@_N_sFE>w$t zYmw)~@{mLrDJv$Q7$`56n|Ky2dtBk!y6QgFK%7Xf3_F+M}kCXXGoZQ?h7!90wM!_ z-HG%Q`VDy-AvJvg3Wo&j90e66QHa(dxWKScE(Go|q;?wYHm`m|!LQDZTJyW1_mJn2 z$Oa2MI1-u<{SSU+tWYxxHzHbQbky0ryAt(Stj+>{#{_;fn?OI{7zeL4kjBV%w)j z41{A#IJkt(8Wf}f>s|;x1wN<)R%pK>&O4-`D|GI)aUvIl}Zcpc`67B%F8uLJAd=fO2>dfYD=&i4(4W;yj z1%|l{(FXxTBb}wL+~u^E`MB9zCHe7#{g0;VxK_U7RNhP#dRQPno?SIVwl&oqn`nJrFezVw)v{K00js)ewsM1FD$&qok?rU%r4 zrUHD;0@;va;mou@Qu$D>zh$fWWbQ*)vcewVdS)7!rE_cLdN8DilDW$oYANwqBsW9> zYoB$oF+bmU7x$K=4!<7w#yAfUdC*6?7pG6*AQcDi3%D*2@KVz8rh^nuQ3`!jAISR? zv220S#}_pRpWS!rGL44=#Re=~h@g?Og;994smNES*Cu;GtqSfBk~%c*!<`k>b2-p^ ztwLBI`o2)RfFkNBOA6|cCOkh>I9RZWbnh8*Yr?JRK3W7<&pi?UZe*RA86z(hJvKoP zyjh|xex|#UGJJG+d-2xCQ!>VA@CJ-<-9+1%$Yt*o2^a8pxkT=h5hTa%)#s9AF#o>uZH( zE5jF-2}VF?dn(g#WTvpXytH;~|K26Rwe>y*_*-RoWuf){${fAxU_-~oP*p|SP~G=M zbMO)2Ua&$IS!rqmC>(`8-3uj27^X4A(NsyX&YF7_?4hDOTfX<&e*YuSj@5PMoVqpT zZlD&;-7D8jBp8L&)cdwzgq}jWjN-Ai%`|8RL}Tbs|qerASNFb_g&Tyt_V_p;OwCPcCbJ$*j}JirbX>A=`R z5)wSS77C8^)PlQKu`QU?uOlRqthsWnKb)G4-qy13#^A7gtxvdAJsOwfg!W+vBh{pR z7#G|g*)gU|UA}_btxSL4oAR81zG7GHP0jL&oni9cVsBZEjIAs+Cz!!Zy}Ouc{3KWI*P9dYkSpSTC8VTZOkm1I})Js)^M$kK86^h`@Z-PlL3uPm?p)RsKkqc|5{0s18878vf9SrH?!`IC?0YI<{R?h#AEhEd4)bg+2^KY?^P0PZqX}%VFdaf|xCup(T zsl_gc7CXhKP@dglF6G~bBkg`N*#I`I7V6?L;R|X#&GleCE$r(en4r}bG$ib9^q+-c z7)-4&!Qd-nID#QD3yD%}^VHR=X*WPQ$fdbn=nSZF_(Cw6`#i^tNqtsm8R$6%VU0Nl zof@3F^K&nV1}ftl2zu@i4dgja8woDX@x@ zMXLZ>07p|2SOwoVV1^AZnQ4YCQWX{m>3AFqRTyNO$_zV=uMyyuEI5hp3mD?h2*K95 z-?pyKEw1MlfeBdm>CVj(0cB3*`j}4^|`-^>rKzM*I>O7FBOpl9(P>ue8BXR2Zpe);F~cj zHh|_e?95oPZkJ0Hny0h-B-+3A*w;mB)3|-B8?9`_*++XC8;9mD7nd52J80kN+TM_C z@LgW3VR@;!`0;ezaK{r%%Q}2(hu~?@sw$`(W~M_-lVJDPvd?Qc@* zd&>fi8yUZl>t&n`IytTYKX1#8Z#H0S$2nPFvW2@lMuzzVT%Uq=kKp*laq*S5--@nJ zasj}+4)YPOOvu*+jCrAY$}8I8!qZe03ei+~&7nCg)Exdcw&t|w`n-fT6Vw`>n0I2QBpw)oX*gu!n+#?$PFKmloR< z{tYkYA(~^|thMm_!dv-}c4#I)R$jI-Ic|M9T#@=SLCB^HFXko>7c{zKOvbs7zzC|l z?(OVmyBivZJReptY)HA)Szqt;G|3I}M223cHCW(g)vr;U$*HCG#T5l*81H(zCKeUf z4c5QdXkQem%g0`vveJtnC|?A}K<#CQ9*%WjAJ`qB38;n~M?Cq2#g!@(+5H2adid8! z$%g$B@&80;py|A#{!*PZ=F%RXd;F9nsu$z68+PBY9lLpYe%rk=t!XSTYvnR-2sVRs z_W*r9a|?w&pPhb+lQ3Do&$r5**a=kQReh;}Yw)sW20E13V18AVgc^xw+9foHBzTro zZw5!=0Viv9q?wsMaw9e$ispV9sA(kg6!!;J!i9dJsfp^z8*k)3gXDrlA^6AZg72BOOKfMXgG(Em|(4dwfR?rgtz8SLQafRpemwt#id>wV6WdVeH zq@M_lcV)_lSV^SceKPd;#`VyHHHP~|02>rC&v3t2|K-b@L>t6Bd6avd?Z2@ zk_8(2=uKJaXJyKAC!}aktJ=?lBOt~jSGruxQT^~R7D!g%rJ0DNkqkz8m`1r z`#gswJG?jBso}~~em9pR*g|=avN&4a2+N;U+^;PY%u-$m7lLxbkQ3~qkW8>lBh04W z0CUcH%kU?Yypak%#n(zUx`gxXQcd(rf1@I7!%+=vq z30#0Xis-ZVjfrF5EkUM2}D52c$i@4C!b1OuvsLDJqrFhb( z%TE6LVZkgIA;pOjX(<5I5}4+nuEFX))dxCu)u%+LT(R&qg6XE-4=`0Z^B;s zi4RJM9D&cnegqcjg`8n3=m^a4zT}!oiz(w*++*?>ltyiqN=hqYHk-fND)h@hwbj7B z)t2g($tZ5qLOU<)&tJYTGwIE#swbiFipqDUo0lxx*@}hNmzyN(E>L)N*QYd;Uu;YM zQrMAb^9EZi)MQ}xw8V~nMNvlC85_a!NpKg^0M)8kt>DuwVp{l*cS~t#@iSKqYCZ2`!)o@^3^MbJP&DB8+*8n^ zIuBY^vv0ugFXU?A79|Xgb@fS7r)tmTw1IV1;hOQyJR?J5XpBzaOt5L8m$gb94n{a+ z7c`r}GN~l1AvK&LYN6wK8wQFH;fj;m0x>!gnxr&Fvw8Z+F}#3YncBTK%32v8m%L5r zzpXj^$=qk8KQ|Ckc8!#*kEu9xoXZhZB|)gF9LCzz)+PiytHf^HbhcSpOoMT7GFR{9 z&IuY3^frd*p#|Lbn)%OySSA!sEIi*YXwHLv*bN=ecwR${zjWO%rXRQfRS)h@B=ul# ziM6@rJYJued+qssu`!KC#S*ih%x&j8k?$HQ8i;X>!mO8vc}<};CN$5r+vNja47!*& zXZ_I8Det1djME7>(tzG02Iq0X}vwN*WJ`n2aZLCY(o(hI@FiERd* zUQ&^`?%<>~FXbU#S$63|{}j|b!DESJg%gRExWdr!5mq={Tw&~y9S2w{p1x#-3Eo2d z*4ugIyIQ`jL3Odvkefhr_Y}fwCyHY`t#Z9J-<=C5yB8GCO7xs3diOqF+s$^?Hx7F~ zlX)}T(+?-7d8rKT=JQR9t6asR)*U@#VHI^lb+-!26JGLsj0Uxn{CbI~HN0yAt*z3n zAVrxLT5kzZ=XWpyOOh+gLziY9piCY1!rmBLuR`&$xqe*mP4?J!I}{`2Qhji;Fg+tndmpcPwN!Oz1=aZ-jT%atFXJ`;LW8&3S@0?bb5j|z z5=D>|fBGu{74QKJ?dbk8U`4cuWDiwO4s^mjz-%4q*t*hKEDvI;Z^Wl<*aN^y+tksy zr%52I-Ml)paV$4`3>!^;G48(m0 z9_I6=pynyE{}xXA9}9lM{Z2&L36Dw>4tB^AqCD(qMA~Fi8hpP4t#rZ_voG(EJqpz% z;(4naJraUiMAq@(Z@wd(~uPQBj1U1 za{bkt0t}~9O7l9H9kFut3$Smi{rLxw%lyee0~S0n5z`F$o8t(R`h`hpeqHD;nU&bP z;*u|AoLy{;Lewz7!|muA2HybEcZwC9lsSoB{&lp_;>JWo93Vf^yMvZhYB zrDTQ~+1xyL%H8-tP2c4RJf{a7$Rjb27dsOnV>sQoqUIBy*po_uLauhesjOz z56IBFZ6_9Al`0Kuw6@pHy(`;r!Jbdf_I8AJ*8r{#eBo?igd<$5p4yw|a(3ux%Pd== zRiTEvp=o4MUGHH1J2=-7^LeU`8fV*OKz5@zPpFlN$M}mEzHO(}cL^K_+H}hEsZ3_| zcerY=QHc=F<&zQ>qWYPdNIXIhJHrB8JIKL=!vzjp6crzrrjz?BKLM5mH)U5UjUHww zl3R`419d4WOP6y$lZnf|5T8B<^AtVRSvb}(n?T&8mJsGChA89>Q;t>Sz2uJ|Z7m>C zLrO29=9CMK4XsI|g9T!9q@U0wyQ>NQ;}$F%_FNS_A=ecgvH_nA|QCUsDx$+@wN4Y4jvLQ`FdZfxaITX{o}25J)1} zq&(#Jd$KXu@hy{LgxkW34TtAzbz;4EvBXd zHSb9J;55^#!8gPUi&d2W0aKq8PaYI2dX7i~G)d-=tvLjC!nk(n>b;Is5W}%&?jpE_n>5($?fPFJwUYo*+XwJp?|4c<1fUz{-PBeT~3+;5(;jWYVec z;l3--9B|jjCuS~@)S8fV}U zlnUv{I7rgeT61&s@-{WX{5f02;)WLPr%Eob`fnh6 z9B?1(zywf49ADXktVCE6hGaS*5+w_#>c5frQ!=zBexzt*C+RV*o}W8jvqHUmOH;k) zoGBl8exL;Vg1_mv<{WLhOnT1;#{9+QRSyYDFb|1yaY?*XV_)M|fa}7Pm;U!&O&U)n-Kxkg=`Gd<`npTu+g46|b=O|4u z$YUU=oEX2-5r!a1g0g8g_$;lMF_laLmzLMZ0t`X>582d3MKv%UaQi*Uu8G3Y0;#`I zPSuh{g?dB2=hvDT?g!lK-g5;j9qjJmh>3MDIIzrBrtdDytcV&LLx~x4MwVl-YEflz zo7?R(Y_PI*Deg<|W};C(FnaKX3Dt@8;u3ZGzfeyF6Gns{&!}oc_4er6+`_&*ZR&K! zSJpV(X3lpNo2-RY^^Rj&u4#W#YF?MkxNdDy<5#l+7q*BgHkpb__4FLqsK^TQxvF=R z!mP??m9bVp-xJn!wMnDmqmz9wF1{z4bxyf7>ra3goST6ih6YZ};(8EozzOzVJ zM?2#*_KhkgrqdiK8sx+tDEZzIi6%mFDWPcv#7_uGq%f7oAx$)iLj`?ni)M!R32x`g zvz3Q0-MX%R?xz~P-+aiRs~_(ZM0Au`s_Gw-4ddoBBJ9d6)>qy!N3nTrd|E;aXE7^! zhXk6sndHQY@{NZC>B=poO(fEI^y)QglgsnFrb-eYRROeN(e>1BI2FQgjdRz3FMvpeNlqAEl z&CA`*dChAqxt^=|ZOs1q>}XH&jnE?#gU}=CSw=%s`;1#`R`0oU^RTJFs87wwvUYar zv>L0$!Ea^epA8-3>N~R<^Kc)}U#mf#lBCy-qP^t}zIg=if2CR6rfNk8{;#N?y*>iQ z5-3{oUz(N_yI2NVQtnRRm!&dLj1)ZNypZ981SrSNpd9?G?h4%bAoMcXWYtnf8@$(_ zTNa$^*(+WCJ`7J$H@d3Et?(4J#4eu-oR*>(!kPz9@v$eTMBAa5ng(BMRhp^#!?+#QxQ!I2P|5p;k6gMjMpKSnGI;i?)UfR5Fg*l-C@6aF3?c zm}{@KaL-B-t0FE;0nr#`y)19Y(gLHYuVkW)wgQ9ISy()5+c|vCoha^|SMgKnL&m{g zct5Dv!zq%zq_3p;4Wi`;cp}6bDt*W}QgJJ`om{*;vjzp*azYZ1xzd0y*O#@`|NEAZ z{eY0Pv0Xd~4@%nOyO>o(#uY2bFNY7Hs0ZkO3yQIhZC<~qzGtY8#>S8pAbX(_-@(*N z5?T7nkMN=gD@%%y6+%f7I!h$?bqH5cFA%A}{9%aJUxAUFOx?qumso*9t%T9A)_hcR zBWQwm(R398O%m4n(?>XzRMMCWljg?hgEx3JAgmZx9g?j?%9=WT@7xy6gXfgY6qpw-hmn{po zXj^>d0Wyh)tU1|puW6b-Ios79)>=!6o8U8-?Mz7ao)b7;y#$`IgSWK1msB)?w;7uRL;takUPX+?X+fYz518W?o%@Dta^p%a(mtG*U0|= zNZn7o_9D!=g;tt~wAddDu69N}EnDN2YwEJQ<}Ooj-TMUNLvAZ+R!A5f-RH*n()4D6 z0~xdFnktwdfsBR0NzF|kzPzRr*d5xs9c6isNrJFL|vcVPB!`3 zdvKHAa{}f?z)pByjeI$w%Qm8E;wZ~NA1&o%DJqBJekS~wBm&b~y)kdDR{gY}8ya0I z73EtrlH*#v&gZc>IYFE^BjvGyWI;11QrNNSBR3&R>>P1K%G^e^=)w-oK9aa*=krvL zBLXUH&Q>hUDYxfWfCb|qJ^>5HK1*3(CG0#VR&;@6qQDQ4%%`EC`a=N@4m&8bRZ&uV zF1&-ga9+&?MugK66k^6Dz*{%BFD6WL#eE>L7GxIh2`Fw7NM@84P!vUyy>EKXoTBvy$0n;W?Yaf;7vYe5JXP(ui^VTKu#`Yz4;p?a6~zaL;Y*7 zV~xs6kFpDM>Q5Fr%J`k(dwOBk{HSIaq|1?RTBLnKZ(D#Y76}6`#q1_UxD3Em7SRV& zk~ci18RiSXx~(g>c%5cd>o+#_ayMvpe&ShA&o3rs@xE^VI8{Tr@?5K}ZLI5oXcwCl zAGfYs22>Gl*rOWsRz2)4mr&aXQ+6({PY?-50-|C{@`9{1;KipW*0)S9o(iDQwR0Dy z8tS9W%PrtA5y}Op5h|>Ywbx5=8B5>D?dvWKOT$|yRH4DOBG(XTB2krQ1 zB=){qa1mscBL;WPaawM*POKaXq(e82P)jbfYHlOB1L2i4lz9t$NG!lGm;OSt4Q}*m zpjQDPanwtt*L4e-pC5;eZceZHKuk)w5T4wz@8Jk^G9A5t>Fxnv!}sip7`(b^ELW#9 zGKWI=?&WEwjfE)ymQb-~^ z@}&r_w+t&}s2<8wQB}XsoR@2>+~3r+ztWa#HkY6*N7x_zK4h8Mu#d?x7_B<)WbHsxNlD}0lATS>2de0-JdK%qrQY*s(EQj; zU4^>DiQaj6>%Q%4*Tko;X{au4ZY-+XT3oWdj*QRqJl@;H&a2ql*toYcFI%5G)5raieeLbK($f0+($YHk zhkV8EZd*DtP|zC})9Ikg>*$P$>n-S?Sq519mn9{3JN(NTipj6G5_$us$p9Hs!EPn; zb>^qZVRs@PIYHYILA{q(LF3JsK4{sxVJ~Aa82g`%i3NXbJXnL13N?k?D-E7DriZL> zvD5Q@YipUSwbg}7eO>FWnTW78@rCh?`syvkMceDi^g_?~dzu*IP;CvYv(dS%rKDut zx{{I>azpSBG6yZ5M{#Ei*W^sm}o;`ap~8JL6(@b!w#37VQ6fMjH93a%w*a;vvbm%XSPgj-7@aJ zQoWCLIdY6e_6<{&TEjlJG(X2!VjGznY3$~%Vz(T7lKHtMZl$ZGx_M1Z{0diVb#vFc z^qiE$%$WR&%7m3A8EJ-;L~Tq#by*qca1Tbre{j!{*&EQWP?A}ShsZJ!=o&%{=Wmx5 zlKiK6rp?dZEy?1tQ8+lI;YAp4E%-~mDQ zin=gOb8Ts}Au}#DZcSLo>TpL%OX<3P>!!Nu4Qp1GW~CWY6XZJJS@jVx0P!3ZIe_HW z0fH7@g77g5vUyr7$&wp-IYBK>{hR(Rd=jgMS&0z7_A;3x&P?w9G=DHb!`AU8n1QK& zhkLc23wm^7s=h*9T)?~bw&h`k>2Wbh3307G%>&~-^1-*%#RqC?E#Tq>B$B<#B7#UJ z=a3U&brkMF(YbLODow8N6*w70{|=fr#Ord0CsN!|6KaWm`j)cq7%0@>z*S;?%Zlu|=E;6z@D4Rbr(!k zw``Vwuez!4=$`f~8cLnc((*m^I&PYM^UdwduUqOX+jBDGQsSdSLz5gO>&h%my4Hru zR&XZx-lC8shYNkl?yjpEjZN5CS-aU<=XT$Q_Mhi8IIZv;6rfkNs6HT z1)q|gFoGX}{^&*;-6TB)({t>j+`WC<$9js^WhTU?tNPV_H7$cz?CHLyh0ZY56mzdO zc%Gj7S!1cXn4E>ztlPVNMJSt)R5{esJnG0z)TP8O3XNXus_Coi-&}UEoeVYge7~cP zv3K3zDAME=@xFxUJ;6a2S|8E5NRanQHiXaxuEpS*6xAii$EU!Wv{g5Bq$Igl*BG5W zMw8xN0&9@YZDYUv%$Atss-}V*==Dn0!k8H=tVMHaW@!{xe?xMrvBPR>jf&q?&0C+_ zYP03o%k>i!ONdqf0A$yC=V%Z}B>_d6Gv2vJrih(JRV8wKk>nUNWb%pnU3lO7F=;8P zgcmWf;O20ME29Qv@ip2&l$_&1sp`LiBw`dmv(Vw0?ULfBZ?(P+5Y>;nxDkG>vpvQ|ICAYPzzb3;GRf zav2qd(ghA@+o+`1?tOyOQH%LNo)sOnHGPtx-}w%2HnNY@Z-azZGR@I<_xs&60i_%Y zyjyCilz)A|?Rkz$`T7ETM3VK9M|fE&p7sdHy2dYqUM7@ASX}@K`Fi~kfk98i(7bfv z4Z5tE^cP5OXtP@ME9t}OM>ETL5fCK-=I>VC%dopO$+-oTgpct4B~gNUTV)Kw%cx9O z%!LqPRH6QWk4>F@BM?W7Yw|OVMpuaVJcZQob23q>!bNcZio zMf#4z9`U0N?aBcW8_Yu9KhdqEXxk7{O|GxJ+iivV(J!R`YqZ|-R`#uhdT?Phdz-9h zDMdj7ttUB0`LPUeYx=)fP?#ea68?C%6Hz=?u1-VK#U*nTaXs<&|unw)fN|Bt^8j z(vsba`dVr%OtRENh~zNvJ{v32Z28+=>B%`az!nYt8VKR#)t>Ou5 z@6?fOIvwG_wP7U%)lF2Z>itbE({VbTXR~ID=g*n&SLaKn`_oK1fO{_6ekGrd^i zQX@Fx*N92@atkQ_3$G~eC*gVL$wiCvOr>>v1AOz9Oy7}0=&0VLe(jU9*h}5iM6M5k zR&ZoXY;sk3Ney8%P8MdqKpXyWnc zbuBk4#FtQrDZFHb-(VAIU+}H!y?*cIQe<|*uHQ;d30VpCgMfp>O(G+EpXRl1OqlM= zD?=e55XeDl_5I-Vk?3vfcHXdfXH{cOd2H6Ut8d)@`;O7f)O5XiyLt&1&Q2z#IC}H0 zIIvdL*=FyxlBYP(xBIef4!GtY-7-D7+3HHx=VUC6Ub`$K%^e0Wbk4$k zmQRB%#kU{Q9iq2AF}oyg1Qn~8WvHK~7wz_f5yz?xQgCLc=F-$}(2I6QKJBS+RJdrj z=)|yl!tMFB_~44>YrzLVo*bxHaHg|(%dU7o=5xR#fj!Z~=_?R=;VB0kgAb6zQucN% za=fm!u3`;D)ia0K>Grw{mj!?05?+qkGYSix<)b^cZ=Hb`WZ;=Tug0iNqd*5b+mL7g z#i-WD2Lypvqc^CdutE0Vmhd*oh+Ujho&7OsgM*v&)3TW%nc>`|sSU2-{5ds#ULx!W zYB8EyT*4<}L+jSzMePAU6C3V?ZtnE`SmHY@={QzT0uGX?pzfmm~=KdvvIc)&M z(%4}mxl@!$6R^K1^uRIKY}gU5ls%Ys7gaR5S@5Y0w6;-N6?=(_eQW3r(ct`IJKfWP zayl|RC$MTsz$+r_too+^w$c6WFy+c?COj{aPSIpay3eHQk6lW!NegXq)XMCvN;@dhd8>D`*D0nHmb z4avoYg_WZ_x9`|~x7&R;;d)?yMv^(gdu5E($W`;&(U2v8#qb1?g>5m+Ft{xOwqJyY z$#?^f?H92F<+6#&bu|?+89T1Ibw6{^6BB&@+*41MmT+&dedL6J*Pz+5Hp)nPgf5HF zcQPlrz?ok%x^-sD%oA?zPX#5`hBmR2qSlZPSATRz66LuyQ{PC#rZ5cEo7ms8oiBC*DUZXZn3Pu z`@W?fTUkZ8%yUT^cn`BcA1l{PO|DjqWoeZ*18jB}vO`xGXG>vcblD2~b55z?_R1*C zVn!hjA31aAahgxut*-H(Pl(d^W)m3MKUe<+q_PS;Pq;9pVFYf0_}v3%v9}wNl!xvf zdL%-#!@o?=auZpZ+U)(z)X>)WcXi5e?0}KFZfS9E2&_; zgW--|Oqbx#Kk;;>{wjW?&_6c`o`Hu4Uy72MIvG)k>U$gLTOf6?;#oakT~Q6{NunIm zPWk7w!MBmf21zq_?4n9OG52ul58CUP^s_x}!lu1DL%(nGQZy^6Y?**ySJnblU4A9& zK(j(Jvq!!Qv|mFtx`G6nQtp%BI=W9r?F@I~q6!Yp&8NP&#$AIAw9hfmc;RdXn<_4* z=nDXZo#-1H+*z_59kUdllvo23%f6Xn z?YHL-#-(kqK6RJhapb*S)uW4p4-PVB&p%ks!}&HJ)9ds(H(lXxPI+ltvAuUhcvVIE zjuCy-pMyT$r!0NXz+cqUNa0r({$VW?bL1H<54L>{j|xUBnztvV?Qb}FhhI%PT6?G9 zVZlS}i=V)YdH&#l1GX^VS#tU^fAW_!Z|YB#T67SAU}OqAgi4&RRKO_gwt2) zZ*bya>#Xw8*z}poQ+N8)LEYC~HLx;d&oH*}-O1$8?pbv}v8T;@ofe}hkSf(>13P?s zbik=NAH_ZhyGg+vg1K$Mh>Y-gkH~T*S5?wYK2u&(ke6M$W!DOON_TflFEbUNm=bF% zJh9EjIoTKXJj^_9v*hGkb3E@bw?)OPd)vo*8&@q_8?VbrnTpy_I=%&{)UU!p1~;$2 zBU0ci7~ysWnceW79-@}FB#7nlmk9KxOb}$t_YN|-GGU7S%5vf*#&|D?lhiie(?rBs zXO>BW=h@Y&dx=eIyyPK}H^0)9k4J7xA)S(}0`Fr{Je&NuBRa88q@S0-ET|fN%&O&= z5BKe<%rRArk7aeHr4HHiJhiItA3e+cv35zCZiOM!V73_-g&E9ty)+5xp4bF+??iul zQA4PDX>D;$-`c3Sc;usVwH1YNeMP36RoTf}-IzWtOOJMafBq@9imvVoA_Jl!)W9|w zcOHyMUag@r6r+b*wNIV7hSG}cEQ_%$e&yzaku}zaO$B**MbkYQk=%pq`fF}vewLUT zpVpt2l%~_I$>ct|JT7Hjoux8NwW!ooTgEiI-QU8s<*f;Ch!kt<-0W|TbIL6o zz>piqSBKjig3-)q#)>`lyjcUd?jYh0kx7kWK{&0$NKhj(Y_QNiL;;cyi z>VvRAy3iP~IuzKm-$&qSag}WeBvT&G6Y$#mj_>Jq>x>Hq9CF=_>c~?6HF+ z;SmRBmG>U>a!ZYFxIeu6E;%n%EMgUDWX_cD8W27B=62-y zDj|~rdk~)kSXiq~OBRG#SzT<Rm=CSin@#YUG%EU)~1+?$(hc* zMPy7TQ#rk4q%Z;csMoe%AqW|aH7m*~3b`!m@?%?SyZlM{&oXN~3MvzG?TXXemQ2?B z7xd4?L{MblgE!m;u|FB_7NB#zlg0ReUh<9#@5kbRzvcI?la!CVH^8wa)R7_ba#por z>yaDQ4|YxL9LVqO**@J@%H6Ko^Ut%7XXfT*zQmm7{--3}l$DaIWp~f@GdkV))(!3b zoy~o1{heUg|4M~j_?=A|=}DPpXxqlle*ypb7047V)q+$CVWXS)7Fy76C&c2tT#V?Sp9_|cV>v61R5YnG!R+f-z2-H7gZV!XZHUL2+lwdWNg=VV_< zNN_}EV)FXr)bx!0A*@*Dm$5sD_d!kSv;Y13o>279sYRy@5S25A<-3YLm4p;)@~lr*ukn(yk`3`}!}{Fy)TS$La> zdO-pzTU*~WB%r?r=$fZ~$){_cAB`@lO`fkNzK!wd{sXq>d8ld#lR$#aX{LEe>l2^{ zo_e2m4?JI8zCzPGUxoa)xr68rF$K9BI6br*R_GG>5nfpY0YeayQ@)p%-%P5r15+i! zuYyu8A0P)zC}ylpc;)QWd?9fqxL~nAPvA%NI<2wH*^y0K&t-W(p_hhllK#=3hvI}$ zjHGziK1qGkAM!(i9|buikn)f!fdya#LP0Jxla*cL$gL5&T-iTKKL5h6HA2$@j|7of z2W}ZZ&kTG|a`Se?E6W)=KcvO#Miwwj?UAl6Dhx^&7_=dZV?k2Al4@ zXV+y}t-_npC=JdM&jOZcCwj1OM}kZkt#Yk!W#~2~&YDCZ7pbZc7mF6}HhJ!=zNV-e z`tMxx*!t(5aJS6w69f>+gyYUZv}-w*uE-}AC78Jf;q*;dm* z2KU52g^vL-mSJQ>}yfPMA;)=SM-( zfWz4rHisrd=(Sy_25duL8=Z=q{2HzP}*{H)t^R&hHHSo`}RTLm9aFwede zXx7L07;L;Q2;_!;Kj3A7_5qpC7&P?a;6h69zwzSWLXFJ)OrRTtc1K>RvpqYvueh|| zDBUIejyQU@&Pvw+nth)qQ{5nHihpE^x`Y{ z<^Z@Vvp>+Kre`Ce!gHGaQ({W@6bwjL0iUAJ>IoO(BO-x7tT?)j-wWtRyOXn#SrHM9 z%!-N5^;0~tf-IV>Z$R+BK$m(r0Y>Pq^K|NR?8sWk%O z!E?(6o5+CSiyOrsM4Tg825b5E)ibcKNk13q+*~-b6FQ>dcr%fYqgtfEyOy4iDSNnl zIB#yR`f}*R;rT>3gC0>LT>w5wClH>Vum4RH6yK6KVpS znxde~m`6`t4@1@cNP5h#pl6pqfAf;9eG5qnzBa#1jXgxH6p>KKN}LVT!mlK-S_Yo5 zb3Win@KKqir%T6ebF=Dw`yTPk3jw5gK~N=rjhEeDJule3OafYH#`^*6p<2SZkpkla z=_Jg)6dqIuKwT^mFvv{uA@v87M-nD$1`o2!s!XzUa{PL2QZ{rz_uS3C9-laxdL znavW!O3*)Wv1dWoZs_i~#ZTn?U+EmEa+ld5_*q#MKY3ietja96#_9CLEVRZw?CU-~ z{{8g8zc3@S4a8GyhTqwi=UQ?x`xs3dv(x?b!+%V05R$dbKdVN+s3+5HiC-YP3skHB zm6iN>#-i~5kF_s>i>taC=e~I}0|{Ax07+QFFvAQpFfcGX1H&@x`@Zjx00{|6$iA-{ z&7v{xYu!IJ?i#J8pVnHn)mCk-?WfkI)vxX*t*us=$N$`W-+S{01`_-I`zw(U=Dl;y zJ^MY&tH-bF+Qlv`v0f}SX7a`}i{^iPb4zVT!Np-e8+U91j9X#b^+p_9`Gf)IJpONZ z&$bUh8Ye3@`SKzo2YwWH%#tpdgrZIAz7q37mIX97T|A2fOr(U1Y(g_Cg`gFas0PR0 ztuId-NO@0pZ4)HoAusgZwnW|N(|)q7iR8(NMy|8DGj3XL_P;^7*(jS5w6g|57H1rJ)ll z!EZMS-vC}9&%W&f_EaHW!d_CqDpAp?Cuc%tZwY;agpDx+OA*BJCq4^&HIJ`kU?;ak zU*C>PNBhS@4*3oNC3qiY&(PXY@8yycIPcjq;755{M*5COc5FMpAQ0i6DVPXGV<2MQ ze;iD>xU{M7qM#yWrt9111PtE?K}PTc;0HS&ZO)w$oQ;T)Vlk#46%zv&X7-E*OX;fe zJ|h2?ugvt`Bog+tHZ?$r=5$h%BF(o%QjnsjZEe2^5TIc&qphr2_Xzn(v>m84pYbjM1I&{&0WMT#Y3s{E9eftHAzfl zGi8%Ul-aWubo->5T4KJkJ5!TUg!4=|Sz!uX+kFUfzAm%jvQB>IFs zBNQ#qze?ggY|Uzhg3C!2`>L;M+52zN+6gN?bXtiGNT1#g<>z_AW{-NHuEjU=IB@3D zH^3H0=#V_X*CM`}dc3yX=lRI%{jaLBa$5!E0)&yS zqYsFq;`y^XKN5D(zs6(ge=p*{f<7?Lub9Z{c?sSM@CLsN(E#3skhg1uZB3&=TLW1; zkpCZxzI=%i2E9QVOHNbK*ew%^pryo+X#5b3pOR2=hxLZ!)SU=+&##|Bn99=0Ga=3& zPH7NpEv@8Q7?poV$iIVmLa{XgTSHV!>B?(b10RrLPgmLFAA3yFG$ID&*BN!RdjxFb z)OX5xKtbx``E|qxF07t|Wdc@=ONphNM=D4*L-qI}-^TSBw84U*Trv58`sa<6NPAC5 zQ(J9y&xBecBM&4ScaKUJtp_9k7L)v<^1jAFQbvBCPhxPk@Dy7Oc#}YfPEXl^raBL;HLurDF`DbcWL}c91rg^)Rj#Nu-uEpRC-W9UDuY7HmIW2qsDW4KR zRVl55lee$~hacsHyH50CY{HWGV0N%N-dJF@=BLEh4rUE`TwQSqE{Q%%gEp5Zrh@!1 zg8NN8!ynh9N%Egm1JFt!?8afa*6?zTqcuBoLKNqrQ&En}_1k+`&DovYw^y&1d%tt% zCOZ~Lgmthv`RMp-aB(?rpaVM5v@($K4-aC$5zR;LIwzY>XJ?FhFJ4a&+jlH7(C@I0DGpYv% zV#w>^wW`<(+L-{6#7FQ>6}e}W`q~1Pq#4=way(`L7d(()*$zELWP$|kNeA;S|7dzc z*2>Gm(meo`{9j%V?#n{i*#_G@6uYmDsSezq)!P+^!Tg+DCPMIIOe!hfQ`IbXY7viu zy%(U4_U!=jWm|l(N(tqEk9aSiU@073YA+kx(!-uT=Z$o^l5O*%HdP1iYRS(^x@-&Z z4iL|%%`5WnT!Fv^Pw@*6iiHdiPemLgiyVZkLVf|)h|oksGEOe!cg190HagzJ=6G-T zXO7#Ii?&JHQmv+ym=xSAufc1pJimcID`1o%^{H^Dwvo>Fxj+RE0Y!ubxEZ(_LxBh1 z5?Eya6*xq9w=ZAXT?pXGcTC3R0(|JhIXfpU=_WJJ;S^fbMcXGy9K+%Y^+>2i)e04! zzG^o?)QF^E)5XK*=bYa|X6saqgc(Z**YvQ@PClLy8a+~6$!V-MW>28uI_0^#OUK?C zd0`GYNV_ZD0R0(oj;PBwO$W<X~(TeH#uGCnrY2R6$M0(a(08JaV0p%K+X|q4-!BG{e9S* zPk;<3pJ@x^6-&VLDK#q{ieqNa`1`=-vh~|~p!NQSa?b2@nVj-E^fLIrM8W#iU&*xO ztnpHBfGo?n?9X7!d8t)604fz&Iew}ukpK(^SQ?t8!FQ8BX%HlpFENXXrqrqWM_kjvhycDjjXa|x24ndBm_t@ZP?Ok3%2G}*ty?- zlYeCW??5z4Y#)M|_-2i?Pdia?u)UI3en_rK_Z9>G)G<#8~@o$8=n zfQ?=L1>e<9tN4Y(li;b^A)QU~)CZNPZFulF~6wOyyXi z-1|**jdj2(G3qdsc7ASoy_@@pA~gESH58-wv>o>+rBv{cJ_?ZHeganj+X^nWO^ZFJ zIcX1;&uo@ID%#skS28HaD#H2F#4j+EvV-3B(bZOa(=zQ!m(=?1+8(;Jw9*Hsgzy@J z#S{}uY5oT}hBOiV5@?Pm=3|=EEKm&mTti~$0DT?S4C_Uq;J+?W5#zgQK-rnDES`%@ z6Kw>Sue^$=3QI=a(wtf5&_h(sgt+tTas}%9u)0^HHyTnUc9LKrUkg~o03NAA-vQxv zxKx^z{+eju7T(by)=It>Th5NPi{_hkSuUPU4ooUB$mss~KSY&fqO%e!x~ernJ(KP~ zgpNI^)(udTN-2!@+gqVFruZT<#@MFL1lng?XF$z<71+kMtX??Zq80E^Jom$|rFh&A zIN4y3Y2Y;YV6#f=!)%nhlX5w ziKFN~Xdr>W7r#ozh{=D4?PAf6T^TJfK)FF9{b$Z5)^F4Oc9YB7;*54F2a96 z8JGN)*(@mRk41K?&B=?)r4tMhmo;EbBciIzE$Q(!X}ER%LOt`WyEwq{-3Pt%532R< zxVU0Fmi?*k6&lC@r-0W~0QG4QqfoESYL2G;jsYwO#sKFJ$?YwkgoQOTR>$BJ1A3wg zmR)1YfC=zud|-5kOH=@|SL5lF_r|q{yuWFWHdU`OrGzcunj*{0++*Y*Q<^ez@a*^g z4ZBxY+6wC2+?Q1UN=Lo_$!*K^q*>)>)VlMOHAx-z9~4-ZVY`vT-_GFs(!g1c*|f5T z=R7zlT6P^o@WoRvY-UA_zv%|mCY%+o+L-4#b9A-M-4TTz0V6)~Nm`mJAuTOorZrz@ z%A3iU#|~FMs7@|$ya$$@`xSiDXiQK+7Zde`{sGwGxv6}%llO9UVnB`$Cn_4eJer;% zcfq)I4G$bp;Gg2gF!mo~`>!1B>&Zx5S6s6tFK$TAPzQl#SBtP7|zh`=q3cM<*pi&|te6By;A&voH1yys=q+lj zm?%~J_8hd{Gp$wCy%TveF?}o<*3U!+Kz6re3r$aDr$5@{gkXCJ?#9P+kZO5vm0Ss9 zl^*H8*2ND~X!Hd6!8#9Ej1-B<;Ar`birOo%KU}kC@-=zySHE~SDKkYg;5`QCn3H@i44)%eTc(RXIHAqZCumcd zr7dgdkeHsnLeLr;JFXik@20A^af;l7J=q}ar&2H5j5k7 z*!7~9)37tXaFhbxxH+!!(9y{??BU59W*!J%)tsA~MIkM4Q9L!8M?%wxW~JWFf5YL$lqTednOXs%)FsV=z2Ek3JI59%I7B8wqOyC@L_uBmlYfD{y z@d<OwWv}C|U<(NGVHo>b@q50BXdNG_Wyc zZAIz2oRH?=CE+hDQ<+>di^NC~6fFbd5a=Efz@Rs{=|(x@a<`8UhvqHS%Pmx|97Fc$@m^1wyRBmmNSt zNI^n9af}c@w>>y|2>&RnH$~8XPLd{ zr6z&)XlfGmX_U#cGGk&6`y`Y5R!GDaQPTh^L40RNCIKdb*MYaPLBFOns-KPpiR+r=*xDLg@xWT8id2vZ_s$oLp>>@#6bpp+^1RiTVryFJjwZ#^_hz zN#Q#Kp`*{2hVn-Y^bT>Ebdhl3N<1p4nGlf_Ew$tt1;&gXI6B;KYm7dlGY8{v-Gn#PUmY>^7+5Z6IMQc+Q-QFTq9hpIkW8e6Y7+XQZ%TI5A;eB|WhE@px;d zx1W9D+&%4WAx+?ac-yDpLa)P9k~1Cji1MuSi%B_JfVY#UI%3OaCRSiRDK<6 zb4M-H4-9i5EC9o?3S`nmITLx2?a3+4+E5$3JjPXM&$L=c&1Q?U&=s>h*fSWX8sK@d zWOYI;iBQ{mq7U@ZJ%(twJ_7kvs9 z^I!>SY&uh)GTrH!hV;GT{ncwCRUHm0m0jDHXIH}_vWNxV66TtC?aJ-NTPvByb%(qQ z{f`T_k_nM%c|n|t3TSOU-bN&FH7lbHscsBFV=@M1y`urrH}w^d{Kv8Ih^Z z&rV399;JCEN3wq%+s};%SH>0n5yiYe-LYdi%!bpj-=BjPFK?h|PLfux$jhdvROdln z8LB9%?8(z5PKI|q$eZ9?a2F;Y+xTwA{L96#SIx^F?R*7(gPOnqbGIb+P2NO&kxnN} zr48Oq%E7jEm#b)X+{&(1oxgH5!kmatWx;gtmeY|28NpPmDG6*FE{_t2!6d}fy06Xw zu^_Ht71%eOv}E}<-n7B21dLfQV1{!B;&vgTFnH5O0{?(0;q#fb22dXCU-##aPT)E} zj0q`B4va#8iav;Yf^w%GBp6r#7d+8XxNXvbeTJfBDmOH=w2+`udMp=%!={pdo@8 zY-sLk=uOcqSh9R!-AXtMDI)VylZXXo0Qyu|9{&|oXRgE^2A_SK+l*Zt>j}D^8aKp8 z)_^+u0m;NA#=1N<`0E;r+2ZiHVq+Dx8?zKU1F+%g_~y)_<_K)wyzk4lOx!Q>;2c9N z^EQ?x#0EZ6wWh>IM_O`U`0*tB0#E`^@2|tO5RQ~q;nEYGoiAyc5mdatVwZ>;`@*!^ zOMmX1tJacESkt9SN-U>~+N@QTz^x<#z&T;HbV86MlYq+-r7Vj*EfrQDemAz#uIR|4 zBQQ^PYj-7g8~e9&-oKnH>^bUPEh!KZ`=Z@xa0+BE%IN6n#G^dH0Ve3?I{+~0!GDMS z>@zb55;hZaG&pU**Mdnwlg0S*2GE+o9`*ru9V85Xw$_u$6+F$o!Ncd5Fo3~T;R!wv ze_gEa5O0-{&IJ>{)a%FyU4SWoN~#V9}`fO@Jzn&+fv0K~alKMPB4RB#3w!j1jC8XEr&4pIkjHTlNTxvL3D7%rCQAK;(HWPd5JN{3<>A)p(Q{#?M^nU zVFf)GdWr}9V=M`hisvU@O>PX zVW&@5@p0Gy&UmYzi=mFI5Ga#7h+ndA00mZ%TL_mgzkyjSjR~OKd`Bs#iTXsP7<5UG z@{P5-q4D;zBY7*cBzUr)c<&Yub7>ekO?#lTygnQ~f4Mw+$m5S0InH-9$(?SCGT# zy4>4^ev+tO6v{onO*opRrMMzKIaSDF3~z$12$>pDqWJv9r#PJ<*wF%>D`_?S0>Hw| z_kLjS!pD=m8kz$c-bLb3g86W?&7UYMegd#WT}iN1F7S5&!>{t;`UUQDphXnTt-Tdtlneqjum*fkJ_giC0eZM$ zPTI^|P5>sA9xJ};lekb4eC1>7H+^~xt-W`3PuGUU5@gTEX;yaJ>&-)Vm4+|ieu3_) zfKi%BhE(sz0+Kjwdd;V(qbqH2%V1-QdgjsgD!H#xlGG`V472oP6)yuWPQHs}oq&yy z4iyy59H%R2QtOQKoz;7ipsaX#nj!+^2Emi~Wkvw{?MwC{LQTErk!i_->TW!N4sj#D`6lV>_1(eAk3|?qVwiX8N}L z3JqNFiW6`W;Muq5s1lI-+)DZLq}p!nnfPWit_|?+6lp$3Oag=TVQ@{ycg4?g>5Y(1I?esBFN?%?ZjoL;*lj-mdO;8UPjpt`jLL@T-Y3y;VqJrHU&5>U zNR{MZn72%sdMIt!G%&jT1lH(;uVlfnzbm9G!ho1^aweq35l)D$6Y!jk;tEFqRSMC1?VO9l$w|$Gf<00zn_~H?z2?FF=UJ zOwQF!ppLjr#D!gb_|c!$xd*wiliYXUM5HGr8)t7O2#3_s_(%&D{Lv?jrk2NGEefGO zjanxGn|RXM&TCI0@}hn%m`$PV0vCw$eKB?rY`^%6ofLzvSk>ynT}N?g?^KXH?3}l! zrM0;-tA2j)9+-(L#$M9&meG*TFVTcHuU_OD9`F~m1Yr=3kJUWwT}%?rR~7 zK1aQu^w)&px$zj*$|m%%Sei`ky=CtMoJ-+OQ>x)%`h|H(6kbS#bJP%IivY>qCjf0e zI)BwM+0J@-vlQAz`-cmm3eO6X<_|e&UPPRO~+hegY;o;eZxP67r z(o$>(NSn#@skuAmNuqMLD-R4eH7oQ#^iNDys7{kK<*_f!GEK8{1B>h#aM^?NV&t+1 z3e>Vzy0MvA(o&jSyeziS0`oN|?pB=e&DUhM%`#SV`=G7B@4^R+P~~b{vE5#rutKAq zK4g>c+79jlTHq-u1O78*w30H(|Bwt9v#>O{3v*qO-@?+1r%Uk0AG^c!B8W8SPE)LT zClqyr)9Zt}1=*Uu6LRJS*$i$W0(ikCk&3#peJQQ;qY}rfcAu16jk9t~PET~n*Qiu56E5kZQ1G29$%w z;;PQrkhs{q$u#*}7zbwC-`mDY3Q|n7pwQYBv!e0)QLK{y&hr4Lhn^A%tbYtEORDy< zRLjrP%KiRzawa3)VhIRtOR=Ndk*?LJqlG_wrce;;LJIf?TO7HwK%CZ^6PjkVr`>aG zl-BnVs1q3kb{%TT*|(v-4`UN6#~K#$1ilQa&}%Ey>|dDppruF+9M-k6ho!~)R`aaP zl~x_2-B==@_@}(+>`wn8ekQMI7PQoAogR-HB|29lF9X==4nxtO2V+F9vMvH_dbz-8 zec=bICS810yUH1xWtQWpFG{bCadu6X%DZ2m(btzfR#s3t3-C#r+_3J^QSNi0(T~`; zuVFs+$GFOzo&dgjqxBhP%+o~YC&@KR?ItZ)|0>I(DImR6^? zPR6r;+VL2gF*?;+kP{fS!jza8JV=#VZBCvE7(r!&$Wt>e7YT-1T@Ldj455$3o)55s z{zN@OHuEfq!I9O(>b91~O#E41a{nj_xR$T4o{L z>~v2{n{>64!~%%?sforHecU7UA$@oJLS?)dghc8BDutS<{$ zW^*+gi&86=Yew@kC;lRjhf6fSOEdFeiDfp9O;l-hxbBv~|1-EH{}|u#i<*S&Ribk+ ze>4I_DGCUXk(iZz7l%Qd6ag|DbFBTs7?6lbt_BQn-6YSKM3-NjG8dvLVg}@De5ckj z8Ww6&1y&H@wFRjfZ@Sze-DcZepP&gSO}66jZKQ=6cM%gv6@36Ht!bV+g1LBeL;@G_ zhLF80aNASU>P5>uv*Kjbc+(VHF0iMyry(#uQ7mcq6OFVhj%4(Mk71_e2KTV z#FRD5xv5q_H=X8IQsYXlfnKJ!K>SSSzk(j*bDWZ!ALw}cF;)qxP6SOqZ8(_xuP_j7 zc%W_>U1?I*jfLc?u zqp@;gQo)=L)MUQ8B~+0gm=yslyY4hpF^ur&@aJ_L@WIpDB;0t>7Heh|r2IIEeRm#{ z2b+?h<}pwjptTIJFs4jylHcLKP4MWpSgl`Oqc7UGrY|hA`|25qN0F+q1MIy3x#)dg zp!Da*sBD~D7m8cu{j(<4H$eLxE^ZBkXk(GFVmU7Vp{r{rf)$l>w&CS%D4kZ{>LY+A zF%fd@(p|Q}i3IyK7k6?$9(8=XF!O+e6K6Z%i>1U8{`~*_L9qP-=YL^>;7V72&Y)JW z7--}6-&O!!mlrLeBnO7AhyTTdyjZx6klSWauuB?>3}wsXNy+QPNqL8FwiZ^cP~i$y zP$Vdck(!vt$L<;=19!ExkBuU-u_P&v{z(&$x+} z|50$>Jy%NFxgaLZ8BlqLSGaQwOG?rPCoSx2b7iUHotiq2q(t4P$#lzONZOjedBA6; zp>rE(=1t&OdPgGW7$M06@`xo8t{|u&L#kaPO-jQ~d%Tp_X>N^Q(dhzqbdOgRt%?T? zjI5Ij*}qIaRH#5qk=s>S=|Y!D=3w!)z)6WjJUy#j4pVF#RR8|gV_KxNRFt~1%Y1|G zc(^YGxN+x){~ST##zaV;i)Sc#EY|K;8Z)(t`SwTJk(gH_lQMPAvw7qp?UT#HC;Nm$Y1pjhSht%z^6@P=?QLY_Za17{&C z%ArWjaqVo+NYqhOO@<_`U;?=;kBM2VG?x)X>1|s!;EAWc@bfnLKH=#ng3TJwM}k2B zEE2G#SHb0{fgX+6{rW4&y$sPizZP@=JT76bY*HI--u4nwxYzjLs|A0lNooSjyu1EGM z(;TI1v$IA^J6%gk(g(dcvR@p2^s!Xi!sIe%dAY0D5a`NjLst|fz9S|UOYM_!vF2Pr zq!dB{E{J?auu8BuohO@ zxZmHdGiI$WDjLc1zkYIhrlx=*V}v4!OdOmj&U9BmG{gkOO}#FwlF2~N;hT701`H$# zRu3gbM=Hq{QGAD)1V12KD~Jxk}*-K^dSz3+7qJ}9jfpo;46b%&@Xy(wlaq(+ z$i<(#M!-^>%tPjXk~kgQl{pTUar88JJPo@%JL~KBm6RN8Wx2PRm5{lg^8gQ5mFCtq z7F2J|huJ)}o7^;aPoV!hfgbKrE*^SnpZqG%`P|eTfXhA~+kd#crMfI!x9Q4T_a5b% zn49JX8dX7vDkN8T?SurX4C;J?K#zX~74Uf535nHw-84E~0G1K$CC@lIfLkn50bLe&Z=N_vGgHTGA~0mAkugA6MOuA^L2qVivAJ|OjKrzo z%em8b?pSoIzRzuM$uu=u9nEREZGF(r`){K%&ZSMVBCD3W1$Xq4?e#3-rBOn4H{ek9 z<0;Q;6=CGTv;caJGhheD4qQ9j*9~<-*Wt_My(gfcqVm6)x4yZTWNrH{j0WsVn^p+|Sz02= za=d{>k81~h1P&J)b4w};=zZ55$jRP!mt}3NRm4KeDDJMoEtAk)11+O`6+zSX;g4UjrsFOM&Wh>q-*MrL_2GsY8iVEKK+c{PkSKo^4G|?W=co0 zsvucdJxABrt@Ua3d4o5cc)75ISIV|GB}y6f=A@|9rfeszQPyiyQ>#q{U5iXR7T>57 zb#hI*zfSg^uXQbm47C^x8N7C04`(N6=X@ptv@_|UkmH@&bS5L-**AAa728|lV36*# zNICUht*USsIjF-%9S_M9y(8I!vlM@n3`OR&uHVrk-#$6Myf+WZJiOOE?3$0h%lDvD z*y37>3$3%(dQ=oxuiX0D=;%vkCm2@lMty?vr{ks7Z5ro_%(6ne16(9r)%H7rSvpjS z<9b zD0}|*a2AhtMCoZJn}Iu8-d&TISG^-|OU>Yw z6l%pI6T>{vvICXghl8e8ZKx<>^IVfH1P5$}E@{}gY5B5v%`%KmwYy?tE{_h!0XE!c z9W}_=S5aYsY`A;3h#RhUxs^~@L;CjpD6EWD>(pwx2gS!Ta}c_*V$b1WMlpPFS61EP z3(&h|U+l>}d#;LX%nC$w;BD?RGK~h$;Fs(!B?KnSj3FWli65RoIoc083ooy}k^(Dp zd3|+BS?$h(ElaD+IqexHgDp0$)`VFj?d;Wm+R?ZISYv*#eIfG?;Eji^Zcnb+mV=&l zIjnibuGP6*{@z5brPFC^T^?(RO(6X8e5R}6#XAyXl#8DPhIur{oRM8%+)gx)hQ+f5 zBB7d44R}a$v(q#T7z0o*glqlg7%w0d5PerJ%OTub>OCFTZs%N&X3qoGWtPpTc<8A& z5s+R>am?@LZZsxh7OoXa97rX*0#AEQg41^SW_(dzrsmfI!?=A}2SHUpbuz#hfQNaF z=u?P_d&c%yHxBMVX=$devoW#7yJ`gZ70*sM3Hd@wto zY}mRXEM!@HPJFeobbT(57xxOmOV?h5Ougl0z|1DsI7RY6eO?~Hljy~p2;G;%oKd>b zhuUY%(9_u&)cYL7@2tAy@aX8lgRaJ~i#dVjUCVDeaNx!z^;vTr1GP!)XK)Tt(Ak%W zXKPb$I*b;ZkSLw-vpm|WQitJS7BBzc+4-}v{kN=LncW%_+iJ&irMZa@&Lhn|Fn>LT zyUsc9Ty8$5AhV5|?Ac<}C#4XMc=Ac^oZg&iXf~>!-Uw=q^1>m2K@D?%(+M{aDExgf z)tn&t)w}ZGDGre`(|yNDk?S`SKovLqP$&S(JjK_YPJAdr4DDmQPZkhzv{)#A?dNeI zww=WjZo@&w;sFmH17Ecs_>zQ%d@wH3Fb-efj=N$zvoQrTCm;BlAMnf-i}0NHG#bo= zc#l6$8X=GQ-V1$@_`OSD)-~oa`d(sRX}-vJdI8>yn;*NZv0Zb#8#g_M6sJ%VIqmh7 zf8-tTej}NOkdHOXY?fabo+^PWQia)S8epu7#&k z;Q5y@xFVA$9J%hjgeM$7!RRG`9P32fD68 zryvY<{3Rgmz`Puwi{ZP3X@}R0{+a1e2HfXhw^92p0a|f6k&SIfgQ0(;awN=J3ZN@) zo9K5mS8@!q#eZGH#M|~zImSZTp$kGn8f;44Nd%Ff>iyO+^lRhhBaBlSzm9>*$WFqm z%Rxe*xd7`LX+DtfDkykJ&tk3+3TlAt79CaZI|20kn;s%*t@IvhU z)G;4@P4x}{SmsI45a3>wm6np?b=*qVpOPp;Phs6dVS?*tnD8A-^4)$gNo)?yPYR}S z+H~p^l9#Mnw=}021C{5!J7(B}`(Q3RO}G=?JS`hp<*^a4erw5wR3w;3q6&K@X-J|K z$=-noqMKE~p*(B=l|+QFQc+=7lMpCDP|fEyz~U9Z_=UC362Cx>kUJ<$M_IMLuC|W3m}rgJ40sGXp&e4Se92~|7WCyz^1C_|Asb+ zZbG-VUL@kcaj-1~rrtmdR|pk>y*Rh%lTh)dQV?1A!5k?2n#h(YH8?X)^81*Q{&%+; zX$Y%4B3|TXr8(?;f_MfMl(+owJMr*k$1_(nnz69m5LszOn*~Yp*7=x1xZw>=&%$%f z??}d(;+bUOUKIFY%#ol5!GyWO+)X~AR7$u6GzUn=%RnsySdKE%JxH{f&*INT9V!kW z0v9aHm%qGzudz9FN#Z6b%jXVElLPsCle^;zi@BFHOf0U(Z?(6ia#wd$LN$IRRO1_S zTaBh~oF_nFtHIV^gX%lG6uH`0 zV19l3Z3Svl>8%+vpv3h9>6TPAPw`xU%MKM0`0iKqfFOflzj&I<1%*n9?ypl7xq=!E z9x899RG-N(ibn4rvhfCu$!@|n=xRZAVq|DZOrpBfQ&6#T*Y*Hh^e+o&NI*=j=3eya zNP2(zom>U^Pdn}xm1J#oa}XZmgD(<%#pA$Fs!So8r|r9P)!2dP@%qhIFW`<$I}PTq z@tU@^m+y{bn;Y$&R`31<6#DZNjn*jNEL$K{k?&r&U7`Sqn1+nDt=gDdMQX-JD=RE} z)u#01@Fhzklau(<`W7%LB%9DBr$rsG3n3)Ii1&bS6i5&g6SovI?C$a-C=}m9@xjWX z+D)pYT~+&T3FR)Gf$9oPRy(PYhdS|fi%6OH4?hEhTSp8UZ7RE&T_AhNZ+L!=)0MYx z<6a5!uU8h9iWT!hm3V1|#a^gMPfuRBborv>Br3US}AJ=rozt$2Ud4CBsT19jo=?yk$^GSt8Gs}F~vN(*O-*00Uk9l(XWHY2@1 zsex|euzbzIf1=>~_4vxm#2())B;D#p?18-doVQi|{)(QgS-O0?a>IjXLJZI*X(g?` zl+W15fxdk1lWGO*=g$E#f@let2J2g*&Dh6rCZT#bid#L6Vc1u^H{7IVY?6%^RfRL) z;$CE51JK@}`!28-`~`tYOYSRp9ZHi{KN2dOW$?5{`bHe`PW%kG$bh9%*9Ac1<&pt< zxj{1F#&UKKUCcSm0dgd4LzIrJVv7RjA1ViF1+1CIc9Y`3S%q!6}7w=}z9I?c{CX9`m!Mp57-VXEItY@_TIT&xMB!eX6URJk~O_`!kPfQvh z=)W0r8J~fn(Yyk1#nb<@{P4WM$>3mKCC$mes$D!5dD^l|supADa!c+7W{_WRiTP>9 zR!ad`$r4M!d%!mXB|l~g@&yivAI?IZC0sSfzByZY9NyeAlhd9hqgi^?zl|Hr#pQBy z7L3D9_Tm6~ACG1Msj)!Ge-N+p9|JtG%=40RG1gQXSWinsJtnw)+|g-_#lGzQNz6zI zj*`DnqxWVydV$2;nNJwYXe7J#oF*|B`RP?gQ<>qS8 zQe+S2lP#`lEsVS1j>}Wdc^`jNO$ry^U$mn+u#ZzyRA9B`r6gGE)3a82vb*9UTsk@c zgKm1QYLt39*wURMm9Ivy-K5%x;zbWZcOk5T2riI~7m!2Kx^+^Cv1nK~|6SW`Xys3Q z5%=+u(eg^}0fL>(8OU@rmj%X)TbJ!V{RF`c8N{X?%wsCqNjNPdt{D~mH>{Shrz{j{ z1Y|FKmkBO1J}t_ZkobmcdD+SJ8!W?l?M6oFu({IeyRBW$_ABZfR$XdS*?)00vU|Aq za&P;4f*~c<+`q|VRk|{mZIj>Zsdhg$@t%1o&f^KLGrlK|wwVi6-~2{`DJFYJ`KLBiXT}kXmH10zAq* ziyUFuu{c)kiO{B(70wTq&s(96Te>{1BzD=d*u)hf3T3FLtk9;-n9nTMgw?uNt;y=k zYQ3V~CtIKI;(m!`YRQV=1#RW?ax>hO$b&QqF>0M^-n@k5#2A$Zeo*PoDbU90!*uEE z+w*$O4NUoEZ55l7L`f6$!VQ3P7M^r~u_ok)Sqyww!=pu#21GYR2i6VYpwKK@T*(KX z_@p6SpWd?7)wRf?c9&P@tVmxJQtNJ8X>PV4P!cXHRuV6A8O%dt+_(R&)oNCx=v5dY zeORbxW68T?%j2uET_wvRP0rOVqLPq;&e>AqP<#r~CnW0m8@RUti&T=gm1c4HAXV*O zYt2t6BeyJcE{_t<8FMM@{1O-yDzAOt%ikt`%jTlk9!K%WQWiF<<_%|O59fMTt&qj9 z@;JI;O=**<@-NQa_aKtDR8;p)?kj-x&YnUGy4?fc6ckvn+6J$sG%eGUmE~~`7Z$B{ z=4NN-W~9z9&c+jd9*hq4)bv#T9A@Yg7TT@(`Br;jq0L$lguEXCgO;-lOc#kX|>xoy;9uo00+eSkwx_ipC>ASAvz6}RUU|`+~`UNY8 zTiSRq!FH18fgoMUPY;T;QD2WFBi=@6b8l9w2@RkOgVB02E-ETMJ}N4Xd8@a7ETtlC zz9KQ*W$x*TkB`Lv0CitxnJwsb*_%+gwjJR*V=PzLllfeBE@%j%aSXF#nLsxl^Vc8)Rlxj{ z3uY3K_5s-sP_YmVI4FVM|DO66P#gdJHTXIF7h}c~8Zg7Qa~jiR;#&!{yGFi=iH}c+ zAH)2UY_;ikkBlESFUrf1ebL6;H)!prT!gfQ_@vhSOV7AjQ+TUy057+Q7dmr-g& z#RENvgggKelE}b)m5(0e=dZ!f|5JMK^29ZVdYsefAxhTP6l)Me-t-x~>Hil!_&0l- z7gp!aN)Hi+Ev9TKJ-8I+!=QZGN5CH-=a?QrS4{mo2$7%fho8rSz9(l!IRpm5rZH+@ zkaz|&g}EAyF{*f#CTfS#;mpWL%dagr$Vy6NA2oRvC|2lGv>JV}d&vlj$aZJL=nRHD z_jcLma9gj#PgbgVJsR!*VBVY(&$6^l-fBuQn4=l~CAl>v$;yUuBpm+dJv9*f8})h_ zc~`jI;i}y(9QxE0r(!+|DrPl+;|d{00Sy)kSQ5FF)n+n4*>Iq3mkrE$Vr;JG`bT6up zs_V2vpC5Va?eJD|{!$8vw4L!Q;NXNFHq6`#?gs!dXXP`Y?d0D3}y^Rw9h5u8x8YSOKKk9dO?0S));$kE0PDO`iW0JYNHU5!h(jD=0f*WvWCagu+WCZ{fMBuo}s1n6hfE?@g4o zFuU=X{1Lb-5u$dY*97hg_&TXlMtcMGsyZw+5!Q2U6kFP}A7t0F*;w#=zp_lbPS-o~u^I~oE5}nbc=XUFp zlTvn}(VkUnhic2XyJhRSQO41j)7w_tEgzQa)EfO3qus2JPzLvmZR`D0S!o^=_fseq z0Tj5Zg+f8we=qd*im^@GbF#S4r@vOiJ&j+xVW6wSk`?%k-1SU1yb(GHd_8?pk-|ZO z2h8KEwVM^hAI3*KJ+8)15|Wdk7*^hHcUmmD4MpoWY#%P#Sio##%5$taPUoSkGSd=i z6wQqL+HtdboyOd}OnY8eTVro}PqE#ZlB6?i9nR{A5u;{uLfl;hQs^j>Kq_i-n5l{N zy3ap{Sc|48XJi4S&<ErnKF%uNhIo*!kgWf zm7brMY0E?R?oYS14}jg%buz7W4H+@5&a8F`(BwRsbwFLv4&gWq0@dUzM5kq>kf4B8 zf9%YPGrL~5r=^$-mTYTo`6xQFdE`)`DZOZ*W)ruaIk@jEdNpr_szl6OHRgh@#_G7##butABY9&bL$|ilF!?;kGOzY=zY@aat$m5H@p1F37I+GCN*VQv zb#0!0OAAwRqDvZ963zqN?gg)QIdC30D?}tg2oy@u(zqEjv+#!IJvqI$rX8~Npxeh} zE!XzTekeZF8n!66A-SQAYO2=VIH`#zBg!nY2^_nLPxN~r_#cez?zTOb4i6n*$@And z+#{PPKGYVzsJpuX5*FC|zT_nTthKU9;`0m8sS|v#;YW2p*0uNKt|=5uANA_fvdNM| z9bpUlyC0%YI&vldq`PEZ`Xn)<;s2yxzq9w|6PKUjVfy{AW!_tk!gG4-VQM7?>GCTC z{N9ssM8{HsK?8>GLE$Rq`;Yf>Pv3kKea?LJn2fvSMA*U?>$~Y=&~ge78zGyT3m%#F ztG$mt@!(xNJfD0mo4V!X;)N^w8u$ktKf%MpR=|@8y(1%aR7*%8ve{I!hVS=2^UA*4 zs_FSDz7Cp_P2GBOF$x{-)l}tCxK14B;X1$uk*BdDou)l)KSFz6dgu6kwG=ePcPNYv zy5;Icp(A~oYW`_g2v2*4MTEQHX&5%lT$0BDcgY??p?lkZ@sk^#XrRwy$IktdMYmnE z2+c2PPt{cCQ}}v!gHRFvV$Va|fjM^eXTFCb_jJGU;N8zR@z2~i@g~dMdObX|wB48_ zJhM-Hrd-d;z?+9>!l4EL)MnF|Ww)Ru+xGVT`KOP*+QvV2GgAJUm6cyUxCqTF>omgH z913hdJea^L?_*iL<{e zEB5Z>Ugf^zCb++?;~#z*YDN}zUiFE!p(wbz&#bTYP+|`O;5_7iW9MJ+>F=WLr}pjT z{+s)NJIB4dfq(jO)Q9re`PEnAr`PnG4dT=H3Qt$Yv!NGyx?F}1UAON5_bB%!_rKih z<8n&#E72&bWJ7DN9Gi#awSyKz9S{4k@9E8wr<3!XNf~(xI(g&1OSrqa7rFo8UfjYz z{S?}Y+TiIY$L1;OBo7}EPE>iEU2s9j8_+Gc?7f`3j(eJWjeBN0|Lkkg0kn!;PFed!qZ4QYyRi1u#t@{a zUu8|HE2L+-+D8{JyXb;XzZ0FgYyU}ZFLx{VBzNaN{^>WN8_^ziQSH^^AxPdZWJ{^% zpS}h^oeAog`ZrQCFG17*dCLfyS{6?HHtHe&uy{+DJ|jb$WHKc&FL80`uU>PyTAhx+ z;Im0gIVzFG!)KN7StX?9;p>*ro&_jzLC*qN{9Eup{0`9AvJ&u(aQ8(J!X^`nOURei zY=>No-K->Ekt(&)%$!#3y-{;mb4GJWbKPUAYadk~QlC*DR`26JJfk{;etzTb`{94P zZ`^$k{BQS-INq^N-N)EvOQ5UBfMXpE*ctF=@KpM!Xe-{}1n#IA+OePjORI~FXCi~( z=Wq!K*?dUmM>2NnP;uVi4(3`#VQFjL?t#4CapiR~bzDVD9(QH3R%3V~#h|;U!zHh) z4;gALUG!YIrnabMU2t7p@L+3PO32S5)HOvYLcicad1?~3$&{!{Uhr^`JSb`ETiH_P zm7w`RTRbyA6?{WU9yJN65gWOL+#0E&V^fGqtTy~Zt3{pER$SbMznBBu)+6W$x6U3D z??lVsM=dSIC9Nx+Fg1T;b8}@?b92?T-a_VVX?2Y*xtd$w)KrCkR$X0F1Kp%dkQyMF z$NUOnFrbf0hl2=TxP#v;rcl9ig+!4Zjs&J&XzV)TYct)IeaEUc=T%q6EY0k4=eDQH zj-bT2*rfQxM;Hb{h(98zd?4HI^zA!?fIv;zoBJ# z>PHDOpl{Gmf*9HN;F&;*9CDg}3c3Y9HA*6%UA$~6MWKY>O`57eXJwD$=OW-Rbe8-3 zWoV)7@rmo%VayAV!)5B2zrnM>zDfB}LtPYn{{=h=H(k3=p4^SU&{Yw@Y0il7EQcd2 zoKe5{;)4&p^wLA+EA#SJmRAnt<_=ZDdvSIwlKCIt`=AJ1Fc_veeYLA|W=sgUwyWvPltf2-!o^U;`)KyvgdN)>@GBa)H2z%-9#vP5LEl9_O-&(t7lf#_l z$=bGS`#|-Hk@8K$@I2$x1QW-6PNGo4z>wQeiX#!Q=wl@Cd*B54;!>qL`{0_gVQaoI zE8o7RV#5jc2$O3!+be71;!c=N>1OsaX7^fii#@kx5gXoFn%!;PIF{jZ8nZ3qJt-!$ z4yXsYDOh{`M$o*V1%QbanZrPx!8u3B%;~7)&eqmrA;0;}iFN2L&avaf33QtKEk3^* z_*6CXF42D~Uy})lp#)HfCe&dnW(9XPvO2YPRocPr8;^t>3CYcHW#_mIj?hcci%jnW z%T>i|-Q&kLb|#z3bKLm`H9Cz?wP=cCih&*^FC9dvONfgz9fG(6t)tpvkhzLtf_NM8SotL2FnDl zBX>%mb?~8)KLrr&(pF?Cs1^3H+S)O@&1iQQZL6r*TI9B)AeTAQm18ow?=2|;n2Md~ z%vxKU)!JsWH$*S(%q?7Lv#l)5?TY?yn=R95vm1Y%Wy{RX%domI#qy`7m@I)}HbN39 zr3AX^;1-p#E2i5APLtaa-C)Wa%09I5#Af5#?($(fd*IgWTpQ3U=l1lW9SIuiNX6K} zGfy43r`g%%cp}f{%JoJ8;fzF~d`Q7N1#zT;AWdDih< z0@)p?>V=3~qIuBzy?ch)opNJKw>dSTQWTry;z^n7= zCnl(5Dn<5t=1S-JniYnpzNBZ<`v2;@>>t#KM&3aoSz7Dgjy$)q4V75X{RRcoVdDi<;uf{nP#kOm?RNrKiQ&WRd|UYO8I`)~>Odz4TzWX-ot1?>anoVo9L zXSVtBR-M|3zO!I9cBeyg&&v<{fZSC5f zoEbw1PeJbh4Z*TSL}FD6h5%+(y!pi!D1=*su3^d^9{cG==Gl$>?|ut!41v$U@6k*Z z`j-3i2Ok_`p4ssD823N$uN3P)1J)||J%4neC_hpxq9XKQQkFJ4+`Tq?e}3(%#plqD zg`FqcSKisxb?4xghg9g()HKI%Vezn|sdCMZvRxH``p}&ngF_Z#$79&0PN9GysBZM7a{E479;S*q)BjC5+1fade1Y!-y-+S;K_&bPp zzk}04R8kmvZ_B{o&SOZg(C#G;GW?8PMlE4Ex}7z<(+k0U*MR5PF?Ec8t4^ z`w&8NJNGO2)XT`p-NXHaegZuOpOAy~G6Sj2Z~iZL;@H?2{D}Um%njd$VmQ=c5Dwsn zMnuTm$DUn%_SkLjzfZ7wiOWLp1>gUh!HS2_;zl?{I2n~1f6|P?%*>6)xL*Jza*m-7 z;MVY2E&+WAe50QFH}f^~BH#){VTm7#PlDgi=7G2&NOxCn?_K=^clPw$)t}pI zv-RfY_StNGxysHvhgRL$*?H%xp*uTwJ69JM!v?95;^Ng#o-+#w7E6HQz~Q(kfC!iZ zbOw>B0_%q6&BqX`+vt47v2kn+-QSJ=0X9U)Xa?xiNU{ywg z?gC-OT8IM7RIN@;>lXm7Dg24|X@FFOdgtExBG6qon4UmauXc)n^HA3S)C+NL5SFkC zFoTJVK!R3458haC41&;&&f1!LxdWTAU$z-7=FTzCIQz1T#v-{-&~|%<3AaK8nSs(q zzyRWoC=v}3jskFXBq+j|;E)KYjfou%ff4o-fu9ewM84j&8v#=@0y}oqxQss?| zGhLsNWX~*Yc4w`xQf7ANrDUdSS0qO-TmmT{cW1^(w-v?eI zejT&^%VS^NdhIoUjPoD=KreGYN4fZS!7pMK!ta6%LHmjdFE>?1zJ;kD&M` z+2M)n;a}Im6GrG0N}>NF+*KeqG*$(?M2gr5S3@V#N8Ep{CG@{yLjA#o=7g#=?e6Ek5*ThjMf||&eYa; z->%b{OAj_>lUE{(n})M>~rF3xUReqHpDRkgc{(VG1wLtPquOKnX{W&7%q{m_~q&`N}# z$SZ)&*DPwSGikM{#MU2o;>7Z9ck!kGv`W_@r8l--pE;da^j)O@e>AP5QDNOCf=!$< z(9m>lu97Kbxi#`~Tea%CrAG#8_m&jzsjt~xbP`qCEhWK7wlurYQ#(|0psD#lapCT| zWLti&19Ju3P9u*jl*HFm89;HLEjm)GfE@$K({~~_chhEbavyq%D??9>$FAy?Z9$rJ zP=^2?_YL8j6*vOJ`5Qq+2mzE(QIBB-ZRdBesIxofxO-RYmh0vnonL0jsf_8#0Rq8E zKP6=+#tet+{aw}el65^=V_A8#&H{vLJW%|Fl(DF_YXZK))&-~nYK?@m_!~10?$FtO z`>_INmgm^9n07mp39%;kEXph>DJkH7%X~bgfva!^YSe>*{vulpIs&Y|H0u@(&jDXL zDG9!cjxnQx^IYJ4o53X+Q-9^Y5Bi9F5=bNcWCZx_INXIYWAiHB8!zf;awjJ&mpsSo z?5x|mES9+hp9%ORj0bSR9t4#NqSTI`J$CGwGvEH}OPC13b$r2n&V9-MHh3@}OFWp5 zy|M6j@*LTpm`p6y5I;ys;!hheIY1#<$8I2y(<4x+$(+9`HfAWB$=tmjlPbTcD4+YS z@L$H@Q77BYrYs)bCU_56i)rtnq*G;7vb74;1o$L zs!$852`si>>?^A{P+NPTqUvCs)|1?jon2Rx9Rh6KbfAR(xg)9ETGP~2Q_}>`E#kfh zZ6j(nskR}EF{`%8>57}7ZGy~H+hl6F`(&B5C;hYymWJ;^8ZrgVMl=J-x$y4%49!rq zrNq?%S~RxXRSfq134=$Qp($BMx!~wkgzN!X7Qqg0!Lb9 z>OiAP7rQJrZqcFykKI&B>^o$a&>-_T(1rRE7+fg1r#ZODPh%4DTOTbbIKB%s%(t=2 zwwy-u$1l5V9CLOacpXP!NV}4)MMBD=Kj~N-H+}g;)}4=mKDM82tEk>67@lf z?znE{%Iohu(ZBlY;ePxEbdcN47`S$H57&W+KLLIO6A7OMzrxQ4*}8G%wNE~E>xNa= zo_YH8X%vN)Jn#VA9DR;ql5;;WE$|uaEg z{4V%7=q&s$_CX*zutwm3>6hPetN(r;T{S+w0TquEpKaZg6RL7=#gly^um`LosR2xF zD6J>1JfDlBQQz;D2GBFML|Gi8L#>#8a;xPwu!1?uVHKk*5MqN=WWAsHrg2b-E? zsOe6rZrS3BZJgJou@=u`<`>x#yFwddR>W>?sZQ;#(I=(CT{Q}7oVpY=VKUZ7(V%=k zI(~e+>~{Eh9l&>j!iVc>qDe-BYDRz+1IrhvV33H)gx?^rMn|G<9=?QlAAoKVzKql) zea-)C>`K6+ssq9-NsZ_{H5~z@n4HB|KB8w~qL6!u8b_82o z2-+wpI-}TX+taQ6X^Yyn0@K=Kn+6+O{YG2db#!`qw7Xq!kRdPgpL^e{dI7cNqms(4 z^X_u)x#ynczqgiVH!m4UNRD3|(VtpUKb?oqD|YsWFHV>Bey{JV`flnd=&MgENU+(X;v7>}NA}kzy{Vo7|8dQmc@A-12d;)b)pv?4`b{TyJT1WtlHIrL3$v)91^q_LbW2 zFUWV`MgRw^%q=aejETYLSrrvIps-r2%Y4~Y%L;RH3k!2|3ous0t_Svld8`(Th+N2E zzZ>}mv7*`OO+Rsrjg5|tIexO~j(ZLsxQE?2$ZMw!-gx8Sv^qA(?Ap_89?j?)NbwmV z#aN@!Fz})w%WFpIpPH^+IsR963#gnEX*`ubhYSwTeNH_*3F}9?hH1K3U(D_pu^=sJ zIw8$4k^n2~28a1*m_IEuzNV_TyR@uTFXC>OUbgA$@&d%3@p81~H|H*EYqlrH*zL2O zOR9@nZ6&fSEj?Jcrf>@`;dSGM-iGr4^YhQZsS9kBLh2zlM~X4#r==w%xZMeN>%VzG z{+*!zosfo=ojGxq|Cb&wK;SkMF_c4{0k75MhzI}l%EK_SF`EY#A^Y3m?(V~@uArY+ z^z8Bb_w;n*=XE{RD}25cRSP#p?wFpDnp<3)o02naN90g5|M%YeSFgUmSN`-g?(Of} zyKv#&zW%+9Eu~k~)gdZ0FCnS6x_WL>f`1XsWCH7BKSwq-G8l0qLp8Xah<@tAn2^(y z+nx~!L{((uHRlW!yIe&@E>|(1-=0&HtNl2~7N5JQIJc-M2VZsq6f(zovu*4R_8KBL zkUj`FqQM^V^SZ9C>-zc{ySsnb*SGBv{U5E!4CS|cggr^I9^B1QjL7iFs8-3I{Nj3i zCu}Ik#P0=HrzklrfxX6`hg}pe^Mn_2S_bwc)~^KFLEO}eT4^eQEfso{iQr5{#h}+a zSm9r?#P9Fy^e?qW7d2;v)vj@5Zb`9(N2c)SO9m?|2E5*Zips$f?WS&jLw9#WL)Vd% zsqKx8uep<>r%t6n7-VQ0yMez&+MQzCNPzC?AXUc|Fr_GA96E?tH=K@FPI2l4Bd zbOz|fVhf#)!UCtm!v_Zj+uAR`yd7WgRghm)l#f;xDI>^-4UrYju#W9877T-d9XzV> zW5L_ z38=00+12)ZAA6#sb)hvQCMw2NRGs2Ubb9TmEfQn#qc-SGBO9l0o-#co*LNt5WpTu| z`KuPCCZ)JKYZtVsfiQP;Y+Q^ZIWH#K6}F1sR9T*rQBhW3T4Xe} zW%kQ0#ooVv{4sxe&599x(g=&P7dyYn{&AC;7qowR_r-OWWhd|5TMN6LtdoxH{AleH zwNQJhX5PFSY5$}^P$`B5UfP9+hx?D@GPU!Tk(zB$!y}%xt!yrD9)FC*jP#Z*^Fb0l z%9qN!?2yQZSd{;RG@_^4S)8o0kR>PV3Ei)OBFE%dUuj%edhba@tF9w|H(lEzi6hk0%H97Gib2W30|-HziqI;^)5J zA7W*)tUmF}Z7k0zbW(@^O7wG@xYJYbEujLUW#$+rn8$7LxE@%?KG$~bVb^?;8909M zVCJpe-THtQj@KhbwWp@0?Bn-tyOr__E@ZWy)oX<>1_KWI2X-I(R!LpzL;as>d-kxa zTE0POWlMd8E*L*_vHVUUT(>$)$ZsZc%W(9+rxag2(ERU|>%H3W9(L3FS?iA9a#z-^ zJw4wp=*vZCuM=E3bcl3k)>3 zK^ZgAZw{89QhshK-))rhbILJO`O8MR`l9j|Wk1FaTV5SPZ2mG@OQhjMj-?n0K4!PF zNR_Yo^PgFmw*E~0ooovPZT(Tc@bSR$p=+<@&uq}{W2>~gu&Nx|S0a;?7qT7Y9!@)e zFt8jFYD3CcxApWG{xPJIlJ8jM4XxSkeXSSfn?^i^16!wO1lRJ`@MU)`L#ic|d7}Jj zJw|X^@b)R4w>OBfUr-L-n#+l|f*!mLnCOXzvYvCw<)R!MQqGF{kvX-GLoA^M?1?)Ti81$pWiV4LgvJ+UOM&3+JkcT}g za%X4e%{#Mt+qU(~fBMs4{){DWXZG=@c5c|PL6KEql#YF}= zjByy^Hum1F`+N8A>)p4nZ{Mvu@cveM-@ETN(p$0czrTi+HyaV8EO1Zf4MMfzA|jY^ zLa@AuP%;_ZbGlg!M6aZn-=3L^^icUwPU+x^%sk|a$~WYC2gjdwvHao%FiF@$F71!r z24rG*OWyYR$QU{8l^gPR%tHprVK3L(=CFlsWRKc?+7UNWGQ?Anl@Poe(!e?~a@3iAS=YbNbu}4?@)cqL{NVC(U;E|Oy|{bJpg2@^5A@{x`O8+_SrYqWb#Q{9yV%eIDJuV$w?T&}{!4Gw!^ysx0r zH_BJ8^cA$_6;wN;ZPO#;tnn=s3zuHrotBl5kl=_+tjx0)r6i`=oEa5mrMaQDd&JrG-ZJ&^o6P34~%<)L!jeTCrer&3@Ke?rjS{UzZ*XLbHgZsyb(K>lK9=?J`W? zv1{Iv=H{Ht`X98|eRZ{EFC(|%F~ZT9V>|RR0@cdr|AI#)h3u z3oBzYw#<*s+jFUHW9`nl>FIM_Y1QtwIlS(nzSXxaph)qqc{$!9XSFTPJ>BN0wvNB+ zYAh*fbm3=fC&oi-zC%dy`{;)XDLyR5DI(RX2YmSe<;36T6btAtC#O0Qy^^j!hoB4epLPYd zN6p)}YX^-#Xq{ORdtV7@wITPPZqo8*C6BDCV)GKKtxmT^SMjzK2cqx;4QU+Eut=*ll|V+m0&rRE|+&;G-8xevj4Pv+t@@unzCd&>P`d`C-x`@`9Y)q{5; z&MPzz2?1#y=;e#c!BcZNX&yljo=Qz3f`b|9F` z6Z%}b9n#IZFgx&RZ~6S;y1L={YL~T=5>$go3u>Vqg+^~Dg&aF_IH_+eGBD68>4*GM1Omb{)BF6 z3VQXDApHq_jB&Vi<2d%NSVRz%DZwLeUc!YV%We@nk7qjPce*n3=Cma{vvizPerkNY z?H4Oo?!IjCWu>Lb-nbnCG!;8DIVw5^zlghg$`g?=) zW6H-NdeV0~{g|>((33v-nXpQKCHga_JP+GK>~bn)>*!9DT*D@?nKQ}?Mdga|b=t7% z6%*gc%(B-`$}aQ&tEwvWZP88yH!nRQZ%#6^{rPj}`^ux&Yb%UBi*obejbRCMHC3z+ zlBs*pw>Zii$y=37${3T19%0)RcZyG%(R<4EbhqqYQ`61m+DX$?Qm8?0rI^J$_mvBp zn#NCGID^uEpq25I;26V=RmRHj^LJ2AJ6xE`0^Hy*{193hlKzD5KhP-rszs-_s3(-Y zVkeXJlNBiGPwLj8pbzbQ>Ph9#&=ttJO=Pl7JS7V8})o(`^J=Gj9uy z1E_{Ic0zeg&Jf`Ogf2Rbauwy!xB8lVTX zA!^XPPQDvKsEt=wVwrp^kZ}Bw+_`>VWz>3FpJFVH*mvohk`#qv*Va^EBakl5mVZCo!!3pALq*hv)bD|RfOq>kI8-P6P3iTXns|wLJMj+68_AB* z?XOd$#!&tTDpzTBNqRQ%TS5OS%G(g%HR##zB|Ua6mL=v|(w`vj8TF7IS3q;E*MEYx zUYvS6JCUWl4X+ybk{CmTOT47lbisa7*ZQM8hXi+*q22jIWH_6jxP6ToypjXpuyb>Y88kOC9u?A6Z>dST+gxxz*>6S81s$& zOO#Jlo|Y}^*i%qYei=azx#8fj3G};wqFz;16*s$V3n5a^e?Z+%NFKVmE@dJZB27$D-oIM*XvHH}m@`q!$80-tEJ$V*EhIv`ra zle8xVTf}Lt;P&|PDC@==Gn(`k%Z<)>PGW4)BJz0{sbZ3+`cXh`*$gA+_4N1?L#)zB zd>PMQ6>Jw`Y?j9Q(b3nCGNTk34VGnwo@5m3W52~%FBLi1NH{Q91#n-i?6=y@e*eC% zu665Je9V~!SFRF#zQO)=$yHuwQMj(dx9ldH(S{v?KIuV zCH$4U#JtORQ`L@c zG9+s<&Pe#=<|V<*SfH6RX^OuA5j1{(F-Lxy;Vu(agJ#uR8K z(96geX}0Htq%-9=f?i^bK1BHkD2Ls!6ZTG!p6mume*zXB*%{KKi_qz5cY`Muq<=6- z|B~`I6MaIE{w3uhSX6|qKC6BuqG%bIO(WDBW|7DJXhX+$2tgW62~&bv^G_w*zV)_c zhx_{vFP*<7gA9uC-U!G0aNo=s z*cWsT(?|R;qX^yR2#NrKnXHS+@e_}F1^~k;^SuNxym5KW8mH^Zn$}$njn}qTZ%A_l z<_fT3V`;HJ?0ju{dW}1+%H2ALg~e78?y$I^pjg7Qit_V|>UOpz&8e>|e>ttOxEPS8 z#^RPGh77j|8Gc^OoQS`Hi24xz9#c7a5< z2wy;sb4!L1A3@@PG1op5 z7<0lT5TN9u=+pNDp7Wf%-YQcxYGB(xz@Q)MDxaDg3{G7&J+S0E;pph8Tl-2N)5>5| z3pScE7v@fWJ5mj5bZ01u(HWTXouIY;wwz%9HcwwM?>o?I)ji?vAn(b~le`~Oeq`c3 z#dV1HVd~fxXcLSm1+hOu*T+E~FJ?UC6KfsN@D>wa6QAbF)1iJ{1q?or_^4|(@~u07 zoJ;#A?t~z8;)@}nS5n{vu_5EZ*ctN=+*I$hE;<$#Hvq9l@@DZ5Sdq|+t+ z3FSzLUU(*w{)8SOlJ&nFq<>LC)&%{OktvEzOZpd;Q>OZ950Lf0qzLO-r?&>_Us8T4 zq@s2rOPr^GmZGyn7Q-Fo|BgPR7lECVT3}9(9>FjUFPc{6KP#c~|-4N%+!V+&XK`Hl%#;+AE)a9350ID4S z57`0mN1WYI@5Xpfh2ewuS2~+HQ4iJO5qJ{cG3W*VB4v zjWe-xmA7Ec)#FFHnillHt9pK7CR?aZBkZDrukrR+94Z=e&@I>AX#4`|1*hVpGpDG% z)B8)NE$@ttKxRQLDUT>urw?z5;J2lwCvVnR@515OI5x34c}3qa@dx&%I;0+l7l+-A z_{r{2Zbdn)hbdO#r&@|~73IGd#Y5Vm@CB=K=F!dgo*d!RDvMOgsU zI|*ebC3unm?>3H?OkoFuXHH7zPu0H0aTD%=r6&VRN%GW*=B+9%sUbN_XU7#fEy~sR z(2Br5F%R^_B^V1FBb)W`!Gj0*PZqCgYg=`}=gi_Rwt1Q708!kB&pSJ*Mgxz=5h0gP zbg~9$c%YpWT7vlICmlj!WeuGR{7Y~jbzWK{|JU|K{#mKG3l8oN^&_C%0zClzWcKR} zEMy1+i8-9gdz8=BYS0pjQnVq#lVYJ$A`hwC&ua?{>goy#YwHtc%}Ssbzq6_e*A-S3 z*$`K^CMJq@BPKGH&+zSUkOo}tLD&p)Si}2~X%nbvNjK^J>;ASgUWO) zbMSR^hZkmf1;j0k<6&4uHu4T?p4%(x%a$EXaJ1sf@~79 zRS%o!$)*wXsDF2eo+5B!Z{zBz&1eSPY+*oIvwOjFa1%Jtq4D?Fy~D%u6SXz;iQ0O8 zLjNQg>*o`!ABsm|hK?Kv46@_rsWxL}(I?mz25$=tAXr16%$PW&ya{^=p8%ign2%=; zoX4D_F7~9T%QWXy<9=D|c|6UjUUoc4h38#*?M#(TfQ;kbltb)6(FW?GR*1?E0;Y=Q zs4k`y0MF=EqlEmpqa9fBbcu_Xdr!_7opDn9V8d%nAMASrF z|59v2Ktw!hWdZTr3H+lvaHMi%dLZJe}iRw!~9I6V5qNuAKC(&X9~psf_sdna8rL@&NvUN^Ka zF%I_)okmet7mC?3gW%1iq_{Y|SbZXqB*pV9J31O0J3AZ2Ekp~NfF*G^X&VHO$0~Ol~^Vf~+3M`6^m=U`uaLu;0 zI5+KC6gwj#c9EwH?N6Whl7GT~LpvQ4hMKz=n~!*TtQ47}mzXgANz(&+`gh%Q)4qMT z+e_~J4sYjFhlKn}2N&77i+>Moh_$^166qcYJE0NL! zR(S>i12aMsVZm!W9NJ@#jrQT6IQ35F-#2+nOTC*|jDN$xzy^PSm3jx}_?DFgym@(E zl1OMVaoUfII4;M{B!j9AkueLQgrmu~#7PBLqyyP|5kC*nT)>pdhzU8#Rt zCB@DKKWKE8*uv-4*xd!C+kV(K+EsaZ85=IlOs{qnWTe+PS;MUzw%PT~;f*sNKXmo6 zl_eY7_g3SpVXA9Nmm$2yX%=wj>`|;8csxu%MQWkpy+x;xo!J~lyZykS> zJxY8>q=28o6Tw}TZmqzX{8I}?wX@h(j|RpcC2HPEnk;?dBzpza5qQ*YvtEM8VX@a; zY-g|FW6Pl&fvU5>mLK}tb5>3uiTGkjGL=yJ%XJ5P3xll1kz;OOT{^uhQAHe zH;0cweX~xyruHMVBgO)m0&0+{{o~{FMjO+g{{j2Cy5oHB+3eb_@2ecEJpmZ+=h=j= z2`Lt=C&z>{WWWV67x+r~ps{3p)d_v+4qvq_r#ZJ|kvp-&vv4WidfQz%GpfB@JS#b8 zcB0dn$OfE_q(onIe0~y}SkhFuAU!`LBVW8J$j7&ak5v%JwV`jG){1MJq)#cefsg!rys`|z<<(qu^W#* zb5v_wcOkXcOK^5-v;K`Yj=cHiqeT1%&^}X1v~kKHxACQz8SKi;;&NGRUN^TvN|cEq z{9^;SxLn(~aR{`qAbAPSfs6b4qlE|xF$|stFEM3HK47(@zrxAzO`G%Gf6`C4iNleT e4~eJcIvlz50{^J~Ow^x>+sNQa@^@LcqWnKrs_Wzc literal 0 HcmV?d00001 diff --git a/assets/fonts/Poppins/Poppins-Thin.ttf b/assets/fonts/Poppins/Poppins-Thin.ttf new file mode 100644 index 0000000000000000000000000000000000000000..45ddcd5aa7221db62afaaefa5371a4f6e1198785 GIT binary patch literal 157916 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
    ViBVsCzBWI&l7GHel5HxJh@REeVR0o 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 { initialRoute: initialRoute, navigatorKey: NavService.navKey, theme: ThemeData( - fontFamily: 'Inter', + fontFamily: 'Poppins', scaffoldBackgroundColor: Colors.white, primaryColor: Color.fromARGB(255, 240, 94, 62), appBarTheme: AppBarTheme( diff --git a/lib/desktop_screens/desktop_history/widgets/desktop_received_file_details.dart b/lib/desktop_screens/desktop_history/widgets/desktop_received_file_details.dart index 37a50dc2..088cbc36 100644 --- a/lib/desktop_screens/desktop_history/widgets/desktop_received_file_details.dart +++ b/lib/desktop_screens/desktop_history/widgets/desktop_received_file_details.dart @@ -525,7 +525,11 @@ class _DesktopReceivedFileDetailsState } Widget getDownloadStatus(FileTransferProgress? fileTransferProgress) { - Widget spinner = CircularProgressIndicator(); + Widget spinner = CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ); if (fileTransferProgress == null) { return spinner; diff --git a/lib/desktop_screens/desktop_my_files/desktop_my_files.dart b/lib/desktop_screens/desktop_my_files/desktop_my_files.dart index a965d2b1..4a4cfff9 100644 --- a/lib/desktop_screens/desktop_my_files/desktop_my_files.dart +++ b/lib/desktop_screens/desktop_my_files/desktop_my_files.dart @@ -48,7 +48,12 @@ class _DesktopMyFilesState extends State children: [ SingleChildScrollView( child: (isLoading) - ? Center(child: CircularProgressIndicator()) + ? Center( + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + )) : Container( // reducing size by 75 , so that last list item will be shown height: SizeConfig().screenHeight, diff --git a/lib/screens/common_widgets/add_contact.dart b/lib/screens/common_widgets/add_contact.dart index 947877ca..87cc9726 100644 --- a/lib/screens/common_widgets/add_contact.dart +++ b/lib/screens/common_widgets/add_contact.dart @@ -5,6 +5,7 @@ import 'package:at_common_flutter/services/size_config.dart'; import 'package:at_common_flutter/widgets/custom_button.dart'; import 'package:at_contacts_flutter/services/contact_service.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/custom_circle_avatar.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/text_styles.dart'; import 'package:flutter/material.dart'; @@ -107,7 +108,11 @@ class _AddContactState extends State { ), isContactAdding ? Center( - child: CircularProgressIndicator(), + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), ) : Container( alignment: Alignment.center, diff --git a/lib/screens/common_widgets/app_bar_custom.dart b/lib/screens/common_widgets/app_bar_custom.dart index 65081f42..655d2baf 100644 --- a/lib/screens/common_widgets/app_bar_custom.dart +++ b/lib/screens/common_widgets/app_bar_custom.dart @@ -56,7 +56,7 @@ class AppBarCustom extends StatelessWidget implements PreferredSizeWidget { textAlign: TextAlign.left, style: titleStyle ?? TextStyle( - fontSize: 25.toFont, + fontSize: 20.toFont, fontWeight: FontWeight.w500, ), maxLines: 1, diff --git a/lib/screens/common_widgets/labelled_circular_progress.dart b/lib/screens/common_widgets/labelled_circular_progress.dart index 879dc873..de80a6f1 100644 --- a/lib/screens/common_widgets/labelled_circular_progress.dart +++ b/lib/screens/common_widgets/labelled_circular_progress.dart @@ -11,7 +11,12 @@ class LabelledCircularProgressIndicator extends StatelessWidget { return SizedBox( child: Stack( children: [ - CircularProgressIndicator(value: value), + CircularProgressIndicator( + value: value, + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), value != null ? Positioned( top: 10, diff --git a/lib/screens/common_widgets/loading_widget.dart b/lib/screens/common_widgets/loading_widget.dart index e3008060..053ba6ba 100644 --- a/lib/screens/common_widgets/loading_widget.dart +++ b/lib/screens/common_widgets/loading_widget.dart @@ -23,7 +23,11 @@ class LoadingDialog { return Center( child: (text != null) ? onlyText(text) - : CircularProgressIndicator(), + : CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), ); }, barrierDismissible: false)) diff --git a/lib/screens/common_widgets/provider_handler.dart b/lib/screens/common_widgets/provider_handler.dart index dbf6e93e..d5184da4 100644 --- a/lib/screens/common_widgets/provider_handler.dart +++ b/lib/screens/common_widgets/provider_handler.dart @@ -4,6 +4,7 @@ /// [Status.Loading] renders a CircularProgressIndicator whereas /// [Status.Error] renders [errorBuilder] import 'package:atsign_atmosphere_pro/screens/common_widgets/error_dialog.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; @@ -32,7 +33,11 @@ class ProviderHandler extends StatelessWidget { child: Container( height: 50.toHeight, width: 50.toHeight, - child: CircularProgressIndicator(), + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), ), ); } else if (_provider.status[functionName!] == Status.Error) { @@ -56,7 +61,11 @@ class ProviderHandler extends StatelessWidget { child: Container( height: 50.toHeight, width: 50.toHeight, - child: CircularProgressIndicator(), + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), ), ); } diff --git a/lib/screens/contact_new_version/add_contact_screen.dart b/lib/screens/contact_new_version/add_contact_screen.dart index 916f3ea1..02a4f7fe 100644 --- a/lib/screens/contact_new_version/add_contact_screen.dart +++ b/lib/screens/contact_new_version/add_contact_screen.dart @@ -1,5 +1,4 @@ import 'package:at_common_flutter/services/size_config.dart'; -import 'package:atsign_atmosphere_pro/screens/common_widgets/gradient_text_field_widget.dart'; import 'package:atsign_atmosphere_pro/screens/common_widgets/input_widget.dart'; import 'package:atsign_atmosphere_pro/utils/colors.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; @@ -100,8 +99,8 @@ class _AddContactScreenState extends State { fontSize: 14.toFont, color: Colors.black, ), - onSubmitted: (value) { - _checkValid(); + onSubmitted: (value) async { + await state.checkValid(atSignController.text); }, ), Visibility( @@ -122,8 +121,8 @@ class _AddContactScreenState extends State { InputWidget( hintText: 'Enter nickname', controller: nicknameController, - onSubmitted: (value) { - _checkValid(); + onSubmitted: (value) async { + await state.checkValid(atSignController.text); }, ), const SizedBox(height: 30), @@ -161,10 +160,17 @@ class _AddContactScreenState extends State { ), ), state.status['add_contact_status'] == Status.Loading - ? Center( - child: CircularProgressIndicator( - valueColor: AlwaysStoppedAnimation( - ColorConstants.orange, + ? InkWell( + onTap: () {}, + child: SizedBox( + width: double.infinity, + height: double.infinity, + child: Center( + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ), ), ), ) @@ -217,12 +223,4 @@ class _AddContactScreenState extends State { }, ); } - - void _checkValid() { - if (atSignController.text.isNotEmpty) { - addContactProvider.changeVerifyStatus(true); - } else { - addContactProvider.changeVerifyStatus(false); - } - } } diff --git a/lib/screens/contact_new_version/blocked_contact_screen.dart b/lib/screens/contact_new_version/blocked_contact_screen.dart index cc2e2e2f..891312d5 100644 --- a/lib/screens/contact_new_version/blocked_contact_screen.dart +++ b/lib/screens/contact_new_version/blocked_contact_screen.dart @@ -129,6 +129,7 @@ class _BlockedContactScreenState extends State { return Scrollbar( radius: const Radius.circular(11), child: RefreshIndicator( + color: ColorConstants.orange, onRefresh: () async {}, child: ListView.builder( physics: const ClampingScrollPhysics(), diff --git a/lib/screens/contact_new_version/widget/contacts_widget.dart b/lib/screens/contact_new_version/widget/contacts_widget.dart index 54587344..c70b3a52 100644 --- a/lib/screens/contact_new_version/widget/contacts_widget.dart +++ b/lib/screens/contact_new_version/widget/contacts_widget.dart @@ -54,6 +54,7 @@ class _ContactsWidgetState extends State { @override Widget build(BuildContext context) { return RefreshIndicator( + color: ColorConstants.orange, onRefresh: () async { widget.onRefresh?.call(); setState(() {}); diff --git a/lib/screens/history/history_screen.dart b/lib/screens/history/history_screen.dart index 0ba3ab16..2abaa72b 100644 --- a/lib/screens/history/history_screen.dart +++ b/lib/screens/history/history_screen.dart @@ -92,6 +92,7 @@ class _HistoryScreenState extends State controller: _controller, children: [ RefreshIndicator( + color: ColorConstants.orange, onRefresh: () async { if (historyProvider! .status[historyProvider!.PERIODIC_REFRESH] != @@ -191,6 +192,7 @@ class _HistoryScreenState extends State ), ), RefreshIndicator( + color: ColorConstants.orange, onRefresh: () async { if (historyProvider! .status[historyProvider!.PERIODIC_REFRESH] != diff --git a/lib/screens/history/transfer_history_screen.dart b/lib/screens/history/transfer_history_screen.dart index 7a3dedcb..5239076b 100644 --- a/lib/screens/history/transfer_history_screen.dart +++ b/lib/screens/history/transfer_history_screen.dart @@ -116,6 +116,7 @@ class _TransferHistoryScreenState extends State { ), Expanded( child: RefreshIndicator( + color: ColorConstants.orange, onRefresh: () async { if (historyProvider.status[historyProvider.PERIODIC_REFRESH] != Status.Loading) { diff --git a/lib/screens/history/widgets/received_file_list_tile.dart b/lib/screens/history/widgets/received_file_list_tile.dart index 635d6a3e..7bd92767 100644 --- a/lib/screens/history/widgets/received_file_list_tile.dart +++ b/lib/screens/history/widgets/received_file_list_tile.dart @@ -52,7 +52,7 @@ class _ReceivedFilesListTileState extends State { isDownloadAvailable = false, isFilesAvailableOfline = true, isOverwrite = false; - + DateTime? sendTime; Uint8List? videoThumbnail, image; int fileSize = 0; @@ -965,7 +965,11 @@ class _ReceivedFilesListTileState extends State { } Widget getDownloadStatus(FileTransferProgress? fileTransferProgress) { - Widget spinner = CircularProgressIndicator(); + Widget spinner = CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ); if (fileTransferProgress == null) { return spinner; diff --git a/lib/screens/my_files/my_files.dart b/lib/screens/my_files/my_files.dart index e683b666..7455c1fb 100644 --- a/lib/screens/my_files/my_files.dart +++ b/lib/screens/my_files/my_files.dart @@ -139,7 +139,12 @@ class _MyFilesState extends State with TickerProviderStateMixin { ), body: SingleChildScrollView( child: (isLoading) - ? Center(child: CircularProgressIndicator()) + ? Center( + child: CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + )) : Consumer( builder: (BuildContext _context, _provider, _) { if (_provider.tabs.length != tabs.length) { diff --git a/lib/screens/settings/settings_screen.dart b/lib/screens/settings/settings_screen.dart index ad08abe3..16f1a3ed 100644 --- a/lib/screens/settings/settings_screen.dart +++ b/lib/screens/settings/settings_screen.dart @@ -99,13 +99,7 @@ class _SettingsScreenState extends State { child: ListView( padding: const EdgeInsets.fromLTRB(31, 0, 31, 24), children: [ - Text( - 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', - style: CustomTextStyles.black12, - ), - SizedBox( - height: 28, - ), + SizedBox(height: 28), SettingsButton( buttonText: optionTitle[0], onPressed: () async { @@ -188,6 +182,12 @@ class _SettingsScreenState extends State { SizedBox( height: 12, ), + Text( + 'App Version ${_packageInfo.version} (${_packageInfo.buildNumber})', + style: CustomTextStyles.black12.copyWith( + color: ColorConstants.oldSliver, + ), + ), ], ), ), diff --git a/lib/screens/trusted_contacts/widgets/remove_trusted_contact_dialog.dart b/lib/screens/trusted_contacts/widgets/remove_trusted_contact_dialog.dart index 392299e6..688920c5 100644 --- a/lib/screens/trusted_contacts/widgets/remove_trusted_contact_dialog.dart +++ b/lib/screens/trusted_contacts/widgets/remove_trusted_contact_dialog.dart @@ -134,7 +134,11 @@ class _RemoveTrustedContactState extends State { children: [ (Provider.of(context) .trustedContactOperation) - ? CircularProgressIndicator() + ? CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ) : CustomButton( isOrange: true, buttonText: TextStrings().yes, diff --git a/lib/screens/welcome_screen/welcome_screen.dart b/lib/screens/welcome_screen/welcome_screen.dart index 471c6d47..e486271f 100644 --- a/lib/screens/welcome_screen/welcome_screen.dart +++ b/lib/screens/welcome_screen/welcome_screen.dart @@ -102,124 +102,126 @@ class _WelcomeScreenState extends State { @override Widget build(BuildContext context) { - return Stack( - children: [ - Scaffold( - bottomNavigationBar: customBottomNavigationBar(), - key: _scaffoldKey, - backgroundColor: ColorConstants.background, - // extendBody: true, - // drawerScrimColor: Colors.transparent, - // endDrawer: SideBarWidget( - // isExpanded: true, - // ), - body: SafeArea( - bottom: false, - child: Consumer( - builder: (_c, provider, widget) { - if (provider.isInternetAvailable) { - return _bottomSheetWidgetOptions[context - .watch() - .selectedBottomNavigationIndex]; - } else { - return ErrorScreen( - TextStrings.noInternet, - ); - } - }, - ), - ), - ), - Consumer( - builder: (_c, welcomeProvider, _) { - return !welcomeProvider.isShowOverlay - ? SafeArea( - bottom: false, - child: Container( - height: 24, - width: double.infinity, - child: StreamBuilder( - stream: FileTransferProvider().flushBarStatusStream, - builder: (context, snapshot) { - final flushbarStatus = - snapshot.data ?? FLUSHBAR_STATUS.SENDING; + return Scaffold( + bottomNavigationBar: customBottomNavigationBar(), + key: _scaffoldKey, + backgroundColor: ColorConstants.background, + // extendBody: true, + // drawerScrimColor: Colors.transparent, + // endDrawer: SideBarWidget( + // isExpanded: true, + // ), + body: SafeArea( + bottom: false, + child: Column( + children: [ + Consumer( + builder: (_c, welcomeProvider, _) { + return !welcomeProvider.isShowOverlay + ? SafeArea( + bottom: false, + child: Container( + height: 24, + width: double.infinity, + child: StreamBuilder( + stream: FileTransferProvider().flushBarStatusStream, + builder: (context, snapshot) { + final flushbarStatus = + snapshot.data ?? FLUSHBAR_STATUS.SENDING; - if (flushbarStatus == FLUSHBAR_STATUS.DONE) { - Future.delayed( - const Duration(seconds: 3), - () { - welcomeScreenProvider.changeOverlayStatus(true); - }, - ); - return Material( - child: Container( - width: double.infinity, - height: double.infinity, - color: ColorConstants.successGreen, - child: Center( - child: Text( - 'Success!🎉 ', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, - ), + if (flushbarStatus == FLUSHBAR_STATUS.DONE) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider.changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.successGreen, + child: Center( + child: Text( + 'Success!🎉 ', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, ), ), ), - ); - } else if (flushbarStatus == FLUSHBAR_STATUS.FAILED) { - Future.delayed( - const Duration(seconds: 3), - () { - welcomeScreenProvider.changeOverlayStatus(true); - }, - ); - return Material( - child: Container( - width: double.infinity, - height: double.infinity, - color: ColorConstants.redAlert, - child: Center( - child: Text( - 'Something went wrong! ⚠️', - style: TextStyle( - fontSize: 14, - fontWeight: FontWeight.w600, - color: Colors.white, - ), + ), + ); + } else if (flushbarStatus == FLUSHBAR_STATUS.FAILED) { + Future.delayed( + const Duration(seconds: 3), + () { + welcomeScreenProvider.changeOverlayStatus(true); + }, + ); + return Material( + child: Container( + width: double.infinity, + height: double.infinity, + color: ColorConstants.redAlert, + child: Center( + child: Text( + 'Something went wrong! ⚠️', + style: TextStyle( + fontSize: 14, + fontWeight: FontWeight.w600, + color: Colors.white, ), ), ), - ); - } else { - return Consumer( - builder: (_c, provider, _) { - var percent = (provider.sentFileTransferProgress - ?.percent ?? - 30) / - 100; - return ProgressBarAnimation( - value: percent, - gradient: const LinearGradient( - colors: [ - Color(0xFFF05E3F), - Color(0xFFEAA743), - ], - ), - // backgroundColor: Colors.red, - ); - }, - ); - } - }, - ), + ), + ); + } else { + return Consumer( + builder: (_c, provider, _) { + var percent = (provider.sentFileTransferProgress + ?.percent ?? + 30) / + 100; + return ProgressBarAnimation( + value: percent, + gradient: const LinearGradient( + colors: [ + Color(0xFFF05E3F), + Color(0xFFEAA743), + ], + ), + // backgroundColor: Colors.red, + ); + }, + ); + } + }, ), - ) - : SizedBox(); - }, + ), + ) + : SizedBox(); + }, + ), + Expanded( + child: Consumer( + builder: (_c, provider, widget) { + if (provider.isInternetAvailable) { + return _bottomSheetWidgetOptions[context + .watch() + .selectedBottomNavigationIndex]; + } else { + return ErrorScreen( + TextStrings.noInternet, + ); + } + }, + ), + ), + ], ), - ], + ), ); } diff --git a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart index 86595f91..dcadc311 100644 --- a/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart +++ b/lib/screens/welcome_screen/widgets/welcome_sceen_home.dart @@ -63,10 +63,6 @@ class _WelcomeScreenHomeState extends State { height: 130, title: "${BackendService.getInstance().currentAtSign ?? ''} ", description: '', - titleStyle: TextStyle( - fontSize: 25.toFont, - fontWeight: FontWeight.w600, - ), ), body: Container( decoration: BoxDecoration( diff --git a/lib/services/common_utility_functions.dart b/lib/services/common_utility_functions.dart index e458489f..d66ae82c 100644 --- a/lib/services/common_utility_functions.dart +++ b/lib/services/common_utility_functions.dart @@ -625,7 +625,11 @@ class CommonUtilityFunctions { } Widget getDownloadStatus(FileTransferProgress? fileTransferProgress) { - Widget spinner = CircularProgressIndicator(); + Widget spinner = CircularProgressIndicator( + valueColor: AlwaysStoppedAnimation( + ColorConstants.orange, + ), + ); if (fileTransferProgress == null) { return spinner; @@ -799,42 +803,47 @@ class CommonUtilityFunctions { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Align( - alignment: Alignment.topRight, - child: Row( - mainAxisSize: MainAxisSize.min, - children: [ - Text( - "$shortDate", + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + fileDetail.fileName ?? "", style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, + fontSize: 18, + fontWeight: FontWeight.bold, ), ), - Container( - width: 1, - height: 8, - color: Color(0xFFD7D7D7), - margin: EdgeInsets.symmetric( - horizontal: 3, + ), + SizedBox(width: 12), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 12, + color: ColorConstants.oldSliver, + ), ), - ), - Text( - "$time", - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), ), - ), - ], - ), - ), - SizedBox(height: 12), - Text( - fileDetail.fileName ?? "", - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.bold), + Text( + "$time", + style: TextStyle( + fontSize: 12, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ], ), SizedBox(height: 5), Text( @@ -845,7 +854,7 @@ class CommonUtilityFunctions { TextStrings().mb, style: TextStyle( color: ColorConstants.grey, - fontSize: 10, + fontSize: 12, ), textAlign: TextAlign.left, ), @@ -854,7 +863,7 @@ class CommonUtilityFunctions { ? Text( nickname, style: TextStyle( - fontSize: 14, + fontSize: 16, fontWeight: FontWeight.bold), ) : SizedBox(), @@ -862,7 +871,7 @@ class CommonUtilityFunctions { Text( fileDetail.contactName ?? "", style: TextStyle( - fontSize: 12, + fontSize: 14, ), ), SizedBox(height: 10), @@ -880,7 +889,7 @@ class CommonUtilityFunctions { Text( fileDetail.message ?? "", style: TextStyle( - fontSize: 12, + fontSize: 14, ), ), ], diff --git a/lib/services/overlay_service.dart b/lib/services/overlay_service.dart index eaaa650b..d529d3e9 100644 --- a/lib/services/overlay_service.dart +++ b/lib/services/overlay_service.dart @@ -1,3 +1,5 @@ +import 'dart:ui'; + import 'package:at_common_flutter/services/size_config.dart'; import 'package:atsign_atmosphere_pro/data_models/file_transfer.dart'; import 'package:atsign_atmosphere_pro/routes/route_names.dart'; @@ -41,86 +43,90 @@ class OverlayService { return OverlayEntry( builder: (context) { - return StreamBuilder( - stream: FileTransferProvider().flushBarStatusStream, - builder: (context, snapshot) { - final flushbarStatus = snapshot.data ?? FLUSHBAR_STATUS.SENDING; - return Consumer( - builder: (_context, provider, _) { - String text = _getText( - flushbarStatus, - fileTransferProgress: provider.sentFileTransferProgress, - ); + return BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5.0, sigmaY: 5.0), + child: StreamBuilder( + stream: FileTransferProvider().flushBarStatusStream, + builder: (context, snapshot) { + final flushbarStatus = snapshot.data ?? FLUSHBAR_STATUS.SENDING; + return Consumer( + builder: (_context, provider, _) { + String text = _getText( + flushbarStatus, + fileTransferProgress: provider.sentFileTransferProgress, + ); - String icon = getImage(flushbarStatus); - return Scaffold( - backgroundColor: bgColor.withOpacity(0.7), - body: SafeArea( - child: Material( - color: bgColor.withOpacity(0.7), - child: Column( - children: [ - Align( - alignment: Alignment.topRight, - child: Padding( - padding: EdgeInsets.only(top: 24, right: 14), - child: InkWell( - onTap: () { - hideOverlay(); - if (flushbarStatus != FLUSHBAR_STATUS.DONE && - flushbarStatus != - FLUSHBAR_STATUS.FAILED) { - WelcomeScreenProvider() - .changeOverlayStatus(false); - } - }, - child: SvgPicture.asset( - AppVectors.icClose, - height: 52, - width: 52, + String icon = getImage(flushbarStatus); + return Scaffold( + backgroundColor: bgColor.withOpacity(0.7), + body: SafeArea( + child: Material( + color: bgColor.withOpacity(0.7), + child: Column( + children: [ + Align( + alignment: Alignment.topRight, + child: Padding( + padding: EdgeInsets.only(top: 24, right: 14), + child: InkWell( + onTap: () { + hideOverlay(); + if (flushbarStatus != + FLUSHBAR_STATUS.DONE && + flushbarStatus != + FLUSHBAR_STATUS.FAILED) { + WelcomeScreenProvider() + .changeOverlayStatus(false); + } + }, + child: SvgPicture.asset( + AppVectors.icClose, + height: 52, + width: 52, + ), ), ), ), - ), - Expanded( - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Image.asset(icon), - SizedBox(height: 40), - Padding( - padding: EdgeInsets.symmetric( - vertical: 3, - horizontal: 15, - ), - child: Text( - text, - maxLines: 2, - overflow: TextOverflow.ellipsis, - textAlign: TextAlign.center, - style: TextStyle( - color: Colors.black, - fontSize: 25.toFont, - fontWeight: FontWeight.w400, + Expanded( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset(icon), + SizedBox(height: 40), + Padding( + padding: EdgeInsets.symmetric( + vertical: 3, + horizontal: 15, + ), + child: Text( + text, + maxLines: 2, + overflow: TextOverflow.ellipsis, + textAlign: TextAlign.center, + style: TextStyle( + color: Colors.black, + fontSize: 25.toFont, + fontWeight: FontWeight.w400, + ), ), ), - ), - SizedBox(height: 30), - flushbarStatus == FLUSHBAR_STATUS.SENDING - ? getProgressBar() - : _buildHistoryButton(), - ], + SizedBox(height: 30), + flushbarStatus == FLUSHBAR_STATUS.SENDING + ? getProgressBar() + : _buildHistoryButton(), + ], + ), ), - ), - ], + ], + ), ), ), - ), - ); - }, - ); - }, + ); + }, + ); + }, + ), ); }, ); diff --git a/lib/view_models/add_contact_provider.dart b/lib/view_models/add_contact_provider.dart index 767ecd7d..4bc808d3 100644 --- a/lib/view_models/add_contact_provider.dart +++ b/lib/view_models/add_contact_provider.dart @@ -1,4 +1,5 @@ import 'package:at_contacts_flutter/services/contact_service.dart'; +import 'package:at_server_status/at_status_impl.dart'; import 'package:atsign_atmosphere_pro/view_models/base_model.dart'; class AddContactProvider extends BaseModel { @@ -19,6 +20,25 @@ class AddContactProvider extends BaseModel { notifyListeners(); } + Future checkValid(String text) async { + if (text.isNotEmpty) { + setStatus(addContactStatus, Status.Loading); + try { + final atStatus = await AtStatusImpl().get(text); + if (atStatus.serverLocation == null) { + changeVerifyStatus(false); + } else { + changeVerifyStatus(true); + } + setStatus(addContactStatus, Status.Done); + } catch (e) { + setStatus(addContactStatus, Status.Error); + } + } else { + changeVerifyStatus(false); + } + } + Future addContact({ required String atSign, required String nickname, diff --git a/lib/view_models/history_provider.dart b/lib/view_models/history_provider.dart index 76346d60..3160450a 100644 --- a/lib/view_models/history_provider.dart +++ b/lib/view_models/history_provider.dart @@ -1454,10 +1454,11 @@ class HistoryProvider extends BaseModel { if (!isCurrentAtsign && !checkRegexFromBlockedAtsign(atKey.sharedBy!)) { receivedItemsId[atKey.key] = true; - AtValue atvalue = - await AtClientManager.getInstance().atClient.get(atKey) - // ignore: return_of_invalid_type_from_catch_error - .catchError((e) { + AtValue atvalue = await AtClientManager.getInstance() + .atClient + .get(atKey) + // ignore: return_of_invalid_type_from_catch_error + .catchError((e) { print("error in getting atValue in getAllFileTransferData : $e"); //// Removing exception as called in a loop // ExceptionService.instance.showGetExceptionOverlay(e); diff --git a/pubspec.yaml b/pubspec.yaml index 1985c604..cc251023 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -26,7 +26,7 @@ version: 1.0.10+55 # version: 1.0.1+1 environment: - sdk: ">=2.12.0 <3.0.0" + sdk: ">=2.12.0 <4.0.0" dependencies: flutter: @@ -65,7 +65,7 @@ dependencies: at_commons: ^3.0.25 at_contact: ^3.0.7 at_common_flutter: ^2.0.10 - + at_server_status: ^1.0.3 at_client_mobile: ^3.2.5 at_onboarding_flutter: ^5.0.2 at_backupkey_flutter: ^4.0.5 @@ -153,6 +153,21 @@ flutter: - asset: assets/fonts/Inter/Inter-Bold.ttf weight: 700 + - family: Poppins + fonts: + - asset: assets/fonts/Poppins/Poppins-Light.ttf + weight: 300 + - asset: assets/fonts/Poppins/Poppins-Medium.ttf + weight: 500 + - asset: assets/fonts/Poppins/Poppins-Regular.ttf + weight: 400 + - asset: assets/fonts/Poppins/Poppins-Bold.ttf + weight: 700 + - asset: assets/fonts/Poppins/Poppins-Thin.ttf + weight: 100 + - asset: assets/fonts/Poppins/Poppins-SemiBold.ttf + weight: 600 + # - asset: fonts/TrajanPro_Bold.ttf # weight: 700 # From 5e2ec9473f477512516ddb7628cd8dd387ede04f Mon Sep 17 00:00:00 2001 From: sonle Date: Mon, 5 Jun 2023 11:05:16 +0700 Subject: [PATCH 94/94] feat: adjust history filter and add onTap for items in File screen Stack view --- .../history/widgets/filter_option_item.dart | 16 +- lib/screens/my_files/files_detail_screen.dart | 232 +++++++++-------- lib/utils/colors.dart | 2 + lib/utils/file_utils.dart | 236 ++++++++++++++++++ pubspec.yaml | 3 +- 5 files changed, 375 insertions(+), 114 deletions(-) diff --git a/lib/screens/history/widgets/filter_option_item.dart b/lib/screens/history/widgets/filter_option_item.dart index 169618cf..9c3ab535 100644 --- a/lib/screens/history/widgets/filter_option_item.dart +++ b/lib/screens/history/widgets/filter_option_item.dart @@ -22,7 +22,8 @@ class FilterOptionItem extends StatelessWidget { this.isCheck = false, this.onTap, this.isAllOption = false, - this.allOptionOnTap, this.isShowOptional, + this.allOptionOnTap, + this.isShowOptional, }) : super(key: key); @override @@ -32,11 +33,12 @@ class FilterOptionItem extends StatelessWidget { ? Colors.black : Colors.white : isOptional - ? ColorConstants.lightSliver + ? ColorConstants.unselectedFilterOptionColor : Colors.black; - Color backgroundColor = - isOptional ? ColorConstants.disableBackgroundColor : Colors.white; + Color backgroundColor = isOptional + ? ColorConstants.unselectedFilterOptionBackgroundColor + : Colors.white; Color checkedBackgroundColor = isOptional ? ColorConstants.optionalFilterBackgroundColor @@ -47,7 +49,7 @@ class FilterOptionItem extends StatelessWidget { isAllOption ? allOptionOnTap?.call() : onTap?.call(); }, child: Container( - height: 36, + height: 44, padding: EdgeInsets.symmetric(horizontal: 20), decoration: BoxDecoration( color: isCheck ? checkedBackgroundColor : backgroundColor, @@ -99,8 +101,8 @@ class FilterOptionItem extends StatelessWidget { }, child: SvgPicture.asset( isCheck ? AppVectors.icChecked : AppVectors.icUnchecked, - width: 16, - height: 16, + width: 24, + height: 24, color: color, fit: BoxFit.cover, ), diff --git a/lib/screens/my_files/files_detail_screen.dart b/lib/screens/my_files/files_detail_screen.dart index 211ce9cb..220d2558 100644 --- a/lib/screens/my_files/files_detail_screen.dart +++ b/lib/screens/my_files/files_detail_screen.dart @@ -16,6 +16,7 @@ import 'package:atsign_atmosphere_pro/utils/file_utils.dart'; import 'package:atsign_atmosphere_pro/utils/images.dart'; import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; +import 'package:file_selector/file_selector.dart'; import 'package:flutter/material.dart'; import 'package:flutter_slidable/flutter_slidable.dart'; import 'package:flutter_svg/flutter_svg.dart'; @@ -354,124 +355,145 @@ class _FilesDetailScreenState extends State { ), ), ], - child: Container( - key: UniqueKey(), - padding: EdgeInsets.all(16), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(10), - ), - child: Row( - children: [ - Container( - height: 49, - width: 38, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(5), - ), - child: Center( - child: CommonUtilityFunctions().interactableThumbnail( - files[index].fileName?.split(".").last ?? "", - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - files[index], () async { - await FileUtils.deleteFile( - BackendService.getInstance().downloadDirectory!.path + - Platform.pathSeparator + - files[index].fileName!, - fileTransferId: files[index].fileTransferId, - onComplete: () { - files.removeAt(index); - }, - ); + child: InkWell( + onTap: () async { + await FileUtils.openFile( + path: BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + extension: files[index].fileName?.split(".").last ?? "", + onDelete: () async { + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!); + if (mounted) { + Navigator.pop(context); + } + setState(() {}); + }, + fileDetail: files[index], + ); + }, + child: Container( + key: UniqueKey(), + padding: EdgeInsets.all(16), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(10), + ), + child: Row( + children: [ + Container( + height: 49, + width: 38, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(5), + ), + child: Center( + child: CommonUtilityFunctions().interactableThumbnail( + files[index].fileName?.split(".").last ?? "", + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + files[index], () async { + await FileUtils.deleteFile( + BackendService.getInstance().downloadDirectory!.path + + Platform.pathSeparator + + files[index].fileName!, + fileTransferId: files[index].fileTransferId, + onComplete: () { + files.removeAt(index); + }, + ); - if (mounted) { - Navigator.pop(context); - } - setState(() {}); - }), + if (mounted) { + Navigator.pop(context); + } + setState(() {}); + }), + ), ), - ), - SizedBox(width: 14), - Expanded( - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - children: [ - Expanded( - child: Text( - "${files[index].fileName}", + SizedBox(width: 14), + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Expanded( + child: Text( + "${files[index].fileName}", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w600, + fontSize: 10, + ), + ), + ), + SizedBox(width: 12), + Text( + "$shortDate", style: TextStyle( - color: Colors.black, - fontWeight: FontWeight.w600, fontSize: 10, + color: ColorConstants.oldSliver, ), ), - ), - SizedBox(width: 12), - Text( - "$shortDate", - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, - ), - ), - Container( - width: 1, - height: 8, - color: Color(0xFFD7D7D7), - margin: EdgeInsets.symmetric( - horizontal: 3, - ), - ), - Text( - "$time", - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), ), - ), - ], - ), - SizedBox(height: 7), - Text( - "${(files[index].contactName ?? '').split("@")[1]}", - style: TextStyle( - color: Colors.black, - fontWeight: FontWeight.w600, - fontSize: 10, - ), - ), - SizedBox(height: 1), - Row( - children: [ - Expanded( - child: Text( - "${files[index].contactName}", + Text( + "$time", style: TextStyle( - color: Colors.black, fontSize: 10, + color: ColorConstants.oldSliver, ), ), + ], + ), + SizedBox(height: 7), + Text( + "${(files[index].contactName ?? '').split("@")[1]}", + style: TextStyle( + color: Colors.black, + fontWeight: FontWeight.w600, + fontSize: 10, ), - Text( - AppUtils.getFileSizeString( - bytes: files[index].size ?? 0, - decimals: 2, - ), - style: TextStyle( - fontSize: 10, - color: ColorConstants.oldSliver, + ), + SizedBox(height: 1), + Row( + children: [ + Expanded( + child: Text( + "${files[index].contactName}", + style: TextStyle( + color: Colors.black, + fontSize: 10, + ), + ), ), - ) - ], - ), - ], - ), - ) - ], + Text( + AppUtils.getFileSizeString( + bytes: files[index].size ?? 0, + decimals: 2, + ), + style: TextStyle( + fontSize: 10, + color: ColorConstants.oldSliver, + ), + ) + ], + ), + ], + ), + ) + ], + ), ), ), ); diff --git a/lib/utils/colors.dart b/lib/utils/colors.dart index 2d89eaec..326997fe 100644 --- a/lib/utils/colors.dart +++ b/lib/utils/colors.dart @@ -72,6 +72,8 @@ class ColorConstants { static const Color raisinBlack = Color(0xFF252525); static const Color disableColor = Color(0xFFC3C3C3); static const Color disableBackgroundColor = Color(0xFFE9E9E9); + static const Color unselectedFilterOptionBackgroundColor = Color(0xFFFAFAFA); + static const Color unselectedFilterOptionColor = Color(0xFF8D8D8D); } class ContactInitialsColors { diff --git a/lib/utils/file_utils.dart b/lib/utils/file_utils.dart index 1480e8b1..ef4a4f54 100644 --- a/lib/utils/file_utils.dart +++ b/lib/utils/file_utils.dart @@ -1,13 +1,21 @@ import 'dart:io'; +import 'package:at_contacts_group_flutter/services/group_service.dart'; +import 'package:atsign_atmosphere_pro/data_models/file_modal.dart'; import 'package:atsign_atmosphere_pro/screens/history/widgets/edit_bottomsheet.dart'; +import 'package:atsign_atmosphere_pro/screens/my_files/widgets/downloads_folders.dart'; import 'package:atsign_atmosphere_pro/services/navigation_service.dart'; +import 'package:atsign_atmosphere_pro/utils/colors.dart'; +import 'package:atsign_atmosphere_pro/utils/file_types.dart'; import 'package:atsign_atmosphere_pro/utils/text_strings.dart'; +import 'package:atsign_atmosphere_pro/utils/vectors.dart'; import 'package:atsign_atmosphere_pro/view_models/file_transfer_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/my_files_provider.dart'; import 'package:atsign_atmosphere_pro/view_models/welcome_screen_view_model.dart'; import 'package:file_picker/file_picker.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:intl/intl.dart'; import 'package:provider/provider.dart'; import 'package:path/path.dart' show basename; @@ -62,4 +70,232 @@ class FileUtils { listen: false) .changeBottomNavigationIndex(0); } + + static Future openFile({ + required String path, + required String extension, + required Function() onDelete, + required FilesDetail fileDetail, + }) async { + GroupService().allContacts; + String nickname = ""; + final date = DateTime.parse(fileDetail.date ?? "").toLocal(); + final shortDate = DateFormat('dd/MM/yy').format(date); + final time = DateFormat('HH:mm').format(date); + + for (var contact in GroupService().allContacts) { + if (contact?.contact?.atSign == fileDetail.contactName) { + nickname = contact?.contact?.tags?["nickname"] ?? ""; + break; + } + } + if (FileTypes.IMAGE_TYPES.contains(extension)) { + await showDialog( + context: NavService.navKey.currentContext!, + builder: (_) => Material( + type: MaterialType.transparency, + child: Column( + children: [ + SizedBox( + height: 10, + ), + Align( + alignment: Alignment.centerLeft, + child: Padding( + padding: const EdgeInsets.only(left: 32), + child: InkWell( + onTap: () { + Navigator.pop(NavService.navKey.currentContext!); + }, + child: Icon( + Icons.clear, + color: Colors.white, + size: 24, + ), + ), + ), + ), + SizedBox( + height: 10, + ), + Expanded( + child: Container( + // height: double.infinity, + width: double.infinity, + margin: EdgeInsets.symmetric(horizontal: 33), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + image: DecorationImage( + image: FileImage( + File(path), + ), + fit: BoxFit.cover, + ), + ), + ), + ), + SizedBox( + height: 40, + ), + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: SvgPicture.asset( + AppVectors.icDownloadFile, + height: 50, + width: 50, + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + Navigator.pop(NavService.navKey.currentContext!); + Navigator.pop(NavService.navKey.currentContext!); + await FileUtils.moveToSendFile(path); + }, + child: SvgPicture.asset( + AppVectors.icSendFile, + height: 50, + width: 50, + ), + ), + ), + SizedBox( + width: 10, + ), + Padding( + padding: const EdgeInsets.only(left: 6.0), + child: GestureDetector( + onTap: () async { + await onDelete(); + }, + child: SvgPicture.asset( + AppVectors.icDeleteFile, + height: 50, + width: 50, + ), + ), + ), + ], + ), + SizedBox( + height: 40, + ), + Container( + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(5), + ), + padding: EdgeInsets.all(20), + margin: EdgeInsets.symmetric(horizontal: 25), + width: double.infinity, + child: SingleChildScrollView( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded( + child: Text( + fileDetail.fileName ?? "", + style: TextStyle( + fontSize: 18, + fontWeight: FontWeight.bold, + ), + ), + ), + SizedBox(width: 12), + Row( + mainAxisSize: MainAxisSize.min, + children: [ + Text( + "$shortDate", + style: TextStyle( + fontSize: 12, + color: ColorConstants.oldSliver, + ), + ), + Container( + width: 1, + height: 8, + color: Color(0xFFD7D7D7), + margin: EdgeInsets.symmetric( + horizontal: 3, + ), + ), + Text( + "$time", + style: TextStyle( + fontSize: 12, + color: ColorConstants.oldSliver, + ), + ), + ], + ), + ], + ), + SizedBox(height: 5), + Text( + double.parse(fileDetail.size.toString()) <= 1024 + ? '${fileDetail.size} ' + TextStrings().kb + : '${(fileDetail.size! / (1024 * 1024)).toStringAsFixed(2)} ' + + TextStrings().mb, + style: TextStyle( + color: ColorConstants.grey, + fontSize: 12, + ), + textAlign: TextAlign.left, + ), + SizedBox(height: 10), + nickname.isNotEmpty + ? Text( + nickname, + style: TextStyle( + fontSize: 16, fontWeight: FontWeight.bold), + ) + : SizedBox(), + SizedBox(height: 5), + Text( + fileDetail.contactName ?? "", + style: TextStyle( + fontSize: 14, + ), + ), + SizedBox(height: 10), + // fileDetail.message.isNotNull + // ? + Text( + "Message", + style: TextStyle( + fontSize: 12, + color: Colors.grey, + ), + ), + // : SizedBox(), + SizedBox(height: 5), + Text( + fileDetail.message ?? "", + style: TextStyle( + fontSize: 14, + ), + ), + ], + ), + ), + ), + ], + ), + ), + ); + } else { + await openFilePath(path); + } + } } diff --git a/pubspec.yaml b/pubspec.yaml index cc251023..225778a2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,7 +39,7 @@ dependencies: flutter_keychain: ^2.1.0 flutter_local_notifications: ^9.4.0 flutter_slidable: ^0.6.0 - google_fonts: ^4.0.5 + google_fonts: ^4.0.4 intl: ^0.17.0 open_file: ^3.2.1 pedantic: ^1.11.1 @@ -83,7 +83,6 @@ dev_dependencies: msix: ^3.3.1 dependency_overrides: - http: ^1.0.0 package_info_plus: ^3.0.0 at_client: ^3.0.56 biometric_storage: ^4.1.3

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