From f5f59ca53cc486b092d1e56c343f2d1d3134b0e0 Mon Sep 17 00:00:00 2001 From: quantulr <35954003+quantulr@users.noreply.github.com> Date: Thu, 20 Jun 2024 10:06:05 +0800 Subject: [PATCH] add scroll bar --- .../src/main/res/mipmap-hdpi/ic_launcher.png | Bin 544 -> 492 bytes .../src/main/res/mipmap-mdpi/ic_launcher.png | Bin 442 -> 429 bytes .../src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 721 -> 517 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 1031 -> 622 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 1443 -> 647 bytes assets/launcher_icon/icon.png | Bin 0 -> 419 bytes flutter_launcher_icons.yaml | 8 + ios/Runner.xcodeproj/project.pbxproj | 4 +- .../Icon-App-1024x1024@1x.png | Bin 10932 -> 8126 bytes .../AppIcon.appiconset/Icon-App-20x20@1x.png | Bin 295 -> 319 bytes .../AppIcon.appiconset/Icon-App-20x20@2x.png | Bin 406 -> 404 bytes .../AppIcon.appiconset/Icon-App-20x20@3x.png | Bin 450 -> 456 bytes .../AppIcon.appiconset/Icon-App-29x29@1x.png | Bin 282 -> 379 bytes .../AppIcon.appiconset/Icon-App-29x29@2x.png | Bin 462 -> 449 bytes .../AppIcon.appiconset/Icon-App-29x29@3x.png | Bin 704 -> 500 bytes .../AppIcon.appiconset/Icon-App-40x40@1x.png | Bin 406 -> 404 bytes .../AppIcon.appiconset/Icon-App-40x40@2x.png | Bin 586 -> 497 bytes .../AppIcon.appiconset/Icon-App-40x40@3x.png | Bin 862 -> 571 bytes .../AppIcon.appiconset/Icon-App-50x50@1x.png | Bin 0 -> 431 bytes .../AppIcon.appiconset/Icon-App-50x50@2x.png | Bin 0 -> 528 bytes .../AppIcon.appiconset/Icon-App-57x57@1x.png | Bin 0 -> 449 bytes .../AppIcon.appiconset/Icon-App-57x57@2x.png | Bin 0 -> 553 bytes .../AppIcon.appiconset/Icon-App-60x60@2x.png | Bin 862 -> 571 bytes .../AppIcon.appiconset/Icon-App-60x60@3x.png | Bin 1674 -> 661 bytes .../AppIcon.appiconset/Icon-App-72x72@1x.png | Bin 0 -> 492 bytes .../AppIcon.appiconset/Icon-App-72x72@2x.png | Bin 0 -> 622 bytes .../AppIcon.appiconset/Icon-App-76x76@1x.png | Bin 762 -> 485 bytes .../AppIcon.appiconset/Icon-App-76x76@2x.png | Bin 1226 -> 637 bytes .../Icon-App-83.5x83.5@2x.png | Bin 1418 -> 651 bytes lib/logistics.dart | 273 +++++++++++---- lib/order_list.dart | 328 ++++++++++-------- linux/flutter/generated_plugin_registrant.cc | 4 + linux/flutter/generated_plugins.cmake | 1 + macos/Flutter/GeneratedPluginRegistrant.swift | 2 + pubspec.lock | 122 ++++++- pubspec.yaml | 3 + .../flutter/generated_plugin_registrant.cc | 3 + windows/flutter/generated_plugins.cmake | 1 + windows/runner/resources/app_icon.ico | Bin 33772 -> 451 bytes 39 files changed, 521 insertions(+), 228 deletions(-) create mode 100644 assets/launcher_icon/icon.png create mode 100644 flutter_launcher_icons.yaml create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png create mode 100644 ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png diff --git a/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/android/app/src/main/res/mipmap-hdpi/ic_launcher.png index db77bb4b7b0906d62b1847e87f15cdcacf6a4f29..28176006b47bb41c9a60e8e2a1fa45e860b66855 100644 GIT binary patch literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^9w5xY3?!3`olAjKU4T!BE0A__a*B(Kb8v7-PEK}p zbp^74B8iEK$Rt*-ai$zZO~=~Uj&-q}>*KmM#LYRAx?;tOl`B`STD5BL-n~bT965UQ z=&@tR?u3Tk4Gp~qL}6hM9z6IT6!ic9f2~9JrvP1`RTAVE%pff-qoS&|a^>pPYuCPc z`}V_!kDq`_uz*Cl7i)mJK6|=2hEy=Vy%f#wY#`B)IQy_cvi4!K<>x;B|9@!f2{G|4 zX9cG26Tf6)GwIu86~XT(+aBK2EV{dS)jEcgn|v3S-29d(V#HI$UK%A=^zo-nyhy8J z)n_ZNt^XGm2K=}x>p1Uu?R@LzG;3wE7mkNn7$uWD9O@nHlJ_`nIOez~Yq|iR+38J= zqO6jucGs=0+HmvBM~=O>{f&S!k!Cm6Xq|cTv+F|6_5HRT1`|9dEqXMAM{u3}+sA@R zX9COJ0=Foc-2R%+FU0KGcEn*FM`z=l7KRUz&t7b^Ns08?p5Ny*t88JqjC-Wqq$P{j kF-x&B1kWsTsrka_t*Q8WLhi?_K<_hny85}Sb4q9e0E$=PdjJ3c delta 518 zcmaFEyntnbO1)%>YeY$Kep*R+Vo@rCV@iHfs)A>3VtQ&&YGO)d;mK4R1_p+80X`wF zK$_97i!pq*=C*GkM}I&_#;{os5w`>1fr3E97&a3qB2l&!qQG|DV+Ny028$F%ZEr?{ zU`D$ari?l(!3| zY=KS|E(!7rW)J{^fPe%LXgCi7_az0M`~phXzw~r*42d}W_RMv@CIqh46W(|A z$ZG%kZ=cq}!R@VdZXN%zo$JjlyPQ0I*53R1>B$6VK1(q1eojcEerv%e#m%egE_1dT z_|0f3uHbylqPpkt^ceN;I}dxUo4hq|zV*B#7GmnI1#y$kb9zmbap$tA(_Hjhd5=98o%0qdm+@@-JjKB8(xcUiGOB?O=e)LCdt!o~wXBiQlFwyn4JWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaSG?+T!Wr7*fIbcEU}*CIbQ2*Lo{fwC)Pk<+%0lzxb_V+x?ce zq;y;?5H{ksZ9fxp?4Raj6>*PGS9K1gOT3%Z+c4osg`$|lhTkzNlO_vTE8N(huxHA* zjp_?E?BeU4PJ5;I*ef}i#0&80Dhg_?Eq&U*+;EvA%iBl%kDXL)bOL`pPW?ISRmQAo z@4Qwi*pfB zP2drbID<_#qf;rPZx^FqH)F_D#*k@@q03KywUtLX8Ua?`H+NMzkczFPK3lFz@i_kW%1NOn0|D2I9n9wzH8m|-tHjsw|9>@K=iMBhxvkv6m8Y-l zytQ?X=U+MF$@3 zt`~i=@j|6y)RWMK--}M|=T`o&^Ni>IoWKHEbBXz7?A@mgWoL>!*SXo`SZH-*HSdS+ yn*9;$7;m`l>wYBC5bq;=U}IMqLzqbYCidGC!)_gkIk_C@UYaO~j1?U2;k|4ie25D&-6;-vBD_5^xyY|i7 zw;w)y`~*~j1tiM7Si``;$m8ka7*fIb_DVK)lYvCr!=<%IZHKB9PN8Wz9 zM9koi^XXj-9jtBZyRNG)Um3+v&)~v%!8u6{1-oD!M< DcO&kt delta 697 zcmZo=xyU*}rCzecHKHUqKdq!Zu_%?nF(p4KRlzeiF+DXXH8G{K@MNkD0|Udi0G|+7 zARTh_hvv3#j2;b);j@7ZAQy;$Y#_-S*$?3Y#oZ5nhe`!c0m_QyOoJ$9(Di4~3u4d@ zVK4|`u*+lAbYra7@?tcLV>C}0tB)qE1G?E=K=8#(;jtpoxq@lNp17XbNMj6QzVM!NmeYEs$D15xLLY+n{?|A z>9$?6T?c?pcG(Z|N8yIG3xIwXD+%%oW)M&?0D^#ogo1*G`Sa(We-8q?SyBZV7#RIM zT^vI)?!CQv-S4o2K}@Hd|Aw9B;X_c~Lu**GnpSADIY zRsUL7WW)Vk`)2wVF~3;cZ}$tC_<#SG^Wi7IEPo|`+5K_d{@d?aHhi(>@Tm<-crDD7 zd|zY3H(sV%^6Q&XsnGDR11H7Uqi>eZSqbF<+qQ zi*w_P&4QR z?d;1{H22&Kw^7yDb7$_(d6R_a<-d)xWmwX(e75j&C6<(yXI~rN*2F6)nXKD(it)j< zsXZSmcJ8ZA30H22{xChvtenqZ+tgo^^WgSpVdmRThlU?Lrt#z2n?tw$?eyyL{jm0@ z(b42oiOB|A_dM79T+#A~H>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)D$DaGd1_X; z=6Pj9PxF!6$?d#UyO~qRvo&h%E91u&Y$-A-|MP=qSyk#NI5b2x?W@~e z&&I+rLGwa9V-Z8t`s>R~PCpfzz&v3o10xg5i~EgY)0lzMcPcGpR;hhlvpYiM=+c)p zcFaW#tFDxY>t{7EFz#ZP?RWnv{rhiR`9>Y@m6mh;8e|%DSUCg~c5Z%ZGv)cub(y>G zGC?$yLo{ri)1J4!c3LW2;peB%6dn238%|N8r{#A@rp&P6M3zhyGw w6Z*N&UWV`K-~9O&UVCi)vls*g1^0S}%dG8u5y0_43m9z-p00i_>zopr015UKDF6Tf literal 1031 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=BuiW)N`mv#O3D+9QW+dm@{>{( zJaZG%Q-e|yQz{EjrrIztFa`(sgt!6~Yi|1%a`XoT0ojZ}lNrNjb9xjc(B0U1_% zz5^97Xt*%oq$rQy4?0GKNfJ44uvxI)gC`h-NZ|&0-7(qS@?b!5r36oQ}zyZrNO3 zMO=Or+<~>+A&uN&E!^Sl+>xE!QC-|oJv`ApDhqC^EWD|@=#J`=d#Xzxs4ah}w&Jnc z$|q_opQ^2TrnVZ0o~wh<3t%W&flvYGe#$xqda2bR_R zvPYgMcHgjZ5nSA^lJr%;<&0do;O^tDDh~=pIxA#coaCY>&N%M2^tq^U%3DB@ynvKo}b?yu-bFc-u0JHzced$sg7S3zqI(2 z#Km{dPr7I=pQ5>FuK#)QwK?Y`E`B?nP+}U)I#c1+FM*1kNvWG|a(TpksZQ3B@sD~b zpQ2)*V*TdwjFOtHvV|;OsiDqHi=6%)o4b!)x$)%9pGTsE z-JL={-Ffv+T87W(Xpooq<`r*VzWQcgBN$$`u}f>-ZQI1BB8ykN*=e4rIsJx9>z}*o zo~|9I;xof diff --git a/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 4d6372eebdb28e45604e46eeda8dd24651419bc0..3f523f78fb26f088b7d5eb44a5eb7d00b452b091 100644 GIT binary patch literal 647 zcmeAS@N?(olHy`uVBq!ia0vp^2SAvE8Azrw%`pX1bpbvhu0Yz!$tf-_&cVSUIXT(Y z)fLDFiXWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaVnYVC?gBaSW+oe0%+*-yH{$wm>JQlmwo}mW?MJ?!5os@@HDc z$`&3SuJX{upWm*T6!Tq2=XGAL=Oh)+OWd_S@s~2KX7Bvim!GN5$nb?hqTSx7nE&6F zkLUO~85Wo({HeHZ`)Ac&7KRH_0sr>sUA}teuh;6|eZmY5*$zJg&jRH>`2pR{(D0r8 z$HyDR=Rs_S_tGDt7#Q|4>0P>W_`eT`6~zLUU|_f)RB+D%#BQi#*nc^|#P0gMyUSBA z?gv_+oiJm?w;W4BkgUV}2K$vVkMyq2`|JPoLp{*C^$lW-Aek@BGm=;C_w8OZ8?MC= zrp0pFujTfeUV|hSfZ~&Z;V*+(-AZV6wZ}5(X(D_N(?!*n3`|_r0Hc?=PQw&*vnU?QTFY zB_MsH|!j$PP;I}?dppoE_gA(4uc!jV&0!l7_;&p2^pxNo>PEcNJv za5_RT$o2Mf!<+r?&EbHH6nMoTsDOa;mN(wv8RNsHpG)`^ymG-S5By8=l9iVXzN_eG%Xg2@Xeq76tTZ*dGh~Lo9vl;Zfs+W#BydUw zCkZ$o1LqWQO$FC9aKlLl*7x9^0q%0}$OMlp@Kk_jHXOjofdePND+j!A{q!8~Jn+s3 z?~~w@4?egS02}8NuulUA=L~QQfm;MzCGd)XhiftT;+zFO&JVyp2mBww?;QByS_1w! zrQlx%{^cMj0|Bo1FjwY@Q8?Hx0cIPF*@-ZRFpPc#bBw{5@tD(5%sClzIfl8WU~V#u zm5Q;_F!wa$BSpqhN>W@2De?TKWR*!ujY;Yylk_X5#~V!L*Gw~;$%4Q8~Mad z@`-kG?yb$a9cHIApZDVZ^U6Xkp<*4rU82O7%}0jjHlK{id@?-wpN*fCHXyXh(bLt* zPc}H-x0e4E&nQ>y%B-(EL=9}RyC%MyX=upHuFhAk&MLbsF0LP-q`XnH78@fT+pKPW zu72MW`|?8ht^tz$iC}ZwLp4tB;Q49K!QCF3@!iB1qOI=?w z7In!}F~ij(18UYUjnbmC!qKhPo%24?8U1x{7o(+?^Zu0Hx81|FuS?bJ0jgBhEMzf< zCgUq7r2OCB(`XkKcN-TL>u5y#dD6D!)5W?`O5)V^>jb)P)GBdy%t$uUMpf$SNV31$ zb||OojAbvMP?T@$h_ZiFLFVHDmbyMhJF|-_)HX3%m=CDI+ID$0^C>kzxprBW)hw(v zr!Gmda);ICoQyhV_oP5+C%?jcG8v+D@9f?Dk*!BxY}dazmrT@64UrP3hlslANK)bq z$67n83eh}OeW&SV@HG95P|bjfqJ7gw$e+`Hxo!4cx`jdK1bJ>YDSpGKLPZ^1cv$ek zIB?0S<#tX?SJCLWdMd{-ME?$hc7A$zBOdIJ)4!KcAwb=VMov)nK;9z>x~rfT1>dS+ zZ6#`2v@`jgbqq)P22H)Tx2CpmM^o1$B+xT6`(v%5xJ(?j#>Q$+rx_R|7TzDZe{J6q zG1*EcU%tE?!kO%^M;3aM6JN*LAKUVb^xz8-Pxo#jR5(-KBeLJvA@-gxNHx0M-ZJLl z;#JwQoh~9V?`UVo#}{6ka@II>++D@%KqGpMdlQ}?9E*wFcf5(#XQnP$Dk5~%iX^>f z%$y;?M0BLp{O3a(-4A?ewryHrrD%cx#Q^%KY1H zNre$ve+vceSLZcNY4U(RBX&)oZn*Py()h)XkE?PL$!bNb{N5FVI2Y%LKEm%yvpyTP z(1P?z~7YxD~Rf<(a@_y` diff --git a/assets/launcher_icon/icon.png b/assets/launcher_icon/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..821b2ca1949e97a63d10a4750e1b0f0664170c38 GIT binary patch literal 419 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA3?vioaBc-sbpbvhu0Yz!$tf-_&cVSUIXT(Y z)fLDFiXWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&NJ)@iFoU$TjEbt-%9X2EuU-4* z?b{C@K7M+*$NMKxo-xVW-9_`%_Er@jXS1h^V~EG`x6^L(H5u@<1%71EdX+FQKz-h} z@AXc*E4E(}nj|EAX!?Y>H~*(?GuP?*bwuT)spGym*Pa-kozOdBLdG;pp#}4cJqxZ> zb+hbPs?vD4uVvAX+Pj>*x^q|jX%vX~r|?EvKu{|?S9IF;;&-kb*M!BMPZW}yu%rDc z^Uvj1E*M4cl1yHg+h!)Gxv{ e%sZ>akBOg{-6-t(io|tUPR$UZCAqnk^)A*&k~#*52IQ@4M%o z`^dTHJLh-KuQ*MZ>@#-iSOD-5@VVey}S7=s3W?XN$eL7uim%tK>hVq#`yCWph3 z$z(hp56zJzJ3D*i@ujD8Hw3$Migc@sF03xTn0fG0X6dbU8jXgcD6LjoU0q#QS65$O z-_X$TKq6_ANZQe!kzq2K9O>x}hl6#)cmjO^D=%Frg22F_h{!04DlgaRo|w%&J-vNM z}BJnQF{6N~mGo+ka%7_SCwl4)2JduU$m@||UHf{L?Ns>aKy;JJ* zOOlMTEPSf(ABW!N{*C`^naXZZ8s#?Q;pet!`GE2I;E%D*-HLcDG!bUc04}4ZgCH4L zRVny}fieKX3Db6*vmaIop~#msFu@Pco&W!pU-ZXY9X5(y(OY&~`CO^ergo&@oJcG> z3dH{8+EJLQ6jtdF>y(+T&?cOm#{@Hj6O5Hj!+x3$m#4#Sg4{`j9)-pu@W>BZ{m6Kn z^AUb58P+F5AH!YBHnXy1^^iW+p=z@C-lfmdSuR7=91S4%Fn}$Dr(rM{hgBVbp5F*l zFg^+w0xRtlt=m@8DJmbfi-0Jbj)fLOUIaw=kw*wJ0&n~hj&WguKOARpl5vhd*2xEc zI80;0Yp$F>Fz{(Tn*}kpPlsoa0@h-6Cs7_EIZ#jry$ol7<$y zi>oEe#RaS!Z9D5dXN-{KOqwiF-8`+W9DB$aubQP_@S4x}o$J!wP)utsh(NIex#}ARfkdO*#grHnn2T2^jxw+d=rixk{Kd zxgIC>W>xnhiivGEFJ{?;EVi@yw+}3sD={D+x)+;e_q7aoqpLT%z9FgQAJJ8A^IvE+ z7POw~5+U?H^U5S_eLwYKp+EUhE%hS{RU2i|*p%5GC+4SnYZG_YWooI-YEXTips?IG zrG0X4qYe2G-C+pXCwFZ48@&-_56`!{&>Ih?I&=Fldh;-`dcv;Sj-*Io#T>DvW!~l` zRtlBF6WbQImro`GTu|jv^+qhtg!xy-~+u?C* zcPnp}UT)jb`1q)OYEaiLag4JApxQH()*iILg zPzlbaqFVa%o@P9E?J!h1d2Lw?%y1zXuh>&;B7e3{HcLUH#*kug;)q31{0-fmpqpUL zcacBGc5aF}fWRveYHnHi4r+}tIjy>iAk;AmATLWd%|~5>8L*+UWjk^eA>7%j>p-ov zQuwxQr2&DFIE;U_;wxv4#z*r(FO2%l@uB_O99Aa=7r2)u`)>lyepl(}MQmbEnSQA6 z{wrV;orGm)Cwnh_I#zE>AJS^9h+TbV%Q6b95qmbO)T;YgV}MnUjo9To+oK+>C=PNy NU%(S`FC?zn_b2!763qYr literal 10932 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 J%Q~loCIAaahj9P^ delta 268 zcmV+n0rUR90;d9yB!6sBOjJex|Nm6Q`1=0;_x%3>SDWqeeKN4RM4i{jKqmiC$?+xN>3Apn^0QfuZLym_5b<*QdmkHjHlj811{If)dl(Z2K z0A+ekGtrFJb?g|wt#k#pV-#A~bK=OTs8>{%cPtyC${m|1#B1A6#u!Q;umknL1chzT SM$P~L002ovP6b4+LSTZ+iI!57MG_Mekx8sv<4ie-nvS)x9qVE{*T;2jh?{dJb;XJmD_5>uwQAMgy?c)wIdb&q z(PPJs-3bl78yb2Kh{D1iJb3UwDCqzH|5}IcPXW3>t0c%Tm_b@vMnzR^<;vBo*RFl@ z_U(rcA3p(=U;&A8FV+Bc&GvM045?szdp?)DDS)T#q4Ujd*N|6X38kCXZ2teBTUuQp zP1;3Ds6_a;fcUG&clb^H95v(pqWn@f&TO%CShk%5)STPbY1;enbekF zW-hzMC7f1l$kKb%yTUA?<9VfE=WDL>6`6XE=Dt{U@ci*Pd+hgp?Vb0U>#0QD*N66L xFAQf|rfEMcN%e_T7ut0(Ci&)~w`?yMv#!USU%qkCETA(PJYD@<);T3K0RV8ux-0+y delta 379 zcmV->0fhdP1C|4jB!7xfOjJex|Nm6Q_yJd&DYo|T`u=Xt`RDik(eM3q(E0cM|6$7c z^85en`TlFo`LN62ebf5h^#1ev|LyeoP{jEB{{LLa_%XTm;Op}yukA8-t}k`1klFf! z)%xP>^fh|0ByOkyNP*?{{><+E*YEqC-upwp_es3*FtqX7=6~?kXGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb& zBr)s)UIaA}@p{wDda>7=Q|mGRp7pqYkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw z(!`OXJBr45rF7aGZc^PbZx_bfyRy0J$na8`sc=6?c2JC!Sth^-YcW=)?C_Cc&E)|6 z2&la3UataXe3IS+p>-ZIA+BCqgis$c#rY|{&t~X)zCoIr1FqH1r-2g@rwM@Zf(?(EtDcwGQ2%0(5~^NswPKgS51aimKYmm8(~;UHj(k z+YcW;egZ1N0utq3tO4pe@9E+gQo;E4;%%WO1%ZadQ=3dSGkI!HJtO@7f6GF@^4EO9 z3vd32w}|;*c|geMd)>6d7E;N(w=(8L+WFo7!`dP1ez<5KqhWCRzIzuIb$nLtn0^0I z*wSx4?Cb|$8=J^II43@*O|h-?mwL^$Gd$#`sys`0e@rq~QDG_WqRH``z>Y zTa&-)`2OMb{#?lT<@f&B^8E>1o?yxOFSzysPl?|2{?p>_3|^o6{r^tG`0Mib-01NE zRFwlgX7v02(eM4t?)_23_~PvJC93D>@AfCJ?k20~XPd)ZlYhSoSCIxweE~vt7!iLQ z0002_Nkl^UsMS#KsYnTF*!YeDOytlP4VhV?b}%rz_<=#CPc)tU1MZTq~*2=8~iZ!lSa<{9b@ z2Jl;?IEV8)=YPOcS{PSa&n3!u`@c$B=Qxm#95`oQ%s?6GjGK-1Dcv;GlIyCpRa-`> z)RC=3Qdjo4qEbgL!E_R~(UFg~bp>`^v1gfS6I6_Xo?Fse$3}QT>Y(2EHQpOWy6dHH zFM<1LVbA$n;69oOo5w~~T4L80t2Tw$nXd&JOovdH8X+1#^YvpXyJuwT|M~zEi4e5t S1K8sL0000I!57MG_Mekx8sv<4ie-nvS)x9qVE{*T;2jh?{dJb;XJmD_5>uwQAMgy?c)wIdb&q z(PPJs-3bl78yb2Kh{D1iJb3UwDCqzH|5}IcPXW3>t0c%Tm_b@vMnzR^<;vBo*RFl@ z_U(rcA3p(=U;&A8FV+BcHF>%?hEy=_J%5_3*+8K6;RWtXk4~j1C8cI*_}u%?DP5B2 z7t|KF!G6cdcJ(7O=2}NJy|FyZ9cnsTsMpmcex>wW?UDoW)mL_vU)`^9Ju>Czo)d49 zYZiD3MTSmt3#p9^k4Q_qGJ)^#s_#p-`%io5dgk)}cUPyI=DvRTdfBrJ3rp2MXZs)N W(odP;P%;td8U{~SKbLh*2~7ZLgs=tx delta 254 zcmV60B5TNObaZxYybcN07*qoM6N<$ Ef;_*3Y5)KL diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index fe730945a01f64a61e2235dbe3f45b08f7729182..5e97cf08234d901b0d456d6036cf0b80f16af863 100644 GIT binary patch literal 449 zcmeAS@N?(olHy`uVBq!ia0vp^Rv^s53?#3m?veshbpbvhu0Yz!$tf-_&cVSUIXT(Y z)fLDFiXWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaSG?I^pT!7*fIb_TovtCIf+n#FRis&8Pxb*E2SjPCh)aA9#;(Vyea-zr>daMCXivU4%>iGV;=zsjv;_h?9>2;*Z7>B|c zg}xYpxEFY+0YrKLF;^Q+-HreN0P{&iK~zY`?b7ECf-n?@;d<&orQ*Q7KoR%4|C>{W z^h6@&01>0SKS`dn{Q}GT%Qj_{PLZ_&s`MFI#j-(>?bvdZ!8^xTwlY{qA)T4QLbY@j z(!YJ7aXJerv48(~k#M0-5hW-K3H+(fUN#NM#ym>mCQr8&SZWavS>1bQ;hn@4(SJKs zL${5#!8;YsRf2T3@@1>XrIj+Wj<@Yy23BK)hTKo3O2N6bb&6c~xNOHrb)`JOfM&Ia zJT{@yk9F>8)dYYo&CVQY*)9cxY|qz=E1_Z%?`+u)^errLs|CoYTkQcwv`c*MAb~X# eyw_lPzuygAkPUL%hQgWv0000*KmM#LYRAx?;tOl`B`STD5BL-n~bT965UQ z=&@tR?u3Tk4Gp~qL}6hM9z6IT6!ic9f2~9JrvP1`RTAVE%pff-qoS&|a^>pPYuCPc z`}V_!kDq`_uz*Cl7i)mJetWt&hEy=Vy?m3e$w0v2qLNlq)Pm4EH>W)Pzdu03u~Y4a z*^Ew$@2zK?{hcl=vK&4(CG*yte9=cWma`pqF7sT;b<1UC;+Ngq)~>r2Db}OC?puY8 z=9c^6?l%0#MD3R@y4LCZg710Ws(JJOm&P}h@w1DTZf`Ez>Lh-NcZ+lQE#FB_Q%c&N z|$f027~ z>Cl1 z00G2FL_t(o!|l{-Q-VMg#&MKg7c{O02wJImOS3Gy*Z2Qifdv~JYOp;v+U)a|nLoc7 zhNH;I$;lzDt$%@aiEx#kHfn{jUQ=9q46?P}mAG~Wwc2j9fhDeOL#-~ZbxX94xR#V? zJ#j68T6SPsgii*wH4ou;K+(dLX|280&Y)Jec5)a41TDxlxJL?@q^Ru z>WpVvLg5e&qx-0XwO!#ePKMwa3#)M-e$v|ToiQQhG7HeY|fvLiXmH2jE_g)6gfG$f4O%7iYO|SoHw-q O0000I!57MG_Mekx8sv<4ie-nvS)x9qVE{*T;2jh?{dJb;XJmD_5>uwQAMgy?c)wIdb&q z(PPJs-3bl78yb2Kh{D1iJb3UwDCqzH|5}IcPXW3>t0c%Tm_b@vMnzR^<;vBo*RFl@ z_U(rcA3p(=U;&A8FV+Bc&GvM045?szdp?)DDS)T#q4Ujd*N|6X38kCXZ2teBTUuQp zP1;3Ds6_a;fcUG&clb^H95v(pqWn@f&TO%CShk%5)STPbY1;enbekF zW-hzMC7f1l$kKb%yTUA?<9VfE=WDL>6`6XE=Dt{U@ci*Pd+hgp?Vb0U>#0QD*N66L xFAQf|rfEMcN%e_T7ut0(Ci&)~w`?yMv#!USU%qkCETA(PJYD@<);T3K0RV8ux-0+y delta 379 zcmV->0fhdP1C|4jB!7xfOjJex|Nm6Q_yJd&DYo|T`u=Xt`RDik(eM3q(E0cM|6$7c z^85en`TlFo`LN62ebf5h^#1ev|LyeoP{jEB{{LLa_%XTm;Op}yukA8-t}k`1klFf! z)%xP>^fh|0ByOkyNP*?{{><+E*YEqC-upwp_es3*FtqX7=6~?kXGXV)2i3kcZIL~_j>uIKPK_zib+3T+Nt3Mb& zBr)s)UIaA}@p{wDda>7=Q|mGRp7pqYkJ!7E{MNz$9nOwoVqpFb)}$IP24Wn2JJ=Cw z(!`OXJBr45rF7aGZc^PbZx_bfyRy0J$na8`sc=6?c2JC!Sth^-YcW=)?C_Cc&E)|6 z2&la3UataXe3IS+p>-ZIA+BCqgis$c#rY|{&t~X)zCoIr1H>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)DC_Z3Xj zmYw}lrY(|E&-BW4W93^%Cy(DM^~~QUvB)imndHG#Y5ZVI!XHnmhEU(tT2(R@mnZ(7 zT(;Yj>Gitp$#?%-)|I_vin~#r>exSZ=-W!K`|2K`CZ&#{(~OW5P8u p&ZeyvZA+3+HaX|ZFstMZYg0-3ot0}GwSi&4;OXk;vd$@?2>?L!;MV{E delta 561 zcmV-10?z&M1Ih%DB!8$-OjJex|Nm6Q_$jvb0au&-{{L3S_`2x)SjYH%)B61W|JU;U z8fc}n<@^g?pZ5I!!0P;5$oSOo{mJe90au!%!rMl`_bRvc>iGV}?EQ7n`Et+su*=}6 z;rk$**8x?Q@caMe_x@qY_%68i167j&PmBXNU$Er-fzD(&6ouxz!_Xr~yNF+waPe00049Nkl*;a!v z6h%{rlvIH#gW3s8p;bFr=l}mRqpW2hw=OA%hdyL~z+UHOzl0eKhEr$YYOL-c-%Y<) z=j?(bzDweB7=OamkoW}TqxUlCUa~LXribZadYB%jhv{)TJzfVoDb&Mvdm1Aj=^=Ky z@BW(okJJC7N4g^Wn)nzG4)+kmck8oeIEQ-pJK}5pl?(b%4+?ik54S}RT1NGlC-Koe zXc^UGZdq2`s)xd<^mwo&N!+T3BKYkwl)BQWdH@KyuYYcoJpfYqes$vr@s&LkG40VD z)uXym_CN?StIpFShlG5R)O^#~CSn+qth#S83%#+xHZCjswu>;dy)n8``SNd}?L{0j zF0<12@|??)ZE5VJ%)XGqAD=XKP-a>bpSjeP;AQs3R<2XPW!9xl0hft3H6LC^tZlLp zy_#$U%PNRS6XIpw?as@bYka&h3{GGMgP|2)<^Uk;aI9Oq00000NkvXXu0mjfzWOso diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index 0ec303439225b78712f49115768196d8d76f6790..b5ce6fd22aa7378cfe3f16419c697411277f3630 100644 GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(z>H>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)DSX>-c%9aL&(~A0NKz zo=#jn&HKPw!EJNJ({G7N*L+|@18+qB9bw_!Bc$)6G!pyUS z*YEQ2S)Pa3UKURqv!L|n)Za=V_ zek41*J&|LFwvP6J21|+SkG`DGImin;%@Vw`t^%IIcbGA1` zZ_cgO*FP;~x90V)DqZ)|*zi!s{n;B0c$#zH&5Pa7dpfB8*gxeS0jI-nxyu_=zi!~j R-UEyS22WQ%mvv4FO#q634153p delta 839 zcmV-N1GxOV1l|UaB!A~nOjJex|Nm6Q_yAX%DYo|f{{L9U`1}3;Nx}F2{{Ke6_f^IC z`ThQK&-nmVnULA~Ov3jDTb=d${!qmDF1Yv6;OqcNk|wnDQjEI${Qc7K{gvDLV#)aS z{QmU%{w=}(Dz^320Z)wqMt%V?S?~D#06};FA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3 z{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^e zL_t(&-tE|HQ-9h}5P;z|o+Kwg3IWkrMWm@(N}&pBz4d;-{Quw6Jvg0ho5faO&$Q0I zAMznEJhRD8m<*#{d~Za)k&3P0rwz$yX6`Twg&F- zqc@e;1Pi$Lk|x_q(#zcEE*UqhaD{QLD(tRssjIHK>VK-MuDUQyU3Jw}S6y}0Rrk)i z*38Tbx;M{lCEe`BX1~ArTYWtB{ACBMpj%7oY|VG4)>=8Y7teU#l-$4lrM6&B8*5Yt67w0wetd@Bkhl{yx-g)E*<%L`eFsJ+|4t?BTUiLjN$v*aqmsvN0 z&NBCk-+wTE-nh%V^xRl{W^Ug4Zudb&XkL;zx3#*CvW!bt`xn<-yQ^K2OMA5}xn7= zB=6DX7ylB$bCP)_*-}Z@ASH3grl8&P^L0WpavHoP| zUX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@nH#K002ovPDHLkV1lIA$7uin diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png new file mode 100644 index 0000000000000000000000000000000000000000..b7cf9b44a0b4473f8fec8f2053c2c992b71aa764 GIT binary patch literal 431 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=3?wxlRx|^tx&WULS0L@=I!57MG_Mekx8sv<4ie-nvS)x9qVE{*T;2jh?{dJb;XJmD_5>uwQAMgy?c)wIdb&q z(PPJs-3bl78yb2Kh{D1iJb3UwDCqzH|5}IcPXW3>t0c%Tm_b@vMnzR^<;vBo*RFl@ z_U(rcA3p(=U;&A8FV+BcZS!<-45?szdm)>@NkM`&Vb}7hqF(0Oo238zkC!-eaQbxd zYln84oqKkUy;erXDd<+urb&sK;=RbIKTSdsm8 zn{!a;+snF~vTr)NY~B96?0)0a=_;k@l6?A$x7W`j9TzsHM!j-TDgS!%?6jBLh59?L zzb}5G{ru0TyGb$XN`?Jv_{;pdmmaNCH`#DQY*OljZTr-rXNK4HScIg1*e>3#hF ali`*KmM#LYRAx?;tOl`B`STD5BL-n~bT965UQ z=&@tR?u3Tk4Gp~qL}6hM9z6IT6!ic9f2~9JrvP1`RTAVE%pff-qoS&|a^>pPYuCPc z`}V_!kDq`_uz*Cl7i$<87{xtZ978G?-(IQZZwwGQ{_#Yx;+<|MMcWVm;uT8+O=fT2 zecEvUd;7OJSJU6FOOE7F+;(%@V~?E*>Puz#cE_4^CPlvemaw32{xpF@rT3NXS`=F3teGH>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)De-!<4)6|DwX5QGc>FUX)XD_!| sS;o(NSoJDwQK5i}fcK#Q{{L3~UEI!57MG_Mekx8sv<4ie-nvS)x9qVE{*T;2jh?{dJb;XJmD_5>uwQAMgy?c)wIdb&q z(PPJs-3bl78yb2Kh{D1iJb3UwDCqzH|5}IcPXW3>t0c%Tm_b@vMnzR^<;vBo*RFl@ z_U(rcA3p(=U;&A8FV-+HFdBHeIEGX(zP*|~xk*8y?O~UZ>*l7r=OV+R{{I)>rZu~4 zmfI4}M?3A0TJv7_F}#qa*fPOQ@KL4Q^ZlC&-~Fyzzuef9gVQ;4tq#xa+zC_v{c~eY z2;0A2|K!oYSejr*iyuKiT-oD_WVVFFL3&hA)yxj9;mTjt(*d!+34+KBtS zdar9HEL+L&y*k-Lv~kO{HMMKq1Gi{Kt?yOLzHc|%OCeW1JO1_4&e*j*ilHo*qJ;EM z9&Vf{E_cFwV%Z**iaicy3U4bsKU6eMQIJgjd42Z%jgJjacsUCATya^sZ^>he=0>Ih yi#KJCao1n&Sf|am&Zj5P>ve;?qM%b*DceQf>k@}TtI~lX&fw|l=d#Wzp$P!udI3%V literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index 0ec303439225b78712f49115768196d8d76f6790..b5ce6fd22aa7378cfe3f16419c697411277f3630 100644 GIT binary patch literal 571 zcmeAS@N?(olHy`uVBq!ia0vp^6(G#P3?%t>9eV(z>H>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)DSX>-c%9aL&(~A0NKz zo=#jn&HKPw!EJNJ({G7N*L+|@18+qB9bw_!Bc$)6G!pyUS z*YEQ2S)Pa3UKURqv!L|n)Za=V_ zek41*J&|LFwvP6J21|+SkG`DGImin;%@Vw`t^%IIcbGA1` zZ_cgO*FP;~x90V)DqZ)|*zi!s{n;B0c$#zH&5Pa7dpfB8*gxeS0jI-nxyu_=zi!~j R-UEyS22WQ%mvv4FO#q634153p delta 839 zcmV-N1GxOV1l|UaB!A~nOjJex|Nm6Q_yAX%DYo|f{{L9U`1}3;Nx}F2{{Ke6_f^IC z`ThQK&-nmVnULA~Ov3jDTb=d${!qmDF1Yv6;OqcNk|wnDQjEI${Qc7K{gvDLV#)aS z{QmU%{w=}(Dz^320Z)wqMt%V?S?~D#06};FA3KcL`Wb+>5ObvgQIG&ig8(;V04hz?@cqy3 z{mSh8o!|U|)cI!1_+!fWH@o*8vh^CU^ws0;(c$gI+2~q^tO#GDHf@=;DncUw00J^e zL_t(&-tE|HQ-9h}5P;z|o+Kwg3IWkrMWm@(N}&pBz4d;-{Quw6Jvg0ho5faO&$Q0I zAMznEJhRD8m<*#{d~Za)k&3P0rwz$yX6`Twg&F- zqc@e;1Pi$Lk|x_q(#zcEE*UqhaD{QLD(tRssjIHK>VK-MuDUQyU3Jw}S6y}0Rrk)i z*38Tbx;M{lCEe`BX1~ArTYWtB{ACBMpj%7oY|VG4)>=8Y7teU#l-$4lrM6&B8*5Yt67w0wetd@Bkhl{yx-g)E*<%L`eFsJ+|4t?BTUiLjN$v*aqmsvN0 z&NBCk-+wTE-nh%V^xRl{W^Ug4Zudb&XkL;zx3#*CvW!bt`xn<-yQ^K2OMA5}xn7= zB=6DX7ylB$bCP)_*-}Z@ASH3grl8&P^L0WpavHoP| zUX4e?!igT`4?AZk$hu*@%6WJ;zDOGlw7kj@nH#K002ovPDHLkV1lIA$7uin diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index e9f5fea27c705180eb716271f41b582e76dcbd90..a03c7bf13c129b6305082f874b31663cdb4d4288 100644 GIT binary patch literal 661 zcmeAS@N?(olHy`uVBq!ia0vp^TR@nD8Ax&oe*=;Xbpbvhu0Yz!$tf-_&cVSUIXT(Y z)fLDFiXWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaVnYV4UOW;uuoF`1bm3zh(!4hKGwZy3_^Mit)4BT=-t^ls#ct)cM7lHe2$4%$|U2$ z7VnE$!%%4b|S_2OvKL%u&MjcjXsuJHhc7dSSv)f!aU1%ep7RrMv2)3#2H ziJDwg9mMCiZ^_kV{+wIRzt|P}eTm$hHMbhsfX2RPz7QIEvt8UZ(RbBbPeY5J({w(x z1Knv9WehTIo`mhYz8`wJ=6gLCIBG9`9d>u}!}l*!twC~ja$k15zIN{am(>XMY!M5j`<_*Ue6ryGy}eiNc;w#ox-4Rn5&j}O zb6u>=@db{%o#uO+Pm=oK$8}f$D4ub-vqUlS{mhTX`G%DYj|+GVGh9u;LF{J#wnW_f TP`HLJD4}_}`njxgN@xNAmANkK delta 1658 zcmV-=28H>R1&R%jBYy!7P)t-s|Ns9~#rP?<_5oL$RmJ%I{{Q;@|5C*GSjPDK{{Q^_ z{zbs|{{R1<-ueJmno7d=16iC*!uL{YQnis^a@{&-nmRmq)<& z%RFwcpl9Sr{Ew}aoP>%skiULZ504`I{?)=W~{LbzCklFeHQj!2ddjdgo2|;53 zHDap8+zMQg14(@VJ8S@2przpZ03ABy_WrBl`*qOyj@S69#oP*4iE7OGIK1~RxAs1O zvj8GPFTel9>VN!{+xmOa`P}C4C939`y4HuU&w8G|^qA`b000FyNkl~0sOYuM{tG`rYEDV{DW zY`Z8&)kW*hc2VkBuY+^Yx&92j&StN}Wp=LDxoGxXw6f&8sB^u})h@b@z0RBeD`K7R zMR9deyL(ZJu#39Z>rT)^>v}Khq8U-IbIvT>?0=$(@1kY#UDTzHqZF9Pf_C@tj1oxteG}92-?7*+l>p6#^`P@H5FOztAW+BL@ zgMW5WW@o0+lFjl7eZCQeM)JYUT${-PFgJf%+M!_j4~=x1KYY>lK)Rz?7O>c2S|tVQ6V)M5P*a$ZdL^ zy_r{P28NJ(NS?vbnl(hJx%pmHo8eb&*MEi}RYj>`e8yg<%{=5Qp0iG@)fVQ{ZzCIX zXfRi#)?GAbK2jS*+<10tbLC-L&5L`THm7N=5!v)QgSiUz!n0eOYoO)_?V?qw%giG% zr=@Cc=%SUVDX7CD^9=yYl&p{nx~NrCHJkOUtM8)rosUKZ=68x)Hfvr{7d5Nf1%G?p z++4V>tLmcWv$1*M@4ZfF^9``()#hGTeKeP`1!iEDtNE(TN}M5}3Bbc*d=FIv` zDNv&@|C6yYj{sSqUj5oo$#*0$7pu|Dd2TLI>t5%IIa4Dvr(iayb+5x=j*Vum9&irk z)xV1`t509lnPO0%skL8_1c#Xb?pG+k)k+M1!Y8r8G$I)A8h=Eo1V zw|}FNsfkvP(wuoRQD~_S@Tuc})nK0P+)CmotdBS0Q%kp%t}00cMz&aGqXfbwuTalUR@hy=A9>#yFo`e z^J;8O^~^`LHm2Lb(+)fV7k{fUHPyQOTjtyS57SBO>C-@q7pZYI)i@z9A3q2{JOpxK zvZjiqJ>V*$;pmlqPGcSlZK=kW1HE9RpgQ=vZdW$e58!hs|nK{TkE)W*wBO(X}T~ z6R8dyQ}?90*KmM#LYRAx?;tOl`B`STD5BL-n~bT965UQ z=&@tR?u3Tk4Gp~qL}6hM9z6IT6!ic9f2~9JrvP1`RTAVE%pff-qoS&|a^>pPYuCPc z`}V_!kDq`_uz*Cl7i)mJK6|=2hEy=Vy%f#wY#`B)IQy_cvi4!K<>x;B|9@!f2{G|4 zX9cG26Tf6)GwIu86~XT(+aBK2EV{dS)jEcgn|v3S-29d(V#HI$UK%A=^zo-nyhy8J z)n_ZNt^XGm2K=}x>p1Uu?R@LzG;3wE7mkNn7$uWD9O@nHlJ_`nIOez~Yq|iR+38J= zqO6jucGs=0+HmvBM~=O>{f&S!k!Cm6Xq|cTv+F|6_5HRT1`|9dEqXMAM{u3}+sA@R zX9COJ0=Foc-2R%+FU0KGcEn*FM`z=l7KRUz&t7b^Ns08?p5Ny*t88JqjC-Wqq$P{j kF-x&B1kWsTsrka_t*Q8WLhi?_K<_hny85}Sb4q9e0E$=PdjJ3c literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..6987f1323fa2af23227fe47dcbcb9e66d161f8da GIT binary patch literal 622 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=>H>U1T!FNclT%z=oP&cya&oe( zt1FNV6iG}>L?*FvjWgvSYC6`&cC3r-Tp!o9A#To@)D$DaGd1_X; z=6Pj9PxF!6$?d#UyO~qRvo&h%E91u&Y$-A-|MP=qSyk#NI5b2x?W@~e z&&I+rLGwa9V-Z8t`s>R~PCpfzz&v3o10xg5i~EgY)0lzMcPcGpR;hhlvpYiM=+c)p zcFaW#tFDxY>t{7EFz#ZP?RWnv{rhiR`9>Y@m6mh;8e|%DSUCg~c5Z%ZGv)cub(y>G zGC?$yLo{ri)1J4!c3LW2;peB%6dn238%|N8r{#A@rp&P6M3zhyGw w6Z*N&UWV`K-~9O&UVCi)vls*g1^0S}%dG8u5y0_43m9z-p00i_>zopr015UKDF6Tf literal 0 HcmV?d00001 diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index 84ac32ae7d989f82d5e46a60405adcc8279e8001..462927d30c4be505eb9ebe608af5dd91f7565176 100644 GIT binary patch literal 485 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgPbpbvhu0Yz!$tf-_&cVSUIXT(Y z)fLDFiXWURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaSG?dgJNh7*fIb_R38mX9JOjM6b7@i>7VccH{nk&e;zxO*%6} zph>=Jy*C$~;J93>b^3egRKaHt5C5;}>{2RO z|M*Pu-`gj2Lh8S3ZWPbjF-Pk5moqCinoEkdoiW^{*U$Q;kcT~5rlq1KI61a_#VVzP zw>I9~C~a*P_J#kcrCj&QjhP0a)6Q)44S!s}@#<3F%REz6&TPDDd-_;k?^?aL1!;w6 zYE1Q-J}$jmnfX)Pq5tFkZ*>w3jCU{XdS{asIi)*MqQ}6sG9c1FGOdO4knd#%NtT90 eouEC*-iGWh`u^4O{#?iSsKwj>R+($e`7XEi08W)u z#P?j1z5-aC07#PD^ZggF^#Dupee(w1FB%aqSweusQ-T+CH0Xt{`FjMvW{@C&TB)k25()nh~_yJ9coBRL(0oO@HK~z}7?bm5j z;y@69;bvlHbALDqiO3?G&AN%#9$X^c_wE1xL$>kg9E!yZmQy8f!56A{s=I*?z^qwX z#Y*v1!GcQC8i(G>V!oZD9xz#Jem`(>Md6-}n55+fqDC3sH&C&RycH^0^@8PTYK2frj^bWk*eKulAh?H2qHKcrX6p_u?Av_yNBmR(~#4u%J>Zc`tmh`GrD#n19?NEy`PSbEr+eBW=3DX&?ip>@#l{a@-@ zW_1r*EprMQTK%nVCz*;iSnH1vLrYy7?Dj{aZd=kavlO*O+|i6WURBR<2yRYSpT}d-onWa^&dI zqsNXNyAv9EH#GDf5QT+3c<|tVP|*MX|FsU?p8|A&R!NXwFoU$TjEbt-%9X2EuU-4* z?b{C@K7Il!!2%NHUaVnYU~KVpaSW+oe0wc6zsW$PAyHIxzw3<~C9|2NAN~K|YR!3T z=PQpZ+bnACTl*!|>dkt#CCbIc<;nq@^U{3nfg-ljK7HNC9v7~^&isr+ZPm@3v`JsI zEqC9|V=iW#d^^=Q^x1E_4ef0!pJ#84+AH}cREwXliD3r!j9px6p}()(JkY>c%vG&r z{f~i-N8&u|hW`xFdehYc^@TQ6C73Y-#WuLN9MxlDu12_FC|j*=Rd35 zXZ=N$aW#8bMyT)Ck9E5)1J&H{-Jo;2?w_Wokm*^!vZXaK;@^#1i*`ilH0*5fRhxVxZ}CNr8Qc;3 z@6Y#Jel6tl&po%_GF4~Hxbm`ut+}!4!Wot0twnFwhchZGDJ|0e#TFIIJYUgKh!Gfz N44$rjF6*2UngF;o8ixP? delta 1207 zcmV;o1W5b+1j-4JBYy!1P)t-s|Ns9~#rP?<_5oL$Q^olD{r_0T`27C={r>*`|Nj71 znpVa5OTzc(_WfbW_({R{p56NV{r*M2_xt?)2V0#0Ns(LS_5n$P07H7l>-@&*{4=@s5p1FWK6C*!U=Ue>04`E1y#B`P`vFdi06J>i z^ZmW({AJ4c0ZfSZ`TPC&_hOg95M`GTUyJ}9I{+ItS~5@1AR$EK~#9!?U(CP8bJ_+dtqUA z1Y;IZF%m^F2BRRvM8tU4B<6lk-v3Q9BUD=1%n*t=(`tWJ{;{C=s?VXf0fu21hG7_n zVTd9#!w}#DDPbrQ+#>)EA6S`xzXk3Q67CnKY~%~M1AlNHriheR&O(sQA5B68j)|o9 z3e1Gr{JlxYfJ@LTB3I?K5>#^}>Ls{e*O6lk&cNPR2=b`eT7UyYH1eGz;O(rH$=QR*L%%ZcBpc=eGua?N55nD^ zK(8<#gl2+pN_j~b2MHs4#mcLmv%DkspS-3kwP(uAQI5%;8NJG> zR1Ih5$_uv!-q8s!G;`3eM9-G~)-Ua)!89H8Yaq?S(V*80^g=U7IpWMR9}bLOXyz-f^d2y6}Q^}3_Q_8Pr;DZHn-+4JglJKL?MRzkdQjoqE|Zg;=c&@NZhJb(9W zedoN>Zl-6_Iz+^G&*ak2jm}CF|002ovPDHLkV1j5=g1P_z diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index 0467bf12aa4d28f374bb26596605a46dcbb3e7c8..6665c1158949f1df985fcf22ede57ec17c4bcb26 100644 GIT binary patch literal 651 zcmeAS@N?(olHy`uVBq!ia0vp^%R!if8Av*x*mDm^)dl#3xB_V>C#Sf$I0pxZ`rLt-O$i`Kol1C;K76cK|%lj|JOQne+tkAS|ve#!3@&UGAgQSD_5>wy>{)J zw{Jgu`1lE^1Pe%%d$ERrfpL4cDX+7`~Sby)@?Fl zP=-L7)v>+zE%?t=DNH_`;^YDZ%|$ZLBR|=^_jdktEBs_>>>LYy1FO$JW7s#$lPOYv zxaDx=AA_&T{9s%oz;ZpTI~;xbP6vweExi8 z{QQDPM>;>-&xw6_#PW_LOC#TttgVMKH(&O!CJNas(NIlk0u-W8j5 zXCJ@YIsf@j$Em53ezWJMZr)aT)Al?6S+GGy>628Z8ZXue`n<%ff7kQ6KoQZDS<5U6 z`O2j@)&1s#S-9VRUcUQo+}68!g^y(3>CE1G_W!Nd-=LbGXZ)`D`;X_a!1A+x$`D(h zZ+-LGBL8xvS@!JB^*|R*{%vv-JNUFZn%hFR5$& z_P?*3bGhs}^ONRRx?6)j4Gr{l3dDt9#yEvRG}sZQTs!UW@$e fp1_b@vQoaOUGv2TuC#5yIA!p3^>bP0l+XkKr2Rmx delta 1399 zcmV--1&I2K1&RxhB!BZzOjJex|Nm6Q_$jvb0au$-#Q6RG|NQ;_`u+b{#`ydG|5wKN zPQ&*^zxM!2lL1zlir4y3!}tVRozU+516Z8?|Nrj!{>AJ3O2PMD$oLqr^>U%d=l1<# z%J_z@&PKrZF1Ysc`u@@H{E623uH*YZz4t4=|0lBYn%w#&w14#hMt*e9`2kdxPQ&&>|-UCa7_51w+LUsW@ZzZSW0y$)Hp~e9%PvP|a03ks1`~K?q z{u;6NC8*{AOqIUq{CL&;p56Lf$oQGq^={4hPQv)y=I|4n+?>7Fim=dxt*v&^&=|+Hd{KUTbfjFY0gkQI%^ugM`#6B!6^Si*a+Z^#PDGc`IecWa-9L zVrC5Yc`M^4C1>fnVoIQkNbF4J1hZR{8AI(*G83SSi04gDEzE4OnmIHdWbzu!0o~ce zrl;1X52(&2GX1Df7)YyS+AHMCK%#EC)SIp+C1-jvkP=@8QulHVB+{lQHJZ+|l1Y8_ z*h`r?8GrfNtkHDlK-0asdie7--IsyHF3&)stx&Ct9Qmeua`m`$1IdA=`>~o{yoG8o z-KdZ+Zz1OT4Jo{ZAiRanxq1w|8A$TNPqy$Da<=K7F#WlDSeV?8f#lB(>8dy1Ep~k% zaVIKtnSU;n%Nh~QzJ<8n^qK+-0AS zK~jEmCV|&a*7-GKT72W<(TbSjf)&Eme6nGE>Gkj4Sq&2e+-G%|+NM8OOm5zVl9{Z8 zDd8A5z3y8mZ=4Bv4%>as_{9cN#bm~;h>62(dqY93Zy}v&c4n($Vv!UynpxOy0%)jxXEG1&U%R}*0(7v|MOC;<~=XCjn3}VQ-`MO)Jy?KTrtggxbyx9Bv2-SZ9DV9x7#3NAdP?zw|{KR zx5MHm2wJEBcyw!R)65*VuiPVt3L{i8$K!SsxdDB13e}h|#znimfX4XFr-+nlMNQ0I z1?^Q(${4-OViN1!6d)+2K|9S)V#DX6HR z$b2@N72{Kf_I@bC)hkI9|o(Iqvo}Piadq!j76}004RB&zmiTh`C z0rj9v-ax%+eePZBBRe#A0@~{sqCR=@13&;#uuS&+c?p6TD&YIC+e`8i|D*o={t84p zkFEFN*8wW1NMd^gIaE { List goodsList = []; String _orderPayWay = ""; + + // String _logistics = ""; List _packages = []; + bool _packageInit = false; int _activePackage = 0; final TextEditingController _goodsNameController = TextEditingController(text: ""); @@ -43,6 +47,8 @@ class _LogisticsState extends State { GoRouterState.of(context).uri.queryParameters["orderNumber"]; String? orderPayWay = GoRouterState.of(context).uri.queryParameters["orderPayWay"]; + String? logistics = + GoRouterState.of(context).uri.queryParameters["logistics"]; _orderPayWay = orderPayWay!; if (orderNumber?.isEmpty ?? true) { @@ -54,6 +60,30 @@ class _LogisticsState extends State { queryParameters: {"orderNumber": orderNumber}); }); goodsList = response.data["value"]; + + if (logistics != null && logistics.isNotEmpty && !_packageInit) { + try { + List packages = jsonDecode(logistics); + + _packages = packages; + + if (_orderPayWay != "套餐商品") { + for (var p in _packages) { + p["goods"].forEach((g) { + var targetGoods = goodsList + .firstWhere((tg) => g["id"] == tg["id"], orElse: () => null); + if (targetGoods != null) { + targetGoods["goodsNum"] -= g["num"]; + } + }); + } + } + _packageInit = true; + } catch (e) { + e; + } + } + return response; } @@ -73,6 +103,7 @@ class _LogisticsState extends State { if (hasUnAddedGoods) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( content: Text("有未添加至包裹的商品"), + showCloseIcon: true, backgroundColor: Colors.redAccent, )); return; @@ -90,6 +121,7 @@ class _LogisticsState extends State { if (!result) { ScaffoldMessenger.of(context).showSnackBar(const SnackBar( backgroundColor: Colors.redAccent, + showCloseIcon: true, content: Text("有未填写的数据"))); return; } @@ -184,8 +216,9 @@ class _LogisticsState extends State { ScaffoldMessenger.of(context) .showSnackBar( const SnackBar( - content: Text( - "请填写完整商品信息"))); + content: Text("请填写完整商品信息"), + showCloseIcon: true, + )); return; } int goodsNum = int.parse( @@ -216,77 +249,89 @@ class _LogisticsState extends State { child: const Text("添加到包裹")) ], ) - : ListView.builder( - itemCount: goodsList + : goodsList .where((el) => el["goodsNum"] > 0) - .length, - itemBuilder: (context, index) { - final goods = goodsList - .where((el) => el["goodsNum"] > 0) - .toList()[index]; - return ListTile( - trailing: IconButton( - icon: const Icon(Icons.add), - onPressed: () { - // 检查商品及规格是否已存在于目标包裹 - int targetIndex = _packages[ - _activePackage]["goods"] - .indexWhere((el) => - el["id"] == - goods["id"] && - goods["wisdGoodsSpec"] - ["id"] == - el["specId"]); - if (targetIndex != -1) { - setState(() { - _packages[_activePackage] - ["goods"] - [targetIndex] - ["num"] += 1; - }); - } else { - setState(() { - _packages[_activePackage] + .isNotEmpty + ? ListView.builder( + itemCount: goodsList + .where( + (el) => el["goodsNum"] > 0) + .length, + itemBuilder: (context, index) { + final goods = goodsList + .where((el) => + el["goodsNum"] > 0) + .toList()[index]; + return ListTile( + trailing: IconButton( + icon: const Icon(Icons.add), + onPressed: () { + // 检查商品及规格是否已存在于目标包裹 + int targetIndex = _packages[ + _activePackage] ["goods"] - .add({ - "id": goods["id"], - "specId": - goods["wisdGoodsSpec"] + .indexWhere((el) => + el["id"] == + goods["id"] && + goods["wisdGoodsSpec"] + ["id"] == + el["specId"]); + if (targetIndex != -1) { + setState(() { + _packages[_activePackage] + ["goods"] + [targetIndex] + ["num"] += 1; + }); + } else { + setState(() { + _packages[_activePackage] + ["goods"] + .add({ + "id": goods["id"], + "specId": goods[ + "wisdGoodsSpec"] ["id"], - "name": - goods["goodsName"], - "spec": - goods?["wisdGoodsSpec"] + "name": goods[ + "goodsName"], + "spec": goods?[ + "wisdGoodsSpec"] ?[ "specName"] ?? "", - "num": 1 - }); - }); - } - var curGoods = - goodsList.firstWhere( - (el) => - el["id"] == - goods["id"], - orElse: () => -1); + "num": 1 + }); + }); + } + var curGoods = + goodsList.firstWhere( + (el) => + el["id"] == + goods["id"], + orElse: () => -1); - setState(() { - curGoods["goodsNum"] -= 1; - }); - }, + setState(() { + curGoods["goodsNum"] -= 1; + }); + }, + ), + leading: Image.network( + goods["goodsPhoto"], + width: 100, + height: 100, + ), + title: Text( + "${goods["goodsName"]} - ${goods?["wisdGoodsSpec"]?["specName"] ?? ''}"), + subtitle: Text( + "数量 : ${goods?["goodsNum"]}"), + ); + }) + : const Center( + child: Icon( + CupertinoIcons.circle, + size: 36, ), - leading: Image.network( - goods["goodsPhoto"], - width: 100, - height: 100, - ), - title: Text( - "${goods["goodsName"]} - ${goods?["wisdGoodsSpec"]?["specName"] ?? ''}"), - subtitle: Text( - "数量 : ${goods?["goodsNum"]}"), - ); - })), + )), const SizedBox( width: 20, ), @@ -300,10 +345,39 @@ class _LogisticsState extends State { itemBuilder: (BuildContext context, int index) { return PackageCard( + logisticsNumber: _packages[index] + ["logisticsNumber"], + onDeleteGoods: (goods) { + if (goods["num"] == 1) { + setState(() { + _packages[index]["goods"] = + _packages[index]["goods"] + .where((el) => + el["id"] != + goods["id"]) + .toList(); + }); + } else { + setState(() { + goods["num"] -= 1; + }); + } + if (_orderPayWay != "套餐商品") { + setState(() { + goodsList.firstWhere( + (e) => + goods["id"] == + e["id"], + orElse: () => null)?[ + "goodsNum"] += 1; + }); + } + }, onLogisticsChanged: (value) { _packages[index] ["logisticsNumber"] = value; }, + orderPayWay: _orderPayWay, onTap: () { setState(() { _activePackage = index; @@ -312,6 +386,23 @@ class _LogisticsState extends State { onClose: () { var curId = _packages[index]["id"]; + if (_orderPayWay != "套餐商品") { + _packages[index]["goods"] + .forEach((el) { + var targetGoods = + goodsList.firstWhere( + (goodsItem) => + goodsItem["id"] == + el["id"], + orElse: () => -1); + if (targetGoods != -1) { + setState(() { + targetGoods["goodsNum"] += + el["num"]; + }); + } + }); + } setState(() { _activePackage = _activePackage >= index @@ -341,6 +432,7 @@ class _LogisticsState extends State { "goods": [] } ]; + _activePackage += 1; }); }, child: const Text("添加包裹")) @@ -351,10 +443,14 @@ class _LogisticsState extends State { ); } else if (snapshot.hasError) { return const Center( - child: Icon( - Icons.error_outline, - color: Colors.red, - size: 60, + child: Column( + children: [ + Icon( + Icons.error_outline, + color: Colors.red, + size: 60, + ), + ], ), ); } else { @@ -375,21 +471,36 @@ class PackageCard extends StatefulWidget { required this.onLogisticsChanged, required this.totalPackagesCount, required this.onClose, + required this.orderPayWay, + required this.onDeleteGoods, + required this.logisticsNumber, }); final bool isActive; final Function() onTap; final Function() onClose; + final Function(Map goods) onDeleteGoods; final Map package; final int index; final Function(String) onLogisticsChanged; final int totalPackagesCount; + final String orderPayWay; + final String logisticsNumber; @override State createState() => _PackageCardState(); } class _PackageCardState extends State { + final TextEditingController _logisticsController = TextEditingController(); + + @override + void initState() { + // TODO: implement initState + super.initState(); + _logisticsController.text = widget.logisticsNumber; + } + @override Widget build(BuildContext context) { return GestureDetector( @@ -417,6 +528,7 @@ class _PackageCardState extends State { crossAxisAlignment: CrossAxisAlignment.stretch, children: [ TextField( + controller: _logisticsController, onChanged: widget.onLogisticsChanged, decoration: const InputDecoration( border: OutlineInputBorder(), labelText: "物流单号"), @@ -427,13 +539,26 @@ class _PackageCardState extends State { DataTable(columns: const [ DataColumn(label: Text("名称")), DataColumn(label: Text("规格")), - DataColumn(label: Text("数量")) + DataColumn(label: Text("数量")), + DataColumn(label: Text("操作")) ], rows: [ - for (var goodsItem in widget.package["goods"]) + for (var goodsItem + in widget.package["goods"].asMap().entries) DataRow(cells: [ - DataCell(Text("${goodsItem["name"]}")), - DataCell(Text("${goodsItem["spec"]}")), - DataCell(Text("${goodsItem["num"]}")), + DataCell(Text("${goodsItem.value["name"]}")), + DataCell(Text("${goodsItem.value["spec"]}")), + DataCell(Text("${goodsItem.value["num"]}")), + DataCell(SizedBox( + width: 24, + height: 24, + child: IconButton( + icon: const Icon(CupertinoIcons.delete), + iconSize: 16, + padding: const EdgeInsets.all(4), + onPressed: () { + widget.onDeleteGoods(goodsItem.value); + }), + )), ]) ]), ], diff --git a/lib/order_list.dart b/lib/order_list.dart index b2a1857..449eecb 100644 --- a/lib/order_list.dart +++ b/lib/order_list.dart @@ -5,6 +5,8 @@ import 'package:file_picker/file_picker.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; +import 'package:path/path.dart' as p; +import 'package:url_launcher/url_launcher.dart'; class OrderList extends StatefulWidget { const OrderList({super.key}); @@ -61,155 +63,163 @@ class _OrderListState extends State { Card( color: Colors.white, margin: EdgeInsets.zero, - child: /*Scrollbar( - // controller: scrollController, - child:*/ - SingleChildScrollView( - scrollDirection: Axis.horizontal, - padding: const EdgeInsets.all(12.0), - child: DataTable( - columns: _headers.map((el) { - return DataColumn(label: Text(el)); - }).toList(), - rows: _data.asMap().entries.map((row) { - return DataRow( - cells: row.value.asMap().entries.map((col) { - String colTitle = _headers[col.key]; - return DataCell(colTitle == "物流名称" - ? Row( - children: [ - Text("${col.value}"), - IconButton( - // padding: EdgeInsets.all(2), - iconSize: 12, - onPressed: () { - _logComController.text = - _data[row.key][col.key] - .toString(); - showDialog( - context: context, - builder: (BuildContext - context) => - AlertDialog( - // icon: const Icon(Icons.edit), - title: const Text( - "填写物流公司"), - content: Column( - mainAxisSize: - MainAxisSize.min, - children: [ - TextField( - decoration: - const InputDecoration( - labelText: - "物流公司"), - controller: - _logComController, - ) - ], - ), - actions: [ - ElevatedButton( - onPressed: () { - context.pop(); - }, - child: const Text( - "取消")), - ElevatedButton( - onPressed: () { - String - logisticsCom = - _logComController - .text; - if (logisticsCom - .isEmpty) { - ScaffoldMessenger.of( - context) - .showSnackBar(const SnackBar( - content: - Text("请输入物流公司"))); - return; - } - final data = - _data; - _data[row.key][ - col.key] = - logisticsCom; - setState(() { - _data = data; - }); - context.pop(); - }, - child: const Text( - "确认")), - ], - )); - }, - icon: const Icon(Icons.edit)) - ], - ) - : colTitle == "物流信息" + child: Scrollbar( + controller: scrollController, + child: SingleChildScrollView( + controller: scrollController, + scrollDirection: Axis.horizontal, + padding: const EdgeInsets.all(12.0), + child: DataTable( + columns: _headers.map((el) { + return DataColumn(label: Text(el)); + }).toList(), + rows: _data.asMap().entries.map((row) { + return DataRow( + cells: row.value.asMap().entries.map((col) { + String colTitle = _headers[col.key]; + return DataCell(colTitle == "物流名称" ? Row( children: [ - _data[row.key][col.key] - .toString() - .isNotEmpty - ? SizedBox( - width: 120, - child: Text( - _data[row.key][col.key].toString(), - overflow: - TextOverflow.ellipsis, - ), - ) - : const SizedBox(), - ElevatedButton( - onPressed: () { - String orderNumber = - _data[row.key][2] - .toString(); - String orderPayWay = - _data[row.key][15] - .toString(); - if (orderPayWay.isEmpty || - orderNumber.isEmpty) { - ScaffoldMessenger.of(context) - .showSnackBar( - const SnackBar( - content: Text( - "该行数据有误"))); - return; - } - context.pushNamed("logistics", - queryParameters: { - "orderNumber": - _data[row.key][2] - .toString(), - "orderPayWay": - _data[row.key][15] - .toString(), - }).then((value) { - if (value != null) { - var newData = _data; - newData[row.key][col.key] = - value; - setState(() { - _data = newData; - }); - } - }); - }, - child: const Text("填写"), - ) + Text("${col.value}"), + IconButton( + // padding: EdgeInsets.all(2), + iconSize: 12, + onPressed: () { + _logComController.text = + _data[row.key][col.key] + .toString(); + showDialog( + context: context, + builder: + (BuildContext + context) => + AlertDialog( + // icon: const Icon(Icons.edit), + title: const Text( + "填写物流公司"), + content: Column( + mainAxisSize: + MainAxisSize + .min, + children: [ + TextField( + decoration: + const InputDecoration( + labelText: "物流公司"), + controller: + _logComController, + ) + ], + ), + actions: [ + ElevatedButton( + onPressed: + () { + context + .pop(); + }, + child: const Text( + "取消")), + ElevatedButton( + onPressed: + () { + String + logisticsCom = + _logComController.text; + if (logisticsCom + .isEmpty) { + ScaffoldMessenger.of(context) + .showSnackBar(const SnackBar(content: Text("请输入物流公司"))); + return; + } + final data = + _data; + _data[row.key][col.key] = + logisticsCom; + setState( + () { + _data = + data; + }); + context + .pop(); + }, + child: const Text( + "确认")), + ], + )); + }, + icon: const Icon(Icons.edit)) ], ) - : Text("${col.value}")); - }).toList()); - }).toList(), - ), - ) - /*)*/ - , + : colTitle == "物流信息" + ? Row( + children: [ + _data[row.key][col.key] + .toString() + .isNotEmpty + ? SizedBox( + width: 120, + child: Text( + _data[row.key] + [col.key] + .toString(), + overflow: TextOverflow + .ellipsis, + ), + ) + : const SizedBox(), + ElevatedButton( + onPressed: () { + String orderNumber = + _data[row.key][2] + .toString(); + String orderPayWay = + _data[row.key][15] + .toString(); + if (orderPayWay.isEmpty || + orderNumber.isEmpty) { + ScaffoldMessenger.of( + context) + .showSnackBar( + const SnackBar( + content: Text("该行数据有误"), + showCloseIcon: true, + )); + return; + } + context.pushNamed( + "logistics", + queryParameters: { + "orderNumber": + _data[row.key][2] + .toString(), + "orderPayWay": + _data[row.key][15] + .toString(), + "logistics": + _data[row.key][12] + .toString() + }).then((value) { + if (value != null) { + var newData = _data; + newData[row.key] + [col.key] = value; + setState(() { + _data = newData; + }); + } + }); + }, + child: const Text("填写"), + ) + ], + ) + : Text("${col.value}")); + }).toList()); + }).toList(), + ), + )), ) ], ) @@ -268,18 +278,34 @@ class _OrderListState extends State { }); }); var fileBytes = _excel.save(); - String? directory = - await FilePicker.platform.getDirectoryPath(dialogTitle: "选择保存位置"); - if (directory == null || directory.isEmpty) { + String fileName = "导出订单${DateTime.now().millisecondsSinceEpoch}.xlsx"; + String? outputPath = await FilePicker.platform.saveFile( + dialogTitle: "选择保存位置", + fileName: fileName, + type: FileType.custom, + allowedExtensions: ["xlsx", "xls"]); + if (outputPath == null || outputPath.isEmpty) { return; } - File("$directory\\导出订单${DateTime.now().millisecondsSinceEpoch}.xlsx") + File(outputPath) ..createSync(recursive: true) ..writeAsBytesSync(fileBytes!); if (mounted) { - ScaffoldMessenger.of(context).showSnackBar(const SnackBar( - content: Text("导出文件成功"), + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: const Text("导出文件成功"), backgroundColor: Colors.green, + action: SnackBarAction( + label: "打开文件所在位置", + onPressed: () { + final Uri fileUrl = Uri( + scheme: "file", + path: p.dirname(outputPath), + ); + launchUrl(fileUrl, mode: LaunchMode.externalApplication); + }, + backgroundColor: Colors.white, + textColor: Colors.green, + ), )); } } diff --git a/linux/flutter/generated_plugin_registrant.cc b/linux/flutter/generated_plugin_registrant.cc index e71a16d..f6f23bf 100644 --- a/linux/flutter/generated_plugin_registrant.cc +++ b/linux/flutter/generated_plugin_registrant.cc @@ -6,6 +6,10 @@ #include "generated_plugin_registrant.h" +#include void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); } diff --git a/linux/flutter/generated_plugins.cmake b/linux/flutter/generated_plugins.cmake index 2e1de87..f16b4c3 100644 --- a/linux/flutter/generated_plugins.cmake +++ b/linux/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index e777c67..a1cdfd0 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -6,7 +6,9 @@ import FlutterMacOS import Foundation import path_provider_foundation +import url_launcher_macos func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { PathProviderPlugin.register(with: registry.registrar(forPlugin: "PathProviderPlugin")) + UrlLauncherPlugin.register(with: registry.registrar(forPlugin: "UrlLauncherPlugin")) } diff --git a/pubspec.lock b/pubspec.lock index fe4a817..54b5566 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -9,6 +9,14 @@ packages: url: "https://pub.dev" source: hosted version: "3.4.9" + args: + dependency: transitive + description: + name: args + sha256: "7cf60b9f0cc88203c5a190b4cd62a99feea42759a7fa695010eb5de1c0b2252a" + url: "https://pub.dev" + source: hosted + version: "2.5.0" async: dependency: "direct main" description: @@ -33,6 +41,22 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.0" + checked_yaml: + dependency: transitive + description: + name: checked_yaml + sha256: feb6bed21949061731a7a75fc5d2aa727cf160b91af9a3e464c5e3a32e28b5ff + url: "https://pub.dev" + source: hosted + version: "2.0.3" + cli_util: + dependency: transitive + description: + name: cli_util + sha256: c05b7406fdabc7a49a3929d4af76bcaccbbffcbcdcf185b082e1ae07da323d19 + url: "https://pub.dev" + source: hosted + version: "0.4.1" clock: dependency: transitive description: @@ -142,6 +166,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_launcher_icons: + dependency: "direct main" + description: + name: flutter_launcher_icons + sha256: "526faf84284b86a4cb36d20a5e45147747b7563d921373d4ee0559c54fcdbcea" + url: "https://pub.dev" + source: hosted + version: "0.13.1" flutter_lints: dependency: "direct dev" description: @@ -184,6 +216,14 @@ packages: url: "https://pub.dev" source: hosted version: "4.0.2" + image: + dependency: transitive + description: + name: image + sha256: "2237616a36c0d69aef7549ab439b833fb7f9fb9fc861af2cc9ac3eedddd69ca8" + url: "https://pub.dev" + source: hosted + version: "4.2.0" js: dependency: transitive description: @@ -192,6 +232,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.1" + json_annotation: + dependency: transitive + description: + name: json_annotation + sha256: "1ce844379ca14835a50d2f019a3099f419082cfdd231cd86a142af94dd5c6bb1" + url: "https://pub.dev" + source: hosted + version: "4.9.0" leak_tracker: dependency: transitive description: @@ -257,7 +305,7 @@ packages: source: hosted version: "1.12.0" path: - dependency: transitive + dependency: "direct main" description: name: path sha256: "087ce49c3f0dc39180befefc60fdb4acd8f8620e5682fe2476afd0b3688bb4af" @@ -413,6 +461,70 @@ packages: url: "https://pub.dev" source: hosted version: "1.3.2" + url_launcher: + dependency: "direct main" + description: + name: url_launcher + sha256: "21b704ce5fa560ea9f3b525b43601c678728ba46725bab9b01187b4831377ed3" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_android: + dependency: transitive + description: + name: url_launcher_android + sha256: ceb2625f0c24ade6ef6778d1de0b2e44f2db71fded235eb52295247feba8c5cf + url: "https://pub.dev" + source: hosted + version: "6.3.3" + url_launcher_ios: + dependency: transitive + description: + name: url_launcher_ios + sha256: "7068716403343f6ba4969b4173cbf3b84fc768042124bc2c011e5d782b24fe89" + url: "https://pub.dev" + source: hosted + version: "6.3.0" + url_launcher_linux: + dependency: transitive + description: + name: url_launcher_linux + sha256: ab360eb661f8879369acac07b6bb3ff09d9471155357da8443fd5d3cf7363811 + url: "https://pub.dev" + source: hosted + version: "3.1.1" + url_launcher_macos: + dependency: transitive + description: + name: url_launcher_macos + sha256: "9a1a42d5d2d95400c795b2914c36fdcb525870c752569438e4ebb09a2b5d90de" + url: "https://pub.dev" + source: hosted + version: "3.2.0" + url_launcher_platform_interface: + dependency: transitive + description: + name: url_launcher_platform_interface + sha256: "552f8a1e663569be95a8190206a38187b531910283c3e982193e4f2733f01029" + url: "https://pub.dev" + source: hosted + version: "2.3.2" + url_launcher_web: + dependency: transitive + description: + name: url_launcher_web + sha256: "8d9e750d8c9338601e709cd0885f95825086bd8b642547f26bda435aade95d8a" + url: "https://pub.dev" + source: hosted + version: "2.3.1" + url_launcher_windows: + dependency: transitive + description: + name: url_launcher_windows + sha256: ecf9725510600aa2bb6d7ddabe16357691b6d2805f66216a97d1b881e21beff7 + url: "https://pub.dev" + source: hosted + version: "3.1.1" uuid: dependency: "direct main" description: @@ -469,6 +581,14 @@ packages: url: "https://pub.dev" source: hosted version: "6.5.0" + yaml: + dependency: transitive + description: + name: yaml + sha256: "75769501ea3489fca56601ff33454fe45507ea3bfb014161abc3b43ae25989d5" + url: "https://pub.dev" + source: hosted + version: "3.1.2" sdks: dart: ">=3.4.1 <4.0.0" flutter: ">=3.22.0" diff --git a/pubspec.yaml b/pubspec.yaml index 5763814..fc10718 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,6 +42,9 @@ dependencies: path_provider: ^2.1.3 uuid: ^4.4.0 async: ^2.11.0 + url_launcher: ^6.3.0 + path: ^1.9.0 + flutter_launcher_icons: ^0.13.1 dev_dependencies: flutter_test: diff --git a/windows/flutter/generated_plugin_registrant.cc b/windows/flutter/generated_plugin_registrant.cc index 8b6d468..4f78848 100644 --- a/windows/flutter/generated_plugin_registrant.cc +++ b/windows/flutter/generated_plugin_registrant.cc @@ -6,6 +6,9 @@ #include "generated_plugin_registrant.h" +#include void RegisterPlugins(flutter::PluginRegistry* registry) { + UrlLauncherWindowsRegisterWithRegistrar( + registry->GetRegistrarForPlugin("UrlLauncherWindows")); } diff --git a/windows/flutter/generated_plugins.cmake b/windows/flutter/generated_plugins.cmake index b93c4c3..88b22e5 100644 --- a/windows/flutter/generated_plugins.cmake +++ b/windows/flutter/generated_plugins.cmake @@ -3,6 +3,7 @@ # list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_windows ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/windows/runner/resources/app_icon.ico b/windows/runner/resources/app_icon.ico index c04e20caf6370ebb9253ad831cc31de4a9c965f6..5181220e652ace884b588db688b4c3cf79c49d7b 100644 GIT binary patch literal 451 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