From d98dab82d0d05c6ba705bd97d39fa3e649a9f3b8 Mon Sep 17 00:00:00 2001 From: w-R <953969641@qq.com> Date: Thu, 26 May 2022 17:13:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/image/2x/calendar.webp | Bin 0 -> 4660 bytes assets/image/2x/icon_mine_online_service.webp | Bin 0 -> 1474 bytes assets/image/2x/vip_logo.webp | Bin 0 -> 1302 bytes assets/image/3x/calendar.webp | Bin 0 -> 8016 bytes assets/image/3x/icon_mine_online_service.webp | Bin 0 -> 2144 bytes assets/image/3x/vip_logo.webp | Bin 0 -> 2948 bytes assets/image/calendar.webp | Bin 0 -> 1644 bytes assets/image/icon_mine_online_service.webp | Bin 0 -> 926 bytes assets/image/vip_logo.webp | Bin 0 -> 848 bytes lib/home/welfare_page.dart | 9 +- lib/main.dart | 1 + lib/mine/mine_greenery.dart | 4 +- lib/mine/mine_page.dart | 136 ++-- lib/mine/mine_view/calendar_page.dart | 88 +++ lib/mine/mine_view/mine_calendar.dart | 81 ++- lib/mine/mine_view/mine_item.dart | 13 +- lib/mine/mine_view/mine_order.dart | 2 +- lib/mine/mine_view/mine_view.dart | 31 +- lib/store/shop__details_page.dart | 674 ++++++++++-------- lib/store/store_order.dart | 10 +- lib/store/store_view/store_order_list.dart | 17 +- lib/union/union_page.dart | 4 - lib/view_widget/mine_vip_entry.dart | 193 +++++ pubspec.lock | 14 + pubspec.yaml | 2 + 25 files changed, 863 insertions(+), 416 deletions(-) create mode 100644 assets/image/2x/calendar.webp create mode 100644 assets/image/2x/icon_mine_online_service.webp create mode 100644 assets/image/2x/vip_logo.webp create mode 100644 assets/image/3x/calendar.webp create mode 100644 assets/image/3x/icon_mine_online_service.webp create mode 100644 assets/image/3x/vip_logo.webp create mode 100644 assets/image/calendar.webp create mode 100644 assets/image/icon_mine_online_service.webp create mode 100644 assets/image/vip_logo.webp create mode 100644 lib/mine/mine_view/calendar_page.dart create mode 100644 lib/view_widget/mine_vip_entry.dart diff --git a/assets/image/2x/calendar.webp b/assets/image/2x/calendar.webp new file mode 100644 index 0000000000000000000000000000000000000000..bad7614050ba59031100f6c5559c8c28dd94a9c2 GIT binary patch literal 4660 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 literal 0 HcmV?d00001 diff --git a/assets/image/2x/vip_logo.webp b/assets/image/2x/vip_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..ede748cf8fd24ccc0bf8b6e67d886f96f6437134 GIT binary patch literal 1302 zcmWIYbaUflWnc(*bqWXzu!!JdU|=u+Vtp|3baoDqU;=U(m?S_X3s5RIucRo*-AN%L zGD-m?1_O!7#RV`n7MhWP;oCI^Aj!aRSr>~uAtBC`)Z%2Iq7Oh^QUtV|fq^jv$QDV5 zuq#09BnZ0)#4ZX6at5kd0Ay>VBe9c^*ySY!B|tSNKIgA?khp~qQ(3^k zz~92aup2H^_~3|!GLha&VM;sS?X6@YqVfd0$} z!gPilhExUx22X}OhGYgkAj=4tNDLXwfGNi30x*5(>mT42NPnU=NhNY+)pA~&1*}su z4l>t!REP(dJ-hFlb9>#U?|=VKUg^NFETEI~$c1Hk#r#LMO_VvgGbwa_t*`>`gO^Vp zO3c}tb5}R<+1p3YCiG{kpMJ&nn@4WL=@*u~X8VIB_jEUfeldDw-5Wje@NtFZJ1|FHhM#MtTV%o?UC zHN_?&w4Lop*NK0omP+4YI9-%(X^6U&_gYOLN43m7yMT28jGJLydD z)DmJ42x4HE>d2zRXu;w$gQG`jg6|0xh3wmASH1FfOIv5Yd6&l;y^(wO?xoUm=I>3r z_NMk(q|1NVow-juj$L_nz&Z4*JS_Byr+eA^*6KH!%&EO+`Q>q5@w3IQ+mAVOlrK|L z;J)?0Rltek@$b#6o~8?ysJkan39EZfw?cygBi*x-aLIpEEX@ zPUAUqI&01Kjjs}QGJ930fBy9?V9hUS$Fx6v3dyfO1x>HmwTa`VxOLu>zKhpyY+ZX` z#$VmMNufJ;N<9y1EYwPyb4Kp+Tf;Y}S+4NAcJXiCwE0PVjj7>h*N(O=OPg#zn4Pno zyzY40HLq{Sb{?6YZ`Z||pB6f)SFvTqb79%g=!}O59E2_7tZ^tHSgXHQd*Dgy= zUAA+L-L;TC5zA}*udm-4dgI9PNne*Ql$u?g=)cJBdRY3^_x-O=ZqkzF6~4vY|Eu3` V<*i7gpAVMr3s;}U^v|5H3IGSxm#hE) literal 0 HcmV?d00001 diff --git a/assets/image/3x/calendar.webp b/assets/image/3x/calendar.webp new file mode 100644 index 0000000000000000000000000000000000000000..6ec7621e10d34f5e71c613d95f05b6ce8130570a GIT binary patch literal 8016 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 A>Hq)$ literal 0 HcmV?d00001 diff --git a/assets/image/3x/icon_mine_online_service.webp b/assets/image/3x/icon_mine_online_service.webp new file mode 100644 index 0000000000000000000000000000000000000000..927a7c124f09537ad382c417e0f5a1237f4922b5 GIT binary patch literal 2144 zcmcJNc|6;B8pppB#k6Q0)mK|hH8VPnagCuGWvL^Srilz1>=4H~LI!Dd1f8z7ZYH*k zV;t)mqC|_(*wSOGj*7awf>bmOQb|iiC4>EC`s&O4G5gwocAww(`F!8M=leXb?}R(Q~IzWHB}I$2qI zcaCR9hSiA$B$}{H(!dy~84SKtRAks!?``Nn!N}269cs`7>VWqWEz(fip-oL2Bm$`S zGe);((rBFooh&8}TN8*aDx!ugVX-qNeE>WD%*`=?va2o?TjO;E)(4hoG+`iC5%u{= zKm=>M;U`~W{H2I?pPP!ysSk@9uWd5+0ZP@gXj`QESvFk}?C zRlOYqjmzxH1OfL{FTy31%^*OnMJAnpL!=s&@;AHq$qgdO7nR#;(~KNAUWg$Wc)X||qB-nxdP^0Bm!@+h|b?2l)@EhIJ!-JklvYbYKZAyII{8bg7PtV ztiSZ_cLk5yiw6@;psHTd%QnBk%+jRNjXQfTE~_8y+8PlY-9q86zm|^P&&s}{Vmf^y z@F92*IEnZjCEik>V?1E=KTKF)PGz~3GuuA6Mt4xr7-C_8man2 zPi<^Vb?QtD!(+c6wQYUtrnB^7RDmPIdYi%{Ctobd9Q#v*r8LKQdgu`Cvkp9K-LDt3 z!EIfuFSjJy4-SYNFx~yIuGWr-*$zKR@b$M1$jkhP^e}Mr;4K^2pppC9t7ccrY`WUu zqIdiFlf-jk&&tS4Tq<#`wDa3N(VFT3-B0noO!jIHYa|B4ayp~H9W}EbmJ(ky~FY5Px+;z{9>FXM?$VQTn?bxS~VO0`c+TI z&w6qAuIz`on{4q|=|~EZqx|)09SqsrR;BGnLE9P2 zY)0%`nNxmCb=Fq&9j@q%n!jOE6?`6{kyo=%oN;R9rubT782eNdzBjiu)hhRv5J_eS zAE{p#2iJBADnGnH4-V@lChecyG#|;Y+}~5-!^KURnJJ~f6r1Lg?)V&_riood8*#AN zjC4*!39#m_rY}U-hZM0-+UL5&DzbXI%n&~kSm*Ygx5ItkAk}AeHe0ZceCc&}i(YsC z@n_GL1l+Qox`laZyr=vWE9xhlnlWl#KcMlum!{|Q-?%xjHLX@gyCU4%@;_Kcd2viD zo9qhnF?nY~L}GW$U7pKapr>g4`0FZdo?zG}c-E`60&xqMByY#b#bWDLe1)b4Q`*)2 zG@11~*7g?{D?K7-a=#zys&dWKv-{!w!d8wZuC_d?S5DJfIHVzDuZA+YhmFyb=eo1X_ zA^(ernB;303el;?h!To6&i+s)hQUqQy2md|65iw6_m7zrXnxIO-%Z;f)t{Se3h2DJ zJk>VDOP}wbP#|J+w;FO6&_th9E;1_Mk;5ezo%Q2pU)5I`wKyNiGR!x#!q@U9^i>KhlhAvik}lP1 f|3)+{h~-{?))RX;Xg0GcVcAD(Zd-Ai1i-%m3=v6t literal 0 HcmV?d00001 diff --git a/assets/image/3x/vip_logo.webp b/assets/image/3x/vip_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..5f3132d7cf25083e8ae1e9cf9f2bfccc24b24b2e GIT binary patch literal 2948 zcmeH_dpy+J7Qi>@o-n9%(wvBfLb=p#$g{kPNRd-a zMvQ98XbdN>Im~!dNgkPDZU%G4IiEhxALoAVKlh*e`P}u}YwhoE?X^C8?X|a)t(8@@ zBmgd!W)43)7`RFR01gS&`j262Ztk#4RQL--cdc77;ZjgA4(nuXrsV48uC(s^F5W)j zq2Kv$W)T3E`hd^^(EZQ9S^rNiabI+}k1%Lns5q=}a{xqqg}ejvCtqA=)SpaPXY45_ zb74%ekkv4MVbotZ3KxnK#?aQ|eL}J8%oZ{tC@^AuuXS0k7=jKy?JS&Kg(?rifs?R3 zW~3Fm0|#75&)?04E4r(|51#X(2Dx`0kH4@ z04X;BWPb%f!sC0P8@U^I@o&zmB+QW)o-;)FVL%{210`S!f`Jdv6cSwcNDc!%;fpz8 zA`XC-b<4J`QW1Mg1tLZR^(NJs{M}Q(P29)z|5ytz(;q=T*^}Lpa&D966gEj)87rMX zH+GB5sByGaZs@BgInMIv6M_4%XMZX9hruZe$sTjr?v^iCPqUG?km=cL_Sm{0`aRD% zxtD{=&$aRthQux$A3dROBRdptyb>4Rh*_H}16zQ|ezH2NK4@c9lZb~WT7q_4OFU@` zqod(GvGwNsU;ZaMaCAG)xH;7{TXTp}O*PP&oMz0n3QWCbRu|uWT=jCd@EXpyq-S6a zF(ov$>+wAa7LWu#s!VEGp`u;z&6OC8w!)RTZ-;O-x4J^$*^lfdtTYnPR8DnYj5%+A zzhC~Ek@)d=eu=uG+fPmh(H1G0S!N#$b>3%Q9PTCa8W*bqt7e+5bEIPg^*atq!hKar zfsz6IX{lm$3~5dNLfznUaKH>hlaKjSxHs&Yl8>JSC(h-1FX?pww=r{yp86qa*15fQ zWhUWpa@YY{at1+dZSM0NTc+>`e&sD+*~{*I)U;}CaHQb{4I^d?M8sF*I1^{;Wbkb! z-g{WDO$G_ItUvlplt|Pq;y06V>dTSQITcl@c<6iYl;oqOXH5g`!d}iZ7?6EYi89pOJZ{A1 zGD|v+J+zf5RmeY99e&JIr;dh2b`fltdM|jM^93P(rz=y5&qcz|?=WmUN>;oM-*ODu zLnAgW9vQ^}Dd@k}8Eq|PQV#+Vn z<$^fXUo!f9$(Kgm!N!5Kj^qqIZ!2m)spwXXJ}cI+aEjje0Hu&0i)c@4r=MXcChrnd zA1BfRZ|eAtBuLbF6hp_*VxXm!hPdrGb}Mlkd=kHs$(eXAQxqJ{8=1MG#_Cp31WMv7 z)j@Q^n{o(V)d3n-vrihCm-@P5GjTSuZklpuaCw^j+2#>J*%*20E$m}k*v+NHAp59j zgFSK2a7jZaLdxkHiGzgi!aSzjmk}a&w zV(Y>@A&m+H>azRCypl-yLoKrxqZbQ2IMF<59$V7vCbhXJr@i9J)|w9%eHu4;2?)ei z_XDs*dk1As*IfZc5S%i?Uwv(&Z?82^zun6Vm5>TJX@%!6e6+{+6$DYTQV2GuGhx~~ z${iFAc8-<0(0f6V^g@ALu6#r}piSwXLO!MPIF&Ts_=)B$i8m#Grm|`*JhP9ef1Gz& zts=CaC+eQYyLKE*)K;myHc`ndN}D~Co5bvHk|WNdD;y8NVMa|l0%(f-;hmF>?&H}o z_=~E+ENlKNO+u*pi#f~;9E+|z>X3w+LT5b@&>Kcur?s4YEoR`VV^{9KnPxP%%IRxC zq(>!7vr=g7-04Zn_W1eEJnwN@yZhz&hgIm&Nk-2Su5~VExRBxS@Ki=#9Ob!DU&Bb` z#hi2_9rJSynsCx%Jx-3cPQjVSKgb~S++lE-I&lBa~Zr_oh*r~(Kkwt&XbVTLk z(%471BYP8n)bnmF^*LE8nZO}dF%wh0wR;Uy%h;;JeG=4?bVXr89$EvvWqVcz zZNRkV}Obr|iewczzeE^ss=n6|HG0`@@d+6&E) z_bY7<#x=l?==q35@x0{C#6-0YIaVXSeH^}{Kg2ikLGXQ6qCc@(p>R?rjMIjiA|K&% zMv54l(H>46YBwrk3M~I+?8NMiTn-(2x5GMLPCMF7BVrjNvtJHV9jd)%su~M(*1rr3 z??p{zn;^Ctg(JS|uib3tLj#_Lk@E{0$$qp{FP^|O>dop3sVO9+wf_kXLQfuXK5^GG zbQw<(@ONNx=ji+FeW}AXU03&N5myUWFU@xz#EC?C)tCpLHj8`j5-fezL^d!`f(=&MR5)Q{0=GhKzslI literal 0 HcmV?d00001 diff --git a/assets/image/calendar.webp b/assets/image/calendar.webp new file mode 100644 index 0000000000000000000000000000000000000000..ad94078aa7dda95fec15a8702353a0b2844e63cd GIT binary patch literal 1644 zcmb`Fc~FyA5WrtTB7`$Q2EikSAcsak0)(>}PB9cU5~3i}3OPi?KnlU=gxaKXRZ$L2 zy)Y;WQBaYpAcRAtKtv8H15}7dD~Ak75rc$KuwQf-_`^>B>3*}jzqfDS?7r`9C}qnQ z)(QZ22l`QWQQgCJ0RWpJH3PsF0E)jq)f^5j0o+_;5zrPVo|hOJ zT!z>#W*IY{w2!Q)E09rXqF~)fSD$@Wk?_Y|ozYKs;DgYIo+~~yUPt7183*Wa7fGH^e1`z<5 zJ_SHGa9RmuRg1UQPC!C7u&cObAGzJ5UQe^shZFsyFBo9T}6Kdo$lqKpDvU6hm7;0EI3rSaUk0Hx=8W-`H*akfA<$Sso*xcD*{*J78cn=lBZ&ne zd*uhR6_pP-Z>RU3$#9blyOo=`e~+m=a;418Bi?1Kgvh(gm)`K=#!OLZC8LHr&qbhm z3szkWSN6TBADf`VJs(kf?uREJ4wzpAT0tvIAd zR;!&{BpD#Ylx*_3Gu$|ML3+4b?EE?#i3564HN(2#&y$_SGxo?QFJ)>p8<@_GWD&lC)B->sDP78lN7dERa zx4@zf_sAPy=mud5!4@mZRHaXHgy)R)b%;5p30MQuvhjN&p=zc$LuKQDsIg$h039OC zO{DYA=vVJB)QZ7KuW|-RjidRUfmM+ncM!B);T>(Lo$!D=Yu^(wYxm$R7POF#93v50 zTY#G?GD9OwEq#QUZr3dh>+bvF>nw$tg^aB^IzB$eu$=uI!Kw}GCQ2XJLvMWNf$ZkK zR!l3}E=#6W#Pc&N*2E9-#pBii%DtiiQgCz2q~79WF83WXN@bX`q56~9=yIZiVl*N} zce`xsc4@CBQytE>PoYF~ZimN6eiDr7F~Z?+vYcSzET?93=0Ty)t@0uhg1A}F<b9 zJUzN?CAazMUt`s`#|X%_Zr5#sE3y4HUB_aZ81E9w!xdJA;hQkzmAYwH@rOpHs#<1K z7V$7 zVMcvgqx6>ZrsVk>T=%~{&B=_p9}VKim2>N6=LN8vJ>S@#dZ!&KdPo|hWM6IGMyDIx zSS@O*%60Vx$qowoZrFKcRQ<~fvZiK};DJ$MR`3p5!W@S=6Y*M2Q)hKFiBuH&{C?(} zLvfNqv6ZR9&L9E3WuvSZez&%M=#PxDjjfKsmr6-vRI9Mk^9x0Xz2bJ z8Ey2_w=?qAEA6{dX2S4|T<-9|&w7Kk>yNM>J|fhP+nk_&thqmAYMIC1ETo)eWe3R5 h%1J$(bU=hK^z`$St#L{5o>FgXJ!35+oFiC(&7NAsaUP)1qyOTmh zWRwC(38p847`yH48j)}7`UQg4n^oi#03t&DggD!0R5Q{ zgy{@945m49N_7K$a0Okr*|Q02%rM_;0V6v@sA3D-83#5Nhg6P621e!pL11hg zn4}W9b<+8}^6&2bzOPttZs&`7m;aJGa;1+u+`gM^^hOvK2tc~ww(%Y@@XWR`5m;Y&yH4o+>y2Jjy(;H_o!r#4 z=gF4T`TL&UjEs|dZY}j`T5j_ujZ1gV%uWfE_}1GM{crahu0x*dR$t+-E}c7B%l!D{ z$GZ%#0ZHGvpMKkhJ>HnGrKqxSW)9cUWdSuyN`LI#^nano>UH`rgF^1ElDo1nqh#lc N%JxU^|7kEV007BI^Fjas literal 0 HcmV?d00001 diff --git a/assets/image/vip_logo.webp b/assets/image/vip_logo.webp new file mode 100644 index 0000000000000000000000000000000000000000..4ab37d45fc39becfb73c9983e25e7f023ae8d5cc GIT binary patch literal 848 zcmWIYbaV4yW?%?+bqWXzu!!JdU|=u+VsS9?baoDqU;=U(m?S_X3s5RIucRo*-AN%L zGD-m?1_O!7#RV`n7MhWP;oCI^Aj!aRSr>~uAtBC`)Z%2Iq7Oh^QUtV|fq^jv$QDV5 zuq#09BnZ0)#4ZX6at5kd0Ay>VBe9c^*ySY!B|tSNKIgA?khp~qQ(3^k zz~92aup2H^_~3|!GLha&VM;sS?X6@YqVfd0$} z!gPilhExUx22X}OhGYgkAj=4tNDLXwfGNg@laYZzU;F^8fd9c2xhkITy6w+2Zdm_z znc;sPCC@CAl!DeT;*)ic1YU5PG;6nQO`5p8LpTG2PJ+;CTk%^D3bQZUotvxy ze)J(j{?4q3HE+XT=-7*iai6{9%5L3y%&^pWwf?p*dLQRKS@wGS^{8`!H{bvMyk^h# wS<|Z3YisW1?yHbsUC^AE@NU*F$)xq`cE@)-abJ16ndACI-*pf7tB5cF0Lf#;+yDRo literal 0 HcmV?d00001 diff --git a/lib/home/welfare_page.dart b/lib/home/welfare_page.dart index 057cc4ce..8b3254a6 100644 --- a/lib/home/welfare_page.dart +++ b/lib/home/welfare_page.dart @@ -324,7 +324,7 @@ class _WelfarePage extends State { } Widget weekList(List cops){ - return Expanded(child: ListView.builder( + return Expanded(child:(cops != null && cops.length > 0)?ListView.builder( padding: EdgeInsets.zero, itemCount: cops.length, scrollDirection: Axis.vertical, @@ -337,7 +337,12 @@ class _WelfarePage extends State { child: weekCoupon(cops[position]), ); }, - )); + ):NoDataView( + src: "assets/image/ka.webp", + isShowBtn: false, + text: S.of(context).haimeiyouyouhuiquankeyilingqu, + fontSize: 16.sp, + ),); } Widget weekCoupon(Coupon cop) { diff --git a/lib/main.dart b/lib/main.dart index 62cf08e0..22f8a3ad 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -106,6 +106,7 @@ import 'mine/manage_address_page.dart'; import 'mine/mine_greenery.dart'; import 'mine/mine_shop_details.dart'; import 'mine/mine_shop_page.dart'; +import 'mine/mine_view/calendar_page.dart'; import 'mine/mine_view/community_follow.dart'; import 'mine/mine_vip/binding_assistant_card.dart'; import 'mine/mine_vip/legal_right_details.dart'; diff --git a/lib/mine/mine_greenery.dart b/lib/mine/mine_greenery.dart index 92df2c57..a088468f 100644 --- a/lib/mine/mine_greenery.dart +++ b/lib/mine/mine_greenery.dart @@ -437,9 +437,9 @@ class _MineGreenery extends State { }, child:ClipRRect( child:Image.asset( - "assets/image/icon_story_td.webp", + "assets/image/welfare_spread.webp", width:double.infinity, - fit: BoxFit.cover, + fit: BoxFit.fill, height:80.h, ), borderRadius: BorderRadius.circular(6), diff --git a/lib/mine/mine_page.dart b/lib/mine/mine_page.dart index d405448a..4ee6bcc9 100644 --- a/lib/mine/mine_page.dart +++ b/lib/mine/mine_page.dart @@ -17,6 +17,7 @@ import 'package:huixiang/utils/event_type.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/login_tips_dialog.dart'; +import 'package:huixiang/view_widget/mine_vip_entry.dart'; import 'package:huixiang/view_widget/mine_vip_view.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:shared_preferences/shared_preferences.dart'; @@ -193,88 +194,87 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin { child: SingleChildScrollView( child: Container( child: Stack( - alignment: Alignment.centerRight, + // alignment: Alignment.centerRight, children: [ + Container( + height: 317, + decoration: BoxDecoration( + color: Color(0xFF32A060) + ), + ), FutureBuilder( future: queryUserInfo(), builder: (context, snapshot) { return Column( children: [ - Container( - // decoration: BoxDecoration( - // gradient: LinearGradient( - // begin: Alignment.bottomLeft, - // end: Alignment.topRight, - // colors: [ - // Color(0xFFE5F7FF), - // Color(0xFFE8F5E9), - // ], - // stops: [0.1, 0.8], - // ), - // ), - decoration: BoxDecoration( - image: DecorationImage( - fit: BoxFit.fill, - image: AssetImage("assets/image/mine_bg.webp"), - ), - ), - height: 375, - child: Column( - children: [ - ///我的 用户信息 - MineView( - userInfo, - () { - _toUserInfo(); - }, - () { - toIntegralPage(); - }, - (){ - setState(() { - totalMsg =0; - }); - }, - totalMsg - ), - - ///我的 VIP等级信息 - MineVipView( - tag: "vip", - ranks: ranks, - userInfo: userInfo, - rank: double.tryParse( + Stack( + children: [ + Container( + child: Column( + children: [ + ///我的 用户信息 + MineView( + userInfo, + () { + _toUserInfo(); + }, + () { + toIntegralPage(); + }, + (){ + setState(() { + totalMsg =0; + }); + }, + totalMsg, + infoNumber + ), + + ///我的 VIP等级信息 + MineVipEntry( + tag: "vip", + ranks: ranks, + userInfo: userInfo, + rank: double.tryParse( userInfo?.expendAmount ?? "0") - .toInt(), - rankMax: + .toInt(), + rankMax: userInfo?.memberRankVo?.nextOrigin ?? 0, - createTime: userInfo?.createTime ?? "", + createTime: userInfo?.createTime ?? "", + ), + + ], ), + ), + Container( + margin: EdgeInsets.only(top: 255), + child: Column( + children: [ + ///我的订单 + MineOrderView(), + + ///推广图 + spreadImage(), - ], - ), - ), + ///我的 下面item + MineItem(), + + ///我的成就 + attainment(), + + ///绿色足迹 + MineCalendar() + ], + ), + ) + ], + ) // ///关注度/粉丝/发布 // attention(), // // /// 钱包或领券中心 // WalletCoupon(), - - ///我的订单 - MineOrderView(), - - ///推广图 - spreadImage(), - - ///我的 下面item - MineItem(), - - ///我的成就 - attainment(), - - ///绿色足迹 - MineCalendar() ], ); }, @@ -404,9 +404,9 @@ class MinePageState extends State with AutomaticKeepAliveClientMixin { }, child:ClipRRect( child:Image.asset( - "assets/image/icon_story_td.webp", + "assets/image/welfare_spread.webp", width:double.infinity, - fit: BoxFit.cover, + fit: BoxFit.fill, height:80.h, ), borderRadius: BorderRadius.circular(6.w), diff --git a/lib/mine/mine_view/calendar_page.dart b/lib/mine/mine_view/calendar_page.dart new file mode 100644 index 00000000..37ffc7f2 --- /dev/null +++ b/lib/mine/mine_view/calendar_page.dart @@ -0,0 +1,88 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:table_calendar/table_calendar.dart'; + +class CalendarPage extends StatefulWidget { + @override + State createState() { + return _CalendarPage(); + } +} + +class _CalendarPage extends State with TickerProviderStateMixin { + AnimationController _animationController; + CalendarController _calendarController; + + @override + void initState() { + super.initState(); + + _calendarController = CalendarController(); + + _animationController = AnimationController( + vsync: this, + duration: const Duration(milliseconds: 400), + ); + + _animationController.forward(); + } + + @override + void dispose() { + _animationController.dispose(); + _calendarController.dispose(); + super.dispose(); + } + + void _onDaySelected(DateTime day, List events, List holidays) { + print('CALLBACK: _onDaySelected'); + } + + void _onVisibleDaysChanged(DateTime first, DateTime last, CalendarFormat format) { + print('CALLBACK: _onVisibleDaysChanged'); + } + + void _onCalendarCreated(DateTime first, DateTime last, CalendarFormat format) { + print('CALLBACK: _onCalendarCreated'); + } + + @override + Widget build(BuildContext context) { + return Container( + child: Column( + mainAxisSize: MainAxisSize.max, + children: [ + _buildTableCalendar(), + ], + ), + ); + } + + Widget _buildTableCalendar() { + return TableCalendar( + calendarController: _calendarController, + startingDayOfWeek: StartingDayOfWeek.monday, + availableGestures: AvailableGestures.none, + headerStyle: HeaderStyle( + centerHeaderTitle: false, + leftChevronVisible: false, + rightChevronVisible: false, + formatButtonVisible: false, + ), + calendarStyle: CalendarStyle( + outsideDaysVisible: false, + selectedColor: Color(0xFF32A060), + weekendStyle: TextStyle().copyWith(color: Color(0xFF333333)), + todayColor: Color(0xFFD5EBDE), + ), + daysOfWeekStyle: DaysOfWeekStyle( + weekendStyle: TextStyle().copyWith(color: Color(0xFF4D4D4D)), + ), + onDaySelected: _onDaySelected, + onVisibleDaysChanged: _onVisibleDaysChanged, + onCalendarCreated: _onCalendarCreated, + ); + } + + +} diff --git a/lib/mine/mine_view/mine_calendar.dart b/lib/mine/mine_view/mine_calendar.dart index 383ad867..63a7b85d 100644 --- a/lib/mine/mine_view/mine_calendar.dart +++ b/lib/mine/mine_view/mine_calendar.dart @@ -1,11 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; -import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/utils/font_weight.dart'; -import 'package:huixiang/view_widget/login_tips_dialog.dart'; -import 'package:shared_preferences/shared_preferences.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; -import 'package:url_launcher/url_launcher.dart'; +import 'calendar_page.dart'; class MineCalendar extends StatefulWidget { @override @@ -18,10 +15,14 @@ class _MineCalendar extends State { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.fromLTRB(16.w, 10.h, 16.w, 28.h), - padding: EdgeInsets.only(top: 12.h,left: 12,right: 12), + margin: EdgeInsets.fromLTRB(14.w, 20.h, 14.w, 30.h), + padding: EdgeInsets.only(top: 12.h,left: 12,), decoration: BoxDecoration( - color: Colors.white, + // color: Colors.white, + image: DecorationImage( + fit: BoxFit.cover, + image: AssetImage("assets/image/s_bg.webp"), + ), borderRadius: BorderRadius.circular(8), boxShadow: [ BoxShadow( @@ -32,37 +33,55 @@ class _MineCalendar extends State { ) ], ), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, + child: Stack( + alignment: Alignment.bottomRight, children: [ - Row( + Column( + crossAxisAlignment: CrossAxisAlignment.start, children: [ - Expanded(child: Text( - "我的3月足迹日历", - style: TextStyle( - color: Color(0xFF0D0D0D), - fontWeight: MyFontWeight.semi_bold, - fontSize: 15.sp, + GestureDetector( + onTap: (){ + Navigator.of(context).pushNamed('/router/mine_greenery'); + }, + child: Row( + children: [ + Expanded(child: Text( + "我的5月足迹日历", + style: TextStyle( + color: Color(0xFF0D0D0D), + fontWeight: MyFontWeight.semi_bold, + fontSize: 15.sp, + ), + ),), + Text( + "查看绿叶", + style: TextStyle( + color: Color(0xFF000000), + fontWeight: MyFontWeight.regular, + fontSize: 15.sp, + ), + ), + Icon( + Icons.navigate_next, + size: 24, + color: Colors.black, + ), + SizedBox(width:12,), + ], ), - ),), - Text( - "查看绿叶", - style: TextStyle( - color: Color(0xFF000000), - fontWeight: MyFontWeight.regular, - fontSize: 15.sp, - ), - ), - Icon( - Icons.navigate_next, - size: 24, - color: Colors.black, ), + SizedBox(height: 12,), + CalendarPage(), ], ), - SizedBox(height: 12,) + Image.asset( + "assets/image/calendar.webp", + width:25, + height: 50, + fit: BoxFit.fill, + ), ], - ), + ) ); } } diff --git a/lib/mine/mine_view/mine_item.dart b/lib/mine/mine_view/mine_item.dart index 5766dfd4..176936fd 100644 --- a/lib/mine/mine_view/mine_item.dart +++ b/lib/mine/mine_view/mine_item.dart @@ -18,7 +18,7 @@ class _MineItem extends State { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.fromLTRB(16.w, 10.h, 16.w, 27.h), + margin: EdgeInsets.fromLTRB(16.w, 20.h, 16.w, 30.h), // padding: EdgeInsets.fromLTRB(20.w, 12.h, 20.w, 12.h), decoration: BoxDecoration( color: Colors.white, @@ -284,7 +284,16 @@ class _MineItem extends State { "assets/image/fan_kui.webp", ), ),), - Expanded(child:Container(),), + ///联系客服 + Expanded(child: InkWell( + onTap: () { + showCallMobile(); + }, + child: mineItem( + "联系客服", + "assets/image/icon_mine_online_service.webp", + ), + ),), Expanded(child:Container(),), Expanded(child:Container(),), ], diff --git a/lib/mine/mine_view/mine_order.dart b/lib/mine/mine_view/mine_order.dart index 81ac055d..487680b9 100644 --- a/lib/mine/mine_view/mine_order.dart +++ b/lib/mine/mine_view/mine_order.dart @@ -16,7 +16,7 @@ class _MineOrderView extends State { @override Widget build(BuildContext context) { return Container( - margin: EdgeInsets.only(left:16.w, bottom:20.h, right:16.w,), + margin: EdgeInsets.only(left:14, bottom:30, right:14), padding: EdgeInsets.fromLTRB(20.w, 12.h, 20.w, 12.h), decoration: BoxDecoration( color: Colors.white, diff --git a/lib/mine/mine_view/mine_view.dart b/lib/mine/mine_view/mine_view.dart index 0cf0bc05..380366ec 100644 --- a/lib/mine/mine_view/mine_view.dart +++ b/lib/mine/mine_view/mine_view.dart @@ -9,6 +9,7 @@ import 'package:flutter_svg/svg.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/msg_stats.dart'; +import 'package:huixiang/retrofit/data/social_info.dart'; import 'package:huixiang/retrofit/data/user_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/font_weight.dart'; @@ -28,8 +29,9 @@ class MineView extends StatefulWidget { final GestureTapCallback toIntegralPage; final Function messageZero; final int totalMsg; + final SocialInfo infoNumber; - MineView(this.userInfo, this.toUserInfo, this.toIntegralPage,this.messageZero,this.totalMsg); + MineView(this.userInfo, this.toUserInfo, this.toIntegralPage,this.messageZero,this.totalMsg,this.infoNumber); @override State createState() { @@ -65,7 +67,7 @@ class _MineView extends State { return Column( children: [ Container( - margin: EdgeInsets.only(top: 20.w), + margin: EdgeInsets.only(top: 28.w), alignment: Alignment.centerRight, child: Row( mainAxisAlignment: MainAxisAlignment.end, @@ -88,6 +90,7 @@ class _MineView extends State { "assets/image/icon_notices.webp", width:32.w, height: 32.h, + color: Colors.white, ), if(widget.totalMsg != 0) Container( @@ -130,6 +133,7 @@ class _MineView extends State { "assets/image/icon_scan_qr_code.webp", width:32.w, height: 32.h, + color: Colors.white, ), ), ), @@ -144,6 +148,7 @@ class _MineView extends State { "assets/image/icon_mine_setting.webp", width: 32.w, height: 32.h, + color: Colors.white, ), ), ), @@ -229,7 +234,7 @@ class _MineView extends State { print("---" + widget.userInfo.toString()); return Container( alignment: Alignment.center, - margin: EdgeInsets.symmetric(horizontal: 16.w), + margin: EdgeInsets.only(left: 16.w), child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, crossAxisAlignment: CrossAxisAlignment.start, @@ -243,8 +248,8 @@ class _MineView extends State { MImage( widget.userInfo == null ? "" : widget.userInfo.headimg, isCircle: true, - width: 50, - height: 50, + width: 58, + height: 58, fit: BoxFit.cover, errorSrc: "assets/image/default_user.webp", fadeSrc: "assets/image/default_user.webp", @@ -279,7 +284,7 @@ class _MineView extends State { style: TextStyle( fontSize: 16.sp, fontWeight: MyFontWeight.medium, - color: Color(0xFF353535), + color: Color(0xFFFFFFFF), ), ), onTap: widget.toUserInfo, @@ -299,7 +304,7 @@ class _MineView extends State { style: TextStyle( fontSize: 16.sp, fontWeight: FontWeight.bold, - color: Color(0xFF353535), + color: Color(0xFFFFFFFF), ), ), ), @@ -317,31 +322,31 @@ class _MineView extends State { style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, - color: Color(0xFF2F2F2F), + color: Color(0xFFFFFFFF), ), ) : Row( children: [ Text( - "${S.of(context).guanzhu} 0", + "${S.of(context).guanzhu} ${widget?.infoNumber?.follow.toString() ?? "0"}", style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, - color: Color(0xFF4D4D4D), + color: Color(0xFFFFFFFF), ), ), Container( width: 1.w, height: 12.h, margin: EdgeInsets.symmetric(horizontal: 3.w), - color: Color(0xFF4D4D4D), + color: Color(0xFFFFFFFF), ), Text( - "${S.of(context).fensi} 0", + "${S.of(context).fensi} ${widget?.infoNumber?.fans.toString() ?? "0"}", style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.regular, - color: Color(0xFF4D4D4D), + color: Color(0xFFFFFFFF), ), ), ], diff --git a/lib/store/shop__details_page.dart b/lib/store/shop__details_page.dart index c8c404ef..1470f505 100644 --- a/lib/store/shop__details_page.dart +++ b/lib/store/shop__details_page.dart @@ -5,13 +5,14 @@ import 'package:flutter_html/flutter_html.dart'; import 'package:flutter_smart_dialog/flutter_smart_dialog.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/activity.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/miNiDetail.dart'; import 'package:huixiang/retrofit/data/shoppingCart.dart'; import 'package:huixiang/retrofit/data/store_info.dart'; import 'package:huixiang/retrofit/min_api.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; -import 'package:huixiang/store/store_view/product_sku.dart'; +import 'package:huixiang/store/store_view/people_num.dart'; import 'package:huixiang/store/store_view/shop_car.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; @@ -50,13 +51,18 @@ class _ShopDetailsPage extends State { String cName; String cid; List selectSkus = []; + List activitys; int counts = 1; String selectedPrice = ""; + String storeId; + String parentId; + int numberOfPeople = 0; @override void initState() { super.initState(); id = widget.arguments["id"]; + storeId = widget.arguments["storeId"]; SharedPreferences.getInstance().then((value) { String minToken = value.getString("minToken"); String tenant = value.getString("tenant"); @@ -68,8 +74,13 @@ class _ShopDetailsPage extends State { storeId: storeId, showLoading: true); queryMiNiDetail(id); + queryShopCar().then((value) { + this.shopCarGoods = value; + setState(() {}); + }); }); - + queryStoreInfo(); + buildCount(); } ///商品详情 @@ -81,6 +92,9 @@ class _ShopDetailsPage extends State { if (baseData != null && baseData.isSuccess) { setState(() { miNiDetail = baseData.data; + miNiDetail.attrList.forEach((element) { + selectSkus.add(element.attrValueList[0].attrValue); + }); }); refreshController.refreshCompleted(); } else { @@ -92,6 +106,162 @@ class _ShopDetailsPage extends State { queryMiNiDetail(id); } + /// 查询店铺信息 + queryStoreInfo() async { + SharedPreferences value = await SharedPreferences.getInstance(); + if (apiService == null) + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + BaseData baseData = await apiService.queryStoreInfo(storeId).catchError((error) { + debugPrint(error); + }); + if (baseData != null && baseData.isSuccess) { + storeInfo = StoreInfo.fromJson(baseData.data); + activitys = storeInfo.informationVOPageVO.list + .map((e) => Activity.fromJson(e)) + .toList(); + if (mounted) { + setState(() {}); + } + } + EasyLoading.dismiss(); + } + + ///获取父订单(火锅订单加菜前调用) + getParentInfo() async { + BaseData baseData = await minService.getParentInfo("$tableId") + .catchError((error) {debugPrint(error);}); + if (baseData != null && baseData.isSuccess) { + if (baseData.data != null) { + parentId = baseData.data["id"]; + parentCode = baseData.data["parentCode"]; + } else { + ///TODO: 没有父订单, + queryStoreInfo1(); + } + } + } + + ///显示选择人数的弹窗 + showPeopleNum(String tableName) async { + var people = await showDialog( + context: context, + barrierDismissible: false, + builder: (context) { + return PeopleNumView(tableName); + }, + ); + + if (people != null && people > 0) { + setState(() { + this.numberOfPeople = people; + }); + } else { + Navigator.of(context).pop(); + } + } + + ///获取桌子信息 + queryStoreInfo1() async { + BaseData baseData = await minService.queryStoreInfo1({ + "getCoupon": true, + "storeId": storeId, + "tableId": tableId, + }).catchError((error) { + debugPrint(error); + }); + if (baseData != null && baseData.isSuccess) { + StoreInfo storeInfo = StoreInfo.fromJson(baseData.data); + if (storeInfo.storeTable != null) { + showPeopleNum(storeInfo.storeTable.tableName); + } + } + } + + ///计算个数 + int count() { + if (shopCarGoods == null || + shopCarGoods.shoppingCartSkuItemList == null || + shopCarGoods.shoppingCartSkuItemList.length == 0) return 0; + int count = 0; + shopCarGoods.shoppingCartSkuItemList.forEach((element) { + count += element.buyNum; + }); + return count; + } + + ///去下单结算页面 + toDownOrder() async { + int num = count(); + + if (parentId == null || parentId == "") { + if (num == 0) { + SmartDialog.showToast("请先选择您要购买的商品!~"); + return; + } + } + + await Navigator.of(context).pushNamed( + '/router/settlement', + arguments: { + "storeInfo": storeInfo, + "tableId": tableId, + "parentCode": parentCode, + "parentId": parentId, + // "pName": pName, + "pid": pid, + // "cName": cName, + "cid": cid, + "shoppingCart": shopCarGoods, + "numberOfPeople": numberOfPeople, + }, + ); + if (tableId > 0) { + getParentInfo(); + } + queryShopCar().then((value) { + this.shopCarGoods = value; + setState(() {}); + }); + } + + /// 购物车的key,用于刷新UI + GlobalKey shopCartKey = GlobalKey(); + + ///购物车弹窗 + showShoppingCart() { + queryShopCar().then((value) { + this.shopCarGoods = value; + dialogShowing = true; + SmartDialog.show( + widget: ShopCar( + shopCartKey, + this.shopCarGoods, + clearShopCar, + toDownOrder, + shopCartAdd, + shopCartReduce, + ), + onDismiss: () { + dialogShowing = false; + }, + alignmentTemp: Alignment.bottomCenter, + ); + }); + } + + ///清空购物车 + clearShopCar() async { + BaseData baseData = await minService.clearShoppingCart(); + if (baseData.isSuccess) { + shopCarGoods = null; + setState(() {}); + } + } + ///选规格 _queryMiNiDetail(String id, int count) async { EasyLoading.show(status: S.current.zhengzaijiazai); @@ -116,24 +286,9 @@ class _ShopDetailsPage extends State { if (miNiDetail.attrList != null && miNiDetail.attrList.length == 1 && miNiDetail.attrList[0].attrValueList.length == 1) { - _addShopCar(miNiDetail, [], count); + _addShopCar(miNiDetail, [], counts); } else { - EasyLoading.dismiss(); - dialogShowing = true; - SmartDialog.show( - widget: ProductSku( - miNiDetail, - shopCarGoods, - id, - _addShopCar, - add, - reduce, - ), - onDismiss: () { - dialogShowing = false; - }, - alignmentTemp: Alignment.bottomCenter, - ); + showSpanDialog(); } } @@ -166,7 +321,9 @@ class _ShopDetailsPage extends State { BaseData> baseDate = await minService.addShoppingCart({ "storeId": storeInfo.id, "storeName": storeInfo.storeName ?? "", - "parentId": miNiDetail.id, + "numberOfPeople": numberOfPeople, + "tableId": tableId, + "parentId": parentId, "parentCode": parentCode, "shoppingCartSkuItemList": [ { @@ -178,6 +335,7 @@ class _ShopDetailsPage extends State { "storeId": storeInfo.id, "skuPrice": productSku.skuPrice, "skuStock": productSku.skuStock, + "tableId": tableId, }, ], }); @@ -188,91 +346,18 @@ class _ShopDetailsPage extends State { setState(() {}); }); } - } - } - - /// 购物车的key,用于刷新UI - GlobalKey shopCartKey = GlobalKey(); - - ///购物车弹窗 - showShoppingCart() { - queryShopCar().then((value) { - this.shopCarGoods = value; - dialogShowing = true; - SmartDialog.show( - widget: ShopCar( - shopCartKey, - this.shopCarGoods, - clearShopCar, - toDownOrder, - shopCartAdd, - shopCartReduce, - ), - onDismiss: () { - dialogShowing = false; - }, - alignmentTemp: Alignment.bottomCenter, - ); - }); - } - - ///计算个数 - int count() { - if (shopCarGoods == null || - shopCarGoods.shoppingCartSkuItemList == null || - shopCarGoods.shoppingCartSkuItemList.length == 0) return 0; - int count = 0; - shopCarGoods.shoppingCartSkuItemList.forEach((element) { - count += element.buyNum; - }); - return count; - } - - ///去下单结算页面 - toDownOrder() async { - int num = count(); - - if (miNiDetail.id == null || miNiDetail.id == "") { - if (num == 0) { - SmartDialog.showToast("请先选择您要购买的商品!~"); - return; + else { + SmartDialog.showToast(baseDate?.msg, alignment: Alignment.center); } } - - await Navigator.of(context).pushNamed( - '/router/settlement', - arguments: { - "storeInfo": storeInfo, - "parentCode": parentCode, - "parentId": miNiDetail.id, - // "pName": pName, - // "pid": pid, - // "cName": cName, - // "cid": cid, - "shoppingCart": shopCarGoods, - }, - ); - queryShopCar().then((value) { - this.shopCarGoods = value; - setState(() {}); - }); - } - - ///清空购物车 - clearShopCar() async { - BaseData baseData = await minService.clearShoppingCart(); - if (baseData.isSuccess) { - shopCarGoods = null; - setState(() {}); - } } ///查询购物车 Future queryShopCar() async { - // pName = ""; //活动 - // pid = ""; //活动 - // cName = ""; //优惠券 - // cid = ""; //优惠券 + pName = ""; //活动 + pid = ""; //活动 + cName = ""; //优惠券 + cid = ""; //优惠券 BaseData> baseDate = await minService.getShoppingCart(tableId); if (baseDate != null && @@ -282,14 +367,14 @@ class _ShopDetailsPage extends State { if (baseDate.data[0].selectDiscount == 1) { baseDate.data[0].couponList.forEach((element) { if (element.isMaxCoupon) { - cName = element.promotionName; + // cName = element.promotionName; cid = element.id; } }); } else if (baseDate.data[0].selectDiscount == 2) { baseDate.data[0].promotionInfoList.forEach((element) { if (element.isMaxPromotion) { - pName = element.name; + // pName = element.name; pid = element.id; } }); @@ -528,12 +613,8 @@ class _ShopDetailsPage extends State { ), flex: 1, ), - // if(count() != 0) - Positioned( - bottom: 0, - left: 0, - right: 0, - child: Stack( + if(count() != 0) + Stack( alignment: Alignment.bottomLeft, children: [ Container( @@ -621,7 +702,6 @@ class _ShopDetailsPage extends State { ), ], ), - ), ], ), ), @@ -680,7 +760,7 @@ class _ShopDetailsPage extends State { )), GestureDetector( onTap: () { - showDeleteDialog(); + _queryMiNiDetail(id,counts); }, child: Container( width: 92.w, @@ -750,7 +830,7 @@ class _ShopDetailsPage extends State { Widget swiper() { return Container( child: AspectRatio( - aspectRatio: 1.3698, + aspectRatio: 375/375, child: Stack( children: [ Swiper( @@ -767,7 +847,7 @@ class _ShopDetailsPage extends State { itemBuilder: (context, position) { return MImage( miNiDetail?.imgs != null ? miNiDetail.imgs[position]:"", - fit: BoxFit.cover, + fit: BoxFit.fill, radius: BorderRadius.zero, errorSrc: "assets/image/default_2_1.webp", fadeSrc: "assets/image/default_2_1.webp", @@ -796,196 +876,218 @@ class _ShopDetailsPage extends State { } ///选择規格弹窗 - showDeleteDialog() { + showSpanDialog() { showDialog( context: context, builder: (context) { - return AlertDialog( - content: Container( - width: MediaQuery.of(context).size.width - 84, - height: 500.h, - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Row( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - ClipRRect( - child: MImage( - miNiDetail.imgs[0], - fit: BoxFit.cover, - width: 70, - height: 70, - errorSrc: "assets/image/default_2_1.webp", - fadeSrc: "assets/image/default_2_1.webp", + return StatefulBuilder(builder: ( + context, + state, + ) + { + return AlertDialog( + content: Container( + width: MediaQuery + .of(context) + .size + .width - 84, + height: 500.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + ClipRRect( + child: MImage( + miNiDetail.imgs[0], + fit: BoxFit.cover, + width: 70, + height: 70, + errorSrc: "assets/image/default_2_1.webp", + fadeSrc: "assets/image/default_2_1.webp", + ), + borderRadius: BorderRadius.circular(4), ), - borderRadius: BorderRadius.circular(4), - ), + SizedBox( + width: 10.w, + ), + Expanded( + child: Container( + height: 70, + child: Column( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment + .spaceBetween, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + miNiDetail?.productName ?? "", + style: TextStyle( + fontSize: 13.sp, + fontWeight: FontWeight.bold, + color: Color(0xFF000000), + ), + ), + GestureDetector( + onTap: () { + Navigator.of(context).pop(); + }, + child: Image.asset( + "assets/image/cancel.webp", + fit: BoxFit.cover, + height: 24, + width: 24, + ), + ), + ], + ), + Text( + "¥${miNiDetail?.price ?? ""}", + style: TextStyle( + fontSize: 12.sp, + fontWeight: FontWeight.bold, + color: Color(0xFFF65720), + ), + ), + ], + ), + )), + ], + ), + if (miNiDetail.attrList != null && + miNiDetail.attrList.length > 0) SizedBox( - width: 10.w, + height: 10, ), + if (miNiDetail.attrList != null && + miNiDetail.attrList.length > 0) Expanded( - child: Container( - height: 70, - child: Column( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, + child: ListView.builder( + itemCount: miNiDetail.attrList.length, + scrollDirection: Axis.vertical, + physics: BouncingScrollPhysics(), + padding: EdgeInsets.zero, + itemBuilder: (context, position) { + return attrItem( + (attrValue) { + state(() { + // if(selectSkus.length > position) + selectSkus[position] = attrValue; + buildCount(); + }); + }, + miNiDetail.attrList[position], + position, + ); + }, + ), + ), + SizedBox( + height: 24, + ), + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Text( + "数量", + style: TextStyle( + color: Color(0xFFB3B3B3), + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + ), + ), + SizedBox(height: 10,), + Row( children: [ - Row( - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - miNiDetail?.productName ?? "", - style: TextStyle( - fontSize: 13.sp, - fontWeight: FontWeight.bold, - color: Color(0xFF000000), - ), - ), - GestureDetector( - onTap: (){ - Navigator.of(context).pop(); - }, - child: Image.asset( - "assets/image/cancel.webp", - fit: BoxFit.cover, - height: 24, - width: 24, - ), - ), - ], + InkWell( + onTap: () { + state(() { + if (counts > 1) + setState(() { + counts -= 1; + }); + reduce(miNiDetail, selectSkus); + }); + }, + child: Icon( + Icons.remove, + color: Color(0xFF32A060), + size: 24, + ) + // Image.asset( + // "assets/image/reduce.webp", + // width: 22, + // height: 22, + // ), ), - Text( - "¥${miNiDetail?.price ?? ""}", - style: TextStyle( - fontSize: 12.sp, - fontWeight: FontWeight.bold, - color: Color(0xFFF65720), + Padding( + padding: EdgeInsets.only(left: 8, right: 8), + child: Text( + "$counts", + style: TextStyle( + color: Colors.black, + fontSize: 14.sp, + fontWeight: MyFontWeight.medium, + ), ), ), + InkWell( + onTap: () { + state(() { + counts += 1; + add(miNiDetail, selectSkus); + }); + }, + child: Icon( + Icons.add, + color: Color(0xFF32A060), + size: 24, + ) + ), ], + ) + ], + ), + SizedBox( + height: 24, + ), + GestureDetector( + onTap: () { + state(() { + _addShopCar(miNiDetail, selectSkus, counts); + Navigator.of(context).pop(); + }); + }, + child: Container( + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Color(0xFF32A060), ), - )), - ], - ), - // if (miNiDetail.attrList != null && miNiDetail.attrList.length > 0) - // SizedBox( - // height:10, - // ), - // if (miNiDetail.attrList != null && miNiDetail.attrList.length > 0) - // Expanded( - // child: ListView.builder( - // itemCount: miNiDetail.attrList.length, - // scrollDirection: Axis.vertical, - // physics: BouncingScrollPhysics(), - // padding: EdgeInsets.zero, - // itemBuilder: (context, position) { - // return attrItem( - // (attrValue) { - // setState(() { - // selectSkus[position] = attrValue; - // buildCount(); - // }); - // }, - // miNiDetail.attrList[position], - // position, - // ); - // }, - // ), - // ), - SizedBox( - height: 24, - ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Text( - "数量", - style: TextStyle( - color: Color(0xFFB3B3B3), - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - ), - ), - SizedBox(height: 10,), - Row( - children: [ - InkWell( - onTap: () { - if (counts > 1) - setState(() { - counts -= 1; - }); - reduce(miNiDetail, selectSkus); - }, - child: Icon( - Icons.remove, - color: Color(0xFF32A060), - size: 24, - ) - // Image.asset( - // "assets/image/reduce.webp", - // width: 22, - // height: 22, - // ), + padding: EdgeInsets.symmetric(vertical: 6), + child: Text( + "加入购物车", + style: TextStyle( + fontSize: 15.sp, + fontWeight: MyFontWeight.bold, + color: Color(0xFFFFFFFF), ), - Padding( - padding: EdgeInsets.only(left: 8, right: 8), - child: Text( - // "$count", - "0", - style: TextStyle( - color: Colors.black, - fontSize: 14.sp, - fontWeight: MyFontWeight.medium, - ), - ), - ), - InkWell( - onTap: () { - setState(() { - counts += 1; - }); - add(miNiDetail, selectSkus); - }, - child:Icon( - Icons.add, - color: Color(0xFF32A060), - size: 24, - ) - ), - ], - ) - ], - ), - SizedBox( - height: 24, - ), - Container( - width: double.infinity, - alignment: Alignment.center, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(20), - color: Color(0xFF32A060), - ), - padding: EdgeInsets.symmetric(vertical: 6), - child: Text( - "加入购物车", - style: TextStyle( - fontSize: 15.sp, - fontWeight: MyFontWeight.bold, - color: Color(0xFFFFFFFF), + ), ), - ), - ) - ], + ) + ], + ), ), - ), - ); + ); + }); }, ); } @@ -1026,7 +1128,7 @@ class _ShopDetailsPage extends State { }, child:sweetnessItem( tag.attrValue, - (tag.attrValue == selectSkus[position]) ?? false, + (selectSkus.length > position && tag.attrValue == selectSkus[position]), )); }).toList()); } diff --git a/lib/store/store_order.dart b/lib/store/store_order.dart index c7b85641..1ae3aa53 100644 --- a/lib/store/store_order.dart +++ b/lib/store/store_order.dart @@ -340,7 +340,7 @@ class _StoreOrderPage extends State ], ), ), - top:226.h, + top:233.h, bottom: 0, left: 0, right: 0, @@ -407,6 +407,12 @@ class _StoreOrderPage extends State minToken, tenant, _queryMiNiDetail, + (){ + queryShopCar().then((value) { + this.shopCarGoods = value; + setState(() {}); + }); + } ), ///星店活动, @@ -619,7 +625,7 @@ class _StoreOrderPage extends State Widget buildSwiper() { return Container( width: double.infinity, - height: 230.h, + height: 235.h, child: Swiper( pagination: SwiperPagination( alignment: Alignment.bottomCenter, diff --git a/lib/store/store_view/store_order_list.dart b/lib/store/store_view/store_order_list.dart index 965d5db3..cda12941 100644 --- a/lib/store/store_view/store_order_list.dart +++ b/lib/store/store_view/store_order_list.dart @@ -22,6 +22,8 @@ class StoreOrderListPage extends StatefulWidget { final String minToken; final String tenant; final Function(String id, int count) queryMiNiDetail; + final Function queryShoppingCart; + ShoppingCart shopCarGoods; @@ -34,6 +36,7 @@ class StoreOrderListPage extends StatefulWidget { this.minToken, this.tenant, this.queryMiNiDetail, + this.queryShoppingCart, ); @override @@ -126,11 +129,7 @@ class _StoreOrderListPage extends State { itemBuilder: (context, position) { return GestureDetector( onTap: () { - setState(() { - Navigator.of(context).pushNamed('/router/shop_details_page',arguments: { - "id":productListBeans[position].id, - }); - }); + goShopDetailsPage(position); }, child: goodsItem(position), ); @@ -142,6 +141,14 @@ class _StoreOrderListPage extends State { ); } + goShopDetailsPage(position) async{ + await Navigator.of(context).pushNamed('/router/shop_details_page',arguments: { + "id":productListBeans[position].id, + "storeId":productListBeans[position].storeId, + }); + widget. queryShoppingCart(); + } + Widget orderItem(FindMiNiGroupList findMiNiGroupList, int index) { int count = calculateItemCount(findMiNiGroupList); return Container( diff --git a/lib/union/union_page.dart b/lib/union/union_page.dart index ced3837b..0b3eda52 100644 --- a/lib/union/union_page.dart +++ b/lib/union/union_page.dart @@ -9,8 +9,6 @@ import 'package:flutter_baidu_mapapi_utils/flutter_baidu_mapapi_utils.dart'; import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/main.dart'; -import 'package:huixiang/mine/coupons_page.dart'; -import 'package:huixiang/mine/vip_card_page.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; import 'package:huixiang/retrofit/data/store.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; @@ -20,8 +18,6 @@ import 'package:huixiang/utils/location.dart'; import 'package:huixiang/view_widget/border_text.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:huixiang/view_widget/custom_image.dart'; -import 'package:huixiang/view_widget/icon_text.dart'; -import 'package:huixiang/view_widget/item_title.dart'; import 'package:huixiang/view_widget/my_appbar.dart'; import 'package:huixiang/view_widget/my_tab.dart'; import 'package:huixiang/view_widget/request_permission.dart'; diff --git a/lib/view_widget/mine_vip_entry.dart b/lib/view_widget/mine_vip_entry.dart new file mode 100644 index 00000000..bebbb23d --- /dev/null +++ b/lib/view_widget/mine_vip_entry.dart @@ -0,0 +1,193 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:huixiang/retrofit/data/rank.dart'; +import 'package:huixiang/retrofit/data/user_info.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/login_tips_dialog.dart'; +import 'package:shared_preferences/shared_preferences.dart'; + +class MineVipEntry extends StatelessWidget { + int vipLevel; + int curLevel; + final int rankMax; + final int rank; + final String createTime; + final String tag; + final double padding; + final UserInfo userInfo; + final List ranks; + + MineVipEntry( + {this.vipLevel = 1, + this.ranks, + this.tag, + this.userInfo, + this.padding = 16, + this.curLevel = 1, + this.rankMax = 0, + this.rank = 0, + this.createTime = ""}); + + String topLeft = ""; + String levelText = "普通用户"; + + @override + Widget build(BuildContext context) { + if (userInfo != null && + userInfo.memberRankVo != null && + ranks != null && + ranks.length > 0) { + curLevel = (ranks.indexWhere((element) => element.id == userInfo.memberRankVo.id) + 1); + vipLevel = curLevel; + } + + if (curLevel == vipLevel) { + topLeft = S.of(context).dangqiandengji; + } else if (vipLevel < curLevel) { + topLeft = S.of(context).shangyidengji; + } else { + topLeft = S.of(context).zanweikaitong; + } + switch (vipLevel) { + case 1: + { + levelText = "${S.of(context).yinkahuiyuan}"; + break; + } + case 2: + { + levelText = "${S.of(context).jinkahuiyuan}"; + break; + } + case 3: + { + levelText = "${S.of(context).gongchuanghuiyuan}"; + break; + } + } + + Widget widget = Container( + width: double.infinity, + padding: EdgeInsets.only(top: 12.h, bottom: 25.h, left: 12, right: 12), + // margin: EdgeInsets.symmetric(horizontal: 14), + margin: EdgeInsets.only(top: 15,left: 14,right: 14), + decoration: BoxDecoration( + color: Color(0xFF3D3D5D), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(6), + topRight: Radius.circular(6), + ), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 3), + blurRadius: 14, + spreadRadius: 0, + ) + ], + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + children: [ + Image.asset( + "assets/image/vip_logo.webp", + width: 24, + height: 24, + ), + SizedBox( + width: 4, + ), + Expanded( + child: Text( + levelText, + style: TextStyle( + fontSize: 16, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFFFFEAD2)), + )), + Container( + padding: EdgeInsets.fromLTRB(9.w, 4.h, 8.w, 4.h), + decoration: BoxDecoration( + color: Color(0xFFFFECD2), + borderRadius: BorderRadius.circular(10), + ), + child: Text( + S.of(context).chakanquanyi, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF92755D), + ), + ), + ) + ], + ), + SizedBox( + height: 14, + ), + Container( + height: 8.h, + child: ClipRRect( + borderRadius: BorderRadius.circular(6.5), + child: LinearProgressIndicator( + value: rankMax > (rank ?? 0) + ? ((vipLevel < curLevel) + ? rankMax / rankMax + : (rank ?? 0) / rankMax) + : 0, + backgroundColor: Color(0xFF222233), + color: Color(0xFFFFECD2), + ), + ), + ), + SizedBox( + height: 8, + ), + Text( + rank > rankMax + ? S.of(context).dangqiandengji + : "消费金额¥${rank.toStringAsFixed(2).toString()} 距${S.of(context).xiayidengji}还需¥${(rankMax - (rank ?? 0)).toStringAsFixed(2)}", + style: TextStyle( + color: Color(0xFFFFEAD2), + fontWeight: MyFontWeight.regular, + fontSize: 14.sp, + ), + ) + ], + )); + + return GestureDetector( + onTap: () { + if (userInfo != null) { + SharedPreferences.getInstance().then((value) { + if (value.getString("token") == null || + value.getString("token") == "") { + LoginTipsDialog().show(context); + return; + } + // Navigator.of(context) + // .pushNamed('/router/mine_vip_level_page', arguments: { + // "rankLevel": curLevel, + // "createTime": (userInfo != null) ? "${userInfo.createTime}" : "", + // "points": (userInfo != null) ? int.tryParse(userInfo.points) : 0, + // }); + Navigator.of(context) + .pushNamed('/router/mine_vip_core', arguments: { + "rankLevel": curLevel, + "userInfo": userInfo.masterCardRankName, + "createTime": (userInfo != null) ? "${userInfo.createTime}" : "", + "expendAmount": + double.tryParse(userInfo?.expendAmount ?? "0").toInt(), + }); + }); + } + }, + child: widget, + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 8b091912..6adae494 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -644,6 +644,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.3.2" + simple_gesture_detector: + dependency: transitive + description: + name: simple_gesture_detector + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.1.6" sky_engine: dependency: transitive description: flutter @@ -677,6 +684,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.0" + table_calendar: + dependency: "direct main" + description: + name: table_calendar + url: "https://pub.flutter-io.cn" + source: hosted + version: "2.3.3" term_glyph: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index fe5406cd..d91b5c92 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -91,6 +91,8 @@ dependencies: ai_decimal_accuracy: ^1.1.0 + table_calendar: ^2.3.3 +