From 57897247d49b5b11f13e09c03a693ef8c6e823af Mon Sep 17 00:00:00 2001 From: w-R <953969641@qq.com> Date: Sat, 7 May 2022 10:07:11 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A6=8F=E6=A0=BC=E6=9B=B4=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/image/2x/bill_gl.webp | Bin 1206 -> 972 bytes assets/image/2x/fa_bu.webp | Bin 0 -> 7944 bytes assets/image/2x/mine_evaluation.webp | Bin 0 -> 914 bytes assets/image/2x/shop_yue.webp | Bin 1404 -> 954 bytes assets/image/2x/shopping_bag.webp | Bin 0 -> 6980 bytes assets/image/3x/bill_gl.webp | Bin 1836 -> 1332 bytes assets/image/3x/fa_bu.webp | Bin 0 -> 15826 bytes assets/image/3x/mine_evaluation.webp | Bin 0 -> 1322 bytes assets/image/3x/shop_yue.webp | Bin 2232 -> 1838 bytes assets/image/3x/shopping_bag.webp | Bin 0 -> 12370 bytes assets/image/bill_gl.webp | Bin 816 -> 732 bytes assets/image/fa_bu.webp | Bin 0 -> 3578 bytes assets/image/mine_evaluation.webp | Bin 0 -> 732 bytes assets/image/shop_yue.webp | Bin 908 -> 551 bytes assets/image/shopping_bag.webp | Bin 0 -> 2890 bytes lib/community/community_child_page.dart | 91 +- lib/community/community_page.dart | 32 +- lib/home/home_view/shortcut_operation.dart | 1 + lib/main.dart | 5 +- lib/mine/coupon_page.dart | 353 +++++++ lib/mine/mine_view/mine_item.dart | 4 +- lib/mine/recharge_page.dart | 939 ++++++++++-------- lib/qr/invite_friends.dart | 106 +- lib/retrofit/min_api.dart | 2 +- lib/retrofit/min_api.g.dart | 2 +- lib/retrofit/retrofit_api.dart | 2 +- lib/settlement/settlement.dart | 3 +- lib/store/report_assess .dart | 3 - lib/store/shop__details_page.dart | 490 ++++++++- .../shopping/shopping_home/group_details.dart | 3 - lib/store/store_order.dart | 149 +-- lib/store/store_view/shop_car.dart | 67 +- lib/store/store_view/shop_goods.dart | 92 +- lib/store/store_view/store_info.dart | 54 +- lib/store/store_view/store_order_list.dart | 46 +- lib/union/union_page.dart | 114 ++- lib/view_widget/new_coupon_widget.dart | 348 +++++-- lib/view_widget/selector_store_dialog.dart | 319 ++++-- 38 files changed, 2283 insertions(+), 942 deletions(-) create mode 100644 assets/image/2x/fa_bu.webp create mode 100644 assets/image/2x/mine_evaluation.webp create mode 100644 assets/image/2x/shopping_bag.webp create mode 100644 assets/image/3x/fa_bu.webp create mode 100644 assets/image/3x/mine_evaluation.webp create mode 100644 assets/image/3x/shopping_bag.webp create mode 100644 assets/image/fa_bu.webp create mode 100644 assets/image/mine_evaluation.webp create mode 100644 assets/image/shopping_bag.webp create mode 100644 lib/mine/coupon_page.dart diff --git a/assets/image/2x/bill_gl.webp b/assets/image/2x/bill_gl.webp index 4e18de7724116770e176d4e770d26456938158ea..6a0a2383c915607a36bee75f9ad3139ab6542de5 100644 GIT binary patch delta 371 zcmV-(0gV2(3CsruQb|Te!~?MgJOWOI0RR9mJHQSQUl9?EBS~tTr12o{eu@B=ymx0G zRgOg7tmQlZ`8@biAtsO{Ns=N-I?T*5%;5ijU`=KBWG%xbqW=usHd55xWAgFc7n4B& zE`PxC_E}X`RaI40RaI40RaI5h+4k~;X6qqIk|arzBuSDaNs{DYtG{_orq|c4-l-4C z)Ah80>!;+QbK-XLv_ADbtUo2&eW0`CdiqJcPR{x~mDK$7+x{H0aMX7_9xZ&E9QED> zN8dN!ci{j2b@jKHrIVAzS;@-b!BT5zJbz1*vvHT)thSJy`{Zt;F?@PP!?awUzl^uc z<0dw5o7?B*e2JyO(;6Bnu}pQt*0^c=XlN;S-nZ_cg(K;tJNQOUNrlsvsc36$q?y^ RIU773HaO3)|0n)S1OP_F!#V%} delta 591 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 G0RIKT4W#q{ literal 0 HcmV?d00001 diff --git a/assets/image/2x/mine_evaluation.webp b/assets/image/2x/mine_evaluation.webp new file mode 100644 index 0000000000000000000000000000000000000000..b6969dd99c21456f592a06b639b894641774ef42 GIT binary patch literal 914 zcmWIYbaU%sW?%?+bqWXzu!!JdU|=u+Vrww+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=4tNDLXwfGNhun~{M*-}(Tbz;XdWE@@A%$^Uokc4lW$ zP|eqVJ^k`bsjt>qoF0=@EW2cQJKO&JPiNmCxcqLg%YVroxl2~OI`r|=vwbket$i`p?XX1?QJON_l>_?@5}P`m){SUfBV|#`N5}G?e^)tyM4XvUfj)n zxBjLJ`n^qkr?+>@^7BGV&er@2y;N_Kd+z-6O5=Sz!KHFyt)G7w`CKj5xLsT$Iqm8u z_S5$^y@~n3es$CD_nUtIQ@LlcZlCuKtG*|_nRAL`Yg=D?ocnn)T=}o0+o!80>vq@w z(7xkdaQ8*tkGzHa^?NgU63;!no%`>@=KOt!g!b_~+!WQ-!+-rXFcg0{|Gmq=008@t B->U!s literal 0 HcmV?d00001 diff --git a/assets/image/2x/shop_yue.webp b/assets/image/2x/shop_yue.webp index 3e4c8cafc1482f8af2c2f05e4a354acbee6828e7..e8830ccb31087f0beb0d7b64461e4981bf46d303 100644 GIT binary patch literal 954 zcmV;r14aCaP)Px&bV)=(RA@u(npvn#Q5eU6SEiy!Qb^)~!h;N%9w?s3kSW6plHpD9YJR1>84_L$ znKHx^#e*qB9#A}xgpx#2rqI9h?b@At_TFoqd(PhbxNFtzcJKQ3Uf=Kge`~F8t#%uo zthIGAUIOs{u6R&5C|rp^Phc4^1n5$-p!@;e0H=WOS-!cX^jzQ=&@by{1^0gfRsomO z{Kx_p>_upq)%-6oKMgt!SZVw=rtELv0`R0p1ZM#HQM+M3Nr7&(?HFJI(A5T%(u0%I zI}KRranxQS*h#>n1d8pz4(rqJohfP64BK(Qy%_Xrn}+S&NCVyq?6N1$0!wm+&~QG% zIRh*@!%)*aqNO8nldR=ChN(LE)fqB?3ikHNLBKNa?UGWz@({DdMw2 zmccfx(qWaZL_l?^>eHmAnp?GZS!@$`71xwL39Lu~J^?JZ{xaBh82B47($2@#+&X(c z2YOjY8EiWYES86Mo1ja9s0mg#BIB!~P_%7BfW;*BE&;EAVZgkYvcC+vTTJP^ZKJq1 z3^-{T3wEt_9tI-lTK3JdjgQq~U@0{am{^10KClV6ZGBULeFfOQw~Uh;9R`kGpbN7p zK!4yPa3|qXPlM)d>r@%KZcACGrIZ~jx2{qG_W@?wf~QDm@w*OuX+T&?1*|EcYHbbB zy$bFpaKtJ#O_O?CX@ExoSAn4!B(H(lz_U7uO93opA5_8K1#TJCG+=TJP|y=>LGdiGv~0A0|B@afqF_=rvL|q^G>n6#|sMQ9r3)!3kt^~9xogY0qcFL0N2{KfeIf4 z)@2ngX$tG0e$8H>!e3XhFFl~0wuuG-54UUN=m0XyE*9Fkn+B{8y`BOiV$i37caG3L zAE4=#zV?wDgMg*6)7A@MG@x(Gyntn_^Qx|3dN@KBZT7>ikfQUpH*f^4E0{>>qM?$; zm$JG-N`%#eSs#~1FIRd`2gU-uOGf+^cnsW3O5?b{uD~T@tlymgTz~9Z~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=4tNDLXwfGNhujG2K!-}(Tb!1*N#xy)++a^GikB;44R zd*h16a&LKUhnjQ_=Zc0iEe~5Ja86L4GnunpV3K@`3gZk(i3cA9I6OJ#2sH4x_Xw#v zFsz8ZUACvMFLU0NZPwdzZ*$$tirJog&CLDxue~=bCs!W7uk`EviCk&Vpz`x)GNU51 zeuI-H%yUH34wWCy)`emNU*83PK311!J4MBF5*)?U)SY?$>$K;rA0J;;+X~N`TVo_{ns;f{+s?>B%0e_7dC0{*t!Cq(+oNnG0T;Zo7EJ9e5)?(SFKw0g!(|1STp_CwSB_?;F% zmUljOSIhkK>(orosO9{BY+kay@7MXU@s{R~JF$6|k-Nq2yx*mKIO_3PefQUD?|r=u z_y0dV;n?x!mh*MLy?SpI;v z&oUa_Z#2-S84gDJngr=zP+0Jv~5vq!&YC-;(gzF>uuTYyLsD}`^~i~ zeRXAJ@ba@2mM5DRzf{l6DK^VwlHK?zKC9zkjEx`Ldz-sgHfP?7csc+3mFm#__uqg2 j{kLxY_19mk_Qq|$4K`-^<(DN^bI<)=f9Fg6>lkJLh34Zu diff --git a/assets/image/2x/shopping_bag.webp b/assets/image/2x/shopping_bag.webp new file mode 100644 index 0000000000000000000000000000000000000000..f24b661cf1c3dc22533cdb622dba03b1b04d5caf GIT binary patch literal 6980 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 M_5TNd?y@id0L*M?;{X5v literal 1836 zcmWIYbaPW-XJ80-bqWXzu!!JdU|=u+;z%&^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~92au$#jee7{- z-}PljU!VC4^WMPI57sW766B?cpZKkygd04XKVQ7)oaOU5#W;xYZyrC3?tiZ(fb93U z$L+1WzxeIy|Iv>&ZF{|I9X4bhTl>c0PR0HC+jDPk!-9U_-drwY$uqwylV9rVum0DE zKb#c*evp6l;ex;Xb-S?|x$d?6{EF)nnfE@OBz+5;nYXv?eR*oJc+s2x+ns+OO_XTE zhW7p1r_BE7ZT$`B7Q6qQi`yS=UjOEB)1BKgZT)|e`EO^J&$r-FxBGrNHF6p@RQLIC zHs806$)VUmY>DFWfAu{vG1p6Dv7yp00Wl@l%a>=)T80Jv`uKdkoq&AIcY%fawND)c ze;p0~zEF!lrb^=8@87i=5104Lw>{oopDA;^5F1**fB()2$^YwLU-7+c0!5$S$>wLH zS#~b$z~kx%?w@VWL(!if=TdB}U_7Ys{Iw15Z!qi2%x;q`xITc#`0k zy?fN_!~}!)?!Q>O>TTTjBh7*zpG*~(TW*u4{Aj&-{ER!lVq9vTUU+lqMX~0+ss64< z;`6KpmPbAn5v;d&{&+5Ap8lIOo_RaIILw)qd|zI0zuodrvENsBR6LD7%eXT&J$he# z9_ybMdVl8s{#IK3oF}L%-ephC^PAiiT?>D{S-qR{?EL$cZwzAW_E%NynKQYe{(0}0 zT=iT1H4l!h*2{ji%P#+Y_3in}kCLr9_rJMiJ+D?*Xi^WPrc_5aE2e9NL|3(NZKt6hK3+ihpx^Vp*Aapmp% Y>hu2`d^dYv)%CaG^MCw5TVKfl02o@PWdHyG diff --git a/assets/image/3x/fa_bu.webp b/assets/image/3x/fa_bu.webp new file mode 100644 index 0000000000000000000000000000000000000000..5bb2f9f6514a5047e9ac28b9c0ec34ec2fd588f1 GIT binary patch literal 15826 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 CkgW>< literal 0 HcmV?d00001 diff --git a/assets/image/3x/mine_evaluation.webp b/assets/image/3x/mine_evaluation.webp new file mode 100644 index 0000000000000000000000000000000000000000..115f028227b9394fba3cc3291f0780d19ad29168 GIT binary patch literal 1322 zcmWIYbaPW;Wnc(*bqWXzu!!JdU|=u+;z%&^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~92auf$2j((m_nXoJpYNf1aQq-))beCpRiT z%(RzPVdRbA&QLiP%n?7OXzIUn5vnaNoa&DkZPaj(de{>nq{-lLdt2_+tSino2OqXn z6qJhzegFA?f5_W{^P=aXL$``utY@2~vefcT*A15EKNw-&7zjEcEA{V>J*)77SAQyM zQ?pod6ThcVQt`x&{@jV3Ate?UKIx0|%InU5oc_M;|FgFBUCH*;pC3QITDN(<-M@^V z<<^s@e(UVd{@nj=*GJn~@xO1_ZMf9B>E5es{$Ce1$gkP@s!IGs;p}tY7oR_~{bZr| z@ybc78&{XtebhQxDek^??Uy|3Ul-zkykC81cHG{7b$hL9^Nm!5r@j0;|1Hm6dt1p# zoTp!%zsd6T{5$o8)oUcz-oVlS!e!*Wm$w_wZwddY_POg3DUMt7>f4jnR&%Alx zm2LKW7Tr3!ar%?btLsjzKJWQ$m&HA`pT#D(+YPF}sGq#8Hz9rgE!ERc+o$_pHbFs~ zf2?`>?nsQx)b~%@PfzUJ^%RPKi}3#e|q_Bz2Vw=cK+QG z@^U?yfq%CCykhV_)u;O2L7(?mpbuJvW>`zQ=9H9+U4CO1>2yt@rlbh?8CMPHx6@Yp;Lbj`B6! zi&$sf_2Nm&f(um%BJvAczrW2Y50=?;%Y1)vbXnT33ZD=E-aJ0O`Ma%cV}+6Z|0nma IIXg1|0AU=P3;+NC literal 0 HcmV?d00001 diff --git a/assets/image/3x/shop_yue.webp b/assets/image/3x/shop_yue.webp index 491ea6ca61d0de891e2e944ff3832f4405dde941..94c962fadae455aeb956ddb613ebf8a1d0fe7dc9 100644 GIT binary patch literal 1838 zcmV+}2hsS6P)Px*=t)FDRCr$Pokh$vMG%IcA9r_m39bQxyIXJw1PE{d4p`s-ga8K!b^s1QfIx5v z?rs5sYjAgW*StS9Ni)oT(=$8UyEA|F?c43?u70|v=Fb6OVFmWPzhtmc~P?VvT3 zJ%NjYF=>mpOw6w;R-=clO&VLPWpL1m)(Hpgp#Nw6-E>4Qh+S9=YfrYD4mTZcIx+&O zPGzHVVCid%>88U?hno&J9W@+VZaUm_xan}y;ijYXj5@T_soQ9`(QczN0xL&c$YymX z1)c+z4Dh`SEC>8v`h)+sf-Xs)%+(zQ8KO?e{g{qjfh!^*%?&&VEELp#3s@WYFtUwZ zfXj1rM?r>xgI0KyuKQy`qqYMs0A>h4eFN+RTo(aa3ZYN~g`kCH6l54U=-&VVytM?> z^cF(4WA1WS6LhtOSAAR3#^yF5ljZ7-f(!!(tuZTFM?c@k0YzNqiy$8eoX{hTOtB%y z0A~Y5uob1cs+o*l5mLjJAqi+{_L(w<~ z4*FAI_87vzcfh5MIOwbc z+0iY5^(_lvYT#oFYSbP%f0`=-suP~JifVIC;75zBzZbaK?EhGbpGt;Sgd0R!h>@=5 zpc73`=Rqqjdq!Z&V7sU7+|R(*fZ~)>l+J>l7TCfTO)Z#mPHBIxqCK}9Qd(@a(B1-k zKVaIO1iiYYZYa=Ohm&5OM(wY4h*6-tQXd{2AnZowkiaIx}O1u+5xF%6Fnd63}~4P*;*}p`Es{uYL=O$J-0M}!-BffY}xjv z%}6IeYvI$WE6jS56Y5p-k7xplih#;@vUtu>rK~ZXUYlGXI{{iQRppoqcvf_;xUVIR z_PWW@BB^A{^K*BS0<7bC>~&j=nQ1*}?UT>24ApRVp`*QSaLTUB^o(v{bX?Dho>4~c zAr0=cTMt_P4c!T@5`dCTR+4{}q9pjxW&Cr_(t6NEDbQLJtL_@KYtbT@mFN`W$XRGT=-LCw0cxt9UfgT9-%kKd zl*4<_n&O}%30t+=n&O}x^nVDr=}4py4%$JFzo@P98XqBR%GUd?qeKB6bRs|w+Cj%H z1|zE}zK@QZz^qnN6WLTdLt6}soIbj}xT6}+p0%3-)KojY1l=STdl&7rirq&q2;2|M z7f7HR4Y?)DoboYq(G;Mj+9{G*tmL-UjZaqI1J(uJE*oSlXa%iYVy}nH+EkQ~-r1?o z`-R;Upr+c%a}%dM?8ZjXQd!ZPhxNIFdB!ZUpcS2en8i1T5%_|AnI-*{zMpdpNt$@U ztD0}BolsQ0msN>QyIDwD_MJk~6ytpwpiAUNK&z1jfGaIGrL5fv;d|xV>QwgJdPHi1r@c0Q<#|?T=&^}q};|z8-O~XGd5Zvm2#{UH>JCE^Cz=Zf?VuA8NYssMw1ZAWAW=82(GEHhfkfT7 cMkfOO4?&g1dFf%2cVDa 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%0AkOxpF3`0$y`0O~X9Vea38ozf-h`-##;_jk z8$xuZjvl?Ml2Y3)?e70*>fv2;+*wl3*D4hh+#><+#01`0z-{uhwcQ>37qk2CWn7j? zwH*Qp%4s|o1Kz}~h)*qT-Y>873>vXGe^DamjP%F6($vbrZ;Ta;?f-DzCAZ!48$VR1 z?H8X77O`4S&}8Z6xHS&g@?^N8x10^lIEsJ;e~=YRsbWjx>=@4H(gM&=_q(S{eQh4r zt=kuOP`2i16;b3Fam2RK1|d1(3;UP6lyJ9jz%QKr_rcA zIkKB8xwRqEQFA`HhfXy(5%N?>Bs(r*sn{0}UxB8B9eXxm#q6}^!0^8}pKGwLWe9tYsd0uhR%ok1Y{4 zhmwRo0+q)miAj6-P%h=Rz@dGdr7{YMaoa-LvNZUNGRnJ%xSwv0y?b&C( z3ne#xRsw_GbQ>XBB|T3h9nCalkRFwLT$v8!ZQ68#)QNA-bW@())<(V@y|ZWa8G)HO zF2vfS3L?;5!Py5uAv28!Pufdxncn4|7wW>FkCH!3e7T3tv3wF}d${eZ-_!49o?4(x z-ChfwVuhKxeZF52e^?XtC2BCz>Rr3A{BkF7<5pHkZi!sQmQc3EV~SI<>X<*Wdi!_x qDEmE<@3WeDh3)#4T;S9Pam4K)EAtALo-C1LH71$^sj}A{=>G$>E3_s6 literal 0 HcmV?d00001 diff --git a/assets/image/bill_gl.webp b/assets/image/bill_gl.webp index 35826336fd7e820eb5144b792e36c808427eb520..b25f767341a4d6022bd618bca5f4c0f9d2cb9460 100644 GIT binary patch delta 171 zcmdnMc88TM$kWa33e!e58>afH3=9nVvJUJ5(**>xq&>4Xzn7O5tj=g=*b=hx{c&H< z{RO@ScRVI39W|1h`v0Du?0sA1U+WL#N~RBw9A9(Lo>DyKD|KHUMGXMayZ%C^E delta 255 zcmcb^x`B-?$kWYDgLxyH4O9Iq1_lOwSqF9jc|pOR+a5u4?!1ayR{hykVYcYy)c?`# zr#MTtotn$O&7ncUbCR;^!>{~V;%E2C{qJ>|+hwk>=s(w;ZGlEs&wjH2%|QkZX)sV$ z+}8mC+vWWB&aRj-<7(da+i%Nu-vv_ndc+jiW{F`Ioh zZ8MOneYR~%keBAtDVrn?EZh7e?~Oya6HxV@D?m+O&ujfNcyzGz^S#@vOFvIMTyg5Z n@|)j3W6ylNuO&7!{`_3=k`vFbpQ${qC9nUt*FJyUpZAOaaBq9| diff --git a/assets/image/fa_bu.webp b/assets/image/fa_bu.webp new file mode 100644 index 0000000000000000000000000000000000000000..f110297845b24a67f4fa821f1f2294595ed7588c GIT binary patch literal 3578 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 literal 0 HcmV?d00001 diff --git a/assets/image/mine_evaluation.webp b/assets/image/mine_evaluation.webp new file mode 100644 index 0000000000000000000000000000000000000000..35e276091a264af75539c84352a8e814811b0ab7 GIT binary patch literal 732 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 literal 0 HcmV?d00001 diff --git a/lib/community/community_child_page.dart b/lib/community/community_child_page.dart index 7eee6f2b..36f51ba6 100644 --- a/lib/community/community_child_page.dart +++ b/lib/community/community_child_page.dart @@ -18,8 +18,9 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; class CommunityChildPage extends StatefulWidget { final String typeStr; final Function onScroll; + final Function toRelease; - CommunityChildPage(Key key, this.typeStr,this.onScroll): super(key: key); + CommunityChildPage(Key key, this.typeStr,this.onScroll,this.toRelease): super(key: key); @override State createState() { @@ -130,43 +131,61 @@ class CommunityChildPageState extends State with AutomaticKe isLoadMore = true; setState(() {}); }, - child: (articles == null || articles.length == 0)? NoDataView( - src: "assets/image/guan_zhu.webp", - isShowBtn: false, - text: "目前暂无添加关注,可在推荐中关注自己喜欢的人哦~", - fontSize: 16.sp, - margin: EdgeInsets.only(top: 120.h,left: 60.w,right: 60.w), - ):ListView.builder( - controller: sc, - itemBuilder: (context, position) { - return InkWell( - child: CommunityDynamic( - articles[position], - 0, - userId: userId, - isList: true, - exitFull: () { - setState(() { - onRefresh(); - }); - }, - ), - onTap: () { - Navigator.of(context).pushNamed( - '/router/community_details', - arguments: { - "businessId": articles[position].id, - "userId": userId, + child: Stack( + alignment: Alignment.bottomRight, + children: [ + (articles == null || articles.length == 0)? NoDataView( + src: "assets/image/guan_zhu.webp", + isShowBtn: false, + text: "目前暂无添加关注,可在推荐中关注自己喜欢的人哦~", + fontSize: 16.sp, + margin: EdgeInsets.only(top: 120.h,left: 60.w,right: 60.w), + ):ListView.builder( + controller: sc, + itemBuilder: (context, position) { + return InkWell( + child: CommunityDynamic( + articles[position], + 0, + userId: userId, + isList: true, + exitFull: () { + setState(() { + onRefresh(); + }); + }, + ), + onTap: () { + Navigator.of(context).pushNamed( + '/router/community_details', + arguments: { + "businessId": articles[position].id, + "userId": userId, + }, + ).then((value) { + onRefresh(); + setState(() {}); + }); + setState(() {}); }, - ).then((value) { - onRefresh(); - setState(() {}); - }); - setState(() {}); + ); }, - ); - }, - itemCount: articles.length, + itemCount: articles.length, + ), + GestureDetector( + onTap: (){ + widget.toRelease(); + }, + child: Container( + margin: EdgeInsets.only(bottom:31,right: 14), + child: Image.asset( + "assets/image/fa_bu.webp", + width: 55, + height: 55, + ), + ), + ) + ], ), ); }, diff --git a/lib/community/community_page.dart b/lib/community/community_page.dart index 5427554b..f9d5ccde 100644 --- a/lib/community/community_page.dart +++ b/lib/community/community_page.dart @@ -104,20 +104,20 @@ class _CommunityPage extends State tabs: lables.map((e) => MyTab(text: e)).toList(), ), ), - onTap: () { - _toRelease(); - }, - action: GestureDetector( - behavior: HitTestBehavior.opaque, - child: Container(color: Colors.transparent, - padding: EdgeInsets.only(left: 20,right: 20), - child: SvgPicture.asset( - "assets/svg/shequ_fabu.svg", - fit: BoxFit.contain, - width: 24, - height: 24, - ),) - ) + // onTap: () { + // _toRelease(); + // }, + // action: GestureDetector( + // behavior: HitTestBehavior.opaque, + // child: Container(color: Colors.transparent, + // padding: EdgeInsets.only(left: 20,right: 20), + // child: SvgPicture.asset( + // "assets/svg/shequ_fabu.svg", + // fit: BoxFit.contain, + // width: 24, + // height: 24, + // ),) + // ) ), body: Container( padding: EdgeInsets.only(bottom: 76.h), @@ -133,12 +133,12 @@ class _CommunityPage extends State } else if(e == "分享健康"){ if (tuijian == null){ - tuijian = CommunityChildPage(tuijianKey,"分享健康",onChildScroll); + tuijian = CommunityChildPage(tuijianKey,"分享健康",onChildScroll,_toRelease); } return tuijian; }else if(e == "关注"){ if (guanzhu == null){ - guanzhu = CommunityChildPage(guanzhuKey,"关注",onChildScroll); + guanzhu = CommunityChildPage(guanzhuKey,"关注",onChildScroll,_toRelease); } return guanzhu; } diff --git a/lib/home/home_view/shortcut_operation.dart b/lib/home/home_view/shortcut_operation.dart index 6eaa53c0..7030beb5 100644 --- a/lib/home/home_view/shortcut_operation.dart +++ b/lib/home/home_view/shortcut_operation.dart @@ -152,6 +152,7 @@ class _ShortcutOperation extends State { Expanded(child: GestureDetector( onTap: (){ Navigator.of(context).pushNamed('/router/roll_center_page'); + // Navigator.of(context).pushNamed('/router/welfare_page'); }, child:Container( width: double.infinity, diff --git a/lib/main.dart b/lib/main.dart index 4c780bae..65ff0bf1 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -98,6 +98,7 @@ import 'home/welfare_page.dart'; import 'login/new_login_page.dart'; import 'main_page.dart'; import 'message/system_details.dart'; +import 'mine/coupon_page.dart'; import 'mine/edit_signature.dart'; import 'mine/invitation_record.dart'; import 'mine/manage_address_page.dart'; @@ -381,11 +382,13 @@ Map routers = { '/router/report_assess': (context, {arguments}) => ReportAssess(), '/router/shop_details_page': (context, {arguments}) => - ShopDetailsPage(arguments:arguments,), + ShopDetailsPage(arguments: arguments,), '/router/mine_greenery': (context, {arguments}) => MineGreenery(), '/router/mine_shop_page': (context, {arguments}) => MineShopPage(), '/router/mine_shop_details': (context, {arguments}) => MineShopDetails(arguments:arguments,), + '/router/coupon_page': (context, {arguments}) => + CouponPage(), }; diff --git a/lib/mine/coupon_page.dart b/lib/mine/coupon_page.dart new file mode 100644 index 00000000..fd05f4a3 --- /dev/null +++ b/lib/mine/coupon_page.dart @@ -0,0 +1,353 @@ +import 'dart:convert'; + +import 'package:dio/dio.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_html/flutter_html.dart'; +import 'package:huixiang/generated/l10n.dart'; +import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/coupon.dart'; +import 'package:huixiang/retrofit/data/page.dart'; +import 'package:huixiang/retrofit/retrofit_api.dart'; +import 'package:huixiang/utils/font_weight.dart'; +import 'package:huixiang/view_widget/classic_header.dart'; +import 'package:huixiang/view_widget/my_appbar.dart'; +import 'package:huixiang/view_widget/my_footer.dart'; +import 'package:huixiang/view_widget/new_coupon_widget.dart'; +import 'package:huixiang/view_widget/no_data_view.dart'; +import 'package:huixiang/view_widget/receive_success.dart'; +import 'package:huixiang/view_widget/selector_store_dialog.dart'; +import 'package:pull_to_refresh/pull_to_refresh.dart'; +import 'package:shared_preferences/shared_preferences.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; + +class CouponPage extends StatefulWidget { + @override + State createState() { + return _CouponPage(); + } +} + +class _CouponPage extends State { + ApiService apiService; + RefreshController _refreshController; + + @override + void dispose() { + super.dispose(); + _refreshController.dispose(); + } + + @override + void initState() { + super.initState(); + + SharedPreferences.getInstance().then((value) { + apiService = + ApiService(Dio(), context: context, token: value.getString('token')); + queryCard(); + }); + _refreshController = RefreshController(initialRefresh: false); + } + + List coupons = []; + int pageNum = 1; + int state = 1; + + _onRefresh() async { + pageNum = 1; + queryCard(); + } + + queryCard() async { + BaseData> baseData = await apiService.queryCard({ + "centre": true, + "pageNum": pageNum, + "pageSize": 10, + "searchKey": "", + "state": state + }).catchError((error) { + _refreshController.loadFailed(); + _refreshController.refreshFailed(); + }); + if (baseData != null && baseData.isSuccess) { + if (pageNum == 1) { + coupons.clear(); + } + coupons.addAll(baseData.data.list); + setState(() { + _refreshController.refreshCompleted(); + _refreshController.loadComplete(); + if (baseData.data.pageNum == baseData.data.pages) { + _refreshController.loadNoData(); + } else { + pageNum += 1; + } + }); + } else { + _refreshController.loadFailed(); + _refreshController.refreshFailed(); + } + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: MyAppBar( + title: S.of(context).youhuiquan, + titleColor: Colors.black, + background: Color(0xFFFFFFFF), + leadingColor: Colors.black, + ), + body: Column( + children: [ + Container( + height: 54.h, + padding: EdgeInsets.only(left: 14.w, right: 14.w, bottom: 12.h), + margin: EdgeInsets.only(bottom: 10), + color: Color(0xFFFFFFFF), + child: Row( + children: [ + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + state = 1; + _onRefresh(); + }); + }, + child: Container( + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: new BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6), + ), + border: Border.all( + color: Color(0xFF32A060), + width: 1, + ), + color: state == 1 ? Color(0xFF32A060) : Color(0xFFFFFFFF), + ), + child: Text( + S.of(context).keyongquan, + style: TextStyle( + fontWeight: MyFontWeight.medium, + fontSize: 15.sp, + color: state == 1 ? Color(0xFFFFFFFF) : Color(0xFF32A060), + ), + ), + ), + )), + Expanded( + child: GestureDetector( + onTap: () { + setState(() { + state = 3; + _onRefresh(); + }); + }, + child: Container( + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + borderRadius: new BorderRadius.only( + topRight: Radius.circular(6), + bottomRight: Radius.circular(6), + ), + border: Border.all( + color: Color(0xFF32A060), + width: 1, + ), + color: state == 3 ? Color(0xFF32A060) : Color(0xFFFFFFFF), + ), + child: Text( + S.of(context).shixiaoquan, + style: TextStyle( + fontWeight: MyFontWeight.medium, + fontSize: 15.sp, + color: state == 3 ? Color(0xFFFFFFFF) : Color(0xFF32A060), + ), + ), + ), + )) + ], + ), + ), + Expanded( + child: SmartRefresher( + controller: _refreshController, + enablePullDown: true, + enablePullUp: true, + physics: BouncingScrollPhysics(), + header: MyHeader(), + footer: CustomFooter( + builder: (context, mode) { + return MyFooter(mode); + }, + ), + onRefresh: _onRefresh, + onLoading: queryCard, + child: (coupons != null && coupons.length > 0) + ? ListView.builder( + itemBuilder: (context, position) { + return GestureDetector( + child: NewCouponWidget( + coupons[position], + (type) { + if (type == 1) { + receiveCoupon(coupons[position].id); + } else { + if (coupons[position].bizType == 5 || + coupons[position].bizType == 3) { + Navigator.of(context).pushNamed( + '/router/write_off_page', + arguments: { + "couponId": coupons[position].id, + "coupon": jsonEncode(coupons[position]), + }).then((value) { + _onRefresh(); + }); + } else { + showStoreSelector( + coupons[position].storeList); + } + } + }, + // (){ + // setState(() { + // couponDialog(); + // }); + // }, + () { + setState(() { + coupons[position].isEx = + !coupons[position].isEx; + }); + }, + type: 0, + ), + ); + }, + itemCount: coupons != null ? coupons.length : 0, + ) + : NoDataView( + src: "assets/image/ka.webp", + isShowBtn: false, + text: "目前暂无优惠券,请到领劵中心领取哦~", + fontSize: 16.sp, + margin: EdgeInsets.only(top: 120.h, left: 60, right: 60), + ), + ), + ), + ], + ), + ); + } + + receiveCoupon(couponId) async { + BaseData baseData = + await apiService.receiveCoupon(couponId).catchError((onError) {}); + if (baseData != null && baseData.isSuccess) { + _onRefresh(); + showAlertDialog(); + } + } + + ///选择店铺使用 + showStoreSelector(storeList) { + showModalBottomSheet( + context: context, + backgroundColor: Colors.transparent, + builder: (context) { + return SelectorStoreWidget(storeList); + }); + } + + couponDialog(){ + showCouponDialog(); + } + + showAlertDialog() { + //显示对话框 + showDialog( + context: context, + builder: (BuildContext context) { + return ReceiveSuccess(); + }, + ); + } + + ///优惠券详情弹窗 + showCouponDialog() { + showDialog( + context: context, + builder: (context) { + return AlertDialog( + content: Container( + width: MediaQuery.of(context).size.width - 14, + height: 330.h, + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded(child: + Container( + alignment: Alignment.center, + child: Text( + "使用详情", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF353535), + ), + ), + )), + GestureDetector( + onTap: (){ + setState(() { + Navigator.of(context).pop(); + }); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 18, + ), + ), + SizedBox(width: 14), + ], + ), + SizedBox(height: 12.h,), + Container( + width: double.infinity, + height: 1.h, + color: Color(0xFFF2F2F2), + margin: EdgeInsets.only(bottom:11.h), + ), + Container( + color: Colors.white, + child: Html( + data: "注意", + customImageRenders: { + networkSourceMatcher(): networkImageRender( + loadingWidget: () { + return Container(); + }, + ), + }, + ), + ), + ], + ), + ), + ); + }, + ); + } +} diff --git a/lib/mine/mine_view/mine_item.dart b/lib/mine/mine_view/mine_item.dart index 647ddc91..85df574b 100644 --- a/lib/mine/mine_view/mine_item.dart +++ b/lib/mine/mine_view/mine_item.dart @@ -141,7 +141,7 @@ class _MineItem extends State { LoginTipsDialog().show(context); return; } - Navigator.of(context).pushNamed('/router/mine_card'); + Navigator.of(context).pushNamed('/router/coupon_page'); }); }, child: mineItem( @@ -198,7 +198,7 @@ class _MineItem extends State { }, child: mineItem( "我的评价", - "assets/image/fan_kui.webp", + "assets/image/mine_evaluation.webp", ), ),), ], diff --git a/lib/mine/recharge_page.dart b/lib/mine/recharge_page.dart index e679fe11..a2ba048b 100644 --- a/lib/mine/recharge_page.dart +++ b/lib/mine/recharge_page.dart @@ -90,7 +90,7 @@ class _RechargePage extends State { queryUserBalance() async { BaseData baseData = - await apiService.queryInfo().catchError((onError) {}); + await apiService.queryInfo().catchError((onError) {}); if (baseData != null && baseData.isSuccess) { userInfo = baseData.data; mBalance = double.tryParse(userInfo?.money ?? "0"); @@ -120,7 +120,8 @@ class _RechargePage extends State { token: value.getString("token"), ); } - BaseData> baseData = await apiService.rechargeAct().catchError((onError) {}); + BaseData> baseData = + await apiService.rechargeAct().catchError((onError) {}); if (baseData != null && baseData.isSuccess) { setState(() { rechargeA = baseData.data; @@ -141,299 +142,313 @@ class _RechargePage extends State { ), body: Container( color: Color(0xFFFFFFFF), - child: Stack( - children: [ - Column(children: [ - SingleChildScrollView( - physics: BouncingScrollPhysics(), - child: Container( - margin: EdgeInsets.only(left: 16, right: 16), - child: Column( - children: [ - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.start, - children: [ - // ItemInputWidget( - // S.of(context).qingshuruchongzhijine, - // hintText: "", - // controller: controller, - // padding: EdgeInsets.all(20), - // errorText: S.of(context).chongzhizuixiaojine(100), - // titleColor: Color(0xFF727272), - // errorTextColor: Color(0xFF32A060), - // radius: 8, - // discount: discount / 10, - // style: TextStyle( - // fontWeight: FontWeight.bold, - // fontSize: 27.sp, - // color: color, - // ), - // inputLimit: 6, - // textInputType: TextInputType.number, - // textInputFormatter: - // FilteringTextInputFormatter.digitsOnly, - // onChanged: (value) { - // if (value != null && - // value != "" && - // double.tryParse(value) < 100) { - // color = Colors.red; - // } else { - // color = Colors.black; - // } - // setState(() {}); - // }, - // ), - SizedBox(height:20,), - Row( - children: [ - Expanded( - child: Text( - S.of(context).zhanghuyue, - style: TextStyle( - fontSize: 15.sp, - color: Color(0xFF181818), - fontWeight: MyFontWeight.semi_bold), - )), - Text.rich( - TextSpan(children: [ - TextSpan( - text: "$mBalance", - style: TextStyle( - fontSize: 26.sp, - color: Color(0xFF181818), - fontWeight: MyFontWeight.semi_bold), - ), - TextSpan( - text: "元", - style: TextStyle( - fontSize: 15.sp, - color: Color(0xFF181818), - fontWeight: MyFontWeight.semi_bold), - ), - ]), - ), - ], - ), - SizedBox(height: 28), - rechargeList(), - SizedBox(height:22), - // Row( - // crossAxisAlignment: CrossAxisAlignment.start, - // mainAxisAlignment: MainAxisAlignment.spaceAround, - // children: [ - // if (vipRuleDetails?.recharge != null && - // vipRuleDetails.recharge != "") - // Expanded( - // child: Container( - // color: Colors.white, - // child: Html( - // data: "注意:${vipRuleDetails?.recharge ?? ""}", - // customImageRenders: { - // networkSourceMatcher(): networkImageRender( - // loadingWidget: () { - // return Container(); - // }, - // ), - // }, - // ), - // ), - // ) - // ], - // ), - ], - ), - Container( - width: double.infinity, - margin: EdgeInsets.only( - top: 16.h, - bottom: 4.h, - ), - padding: EdgeInsets.only( - top: 20.h, - bottom: 20.h, - ), - // decoration: BoxDecoration( - // color: Colors.white, - // borderRadius: BorderRadius.circular(4), - // ), + child: SingleChildScrollView( + child: Container( + child: Stack( + children: [ + Column( + children: [ + SingleChildScrollView( + physics: BouncingScrollPhysics(), + child: Container( child: Column( - mainAxisAlignment: MainAxisAlignment.spaceAround, - crossAxisAlignment: CrossAxisAlignment.start, children: [ - Padding( - padding: EdgeInsets.only(bottom: 16.h), - child: Text( - S.of(context).zhifufangshi, - style: TextStyle( - fontSize: 16.sp, - color: Colors.black, - fontWeight: FontWeight.bold, - ), + Container( + margin: EdgeInsets.only(left: 16, right: 16), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + // ItemInputWidget( + // S.of(context).qingshuruchongzhijine, + // hintText: "", + // controller: controller, + // padding: EdgeInsets.all(20), + // errorText: S.of(context).chongzhizuixiaojine(100), + // titleColor: Color(0xFF727272), + // errorTextColor: Color(0xFF32A060), + // radius: 8, + // discount: discount / 10, + // style: TextStyle( + // fontWeight: FontWeight.bold, + // fontSize: 27.sp, + // color: color, + // ), + // inputLimit: 6, + // textInputType: TextInputType.number, + // textInputFormatter: + // FilteringTextInputFormatter.digitsOnly, + // onChanged: (value) { + // if (value != null && + // value != "" && + // double.tryParse(value) < 100) { + // color = Colors.red; + // } else { + // color = Colors.black; + // } + // setState(() {}); + // }, + // ), + SizedBox( + height: 20, + ), + Row( + children: [ + Expanded( + child: Text( + S.of(context).zhanghuyue, + style: TextStyle( + fontSize: 15.sp, + color: Color(0xFF181818), + fontWeight: + MyFontWeight.semi_bold), + )), + Text.rich( + TextSpan(children: [ + TextSpan( + text: "$mBalance", + style: TextStyle( + fontSize: 26.sp, + color: Color(0xFF181818), + fontWeight: + MyFontWeight.semi_bold), + ), + TextSpan( + text: "元", + style: TextStyle( + fontSize: 15.sp, + color: Color(0xFF181818), + fontWeight: + MyFontWeight.semi_bold), + ), + ]), + ), + ], + ), + SizedBox(height: 28), + rechargeList(), + // Row( + // crossAxisAlignment: CrossAxisAlignment.start, + // mainAxisAlignment: MainAxisAlignment.spaceAround, + // children: [ + // if (vipRuleDetails?.recharge != null && + // vipRuleDetails.recharge != "") + // Expanded( + // child: Container( + // color: Colors.white, + // child: Html( + // data: "注意:${vipRuleDetails?.recharge ?? ""}", + // customImageRenders: { + // networkSourceMatcher(): networkImageRender( + // loadingWidget: () { + // return Container(); + // }, + // ), + // }, + // ), + // ), + // ) + // ], + // ), + ], + )), + Container( + width: double.infinity, + margin: EdgeInsets.only( + bottom: 22.h, left: 16, right: 16), + padding: EdgeInsets.only( + top: 20.h, + bottom: 20.h, ), - ), - GestureDetector( - onTap: () { - setState(() { - checkIndex = 1; - }); - }, - child: Row( - mainAxisAlignment: MainAxisAlignment.start, + // decoration: BoxDecoration( + // color: Colors.white, + // borderRadius: BorderRadius.circular(4), + // ), + child: Column( + mainAxisAlignment: + MainAxisAlignment.spaceAround, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Image.asset("assets/image/icon_we_chat.webp"), - Expanded( - flex: 1, - child: Padding( - padding: EdgeInsets.only(left: 8.w), - child: Text( - S.of(context).weixinzhifu, - style: TextStyle( - fontSize: 14.sp, - color: Color(0xff353535), - ), + Padding( + padding: EdgeInsets.only(bottom: 16.h), + child: Text( + S.of(context).zhifufangshi, + style: TextStyle( + fontSize: 16.sp, + color: Colors.black, + fontWeight: FontWeight.bold, ), ), ), - checkView(1), + GestureDetector( + onTap: () { + setState(() { + checkIndex = 1; + }); + }, + child: Row( + mainAxisAlignment: + MainAxisAlignment.start, + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Image.asset( + "assets/image/icon_we_chat.webp"), + Expanded( + flex: 1, + child: Padding( + padding: EdgeInsets.only(left: 8.w), + child: Text( + S.of(context).weixinzhifu, + style: TextStyle( + fontSize: 14.sp, + color: Color(0xff353535), + ), + ), + ), + ), + checkView(1), + ], + ), + ), ], ), ), + Align( + alignment: Alignment.bottomCenter, + child: GestureDetector( + onTap: () { + recharge(); + }, + child: Container( + height: 56.h, + width: double.infinity, + alignment: Alignment.center, + decoration: BoxDecoration( + color: Color(0xFF32A060), + borderRadius: BorderRadius.circular(27), + ), + margin: EdgeInsets.only( + left: 16, right: 16, bottom: 21), + child: Text( + S.of(context).querenchongzhi, + style: TextStyle( + fontSize: 16.sp, + fontWeight: MyFontWeight.medium, + color: Colors.white, + ), + ), + ), + ), + + // Container( + // height: 56.h, + // color: Colors.white, + // child: Row( + // children: [ + // Expanded(child:Container( + // padding:EdgeInsets.only(top: 7.h,left:16), + // child:Column( + // crossAxisAlignment: CrossAxisAlignment.start, + // children: [ + // Row( + // children: [ + // Text( + // S.of(context).heji, + // style: TextStyle( + // fontSize: 14.sp, + // fontWeight: MyFontWeight.regular, + // color: Colors.black, + // ), + // ), + // Text( + // controller.text, + // style: TextStyle( + // fontSize: 16.sp, + // fontWeight: MyFontWeight.medium, + // color: Color(0xFF32A060), + // ), + // ), + // ], + // ), + // if(controller.text != "") + // Text.rich( + // TextSpan( + // children: [ + // TextSpan( + // text: "充值", + // style: TextStyle( + // fontSize:12.sp, + // fontWeight: MyFontWeight.regular, + // color: Color(0xFFADADAD), + // ), + // ), + // TextSpan( + // text:"¥${controller.text}", + // style: TextStyle( + // fontSize: 12.sp, + // fontWeight: MyFontWeight.regular, + // color:Color(0xff3541C9), + // ), + // ), + // TextSpan( + // text: "赠送", + // style: TextStyle( + // fontSize:12.sp, + // fontWeight: MyFontWeight.regular, + // color: Color(0xFFADADAD), + // ), + // ), + // TextSpan( + // text:"¥${((double.tryParse(controller.text)??0) - ((double.tryParse(controller.text)??0) * (discount/100))).toStringAsFixed(2)}", + // style: TextStyle( + // fontSize: 12.sp, + // fontWeight: MyFontWeight.regular, + // color: Color(0xff3541C9), + // ), + // ),TextSpan( + // text: "元", + // style: TextStyle( + // fontSize:12.sp, + // fontWeight: MyFontWeight.regular, + // color: Color(0xFFADADAD), + // ), + // ), + // ], + // ), + // ), + // ], + // )) + // ), + // GestureDetector( + // onTap: () { + // recharge(); + // }, + // child: RoundButton( + // width: 103.w, + // height: 54.h, + // text: S.of(context).chongzhi, + // textColor: Colors.white, + // fontWeight: MyFontWeight.regular, + // backgroup: Color(0xFF32A060), + // radius: 0, + // fontSize: 16.sp, + // padding: EdgeInsets.symmetric(vertical: 5.h), + // ), + // ), + // ], + // ), + // ) + ) ], ), ), - ], - ), - ), - ) - ],), - Align( - alignment: Alignment.bottomCenter, - child: GestureDetector( - onTap: (){ - recharge(); - }, - child: Container( - height: 56.h, - width: double.infinity, - alignment: Alignment.center, - decoration: BoxDecoration( - color: Color(0xFF32A060), - borderRadius: BorderRadius.circular(27), - ), - margin: EdgeInsets.only(left: 16,right: 16,bottom: 21), - child: Text( - S.of(context).querenchongzhi, - style: TextStyle( - fontSize: 16.sp, - fontWeight: MyFontWeight.medium, - color: Colors.white, - ), - ), + ) + ], ), - ), - - // Container( - // height: 56.h, - // color: Colors.white, - // child: Row( - // children: [ - // Expanded(child:Container( - // padding:EdgeInsets.only(top: 7.h,left:16), - // child:Column( - // crossAxisAlignment: CrossAxisAlignment.start, - // children: [ - // Row( - // children: [ - // Text( - // S.of(context).heji, - // style: TextStyle( - // fontSize: 14.sp, - // fontWeight: MyFontWeight.regular, - // color: Colors.black, - // ), - // ), - // Text( - // controller.text, - // style: TextStyle( - // fontSize: 16.sp, - // fontWeight: MyFontWeight.medium, - // color: Color(0xFF32A060), - // ), - // ), - // ], - // ), - // if(controller.text != "") - // Text.rich( - // TextSpan( - // children: [ - // TextSpan( - // text: "充值", - // style: TextStyle( - // fontSize:12.sp, - // fontWeight: MyFontWeight.regular, - // color: Color(0xFFADADAD), - // ), - // ), - // TextSpan( - // text:"¥${controller.text}", - // style: TextStyle( - // fontSize: 12.sp, - // fontWeight: MyFontWeight.regular, - // color:Color(0xff3541C9), - // ), - // ), - // TextSpan( - // text: "赠送", - // style: TextStyle( - // fontSize:12.sp, - // fontWeight: MyFontWeight.regular, - // color: Color(0xFFADADAD), - // ), - // ), - // TextSpan( - // text:"¥${((double.tryParse(controller.text)??0) - ((double.tryParse(controller.text)??0) * (discount/100))).toStringAsFixed(2)}", - // style: TextStyle( - // fontSize: 12.sp, - // fontWeight: MyFontWeight.regular, - // color: Color(0xff3541C9), - // ), - // ),TextSpan( - // text: "元", - // style: TextStyle( - // fontSize:12.sp, - // fontWeight: MyFontWeight.regular, - // color: Color(0xFFADADAD), - // ), - // ), - // ], - // ), - // ), - // ], - // )) - // ), - // GestureDetector( - // onTap: () { - // recharge(); - // }, - // child: RoundButton( - // width: 103.w, - // height: 54.h, - // text: S.of(context).chongzhi, - // textColor: Colors.white, - // fontWeight: MyFontWeight.regular, - // backgroup: Color(0xFF32A060), - // radius: 0, - // fontSize: 16.sp, - // padding: EdgeInsets.symmetric(vertical: 5.h), - // ), - // ), - // ], - // ), - // ) - ) - ], + ], + ), + ), ), ), ); @@ -447,127 +462,121 @@ class _RechargePage extends State { itemCount: rechargeA == null ? 0 : rechargeA.length, scrollDirection: Axis.vertical, shrinkWrap: true, - physics: NeverScrollableScrollPhysics(), - itemBuilder: (context, position) { - return GestureDetector( - onTap: () { - setState(() { - selectIndex = position; - }); - }, - child: newRechargeItem(rechargeA[position],position) - ); - }, - ); - GridView.builder( - itemCount: rechargeA == null ? 0 : rechargeA.length, - shrinkWrap: true, physics: BouncingScrollPhysics(), - gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - //一行的Widget数量 - crossAxisCount: 3, - //水平子Widget之间间距 - crossAxisSpacing:11, - //垂直子Widget之间间距 - mainAxisSpacing: 0, - childAspectRatio: 1.5, - ), - itemBuilder: (context, index) { + itemBuilder: (context, position) { return GestureDetector( - onTap: () { - setState(() { - selectIndex = index; - }); - }, - child: rechargeItem(rechargeA[index],index), - ); + onTap: () { + setState(() { + selectIndex = position; + }); + }, + child: rechargeItem(rechargeA[position], position)); }, ); } - Widget rechargeItem(RechargeList rechargeA,index) { - return Container( - child: Stack( - alignment: Alignment.bottomRight, - children: [ - Container( - alignment: Alignment.center, - height: 69.h, - decoration: BoxDecoration( - color: selectIndex == index ?Color(0x2432A060) : Color(0xFFFAFAFA), - borderRadius: BorderRadius.circular(4), - ), - // margin: EdgeInsets.only(right: 11,bottom: 16), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - Text( - "${AppUtils.calculateDouble(double.tryParse(rechargeA.rechargeMoney)??0)}元", - textAlign: TextAlign.center, - style: TextStyle( - color: Color(0xFF868686), - fontWeight: MyFontWeight.medium, - fontSize:18.sp, - ), - ), - SizedBox(height:2,), - Text( - "实际到账:${AppUtils.calculateDouble((double.tryParse(rechargeA.rechargeMoney)??0) + (double.tryParse(rechargeA.giftdMoney)??0) +((double.tryParse(rechargeA.rechargeMoney)??0) - ((double.tryParse(rechargeA.rechargeMoney)??0) * (discount/100))))}元", - textAlign: TextAlign.center, - style: TextStyle( - color: Color(0xFF868686), - fontWeight: MyFontWeight.regular, - fontSize:10.sp, - ), - ), - ], - ), - ), - if(selectIndex == index) - Image.asset( - "assets/image/recharge.webp", - width: 20, - height:20, - ), - ], - )); - } - - Widget newRechargeItem(RechargeList rechargeA,index) { + Widget rechargeItem(RechargeList rechargeA, index) { return Container( - width:double.infinity, + width: double.infinity, height: 69.h, decoration: BoxDecoration( - color: Color(0xFFFAFAFA), - borderRadius: BorderRadius.circular(4), - ), - child: Row( - + borderRadius: BorderRadius.circular(4), + border: Border.all( + color: selectIndex == index ? Color(0xFF32A060) :Color(0xFFFAFAFA), + width: selectIndex == index ? 1 :0, + ), + color: selectIndex == index ? Color(0XFFF0FAF4) :Color(0xFFFAFAFA)), + margin: EdgeInsets.only(bottom: 14.w), + padding: EdgeInsets.only(left: 16), + child: Flex( + direction: Axis.horizontal, children: [ - Text.rich( - TextSpan(children: [ - TextSpan( - text: "储值 ", - style: TextStyle( - fontSize: 12.sp, - color: Color(0xFF868686), - fontWeight: MyFontWeight.regular), + Expanded( + flex: 1, + child: Container( + child: Text.rich( + TextSpan(children: [ + TextSpan( + text: "储值 ", + style: TextStyle( + fontSize: 12.sp, + color:selectIndex == index ? Color(0xFF4D4D4D):Color(0xFF868686), + fontWeight: MyFontWeight.regular), + ), + TextSpan( + text: + "${AppUtils.calculateDouble(double.tryParse(rechargeA.rechargeMoney) ?? 0)}元", + style: TextStyle( + fontSize: 18.sp, + color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), + fontWeight: MyFontWeight.semi_bold), + ), + ]), + ), + )), + Container( + width: 1.w, + height: 37.h, + color: selectIndex == index ? Color(0xFF32A060):Color(0xFF979797), + margin: EdgeInsets.only(right: 16.w, left: 12), + ), + Expanded( + flex: 2, + child:Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text.rich( + TextSpan(children: [ + TextSpan( + text: "实际到账 ", + style: TextStyle( + fontSize: 12.sp, + color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), + fontWeight: MyFontWeight.regular), + ), + TextSpan( + text: + "${AppUtils.calculateDouble((double.tryParse(rechargeA.rechargeMoney) ?? 0) + (double.tryParse(rechargeA.giftdMoney) ?? 0) + ((double.tryParse(rechargeA.rechargeMoney) ?? 0) - ((double.tryParse(rechargeA.rechargeMoney) ?? 0) * (discount / 100))))}元", + style: TextStyle( + fontSize: 18.sp, + color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), + fontWeight: MyFontWeight.semi_bold), + ), + ]), ), - TextSpan( - text: "${AppUtils.calculateDouble(double.tryParse(rechargeA.rechargeMoney)??0)}元", - style: TextStyle( - fontSize: 15.sp, - color: Color(0xFF181818), - fontWeight: MyFontWeight.semi_bold), + SizedBox( + height: 4.h, ), - ]), - ), - Container( - width: 1.w, - height: 37.h, - color: Color(0xFF979797), - ) + GestureDetector( + onTap: (){ + setState(() { + if(selectIndex == index) + rechargeShowBottomSheet(); + }); + }, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "充值说明", + style: TextStyle( + color: selectIndex == index ?Color(0xFF4D4D4D) : Color(0xFF868686), + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + ), + ), + Icon( + Icons.chevron_right, + size: 20, + color: selectIndex == index ? Color(0xFF353535) : Color(0xFF868686), + ), + ], + ) + ), + ], + )) ], )); } @@ -586,6 +595,98 @@ class _RechargePage extends State { ); } + ///充值说明底部弹窗 + rechargeShowBottomSheet() { + showModalBottomSheet( + builder: (BuildContext context) { + return buildBottomSheetWidget(context); + }, + backgroundColor: Colors.transparent, + context: context); + } + + Widget buildBottomSheetWidget(BuildContext context) { + return Container( + padding: EdgeInsets.only(top: 12), + decoration: new BoxDecoration( + color: Colors.white, + borderRadius: new BorderRadius.only( + topLeft: const Radius.circular(25.0), + topRight: const Radius.circular(25.0))), + child: Container( + width: 299, + height:299, + child: Column( + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded(child: + Container( + margin: EdgeInsets.symmetric(vertical: 12.h), + alignment: Alignment.center, + child: Text( + "充值说明", + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF353535), + ), + ), + )), + GestureDetector( + onTap: (){ + setState(() { + Navigator.of(context).pop(); + }); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 18, + ), + ), + SizedBox(width: 14), + ], + ), + SizedBox(height: 12.h,), + Container( + width: double.infinity, + height: 1.h, + color: Color(0xFFF2F2F2), + margin: EdgeInsets.only(bottom:13.h), + ), + Padding(padding:EdgeInsets.only(left: 14), + child: + Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + if (vipRuleDetails?.recharge != null && + vipRuleDetails.recharge != "") + Expanded( + child: Container( + color: Colors.white, + child: Html( + data: "注意:${vipRuleDetails?.recharge ?? ""}", + customImageRenders: { + networkSourceMatcher(): networkImageRender( + loadingWidget: () { + return Container(); + }, + ), + }, + ), + ), + ) + ], + ),) + ], + ), + )); + } + recharge() async { // String money = controller.text; // if (money == null || money == "") { @@ -601,36 +702,38 @@ class _RechargePage extends State { // return; // } - if (Platform.isAndroid) { - if (!(await Min.isInitialize())) { - // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调, - // 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针, - // 故而在此初始化一下 - await Min.initialize(); - } + if (Platform.isAndroid) { + if (!(await Min.isInitialize())) { + // 小程序的微信支付和app的充值支付使用同一个WXPayEntryActivity回调, + // 然而充值时小程序未初始化会导致回调内部代码调用getPackage空指针, + // 故而在此初始化一下 + await Min.initialize(); } + } - BaseData baseData = await apiService.recharge( - {"amount": 0,"rechargeActId":rechargeA[selectIndex].id, "rechargeType": 2}).catchError((error) {}); - if (baseData != null && baseData.isSuccess) { - WxPay wxPay = WxPay.fromJson(baseData.data); - await registerWxApi( - appId: wxPay.appId, - doOnAndroid: true, - universalLink: "https://hx.lotus-wallet.com/app/", - ); - payWithWeChat( - appId: wxPay.appId, - partnerId: wxPay.partnerId, - prepayId: wxPay.prepayId, - packageValue: wxPay.packageValue, - nonceStr: wxPay.nonceStr, - timeStamp: int.tryParse(wxPay.timeStamp), - sign: wxPay.sign, - ); - } else { - SmartDialog.showToast(baseData.msg, alignment: Alignment.center); - } + BaseData baseData = await apiService.recharge({ + "amount": 0, + "rechargeActId": rechargeA[selectIndex].id, + "rechargeType": 2 + }).catchError((error) {}); + if (baseData != null && baseData.isSuccess) { + WxPay wxPay = WxPay.fromJson(baseData.data); + await registerWxApi( + appId: wxPay.appId, + doOnAndroid: true, + universalLink: "https://hx.lotus-wallet.com/app/", + ); + payWithWeChat( + appId: wxPay.appId, + partnerId: wxPay.partnerId, + prepayId: wxPay.prepayId, + packageValue: wxPay.packageValue, + nonceStr: wxPay.nonceStr, + timeStamp: int.tryParse(wxPay.timeStamp), + sign: wxPay.sign, + ); + } else { + SmartDialog.showToast(baseData.msg, alignment: Alignment.center); } - // } + } } diff --git a/lib/qr/invite_friends.dart b/lib/qr/invite_friends.dart index ad14e915..a609452c 100644 --- a/lib/qr/invite_friends.dart +++ b/lib/qr/invite_friends.dart @@ -3,15 +3,22 @@ import 'dart:convert'; import 'package:dio/dio.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/article.dart'; +import 'package:huixiang/retrofit/data/base_data.dart'; +import 'package:huixiang/retrofit/data/invitation_list.dart'; +import 'package:huixiang/retrofit/data/page.dart'; +import 'package:huixiang/retrofit/data/user_info.dart'; import 'package:huixiang/retrofit/retrofit_api.dart'; import 'package:huixiang/utils/flutter_utils.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:huixiang/view_widget/my_footer.dart'; +import 'package:huixiang/view_widget/no_data_view.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class InviteFriends extends StatefulWidget { @override @@ -24,11 +31,81 @@ class _InviteFriends extends State { ApiService apiService; final RefreshController refreshController = RefreshController(); final ScrollController scrollController = ScrollController(); - Article article; + List invitationList = []; + UserInfo userInfo; + int pageNum = 1; @override void initState() { super.initState(); + queryInviteMember(); + queryInviteMember(); + } + + ///邀请记录 + queryInviteMember() async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData> baseData = + await apiService.inviteMemberList({ + "searchKey": "", + "pageNum": 1, + "pageSize": 100, + }).catchError((error) { + refreshController.refreshFailed(); + }); + if (baseData != null && baseData.isSuccess) { + if (pageNum == 1) { + invitationList.clear(); + } + invitationList.addAll(baseData.data.list); + setState(() { + refreshController.refreshCompleted(); + }); + } else { + refreshController.refreshFailed(); + } + } + + ///查询用户信息 + queryUserInfo() async { + if (apiService == null) { + SharedPreferences value = await SharedPreferences.getInstance(); + apiService = ApiService( + Dio(), + context: context, + token: value.getString("token"), + ); + } + BaseData baseDate = + await apiService.queryInfo().catchError((onError) { + refreshController.refreshFailed(); + }); + if (baseDate != null && baseDate.isSuccess) { + setState(() { + userInfo = baseDate.data; + }); + SharedPreferences.getInstance().then( + (value) => { + value.setString('user', jsonEncode(baseDate.data)), + }, + ); + refreshController.refreshCompleted(); + } else { + refreshController.refreshFailed(); + } + EasyLoading.dismiss(); + } + + _onRefresh(){ + queryInviteMember(); + queryInviteMember(); } @override @@ -84,7 +161,9 @@ class _InviteFriends extends State { }, ), onRefresh: () { - setState(() {}); + setState(() { + _onRefresh(); + }); }, physics: BouncingScrollPhysics(), scrollController: scrollController, @@ -477,7 +556,7 @@ class _InviteFriends extends State { Expanded(child:Column( children: [ Text( - "12", + (userInfo?.todayInviteNumber ?? 0).toString(), style: TextStyle( fontWeight: MyFontWeight.semi_bold, fontSize: 25.sp, @@ -498,7 +577,7 @@ class _InviteFriends extends State { Expanded(child:Column( children: [ Text( - "100", + (userInfo?.inviteNumber ?? 0).toString(), style: TextStyle( fontWeight: MyFontWeight.semi_bold, fontSize: 25.sp, @@ -579,9 +658,16 @@ class _InviteFriends extends State { ), ],), SizedBox(height:12.h,), - ListView.builder( + (invitationList.length == null || invitationList.length == 0) + ? NoDataView( + src: "assets/image/ding_dan.webp", + isShowBtn: false, + text:"还没有邀请记录哦~", + fontSize: 16.sp, + margin: EdgeInsets.only(top: 120.h), + ):ListView.builder( padding: EdgeInsets.zero, - itemCount:6, + itemCount:invitationList.length, scrollDirection: Axis.vertical, shrinkWrap: true, physics: NeverScrollableScrollPhysics(), @@ -589,7 +675,7 @@ class _InviteFriends extends State { return GestureDetector( onTap: () { }, - child: mineInviteItem(), + child: mineInviteItem(invitationList[position]), ); }, ), @@ -598,7 +684,7 @@ class _InviteFriends extends State { ); } - Widget mineInviteItem(){ + Widget mineInviteItem(InvitationList invitationList){ return Container( child:Column( children: [ @@ -611,7 +697,7 @@ class _InviteFriends extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( - AppUtils.phoneEncode("15392949097"), + AppUtils.phoneEncode(invitationList?.phone ?? ""), style: TextStyle( color: Color(0xFF000000), fontSize: 12.sp, @@ -620,7 +706,7 @@ class _InviteFriends extends State { ), SizedBox(height:8), Text( - "注册时间:2021.09.08 12:12:12", + "注册时间:${invitationList?.createTime ?? ""}", style: TextStyle( color: Color(0xFF000000), fontSize: 12.sp, diff --git a/lib/retrofit/min_api.dart b/lib/retrofit/min_api.dart index 382924e6..6c6db000 100644 --- a/lib/retrofit/min_api.dart +++ b/lib/retrofit/min_api.dart @@ -39,7 +39,7 @@ part 'min_api.g.dart'; // const base_url = "http://192.168.10.37:8765/app/"; -const localBaseUrl = "https://pos.api.lotus-wallet.com/app/";///本地 +const localBaseUrl = "http://192.168.10.78:8765/app/";///本地 const serviceBaseUrl = "https://pos.api.lotus-wallet.com/app/";///线上 diff --git a/lib/retrofit/min_api.g.dart b/lib/retrofit/min_api.g.dart index 8109d5fa..a1f083ce 100644 --- a/lib/retrofit/min_api.g.dart +++ b/lib/retrofit/min_api.g.dart @@ -111,7 +111,7 @@ class _MinApiService implements MinApiService { Future>> getShoppingCart(tableId) async { ArgumentError.checkNotNull(tableId, 'tableId'); const _extra = {}; - final queryParameters = {r'tableId': tableId}; + final queryParameters = {'tableId': tableId}; final _data = {}; final _result = await _dio.request>('shoppingcart', queryParameters: queryParameters, diff --git a/lib/retrofit/retrofit_api.dart b/lib/retrofit/retrofit_api.dart index b4e1d68f..7a64513d 100644 --- a/lib/retrofit/retrofit_api.dart +++ b/lib/retrofit/retrofit_api.dart @@ -69,7 +69,7 @@ part 'retrofit_api.g.dart'; // const base_url = "http://192.168.10.132:8766/app/";///詹云久 -const localBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///本地 +const localBaseUrl = "http://192.168.10.78:8766/app/";///本地 const serviceBaseUrl = "https://pos.platform.lotus-wallet.com/app/";///线上 @RestApi(baseUrl: localBaseUrl) diff --git a/lib/settlement/settlement.dart b/lib/settlement/settlement.dart index ae4133e9..6ae6e0e5 100644 --- a/lib/settlement/settlement.dart +++ b/lib/settlement/settlement.dart @@ -177,7 +177,8 @@ class _Settlement extends State { "productSkuId":productSkuId, "actProductId": actProductId, "actProductSkuId": actProductSkuId, - "buyNum":buyNum + "buyNum":buyNum, + }).catchError((error) {}); if (baseData != null && baseData.isSuccess) { setState(() { diff --git a/lib/store/report_assess .dart b/lib/store/report_assess .dart index f837f99d..43afe3f3 100644 --- a/lib/store/report_assess .dart +++ b/lib/store/report_assess .dart @@ -186,7 +186,6 @@ class _ReportAssess extends State { ); } - ///评价列表 Widget goodsAssessList() { return Container( @@ -390,6 +389,4 @@ class _ReportAssess extends State { ); } - - } diff --git a/lib/store/shop__details_page.dart b/lib/store/shop__details_page.dart index de56384c..0c04c34b 100644 --- a/lib/store/shop__details_page.dart +++ b/lib/store/shop__details_page.dart @@ -1,12 +1,25 @@ - +import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_easyloading/flutter_easyloading.dart'; +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/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/shop_car.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; +import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/my_footer.dart'; import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:shared_preferences/shared_preferences.dart'; class ShopDetailsPage extends StatefulWidget { final Map arguments; @@ -21,16 +34,385 @@ class ShopDetailsPage extends StatefulWidget { class _ShopDetailsPage extends State { ApiService apiService; + MinApiService minService; final ScrollController scrollController = ScrollController(); final RefreshController refreshController = RefreshController(); + String id; + MiNiDetail miNiDetail; + ShoppingCart shopCarGoods; + bool dialogShowing = false; + StoreInfo storeInfo; + String parentCode = ""; @override void initState() { super.initState(); + id = widget.arguments["id"]; + SharedPreferences.getInstance().then((value) { + String minToken = value.getString("minToken"); + String tenant = value.getString("tenant"); + String storeId = value.getString("storeId"); + minService = MinApiService(Dio(), + context: context, + token: minToken, + tenant: tenant, + storeId: storeId, + showLoading: true); + queryMiNiDetail(id); + }); + } + ///商品详情 + queryMiNiDetail(id) async { + BaseData baseData = + await minService.miNiDetail(id).catchError((error) { + refreshController.refreshFailed(); + }); + if (baseData != null && baseData.isSuccess) { + setState(() { + miNiDetail = baseData.data; + }); + refreshController.refreshCompleted(); + } else { + refreshController.refreshFailed(); + } + } + _onRefresh() { + queryMiNiDetail(id); } + // ///选规格 + // _queryMiNiDetail(String id, int count) async { + // EasyLoading.show(status: S.current.zhengzaijiazai); + // if(count < 0){ + // shopCarGoods.shoppingCartSkuItemList.forEach((element) { + // if(element.productId == id){ + // shopCartReduce(element); + // setState(() { + // }); + // } + // }); + // return; + // } + // BaseData baseData = await minService.miNiDetail(id); + // if (baseData != null && baseData.isSuccess) { + // showStoreSelector(baseData.data, id, count); + // } + // } + // + // ///选规格弹窗 + // showStoreSelector(MiNiDetail miNiDetail, String id, int count) async { + // if (miNiDetail.attrList != null && + // miNiDetail.attrList.length == 1 && + // miNiDetail.attrList[0].attrValueList.length == 1) { + // _addShopCar(miNiDetail, [], count); + // } else { + // EasyLoading.dismiss(); + // dialogShowing = true; + // SmartDialog.show( + // widget: ProductSku( + // miNiDetail, + // shopCarGoods, + // id, + // _addShopCar, + // add, + // reduce, + // ), + // onDismiss: () { + // dialogShowing = false; + // }, + // alignmentTemp: Alignment.bottomCenter, + // ); + // } + // } + // + // ///添加购物车 + // Future _addShopCar(MiNiDetail miNiDetail, selectSkus, int count) async { + // ProductSkuVOListBean productSku; + // if (selectSkus != null && selectSkus.length == 0) { + // productSku = miNiDetail.productSkuVOList.first; + // } else { + // productSku = miNiDetail.productSkuVOList.firstWhere((element) { + // bool gg = true; + // selectSkus.forEach((element1) { + // if (element.skuNameStr.indexOf(element1) < 0) { + // gg = false; + // return gg; + // } + // }); + // return gg; + // }); + // } + // if (productSku == null) return; + // String skuId = productSku.id; + // String skuValue = selectSkus + // .toString() + // .replaceAll("[", "") + // .replaceAll("]", "") + // .replaceAll(",", ""); + // + // if (miNiDetail != null) { + // BaseData> baseDate = await minService.addShoppingCart({ + // "storeId": storeInfo.id, + // "storeName": storeInfo.storeName ?? "", + // "parentId": miNiDetail.id, + // "parentCode": parentCode, + // "shoppingCartSkuItemList": [ + // { + // "buyNum": count, + // "id": skuId, + // "productId": miNiDetail.id, + // "productName": miNiDetail.productName, + // "skuName": skuValue, + // "storeId": storeInfo.id, + // "skuPrice": productSku.skuPrice, + // "skuStock": productSku.skuStock, + // }, + // ], + // }); + // EasyLoading.dismiss(); + // if (baseDate != null && baseDate.isSuccess) { + // 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, + // ); + // }); + // } + // + // ///计算个数 + // 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; + // } + // } + // + // 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 = ""; //优惠券 + // BaseData> baseDate = + // await minService.getShoppingCart(tableId); + // if (baseDate != null && + // baseDate.isSuccess && + // baseDate.data != null && + // baseDate.data.length > 0) { + // if (baseDate.data[0].selectDiscount == 1) { + // baseDate.data[0].couponList.forEach((element) { + // if (element.isMaxCoupon) { + // 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; + // pid = element.id; + // } + // }); + // } + // return baseDate.data[0]; + // } else { + // return null; + // } + // } + // + // ///购物车➕1 + // Future shopCartAdd( + // ShoppingCartSkuItemListBean cartSkuItem) async { + // Map shopCarTemp = shopCarGoods.toJson(); + // cartSkuItem.buyNum += 1; + // shopCarTemp["shoppingCartSkuItemList"] = [cartSkuItem.toJson()]; + // BaseData> baseDate = + // await minService.shoppingCartSingle(shopCarTemp); + // if (baseDate.isSuccess) { + // this.shopCarGoods = await queryShopCar(); + // if (shopCartKey != null) { + // shopCartKey.currentState.setState(() {}); + // } + // setState(() {}); + // } + // return this.shopCarGoods; + // } + // + // ///购物车➖1 + // Future shopCartReduce( + // ShoppingCartSkuItemListBean cartSkuItem) async { + // Map shopCarTemp = shopCarGoods.toJson(); + // cartSkuItem.buyNum -= 1; + // shopCarTemp["shoppingCartSkuItemList"] = [cartSkuItem.toJson()]; + // BaseData> baseDate = + // await minService.shoppingCartSingle(shopCarTemp); + // if (baseDate.isSuccess) { + // EasyLoading.dismiss(); + // this.shopCarGoods = await queryShopCar(); + // if (shopCartKey?.currentState != null) { + // shopCartKey.currentState.setState(() {}); + // } + // setState(() { + // }); + // } + // return this.shopCarGoods; + // } + // + // ///商品➕1 + // add(MiNiDetail miNiDetail, selectSkus) async { + // ProductSkuVOListBean productSku = + // miNiDetail.productSkuVOList.firstWhere((element) { + // return skuY(element, selectSkus); + // }); + // + // if (productSku == null) return; + // String skuId = productSku.id; + // if (shopCarGoods == null) { + // await _addShopCar(miNiDetail, selectSkus, 2); + // return; + // } + // int shopSkuIndex = shopCarGoods.shoppingCartSkuItemList + // .indexWhere((element) => skuId == element.id); + // Map shopCarTemp = shopCarGoods.toJson(); + // shopCarGoods.tableId = "$tableId"; + // + // if (shopSkuIndex >= 0) { + // shopCarGoods.shoppingCartSkuItemList[shopSkuIndex].buyNum += 1; + // ShoppingCartSkuItemListBean cartSkuItem = shopCarGoods + // .shoppingCartSkuItemList + // .firstWhere((element) => skuId == element.id); + // shopCarTemp["shoppingCartSkuItemList"] = [cartSkuItem.toJson()]; + // } else { + // await _addShopCar(miNiDetail, selectSkus, 2); + // return; + // } + // + // BaseData> baseDate = + // await minService.shoppingCartSingle(shopCarTemp); + // if (baseDate.isSuccess) { + // queryShopCar().then((value) { + // this.shopCarGoods = value; + // setState(() {}); + // }); + // } + // } + // + // ///商品➖1 + // reduce(MiNiDetail miNiDetail, selectSkus) async { + // ProductSkuVOListBean productSku = + // miNiDetail.productSkuVOList.firstWhere((element) { + // return skuY(element, selectSkus); + // }); + // + // if (productSku == null) return; + // String skuId = productSku.id; + // if (shopCarGoods == null) { + // await _addShopCar(miNiDetail, selectSkus, 2); + // return; + // } + // ShoppingCartSkuItemListBean shopSkuItem = shopCarGoods + // .shoppingCartSkuItemList + // .firstWhere((element) => skuId == element.id); + // int shopSkuIndex = shopCarGoods.shoppingCartSkuItemList + // .indexWhere((element) => skuId == element.id); + // + // if (shopSkuItem != null) { + // if (shopSkuItem.buyNum > 1) { + // shopCarGoods.shoppingCartSkuItemList[shopSkuIndex].buyNum -= 1; + // } + // } else { + // await _addShopCar(miNiDetail, selectSkus, 2); + // return; + // } + // shopCarGoods.tableId = "$tableId"; + // + // Map shopCarTemp = shopCarGoods.toJson(); + // ShoppingCartSkuItemListBean cartSkuItem = shopCarGoods + // .shoppingCartSkuItemList + // .firstWhere((element) => skuId == element.id); + // shopCarTemp["shoppingCartSkuItemList"] = [cartSkuItem.toJson()]; + // + // BaseData> baseDate = + // await minService.shoppingCartSingle(shopCarTemp); + // if (baseDate.isSuccess) { + // queryShopCar().then((value) { + // this.shopCarGoods = value; + // setState(() {}); + // }); + // } + // } + + @override Widget build(BuildContext context) { return Scaffold( @@ -48,8 +430,9 @@ class _ShopDetailsPage extends State { return MyFooter(mode); }, ), - onRefresh:(){ + onRefresh: () { setState(() { + _onRefresh(); }); }, physics: BouncingScrollPhysics(), @@ -64,7 +447,8 @@ class _ShopDetailsPage extends State { buildProduct(), Container( width: double.infinity, - padding: EdgeInsets.only(top: 16.h,left: 14.w,right: 14.w,bottom: 16.h), + padding: EdgeInsets.only( + top: 16.h, left: 14.w, right: 14.w, bottom: 16.h), color: Colors.white, child: Column( mainAxisAlignment: MainAxisAlignment.start, @@ -73,17 +457,26 @@ class _ShopDetailsPage extends State { Text( "商品详情", style: TextStyle( - fontSize:15.sp, + fontSize: 15.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xFF000000), ), ), - SizedBox(height: 14.h,), - Image.asset( - "assets/image/icon_story_td.webp", - width: double.infinity, - fit: BoxFit.cover, - height:99.h, + SizedBox( + height: 14.h, + ), + Container( + color: Colors.white, + child: Html( + data: miNiDetail?.detail ?? "", + customImageRenders: { + networkSourceMatcher(): networkImageRender( + loadingWidget: () { + return Container(); + }, + ), + }, + ), ), ], ), @@ -120,7 +513,8 @@ class _ShopDetailsPage extends State { children: [ swiper(), Container( - padding: EdgeInsets.only(top: 16.h,left: 14.w,right: 14.w,bottom: 16.h), + padding: EdgeInsets.only( + top: 16.h, left: 14.w, right: 14.w, bottom: 16.h), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -130,26 +524,28 @@ class _ShopDetailsPage extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - "¥19.00", + miNiDetail?.price ?? "", style: TextStyle( - fontSize:24.sp, + fontSize: 24.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xFFF85400), ), ), - SizedBox(width: 2,), - Expanded(child: - Text( - "¥19.00", + SizedBox( + width: 2, + ), + Expanded( + child: Text( + miNiDetail?.applyPrice ?? "", style: TextStyle( - fontSize:16.sp, + fontSize: 16.sp, decoration: TextDecoration.lineThrough, fontWeight: MyFontWeight.regular, color: Color(0xFFA29E9E), ), )), GestureDetector( - onTap: (){ + onTap: () { showDeleteDialog(); }, child: Container( @@ -170,11 +566,13 @@ class _ShopDetailsPage extends State { width: 18, height: 18, ), - SizedBox(width: 2,), + SizedBox( + width: 2, + ), Text( "加入购物车", style: TextStyle( - fontSize:12.sp, + fontSize: 12.sp, fontWeight: MyFontWeight.regular, color: Color(0xFFFFFFFF), ), @@ -186,18 +584,22 @@ class _ShopDetailsPage extends State { ], ), Text( - "手工啵啵奶茶", + miNiDetail?.productName ?? "", style: TextStyle( - fontSize:15.sp, + fontSize: 15.sp, fontWeight: MyFontWeight.semi_bold, color: Color(0xFF000000), ), ), - SizedBox(height: 12.h,), + SizedBox( + height: 12.h, + ), Text( - "商品是为了出售而生产的劳动成果,是人类社会生产力发展到一定历史阶段的产物,是用于交换的劳动产品。", + miNiDetail?.shortName ?? "", + maxLines: 3, + overflow: TextOverflow.ellipsis, style: TextStyle( - fontSize:12.sp, + fontSize: 12.sp, height: 1.5, fontWeight: MyFontWeight.regular, color: Color(0xFF4D4D4D), @@ -229,14 +631,15 @@ class _ShopDetailsPage extends State { ), ), itemBuilder: (context, position) { - return Image.asset( - "assets/image/icon_story_td.webp", + return MImage( + miNiDetail?.imgs != null ? miNiDetail.imgs[position]:"", fit: BoxFit.cover, - width: 24, - height: 24, + radius: BorderRadius.zero, + errorSrc: "assets/image/default_2_1.webp", + fadeSrc: "assets/image/default_2_1.webp", ); }, - itemCount: 3, + itemCount: miNiDetail?.imgs?.length ?? 1, ), GestureDetector( onTap: () { @@ -266,7 +669,7 @@ class _ShopDetailsPage extends State { return AlertDialog( content: Container( width: MediaQuery.of(context).size.width - 84, - height:500.h, + height: 500.h, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -276,18 +679,23 @@ class _ShopDetailsPage extends State { crossAxisAlignment: CrossAxisAlignment.start, children: [ ClipRRect( - child: Image.asset( - "assets/image/icon_story_td.webp", - fit: BoxFit.fill, //填充剩余空间 - height: 70.h, + 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), ), - SizedBox(width: 10.w,), - Expanded(child:Container( + SizedBox( + width: 10.w, + ), + Expanded( + child: Container( height: 70, - child: Column( + child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -296,7 +704,7 @@ class _ShopDetailsPage extends State { crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( - "手工啵啵奶茶", + miNiDetail?.productName ?? "", style: TextStyle( fontSize: 13.sp, fontWeight: FontWeight.bold, @@ -312,7 +720,7 @@ class _ShopDetailsPage extends State { ], ), Text( - "¥19.00", + "¥${miNiDetail?.price ?? ""}", style: TextStyle( fontSize: 12.sp, fontWeight: FontWeight.bold, diff --git a/lib/store/shopping/shopping_home/group_details.dart b/lib/store/shopping/shopping_home/group_details.dart index b467cad4..1cf35346 100644 --- a/lib/store/shopping/shopping_home/group_details.dart +++ b/lib/store/shopping/shopping_home/group_details.dart @@ -6,10 +6,7 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_swiper/flutter_swiper.dart'; import 'package:huixiang/retrofit/data/activity_actRecord_details.dart'; -import 'package:huixiang/retrofit/data/activity_details.dart'; import 'package:huixiang/retrofit/data/base_data.dart'; -import 'package:huixiang/retrofit/data/launch_join_act.dart'; -import 'package:huixiang/retrofit/data/miNiDetail.dart'; import 'package:huixiang/retrofit/min_api.dart'; import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/classic_header.dart'; diff --git a/lib/store/store_order.dart b/lib/store/store_order.dart index b3fe6f5e..eff6be6a 100644 --- a/lib/store/store_order.dart +++ b/lib/store/store_order.dart @@ -80,7 +80,7 @@ class _StoreOrderPage extends State if (tabcontroller == null) tabcontroller = TabController( - length: 2, + length: 1, vsync: this, ); @@ -234,7 +234,7 @@ class _StoreOrderPage extends State sliver: SliverAppBar( expandedHeight: (storeInfo != null && storeInfo.couponVOList != null) - ? 495.h + ? 400.h : 395.h, floating: false, snap: false, @@ -270,7 +270,10 @@ class _StoreOrderPage extends State StretchMode.blurBackground, ], background: Container( - color: Colors.white, + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8.w), + ), child: Stack( children: [ Positioned( @@ -291,33 +294,52 @@ class _StoreOrderPage extends State right: 0, ), Positioned( - child: Container( + child: Container( decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(8.w), + ), child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ ///门店信息 StoreInfoView(storeInfo), - - ///门店对应优惠券 - if (storeInfo != null && - storeInfo.couponVOList != null) - UnionCoupon( - storeInfo, - _receiveCoupon, - coupon: true, - ), - - if (storeInfo == null || - storeInfo.couponVOList == null) - SizedBox( - height: 8, - ), - - ///门店对应VIP信息 - Vip(storeInfo, () {}, false), + // Padding(padding:EdgeInsets.only(left: 14.w), + // child: Text( + // S.of(context).diandan, + // style: TextStyle( + // fontWeight: MyFontWeight.bold, + // fontSize: 15.sp, + // color: Color(0xFF000000), + // ), + // ),), + // Container( + // width:22.w, + // height: 3.h, + // color: Color(0xFF32A060), + // margin: EdgeInsets.only(top: 5.h,left: 14.w), + // ), + // ///门店对应优惠券 + // if (storeInfo != null && + // storeInfo.couponVOList != null) + // UnionCoupon( + // storeInfo, + // _receiveCoupon, + // coupon: true, + // ), + // + // if (storeInfo == null || + // storeInfo.couponVOList == null) + // SizedBox( + // height: 8, + // ), + // + // ///门店对应VIP信息 + // Vip(storeInfo, () {}, false), ], ), ), - top:105.h, + top:225.h, bottom: 0, left: 0, right: 0, @@ -360,7 +382,7 @@ class _StoreOrderPage extends State labelColor: Colors.black, tabs: [ MyTab(text: S.of(context).diancan), - MyTab(text: S.of(context).xindianhuodong), + // MyTab(text: ""), ], ), ), @@ -369,7 +391,9 @@ class _StoreOrderPage extends State ), ]; }, - body: TabBarView( + body: + ///点餐 + TabBarView( physics: NeverScrollableScrollPhysics(), children: [ ///点餐 @@ -385,10 +409,10 @@ class _StoreOrderPage extends State ), ///星店活动, - StoreActivity( - widget.arguments, - activitys, - ), + // StoreActivity( + // widget.arguments, + // activitys, + // ), ], controller: tabcontroller, ), @@ -405,6 +429,7 @@ class _StoreOrderPage extends State child: ),*/ ), + if(count() != 0) Positioned( bottom: 0, left: 0, @@ -413,26 +438,36 @@ class _StoreOrderPage extends State alignment: Alignment.bottomLeft, children: [ Container( - height: 54.h, - color: Color(0xFFFAFAFA), + margin: EdgeInsets.symmetric(horizontal: 14), + height: 45.h, + // color: Color(0xFFFAFAFA), + decoration: BoxDecoration( + color: Color(0xFF383A38), + borderRadius: BorderRadius.circular(100), + ), child: Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + crossAxisAlignment: CrossAxisAlignment.center, children: [ - Spacer(), - Text( - S.of(context).heji, - style: TextStyle( - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - color: Colors.black, - ), - ), - Text( - "¥${shopCarGoods != null ? shopCarGoods.cartSum : "0.0"}", - style: TextStyle( - fontSize: 20.sp, - fontWeight: MyFontWeight.medium, - color: Color(0xFF32A060), - ), + SizedBox(width:45.w,), + Text.rich( + TextSpan(children: [ + TextSpan( + text: "¥ ", + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFFFFFFFF), + fontWeight: MyFontWeight.bold), + ), + TextSpan( + text: + shopCarGoods != null ? shopCarGoods.cartSum : "0.0", + style: TextStyle( + fontSize: 20.sp, + color: Color(0xFFFFFFFF), + fontWeight: MyFontWeight.semi_bold), + ), + ]), ), Spacer(), GestureDetector( @@ -444,9 +479,9 @@ class _StoreOrderPage extends State height: 54.h, text: S.current.jiesuan, textColor: Colors.white, - fontWeight: MyFontWeight.regular, + fontWeight: MyFontWeight.bold, backgroup: Color(0xFF32A060), - radius: 0, + radius: 100, fontSize: 16.sp, padding: EdgeInsets.symmetric(vertical: 5.h), ), @@ -458,25 +493,27 @@ class _StoreOrderPage extends State children: [ InkWell( onTap: () { + if(count() != 0) showShoppingCart(); }, child: Image.asset( - "assets/image/shopp.webp", - width: 88, - height: 88, + "assets/image/shopping_bag.webp", + width: 66, + height: 66, fit: BoxFit.fitWidth, ), ), + if(count() != 0) Positioned( - right: 15, - top: 14, + right: 5, + // top: 14, child: RoundButton( width: 17, height: 17, text: "${count()}", textColor: Colors.white, fontWeight: MyFontWeight.regular, - backgroup: Color(0xFF32A060), + backgroup: Color(0xFFF65720), fontSize: 12.sp, radius: 100, ), @@ -581,7 +618,7 @@ class _StoreOrderPage extends State Widget buildSwiper() { return Container( width: double.infinity, - height: 180.h, + height: 235.h, child: Swiper( pagination: SwiperPagination( alignment: Alignment.bottomCenter, diff --git a/lib/store/store_view/shop_car.dart b/lib/store/store_view/shop_car.dart index 565f783d..9f543ded 100644 --- a/lib/store/store_view/shop_car.dart +++ b/lib/store/store_view/shop_car.dart @@ -140,39 +140,34 @@ class _ShopCar extends State { alignment: Alignment.bottomLeft, children: [ Container( - height: 54.h, + height: 45.h, + margin: EdgeInsets.symmetric(horizontal: 14), decoration: BoxDecoration( - color: Color(0xFFFAFAFA), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(8), - offset: Offset(0, -1), - blurRadius: 3, - spreadRadius: 0, - ), - ], + color: Color(0xFF383A38), + borderRadius: BorderRadius.circular(100), ), child: Row( children: [ - Spacer(), - Text( - S.of(context).heji, - style: TextStyle( - fontSize: 12.sp, - fontWeight: MyFontWeight.regular, - color: Colors.black, - ), - ), - Text( - "¥" + - (widget.shopingCar == null + SizedBox(width:45.w,), + Text.rich( + TextSpan(children: [ + TextSpan( + text: "¥ ", + style: TextStyle( + fontSize: 12.sp, + color: Color(0xFFFFFFFF), + fontWeight: MyFontWeight.bold), + ), + TextSpan( + text:widget.shopingCar == null ? "0.0" - : widget.shopingCar.cartSum), - style: TextStyle( - fontSize: 20.sp, - fontWeight: MyFontWeight.medium, - color: Color(0xFF32A060), - ), + : widget.shopingCar.cartSum, + style: TextStyle( + fontSize: 20.sp, + color: Color(0xFFFFFFFF), + fontWeight: MyFontWeight.semi_bold), + ), + ]), ), Spacer(), GestureDetector( @@ -185,9 +180,9 @@ class _ShopCar extends State { height: 54.h, text: S.current.jiesuan, textColor: Colors.white, - fontWeight: MyFontWeight.regular, + fontWeight: MyFontWeight.bold, backgroup: Color(0xFF32A060), - radius: 0, + radius: 100, fontSize: 16.sp, padding: EdgeInsets.symmetric(vertical: 5.h), ), @@ -203,21 +198,21 @@ class _ShopCar extends State { SmartDialog.dismiss(); }, child: Image.asset( - "assets/image/shopp.webp", - width: 88, - height: 88, + "assets/image/shopping_bag.webp", + width: 66, + height: 66, ), ), Positioned( - right: 15, - top: 14, + right: 5, + // top: 14, child: RoundButton( width: 17, height: 17, text: "${count()}", textColor: Colors.white, fontWeight: MyFontWeight.regular, - backgroup: Color(0xFF32A060), + backgroup: Color(0xFFF65720), fontSize: 12.sp, radius: 100, // callback: () { diff --git a/lib/store/store_view/shop_goods.dart b/lib/store/store_view/shop_goods.dart index 682e941d..dda89982 100644 --- a/lib/store/store_view/shop_goods.dart +++ b/lib/store/store_view/shop_goods.dart @@ -43,7 +43,7 @@ class _ShopGoods extends State { bottom: 10.h, top: 10.h, ), - child: Row( + child:Row( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, @@ -53,11 +53,12 @@ class _ShopGoods extends State { widget.productListBean != null ? widget.productListBean.imgPath : (widget.shoppingCartSkuItemListBean != null - ? widget.shoppingCartSkuItemListBean.skuImg - : ""), + ? widget.shoppingCartSkuItemListBean.skuImg + : ""), width: 70, height: 70, fit: BoxFit.cover, + radius: BorderRadius.circular(4), errorSrc: "assets/image/default_1.webp", fadeSrc: "assets/image/default_1.webp", ), @@ -68,15 +69,35 @@ class _ShopGoods extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - widget.productListBean != null - ? widget.productListBean.productName - : widget.shoppingCartSkuItemListBean.productName, - style: TextStyle( - color: Colors.black, - fontSize: 13.sp, - fontWeight: MyFontWeight.medium, - ), + Row( + children: [ + Expanded( + child: Text( + widget.productListBean != null + ? widget.productListBean.productName + : widget.shoppingCartSkuItemListBean.productName, + style: TextStyle( + color: Colors.black, + fontSize: 13.sp, + fontWeight: MyFontWeight.medium, + ), + ), + ), + Image.asset( + "assets/image/green_leaf.webp", + fit: BoxFit.cover, + width: 12, + height: 12, + ), + Text( + "X300", + style: TextStyle( + color: Color(0xFF55BC51), + fontSize: 10.sp, + fontWeight: MyFontWeight.semi_bold, + ), + ), + ], ), SizedBox( height: 2, @@ -109,17 +130,6 @@ class _ShopGoods extends State { children: [ Row( children: [ - Text( - S.of(context).huiyuanjia, - style: TextStyle( - color: Color(0xFFFF7A1A), - fontSize: 10.sp, - fontWeight: MyFontWeight.medium, - ), - ), - SizedBox( - width: 4, - ), Text( "¥${widget.isShopCart ? widget.shoppingCartSkuItemListBean.skuPrice : widget.productListBean.price}", style: TextStyle( @@ -128,6 +138,24 @@ class _ShopGoods extends State { fontWeight: MyFontWeight.medium, ), ), + SizedBox(width: 2.w,), + Container( + width: 44.w, + height: 18.h, + decoration: BoxDecoration( + color: Color(0xFFFF4500), + borderRadius: BorderRadius.circular(2), + ), + alignment: Alignment.center, + child: Text( + "APP专享", + style: TextStyle( + color: Color(0xFFFFFFFF), + fontSize: 10.sp, + fontWeight: MyFontWeight.medium, + ), + ), + ), ], ), Spacer(), @@ -147,10 +175,10 @@ class _ShopGoods extends State { padding: EdgeInsets.symmetric(vertical: 5.h), callback: () { widget.queryMiNiDetail( - widget.productListBean != null - ? widget.productListBean.id - : widget.shoppingCartSkuItemListBean - .productId,0 + widget.productListBean != null + ? widget.productListBean.id + : widget.shoppingCartSkuItemListBean + .productId,0 ); }, ), @@ -210,6 +238,16 @@ class _ShopGoods extends State { ), ], ), + SizedBox(height: 4.h,), + Text( + "¥191.00", + style: TextStyle( + color: Color(0xFFA29E9E), + fontSize: 12.sp, + decoration: TextDecoration.lineThrough, + fontWeight: MyFontWeight.regular, + ), + ), ], ), ), diff --git a/lib/store/store_view/store_info.dart b/lib/store/store_view/store_info.dart index fc56e83c..a3b7b183 100644 --- a/lib/store/store_view/store_info.dart +++ b/lib/store/store_view/store_info.dart @@ -25,24 +25,24 @@ class _StoreInfoView extends State { Widget build(BuildContext context) { return Container( margin: EdgeInsets.only( - left: 16.w, - right: 16.w, + // left: 16.w, + // right: 16.w, top: 5.h, bottom: 6.h, ), - height: 162.h, + height: 154.h, padding: EdgeInsets.all(12.w), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.circular(8.w), - boxShadow: [ - BoxShadow( - color: Colors.black.withAlpha(25), - offset: Offset(0, 3), - blurRadius: 3, - spreadRadius: 0, - ), - ], + // boxShadow: [ + // BoxShadow( + // color: Colors.black.withAlpha(25), + // offset: Offset(0, 3), + // blurRadius: 3, + // spreadRadius: 0, + // ), + // ], ), child: Column( mainAxisAlignment: MainAxisAlignment.spaceBetween, @@ -91,11 +91,13 @@ class _StoreInfoView extends State { : "")), ), Text( - widget.storeInfo != null - ? widget.storeInfo.address - : "", - maxLines: 2, - textAlign: TextAlign.justify, + S.of(context).yingyeshijian(widget.storeInfo == null + ? "" + : (widget.storeInfo.openStartTime == null && + widget.storeInfo.openEndTime == null) + ? S.of(context).quantian + : "${widget.storeInfo.openStartTime.substring(0, widget.storeInfo.openStartTime.lastIndexOf(":"))} " + "- ${widget.storeInfo.openEndTime.substring(0, widget.storeInfo.openEndTime.lastIndexOf(":"))}"), style: TextStyle( color: Color(0xFF353535), fontWeight: MyFontWeight.regular, @@ -126,14 +128,12 @@ class _StoreInfoView extends State { crossAxisAlignment: CrossAxisAlignment.end, children: [ Expanded( - child: Text( - S.of(context).yingyeshijian(widget.storeInfo == null - ? "" - : (widget.storeInfo.openStartTime == null && - widget.storeInfo.openEndTime == null) - ? S.of(context).quantian - : "${widget.storeInfo.openStartTime.substring(0, widget.storeInfo.openStartTime.lastIndexOf(":"))} " - "- ${widget.storeInfo.openEndTime.substring(0, widget.storeInfo.openEndTime.lastIndexOf(":"))}"), + child:Text( + "${S.of(context).dizhi}:${widget.storeInfo != null + ? widget.storeInfo.address + : ""}", + maxLines: 2, + textAlign: TextAlign.justify, style: TextStyle( color: Color(0xFF353535), fontWeight: MyFontWeight.regular, @@ -176,6 +176,12 @@ class _StoreInfoView extends State { ), ], ), + Container( + width: double.infinity, + height: 1, + color: Color(0xFFF4F5F2), + margin: EdgeInsets.only(top: 16), + ) ], ), ); diff --git a/lib/store/store_view/store_order_list.dart b/lib/store/store_view/store_order_list.dart index 0f4e50f4..1c157a00 100644 --- a/lib/store/store_view/store_order_list.dart +++ b/lib/store/store_view/store_order_list.dart @@ -21,7 +21,7 @@ class StoreOrderListPage extends StatefulWidget { final ScrollController controller; final String minToken; final String tenant; - final Function(String id,int count) queryMiNiDetail; + final Function(String id, int count) queryMiNiDetail; ShoppingCart shopCarGoods; @@ -31,8 +31,8 @@ class StoreOrderListPage extends StatefulWidget { this.storeInfo, this.shopCarGoods, this.controller, - this.minToken, - this.tenant, + this.minToken, + this.tenant, this.queryMiNiDetail, ); @@ -50,8 +50,7 @@ class _StoreOrderListPage extends State { List appletProducts; List productListBeans = []; - ScrollController controller1 = ScrollController(); - ScrollController controller2 = ScrollController(); + ScrollController controller = ScrollController(); @override void initState() { @@ -107,7 +106,7 @@ class _StoreOrderListPage extends State { width: 100.w, child: ListView.builder( itemCount: appletProducts == null ? 0 : appletProducts.length, - controller: controller1, + controller: controller, physics: BouncingScrollPhysics(), shrinkWrap: true, padding: EdgeInsets.only(top: 0, bottom: 25), @@ -124,7 +123,16 @@ class _StoreOrderListPage extends State { shrinkWrap: true, padding: EdgeInsets.zero, itemBuilder: (context, position) { - return goodsItem(position); + return GestureDetector( + onTap: () { + setState(() { + Navigator.of(context).pushNamed('/router/shop_details_page',arguments: { + "id":productListBeans[position].id, + }); + }); + }, + child: goodsItem(position), + ); }, ), ), @@ -231,18 +239,18 @@ class _StoreOrderListPage extends State { }); } return ShopGoods( - (ShoppingCartSkuItemListBean shoppingCartSkuItemListBean) { - widget.queryMiNiDetail(productListBeans[position].id,1); - }, - (ShoppingCartSkuItemListBean shoppingCartSkuItemListBean) { - if(count > 0) - widget.queryMiNiDetail(productListBeans[position].id,-1); - }, - productListBean: productListBeans[position], - count: count, - isShopCart: false, - queryMiNiDetail: widget.queryMiNiDetail, - shoppingCartSkuItemListBean: shoppingCartSkuItemListBean, + (ShoppingCartSkuItemListBean shoppingCartSkuItemListBean) { + widget.queryMiNiDetail(productListBeans[position].id, 1); + }, + (ShoppingCartSkuItemListBean shoppingCartSkuItemListBean) { + if (count > 0) + widget.queryMiNiDetail(productListBeans[position].id, -1); + }, + productListBean: productListBeans[position], + count: count, + isShopCart: false, + queryMiNiDetail: widget.queryMiNiDetail, + shoppingCartSkuItemListBean: shoppingCartSkuItemListBean, ); } } diff --git a/lib/union/union_page.dart b/lib/union/union_page.dart index 236385a0..ced3837b 100644 --- a/lib/union/union_page.dart +++ b/lib/union/union_page.dart @@ -45,11 +45,11 @@ class _UnionPage extends State final RefreshController refreshController = RefreshController(initialRefresh: false); final RefreshController refreshController1 = - RefreshController(initialRefresh: false); + RefreshController(initialRefresh: false); final RefreshController refreshController2 = - RefreshController(initialRefresh: false); + RefreshController(initialRefresh: false); final RefreshController refreshController3 = - RefreshController(initialRefresh: false); + RefreshController(initialRefresh: false); ApiService apiService; bool isKeyBoardShow = false; BMFCoordinate latLng; @@ -232,38 +232,44 @@ class _UnionPage extends State length: 4, child: Scaffold( appBar: MyAppBar( - title:"", - leading: false, - brightness: Brightness.light, + title: "", + leading: false, + brightness: Brightness.light, titleChild: PreferredSize( - preferredSize: Size(double.infinity, 38.h), - child: TabBar( - isScrollable: true, //可滚动 - indicatorColor: Color(0xff39B54A), - labelColor: Colors.black, - labelStyle: TextStyle( - fontSize: 18.sp, - fontWeight: FontWeight.bold, - ), - unselectedLabelStyle: TextStyle( - fontSize: 15.sp, - fontWeight: FontWeight.normal, - ), - // controller: tabController, - //未选中文字颜色 - unselectedLabelColor: Color(0xffA29E9E), - indicatorSize: TabBarIndicatorSize.label, - //指示器与文字等宽 - tabs: [ - MyTab(text: S.of(context).quanbu), - MyTab(text:"吃"), - MyTab(text:"喝"), - MyTab(text:"玩"), - ], - ), - )), + preferredSize: Size(double.infinity, 38.h), + child: TabBar( + isScrollable: true, + //可滚动 + indicatorColor: Color(0xff39B54A), + labelColor: Colors.black, + labelStyle: TextStyle( + fontSize: 18.sp, + fontWeight: FontWeight.bold, + ), + unselectedLabelStyle: TextStyle( + fontSize: 15.sp, + fontWeight: FontWeight.normal, + ), + // controller: tabController, + //未选中文字颜色 + unselectedLabelColor: Color(0xffA29E9E), + indicatorSize: TabBarIndicatorSize.label, + //指示器与文字等宽 + tabs: [ + MyTab(text: S.of(context).quanbu), + MyTab(text: "吃"), + MyTab(text: "喝"), + MyTab(text: "玩"), + ], + ), + )), body: TabBarView( - children: [buildItem(refreshController),buildItem(refreshController1), buildItem(refreshController2),buildItem(refreshController3),], + children: [ + buildItem(refreshController), + buildItem(refreshController1), + buildItem(refreshController2), + buildItem(refreshController3), + ], ), ), ); @@ -366,7 +372,7 @@ class _UnionPage extends State onRefresh: () { startLocation(); }, - child:ListView.builder( + child: ListView.builder( itemCount: storeList == null ? 0 : storeList.length, padding: EdgeInsets.only( top: 8.h, @@ -378,6 +384,18 @@ class _UnionPage extends State onTap: () { if (storeList[position].posType.code == "NORMALSTORE") { showDeleteDialog(); + } else if (storeList[position].posType.code == + "RETAILSTORE" && + storeList[position].storeName == "一心回乡商城") { + Navigator.of(context).pushNamed( + '/router/shopping_mall_home', + arguments: { + "type": 0, + "id": storeList[position].id, + "tenant": storeList[position].tenantCode, + "storeName": storeList[position].storeName + }, + ); } else { Navigator.of(context).pushNamed( '/router/store_order', @@ -391,8 +409,7 @@ class _UnionPage extends State }, child: buildStoreItem(storeList[position], position), ); - }) - ), + })), ) ], ); @@ -542,7 +559,7 @@ class _UnionPage extends State ) ]), width: double.infinity, - height: 223, + height: 228, child: Stack( children: [ Positioned( @@ -574,7 +591,7 @@ class _UnionPage extends State left: 12, right: 0, child: Container( - height:95, + height: 100, child: Row( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, @@ -588,9 +605,11 @@ class _UnionPage extends State errorSrc: "assets/image/default_1.webp", fadeSrc: "assets/image/default_1.webp", ), - SizedBox(width: 6.w,), - Expanded(child: - Column( + SizedBox( + width: 6.w, + ), + Expanded( + child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ @@ -625,20 +644,19 @@ class _UnionPage extends State width: 59.w, height: 18.h, alignment: Alignment.center, - margin: EdgeInsets.only(top:20.h), + margin: EdgeInsets.only(top: 20.h), decoration: BoxDecoration( - borderRadius: BorderRadius.circular(2), + borderRadius: BorderRadius.circular(2), color: Color(0xFF32A060), - ), + ), child: Visibility( child: Text( (store.distance ?? 0) > 1000 ? S.of(context).gongli( - ((store.distance ?? 0) / 1000 * 100).toInt() / - 100.0) + ((store.distance ?? 0) / 1000 * 100).toInt() / + 100.0) : S.of(context).mi( - ((store.distance ?? 0) * 100).toInt() / - 100.0), + ((store.distance ?? 0) * 100).toInt() / 100.0), style: TextStyle( color: Color(0xFFFFFFFF), fontSize: 10.sp, diff --git a/lib/view_widget/new_coupon_widget.dart b/lib/view_widget/new_coupon_widget.dart index 1f16bb3a..4df2b639 100644 --- a/lib/view_widget/new_coupon_widget.dart +++ b/lib/view_widget/new_coupon_widget.dart @@ -7,11 +7,12 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; class NewCouponWidget extends StatelessWidget { final Function(int type) callback; + // final Function couponDialog; final GestureTapCallback callbackEx; final Coupon coupon; final int type; - NewCouponWidget(this.coupon, this.callback, this.callbackEx, {this.type = 1}); + NewCouponWidget(this.coupon, this.callback,this.callbackEx, {this.type = 1}); @override Widget build(BuildContext context) { @@ -28,6 +29,158 @@ class NewCouponWidget extends StatelessWidget { // } return Container( + height: (coupon != null && coupon.isEx) ? 168.h : 151.h, + width: double.infinity, + margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(6), + boxShadow: [ + BoxShadow( + color: Colors.black.withAlpha(12), + offset: Offset(0, 3), + blurRadius: 14, + spreadRadius: 0, + ) + ], + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + width: 6.w, + height: double.infinity, + decoration: BoxDecoration( + borderRadius: new BorderRadius.only( + topLeft: Radius.circular(6), + bottomLeft: Radius.circular(6), + ), + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF32A060), + ) + ), + Expanded( + flex: 2, + child:Container( + margin: EdgeInsets.only(top: 12,left: 12,bottom: 12), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "券名称:${coupon != null ? coupon.couponName ?? "" : ""}", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 15.sp, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFF0D0D0D), + ), + ), + SizedBox(height: 6,), + Expanded(child: + (coupon.useStartTime == null && + coupon.useEndTime == null)? + Text( + S.of(context).quantian, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF4D4D4D), + ), + ):Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "有效期: ", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF4D4D4D), + ), + ), + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + "${coupon?.useStartTime ??""} ~", + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF4D4D4D), + ), + ), + Text( + "${coupon?.useEndTime ?? ""}", + maxLines:1, + overflow: TextOverflow.ellipsis, + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF4D4D4D), + ), + ) + + ], + ) + ], + ),), + GestureDetector( + onTap: (){ + // showDeleteDialog(); + + }, + child: Row( + children: [ + Text( + "使用详情", + style: TextStyle( + fontSize: 12.sp, + fontWeight: MyFontWeight.regular, + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xFF4D4D4D), + ), + ), + Icon( + Icons.keyboard_arrow_right, + color: coupon.status == 3 ? Color(0xFFB3B3B3) :Color(0xFF4D4D4D), + size: 20, + ) + ], + ), + ) + ], + ), + )), + Expanded( + flex: 1, + child:Container( + margin: EdgeInsets.only(top: 12,left: 12,bottom: 12), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Expanded(child: Container( + child: priceWidget(context), + )), + Container( + margin: EdgeInsets.only(right: 23.w), + child: rightBtn(context), + ) + ], + ), + )), + ], + ), + ); + Container( height: (coupon != null && coupon.isEx) ? 168.h : 151.h, width: double.infinity, margin: EdgeInsets.fromLTRB(14.w, 6.h, 14.w, 6.h), @@ -93,7 +246,7 @@ class NewCouponWidget extends StatelessWidget { ), Expanded( child: Text( - (coupon.storeId != "0" && coupon?.storeList != null && coupon.storeList.firstWhere((x) => x.id == coupon.storeId)!=null ? + (coupon.storeId != "0" && coupon?.storeList != null && coupon.storeList.isNotEmpty && coupon.storeList.firstWhere((x) => x.id == coupon.storeId)!=null ? coupon.storeList.firstWhere((x) => x.id == coupon.storeId).storeName : coupon.tenantName), overflow: TextOverflow.ellipsis, style: TextStyle( @@ -218,40 +371,38 @@ class NewCouponWidget extends StatelessWidget { Widget priceWidget(BuildContext context) { if (coupon.bizType == 1) { return Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.baseline, - textBaseline: TextBaseline.alphabetic, - children: [ - Text( - "¥", - style: TextStyle( - fontSize: 22.sp, - fontWeight: MyFontWeight.medium, - color: Color(0xff32A060), - ), - ), - SizedBox( - height: 4.h, + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + children: [ + Text( + "¥", + style: TextStyle( + fontSize: 22.sp, + fontWeight: MyFontWeight.medium, + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), - Text( - coupon != null - ? double.tryParse("${coupon.discountAmount}" ?? "0") - .toInt() - .toString() - : "", - style: TextStyle( - fontSize: 40.sp, - fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), - ), + ), + SizedBox( + height: 4.h, + ), + Text( + coupon != null + ? double.tryParse("${coupon.discountAmount}" ?? "0") + .toInt() + .toString() + : "", + style: TextStyle( + fontSize: 40.sp, + fontWeight: MyFontWeight.semi_bold, + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), - ], - ), + ), + ], ), Text( S.of(context).manyuankeyong(coupon != null @@ -261,26 +412,27 @@ class NewCouponWidget extends StatelessWidget { style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], ); } else if (coupon.bizType == 3) { return Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Expanded( + Container( + padding: EdgeInsets.only(bottom:10,top: 7), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( S.of(context).duihuanquan, style: TextStyle( - fontSize: 25.sp, + fontSize: 26.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], @@ -291,26 +443,27 @@ class NewCouponWidget extends StatelessWidget { style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], ); } else if (coupon.bizType == 5) { return Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Expanded( + Container( + padding: EdgeInsets.only(bottom:10,top: 7), child: Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Text( S.of(context).duihuanquan, style: TextStyle( - fontSize: 25.sp, + fontSize: 26.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], @@ -321,53 +474,51 @@ class NewCouponWidget extends StatelessWidget { style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], ); } else { return Column( - mainAxisAlignment: MainAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.center, children: [ - Expanded( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.baseline, - textBaseline: TextBaseline.alphabetic, - children: [ - Text( - coupon != null - ? "${(coupon.discountPercent / 10.0 >= 10) ? 10 : coupon.discountPercent / 10.0}" ?? - "0" - : "", - style: TextStyle( - fontSize: 40.sp, - fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), - ), - ), - SizedBox( - height: 4.h, + Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.baseline, + textBaseline: TextBaseline.alphabetic, + children: [ + Text( + coupon != null + ? "${(coupon.discountPercent / 10.0 >= 10) ? 10 : coupon.discountPercent / 10.0}" ?? + "0" + : "", + style: TextStyle( + fontSize: 40.sp, + fontWeight: MyFontWeight.semi_bold, + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), - Text( - "折", - style: TextStyle( - fontSize: 20.sp, - fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), - ), + ), + SizedBox( + height: 4.h, + ), + Text( + "折", + style: TextStyle( + fontSize: 20.sp, + fontWeight: MyFontWeight.semi_bold, + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), - ], - ), + ), + ], ), Text( S.of(context).quanchangtongyong, style: TextStyle( fontSize: 12.sp, fontWeight: MyFontWeight.semi_bold, - color: Color(0xff32A060), + color: coupon.status == 3 ? Color(0xFFB3B3B3):Color(0xff32A060), ), ), ], @@ -430,22 +581,41 @@ class NewCouponWidget extends StatelessWidget { callback(type); }, child: Container( - padding: EdgeInsets.fromLTRB(16.w, 2.h, 16.w, 2.h), + width: 64.w, + height: 19.h, decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.5), color: Color(0xFF32A060), + borderRadius: BorderRadius.circular(10), ), - child: Text( - (coupon.bizType == 5 || coupon.bizType == 3) - ? S.of(context).quhexiao - : S.of(context).qushiyong, + alignment: Alignment.center, + child:Text( + "立即使用", + maxLines: 1, + overflow: TextOverflow.ellipsis, style: TextStyle( fontSize: 12.sp, - fontWeight: MyFontWeight.medium, - color: Colors.white, + fontWeight: MyFontWeight.regular, + color: Color(0xFFFFFFFF), ), ), ), + // Container( + // padding: EdgeInsets.fromLTRB(16.w, 2.h, 16.w, 2.h), + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(10.5), + // color: Color(0xFF32A060), + // ), + // child: Text( + // (coupon.bizType == 5 || coupon.bizType == 3) + // ? S.of(context).quhexiao + // : S.of(context).qushiyong, + // style: TextStyle( + // fontSize: 12.sp, + // fontWeight: MyFontWeight.medium, + // color: Colors.white, + // ), + // ), + // ), ), ); } else if (coupon != null && coupon.status == 2) { @@ -474,18 +644,18 @@ class NewCouponWidget extends StatelessWidget { alignment: Alignment.centerRight, child: Container( padding: EdgeInsets.fromLTRB(16.w, 2.h, 16.w, 2.h), - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10.5), - // border: Border.all( - // width: 1, color: Color(0xFFA0A0A0), style: BorderStyle.solid) - color: Color(0xFFA0A0A0), - ), + // decoration: BoxDecoration( + // borderRadius: BorderRadius.circular(10.5), + // // border: Border.all( + // // width: 1, color: Color(0xFFA0A0A0), style: BorderStyle.solid) + // color: Color(0xFFA0A0A0), + // ), child: Text( S.of(context).yishixiao, style: TextStyle( fontSize: 12.sp, - fontWeight: MyFontWeight.medium, - color: Colors.white, + fontWeight: MyFontWeight.semi_bold, + color: Color(0xFFB3B3B3), ), ), ), diff --git a/lib/view_widget/selector_store_dialog.dart b/lib/view_widget/selector_store_dialog.dart index d1902a47..9c1214ba 100644 --- a/lib/view_widget/selector_store_dialog.dart +++ b/lib/view_widget/selector_store_dialog.dart @@ -3,6 +3,7 @@ import 'package:huixiang/generated/l10n.dart'; import 'package:huixiang/retrofit/data/store.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:huixiang/store/scan.dart'; +import 'package:huixiang/utils/font_weight.dart'; import 'package:huixiang/view_widget/border_text.dart'; import 'package:huixiang/view_widget/custom_image.dart'; import 'package:huixiang/view_widget/round_button.dart'; @@ -24,6 +25,7 @@ class _SelectorStoreWidget extends State { @override Widget build(BuildContext context) { return Container( + width: double.infinity, height: ((widget.stores != null ? (widget.stores.length > 4 ? 4 : widget.stores.length) : 0.0) * @@ -32,156 +34,255 @@ class _SelectorStoreWidget extends State { 158.0.h, padding: EdgeInsets.only( top: 16.h, - left: 16.w, - right: 10.w, bottom: 16.h, ), decoration: BoxDecoration( color: Colors.white, - borderRadius: BorderRadius.horizontal( - left: Radius.circular(8), - right: Radius.circular(8), + borderRadius: BorderRadius.only( + topLeft: Radius.circular(8), + topRight: Radius.circular(8), ), ), child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - S.of(context).qingxuanzeshiyongmendian, - textAlign: TextAlign.left, - style: TextStyle( - color: Color(0xFF353535), - fontSize: 16.sp, - fontWeight: FontWeight.bold, - ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Expanded( + child: Container( + alignment: Alignment.center, + child: Text( + S.of(context).qingxuanzeshiyongmendian, + style: TextStyle( + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: Color(0xFF353535), + ), + ), + )), + GestureDetector( + onTap: () { + setState(() { + Navigator.of(context).pop(); + }); + }, + child: Icon( + Icons.clear, + color: Colors.black, + size: 18, + ), + ), + SizedBox(width: 14), + ], ), SizedBox( height: 12.h, ), + Container( + width: double.infinity, + height: 1.h, + color: Color(0xFFF2F2F2), + margin: EdgeInsets.only(bottom: 11.h), + ), + Expanded(child: Container( height: (widget.stores != null - ? (widget.stores.length > 4 ? 4 : widget.stores.length) - : 0) * - 52.h, + ? (widget.stores.length > 4 ? 4 : widget.stores.length) + : 0) * + 60.h, child: ListView.builder( physics: BouncingScrollPhysics(), itemBuilder: (context, position) { - return storeItem(widget.stores[position], position); + return GestureDetector( + onTap: (){ + setState(() { + selectIndex = position; + }); + }, + child: storeItem(widget.stores[position], position), + ); }, itemCount: widget.stores != null ? widget.stores.length : 0, ), - ), - SizedBox( - height: 38.h, - ), - Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, - children: [ - InkWell( - onTap: () { - Navigator.of(context).pop(); - }, - child: BorderText( - text: S.of(context).quxiao, - borderColor: Color(0xFF32A060), - textColor: Color(0xFF32A060), - radius: 4, - fontSize: 16.sp, - fontWeight: FontWeight.bold, - borderWidth: 1.w, - padding: EdgeInsets.symmetric( - vertical: 12.h, - horizontal: 42.w, - ), - ), - ), - SizedBox( - width: 13.w, + )), + GestureDetector( + onTap: (){ + if (widget.stores[selectIndex].posType.code == + "NORMALSTORE") { + Scan.toScan( + context, + widget.stores[selectIndex].id, + widget.stores[selectIndex].tenantCode, + widget.stores[selectIndex].storeName, + ); + } else { + Navigator.of(context).pushNamed( + '/router/store_order', + arguments: { + "id": widget.stores[selectIndex].id, + "tenant": widget.stores[selectIndex].tenantCode, + "storeName": widget.stores[selectIndex].storeName + }, + ); + } + }, + child: Container( + width: double.infinity, + height: 40.h, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(6), + color:Color(0xFF32A060), ), - InkWell( - onTap: () { - if(widget.stores[selectIndex].posType.code == "NORMALSTORE") { - Scan.toScan( - context, - widget.stores[selectIndex].id, - widget.stores[selectIndex].tenantCode, - widget.stores[selectIndex].storeName, - ); - } else { - Navigator.of(context).pushNamed( - '/router/store_order', - arguments: { - "id": widget.stores[selectIndex].id, - "tenant": widget.stores[selectIndex].tenantCode, - "storeName": widget.stores[selectIndex].storeName - }, - ); - } - - }, - child: RoundButton( - text: S.of(context).queding, - textColor: Colors.white, - backgroup: Color(0xFF32A060), - radius: 4, + alignment: Alignment.center, + margin: EdgeInsets.only(top: 14.h), + child: Text( + S.of(context).queding, + style: TextStyle( + fontWeight: MyFontWeight.bold, fontSize: 16.sp, - fontWeight: FontWeight.bold, - padding: EdgeInsets.symmetric( - vertical: 12.h, - horizontal: 42.w, - ), + color: Color(0xFFFFFFFF), ), ), - ], + ), ), + // Row( + // mainAxisAlignment: MainAxisAlignment.center, + // crossAxisAlignment: CrossAxisAlignment.center, + // children: [ + // InkWell( + // onTap: () { + // Navigator.of(context).pop(); + // }, + // child: BorderText( + // text: S.of(context).quxiao, + // borderColor: Color(0xFF32A060), + // textColor: Color(0xFF32A060), + // radius: 4, + // fontSize: 16.sp, + // fontWeight: FontWeight.bold, + // borderWidth: 1.w, + // padding: EdgeInsets.symmetric( + // vertical: 12.h, + // horizontal: 42.w, + // ), + // ), + // ), + // SizedBox( + // width: 13.w, + // ), + // InkWell( + // onTap: () { + // if (widget.stores[selectIndex].posType.code == + // "NORMALSTORE") { + // Scan.toScan( + // context, + // widget.stores[selectIndex].id, + // widget.stores[selectIndex].tenantCode, + // widget.stores[selectIndex].storeName, + // ); + // } else { + // Navigator.of(context).pushNamed( + // '/router/store_order', + // arguments: { + // "id": widget.stores[selectIndex].id, + // "tenant": widget.stores[selectIndex].tenantCode, + // "storeName": widget.stores[selectIndex].storeName + // }, + // ); + // } + // }, + // child: RoundButton( + // text: S.of(context).queding, + // textColor: Colors.white, + // backgroup: Color(0xFF32A060), + // radius: 4, + // fontSize: 16.sp, + // fontWeight: FontWeight.bold, + // padding: EdgeInsets.symmetric( + // vertical: 12.h, + // horizontal: 42.w, + // ), + // ), + // ), + // ], + // ), ], ), ); } Widget storeItem(Store store, position) { - return Container( - height: 52.h, - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - crossAxisAlignment: CrossAxisAlignment.center, + return Container( + height:52 , + margin: EdgeInsets.only(bottom: 12,left: 14,right: 14), + child: Stack( + alignment: Alignment.bottomRight, children: [ - MImage( - store.logo, - width: 28.w, - height: 28.h, - fit: BoxFit.cover, - radius: BorderRadius.circular(2), - errorSrc: "assets/image/default_1.webp", - fadeSrc: "assets/image/default_1.webp", - ), - SizedBox( - width: 12.w, - ), - Expanded( - flex: 1, + Container( + height: 52.h, + width: double.infinity, + decoration: BoxDecoration( + borderRadius: new BorderRadius.circular(6), + border: Border.all( + color: position == selectIndex ? Color(0xFF32A060):Color(0xFFF7F7F7), + width: position == selectIndex ? 1 :0, + ), + color: position == selectIndex ? Color(0xFFF0FAF4) :Color(0xFFF7F7F7), + ), + alignment: Alignment.centerLeft, + padding: EdgeInsets.only(left: 12, bottom: 16, top: 16), child: Text( store.storeName, style: TextStyle( - color: Color(0xFF353535), - fontSize: 16.sp, + fontWeight: MyFontWeight.bold, + fontSize: 15.sp, + color: position == selectIndex ?Color(0xFF32A060) : Color(0xFF0D0D0D), ), ), ), - Checkbox( - value: position == selectIndex, - onChanged: (value) { - setState(() { - selectIndex = position; - }); - }, - checkColor: Color(0xFFFFFFFF), - fillColor: MaterialStateProperty.all(Color(0xFF39B54A)), - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - shape: CircleBorder(), + if (position == selectIndex) + Image.asset( + "assets/image/recharge.webp", + width: 20.w, + height: 20.h, ), + // MImage( + // store.logo, + // width: 28.w, + // height: 28.h, + // fit: BoxFit.cover, + // radius: BorderRadius.circular(2), + // errorSrc: "assets/image/default_1.webp", + // fadeSrc: "assets/image/default_1.webp", + // ), + // SizedBox( + // width: 12.w, + // ), + // Expanded( + // flex: 1, + // child: Text( + // store.storeName, + // style: TextStyle( + // color: Color(0xFF353535), + // fontSize: 16.sp, + // ), + // ), + // ), + // Checkbox( + // value: position == selectIndex, + // onChanged: (value) { + // setState(() { + // selectIndex = position; + // }); + // }, + // checkColor: Color(0xFFFFFFFF), + // fillColor: MaterialStateProperty.all(Color(0xFF39B54A)), + // materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + // shape: CircleBorder(), + // ), ], ), );