From 382f4cb1f2e7123e7c4cc8a91fae9ab8f61122e2 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Fri, 26 Mar 2021 14:39:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E6=88=91=E7=9A=84=E6=88=BF?= =?UTF-8?q?=E5=B1=8B=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/static/house_auth_fail.webp | Bin 0 -> 1378 bytes assets/static/house_auth_success.webp | Bin 0 -> 2806 bytes assets/static/review_fail.webp | Bin 0 -> 24664 bytes lib/const/resource.dart | 8 + lib/constants/app_theme.dart | 23 +++ lib/model/user/house_model.dart | 63 +++++++- lib/provider/app_provider.dart | 27 ++++ lib/ui/profile/house/add_house_page.dart | 4 +- lib/ui/profile/house/house_card.dart | 158 +++++++++++++++++++ lib/ui/profile/house/house_func.dart | 12 ++ lib/ui/profile/house/house_owners_page.dart | 69 +++++--- lib/ui/profile/house/pick_my_house_page.dart | 128 +++++++++++++++ pubspec.lock | 7 - pubspec.yaml | 2 - 14 files changed, 459 insertions(+), 42 deletions(-) create mode 100644 assets/static/house_auth_fail.webp create mode 100644 assets/static/house_auth_success.webp create mode 100644 assets/static/review_fail.webp create mode 100644 lib/ui/profile/house/house_card.dart create mode 100644 lib/ui/profile/house/house_func.dart create mode 100644 lib/ui/profile/house/pick_my_house_page.dart diff --git a/assets/static/house_auth_fail.webp b/assets/static/house_auth_fail.webp new file mode 100644 index 0000000000000000000000000000000000000000..a283d590779ceddd5dcf51adce4d2e10e654a87c GIT binary patch literal 1378 zcmV-o1)cg*Nk&Fm1pok7MM6+kP&il$0000G000240sw&l06|PpNP7SP00Cd1sF5T! zxs3lkaBwOwA_B%9Uu`b@U=T@?lPB}|ce5rx03Ff)2}r9h{KtR%$AA3CfBeUP{KtR% z$AA3CfBeUP{KtR%$AA2XUHrGCRqtulM_TojR$bGoAO7P%{^LLX<3IizUih!3Ro`jV zXIk}^R=uWGm(P|009H^qAh-ko01$EjodGJZ0)hcPF&K+PB%z@pAgBP41_^0y;K4I~ zJ_+Lg{eSZEJS#W;`c6!v|ER_JSPX4-H@J(-0M}D{h`g{3bvL+&l_JY-gOup%pXs65 zPZ-`Iw$`n~1!G!02*?QPpXSuTPZ-`p+9KIs>7p#w7|tKKi*1Tp?XgQ;%34N$DCv!t z02=ldiLPIbSmms3Otp=d9aH?;Ca`7_PP+0l{pGYpn_`x`l(dZgQPUeP7+Y*%kRsW* zds{aT+f88Gh_=|JuH;95^|b)8wd7+qyoOpPxqr$xtcAw#IR$tZqjMualyt_+j+w*S z*|@wWYX;GeS{sa^m-2*8mQ?*1HM4O2wAKx_wQd)Yjp7?d2I9|_e8&g1@5;se+9q0d zwrzPB&94y6em0%0nT57^%51Rw;)&CwM$@(U+IF^XFDtul2{s?bW}B~s$|Rdop`Ks( zAZFc)xU_niYa3Hvji+T*WCbzk53!+|w1o0b1W50-jE)>EWHVobDY$vN-`$LQ*-nk? zBDU6EpN#UBumU|xeK%T24USf|5lFaUb?rZPDQVjLZ96KeHXtv($LtG7Z$M03)M!+z zfo-BPCmS)~MB&$BMYQj&PY$n=Qmj8>eH+$AXv4EX8c$y`NQq65uOEL~%COvAujTxx z)*>tj3)^y5$dPk|xX0_?jj6BxPL9i>f1P=yE+(c8|7UuviGhXZ4Ji%{pHP{-s(x;SilFE>(U0nz;c7${OIu1L6l!?% zi|<)qvK$49^#$vDN_USys`cd}OD84^&@WIWD(@h|W?JZcGrcv#8|q#| zEfDiCaR31R?L~X`{eW_urztu-Y&{7oAb#op=}<@hhv0<*ia;sc-Doa{{Z`J&2;Tz1 zW^MHRKTlp!GP}%)o65c3hci#%7Z{H#Mh%z*ytN7V;rEkdM2j-xnNvfDF1dnjE^;0L zf_h_6c6ViYp03R-b*sT?aqI!=r1y&-kDkRfGYzXsu~o+j!OYCy&>(b1rbF)l%FWr$ zq7#BV&|Sm;u|Ku&D0V0;km|WPM;@@0^A6I^ETJ;6C1HUxT>h#xZ~Hf~AirU>nJMfc z&!X`n%1I=PzK()o5`%c7-=N=gra3{i)8sL2Qc>wqDLq;Ev6CBz{k~btAO7+-ycH0L k2Fz%$jS=)mXxh@hnEhx5Jb**&SMuxJ1P05e6h^#A|> literal 0 HcmV?d00001 diff --git a/assets/static/house_auth_success.webp b/assets/static/house_auth_success.webp new file mode 100644 index 0000000000000000000000000000000000000000..e682d68362a0aa2c7ee67efa9ee07932801025ee GIT binary patch literal 2806 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 Irihwo0REy*-T(jq literal 0 HcmV?d00001 diff --git a/assets/static/review_fail.webp b/assets/static/review_fail.webp new file mode 100644 index 0000000000000000000000000000000000000000..bc1f68f7c03996034c9e7646e9664e267093e35e GIT binary patch literal 24664 zcma(2Q*CU!EhZD(R?!H8 zLnHk`G4DhYPl4cBFeZ6M@9AK1sjvY4H{A&Y_&xRVYOUhxn3U2YdxGC^f$Kep!@Ug|B{K2pi7oEO(N6h0pbNO2+Np>9!9Uh*Z zjwNB8J)EkrbGXX^1-GS@AD6y~@li=ovMDP(^^Xv(B7gtQ$Vrg`DWVt`{I1R;rVcS( zf@}B-0@`4NL|0-)H7AJVe*52|6jp_BvmRr3{&r!WNpRHxPF_@)a21PVJJLZ7iAh^I&Jf{hv|T z+iX&U#9*3s%=#=%=|1Q!R4BSr={Y|N{9mP%!cSe!-Z5onaRHhp$c2FvNHgBQ=~2-1 zxoFc}Tw;fbCvgc$Z|1xm5;9*+c@MDB!Wru5WcTAPYG~+zwIeS-KYR4R3oA;ogytZG zBjz5*gnta5y&u(bF-Z!6=16kTQ4To_w;JYQ@s(%MD@aN=OtYDw+487OaE$y9`AGyfm zkjVY_uE;%cy~ur^ha0FDjkDq4>h2u_VUIp!yrmY8Soxji;L&gQN|_U= zGGgG0E@(|1yrF`?Xl@0x3VKHCEm(>YAims!(dE&l5Xm=>@?jSk$m2~8%vDh%^c1HQ zmRL>&EWhhM?d`xXzl&zC72@>U)$i>wJ}7z#?uD+kxa95a;eYdb2^up$eI|zLf;XHk z-T6o<|2G9~r2LNPCHUC;?P{EC0N+sI!P8s7CVA(RbMR_k4g41BIArhd-x`&CvOmNT zDV>fo%LtO<=KJ%lPwV`MIAI5$g?I)R=6(oBw>lNkau*&buS>vDtwEp~_}!2ImZZLc zc4xz4CpMFcZ6iWAu1;Z|lg4kdvM-5Hdix`VCV<%SmLyNe-LLG=(%q?Y_u=gc6-DHl zb|x|%{m}Cj2@>s`@TAXY#oFQ1jRggMt`sLQ^~)Gb@H_WkmS42!P1Nr(G)*U)=Qx%&mx#v8F~jrkxqB8 zKDyP-yHoS1Q|)1v40p{sj7b%%1yV4<4S)M>7dFT$hpn!zG*v|8TZGO!TP%w)LEiAO z0eEU@$r4u5CZ)FF{ts3c;Nv{aU`L0*q}uG^`O9t#YY#aUcVm;UeV*9W+^a1d-*e+F z;mv)YAH5$jO-TlW3h=;Htd4b$R6A@ZLFEsjb72la!ALaSwqtMqX|`T7_aK`}eG-4` z)%`RGLz0)M{z)Y0{{UM+M5^)_(XJBSK!e1IQS|jP?HH1P!TN9y?Gj7mlWRSd7#YgZ zt(Lqv-b7EKo>59w0df0h2QAh^pWSA2d2p;~(Pu@eYoO|hwfRbPaf1J?hFj9%57PXA z3l1$9r?+J}rFw1fi$;A!Nz7(r_uDQ%i9tN?PgE-w^ExCn$|3g)m7uHP?j{S)kk1m{d~P#Ay8d^iw{Zj*b5E}k(Oa9d8e7$}vr zU)s{$I)l*U$L$&lUj4&%M+Zf` zK4AW%X`P(eYw2R$r932~jTByz2_@}qEsTQwLt^^MOJtG0my>d_<>sX0;k#=5xX!f# z2SOmvHq1-JeTWusIHcWmtdgFjq(b2M&QQmfLCS$oeDRED32f(&Mx7N%{3o-o}cUYAbQV; zC`W)+L1RZQAwt9%K!rO%B~^p9*tUB~PUZef*{0TyyLZ|-Z&v$jPC250FDT(+N`CHm z<+RGCBc6jRFAP`SmlYy!xd0Jut0V|TO?St+^(*2Xb)?R`Daw|>1cUt2B-K#4e<`0u znTpYHeSEraG@Bj|XPXx*&<#i`t9@DcHq>e4b-y9twK%9~z()lZMnWHKUd(FF(CCgB zoG(TpTGW!rHiV=Ws#G%I(%h%sk4sm#LmPftZb5UGtw0#AoIBMM)5m7@;PMr6pQ z06C8)aW|Yo^WHib zyU$y7R&13A(hA+l<_l&6pw(&!(?`npLBN3M3(mr=o?IW;TcxAbkt?38}x+jF}kEb;QX2nr_d6st&=A* znl=vYUr7>9AK_}OsEWG#3f2lG)FdqDBNbR=bpxPYUa-eQML$x>BgqktVdNVWBGyo+s$8TIcB;1-zJj=E#}#^Td9YU4@UAJpVFx`Hm4a@O`^pyNw7`G1d9^>L~N2 zKSQ$nKmi6g|A>wd`LT(mvm)31L0$kZj#p<%DOoZSveCySmTD3{c5ebL-i^+4Uqp+U z^%+Y#os&rH%`4Wxk=xjZeSxff!#Qrgp;~Z%#&b{*{7EsRUyj?L@kbO!q0fvT+QlSc z!+qK`P@E`%rB;>5^>FtlN~)S$2{7VJBpOz1qYe2%$?%&VCxL&)NiaI)!yCUN6BfGQ6-q5?7kE^j3h%XYjH>#H}h+EPr z+-{rN&Y*hEnAEwj0+dnmfWq|VlhoX!U~G=|-)6~BOA{(F7T90=jPQm~jy-CaMH$hx zVa+MvQo)sVW=!I8;3CPnGYnmvWIBNxB`QQsSA`4ip{BMML{RNfm;a8z9<$FN&Q>g2l0`a)rXEb0Q$9dK@R6a+rw=Keh*bGHu-POv(#bvr$N_Ppra6P$>}VR zxTe=|Mh00#H9%;^o?~hdh9@YPH7y=hDt(z7WBwU1U}M=S4pWCQNj^|`CTt(JNP_*O zi?1|8XgIP+YlIc@5}XxL?35hkxmsSF(zp+|7BGkgSM`EG6Nsw|SIEYkZCWN2tD3ED zs=*>ct-kVpPM+XB&H8J}NnM?fuMEL|7la(CSzJ-?A3|8^xu`l%&_y*lTTGwj0s%dt zxr&2oLyT=ylu0M}Bs^2}7=k$ma@B6FH58;UT}EU9GeHVuY{_R!R##rd9kM7XY^0TO z<}6OJ2xEuW=Svvd9Y2Dku5(Q>q8EVBoR&c=gJ~mOc}lLJ#0jH~`xqFd-D&M$8bCip z_1X1d71K)CGzjKFYWVuxt?Y!`uZK#wf>EI=o|euuC0`7HZ22Hy^ed-R3k*xb{E0@H zBCDsS+k8^f8hA*kCzt8c2}qiCo_>#(b`0O;na8R^EHL0p2gt+IO zdlxf2Q#20E_`Q7>ePYDg0cH^5{zlHf*O6$pdL^D9l%OH`9BK~4!Qt(0EKJTbCi2kf zhsK%}O>N*bTZ7p#u|`{Ce%@ zbNv8ss>4#!%wZE#a${?XO*rZhS6G#?`Qa~$+zH8$fPbHPt~Q`1re<=zfC?MZVjwG( zjF<$D6s6TYVY9Q%lAd*`IXJG#NEKuQQ`!k-qLKCo4WY=4IydnU1|<13KiF zc{56yAZ*7$kTo`_@2X%E1%}O+9$A9t_$%1pkJvABgx;WBUzdl*;dZIF3g_EnkhYes zBXWTM`4iUi42ld9e}1JFk%8xk=6_suLlFxQ=xe468H^;erG5}UAoo&}9S z!(Q8$3B9FY5I80HHP~8L2TetvwDUBp7xYe#;DR#NyEchBQ(*=1Z{%j<1v-6QwYv%it9FQk>RF#mvf7UmbH&Gn~7fAErOjJ zqFe>fHg1r!4+e?-iW=VL>cG&4{vB@95B1mcE**75Bkk#9_XZtij+7>=XXHZ2^&(E2 z2!I_-4|!K`T`=ZNftiiPM)#qXEK|)Bk`|~jI_Z`Cwmb4MmTCWh9|u2 zv6gIh`KTkbA7xa7;rB=yJZ?u^bsWgFQSfSl0lp)7ec=(cW!LdC@6#7M&{<>URCJ&A zSpjB2oECx+gXX8$=KJ;Uw=yj0912+NA$6qD-a%}2qTw?hOMf38SPXt$db8L%FWdp* z5{sfrFZH8{@kvz|6$!~WbIk*9WVi|sjaSrk6`zRaduhKbAh?8&%!_i z`0yYe)f7t+sat5RGr0wd4x8Wn2RK%fWGg3Z>Vv!N1hyDZ6gp2{g2F*X?Y^#BUXxF$ zfSmzOVgX4FRXt*ifYow}F|pigm0r!9Q;IM-aT)x`Db*7cf(+k%)c%MIdJ61P>&Uuq(#}QqZT_Y5&w8nquD}ml(p0i(cua@y_4tR_e@GM83sAA#3O6rX1 zGNQl>1v}*LsxzWod`c$Igy9SeR#CJm)iJUY&p_$Ws3L}Y0TNDdE`lo<&>l_TRBn7| zYlwg8r~~Fou7XQ-pH}ZT#Y$7I)wD5;tfm`?ApJfEuY@^+4g^%9DYWKca@6G34ja}c-pI0|*fNZwT(px<_=Bvn?rDKzP3^kp8-1X7Am5 zWp+0AcM}l3g#1-Z|V6HLm&Y{`Q=rU>S!EnR>ra|KY*Ds_-N;>e-Z2a!5B3h zwbjI9<_&<0ULWd}mI=s*VV^#4ETWB;quoZgjM#znw3*U5i6dOarfsn<6JPoz4;vFB za-iysM(d)~+SJS*1P-Jl zo;^*X!@tL-wDd@^O~<{?%LoSf-n$wRP-a$Q4abZ~mGr~O)?ZiStru3+`Wsp}1wvhh z+`5Jo|F%;UO|d{_oUc}LkipQraxlE4zCr8uzyu{3`Z&^EC@9P*!L6iOOl2GKW@eS_WEwSWl9)mh&$ z;plK@4A5JMzoEs4I^&>U$@R?2kq%_WS1fkD9njL>7wHJwo1{(zd_p!0by8dMV2uew z5utCzq_ZHUL^wzbwB?b1s$1s|m+H0_YpM_G)I6tCU8Ndj;0)a+RF4RlL=eL$VgwIY zdmkjvG}~$wf|ua1Z8dfYpT22-_9m<5F-64*q)N$DB$XoM!&QN8ezoW~AQQkw#cFCY zgw@Ej9=UCVxF3Dse5AM_`<%L;h8FxI+`-d$JN_|o1K2sy!7}*1&)OHWdHMyaByspI zNDF!b*O|0Cq7)I0d#FFt!1@jt41h`pV!CNN8)Qh#n$e5rGJy-29ad)FxcW{r#a2eS|OBmqv)FhwNfXa+Sd-#Gh=WPkhv$bX<3E&a)a!#*D(0sJ<}&TQTy?`D*$HAM%Zo zJK;1dyBX)F)QOUG#1^7;u<_!O2UW|sTs8l!=HE~RPh4S9Yr0RHl*-4wuA26uHwx zTnZpvL!7(d$*Y}VJ2eq=qrTs{jU9NkV9i3?T#{0>*l)w&yF)o-0&m(@|P#}RFU zvcgMSA=Zw;MHg1uLu(vrg@R6oa=f*M1ao}uoizdR1>Kv}WCw?E%NQK#@;s^Fud%$0 zCeWm6C=vGJi(_`lvU7jr`GuWB>&T{A`5aj(wp>c>kZ+$SIZnu};;$Rx3Obn7aL4li z!wz7CG;cuFfEz_Xa2Qq7ml~VhO2u5R-DiS7s&} zDVM++JvXOC-!0;SKPv_L@r^!-PUu8^fJdGDbOn^HYXm~fco6V$;fOv$ZvSS+QY=qI zH**O8tf`xk(=U-({LN{P2~P6I#+jKxqRY&z8)tocF}hTSv~DP8@SyZ3$9>;nXVb;a z$c2YSk_w&GFIvWu5G8H(w&VwoLq|FNrVBd41A6*c#J}5*Brv})ZTJ)AQ{mD%k0aZD zIy+0$C{|D9+~_E$m3nS(Yu}5Elak|vJRr|@`96Z6uwRrL$xB}^rjR1ot{E%WQh4Lv{i7t)w zWu!YgvaT-Qn?1~@+sQ-;IWiLJE=Ht~)>rKOECDh?=|T`a{H}FC35gRs>AbT(5=n}j z7{#j{BJ!fQswJ79K#B^fw=Vdzszzdlz|<2@nm^C8Nvj-FJ324jAjJR@CY3dK_y?-Y zJS>GKfeRas4SfyqncMQ3@wt?jRH78g!pttGunysq>4|sv-Kj9G@C2~R`DO6_Y|WEQ z*ta0C)%1nBm-pr0#qi%E1obm<+G#SJX!<)#?@vQQ`SA1o!lKe8!05cl~--Wr+5*}h<001SyegcStma^a2Y zk`+a3af_^J$YI|#P66n|3a<>@L*F~Jf3|q@e;>wyGZq^DcA(l1o;tEd#PV4|@Y7d1 z*4!SK|9_D41AHAR7ltOLgN$gUIbEzsu|_~6Y}xvcy2OwL63NL_g9Dcydw-)SdL`VE zQRC?U&Do`58s?!TqVueyJ=}Lab%0zRSDa9|6Rz#gG+e;l0BwfGOSl15lRf?$U zpbZ-RpT3B$#zO*Q`^@gX;`!z>vy34$u1E2#j&y5nPFfI`fC#C#9Gnr;&6zr0+}35v zYnmf>B9Z!z444^)6aLxRh5uZ|^+T!6q&F$z8*uX-x<}pKVMcjuCxCEJfdJO=_u~%g zYiK(k?wowJMk}20)l5drLg8) zD^wu+{yM$vEgh2_466L3mQyFl0xJYsSHg^Fekw~4GI3K?Ml}82ugT$;()(b6|9+ns z^Ww(yQ~=daqZ*Qe9(_IuN0DL$X@R)I$3#|-pPo?vyd&h~@@rZp@XBW3WRAo8j>S_F zBaV{gM7p9xQ#lvD$un8h9S7cmsGM!{BUZo!W}}=m=&-^S4#QHH(|O{^*J*uY_FT%j z{w~t^D7w_Lt1S$sytx{rRs}x4vPNkYw{5IUsZGf#kUGNLboQYMAt4hZ%x7_mqy?)| z2Iap3N15w44h{U7o3X`6ADtOgrLmFwF+{(z3AK3n3Hi>HM=*>qWf7tjM>A;uR%^*B zlKCg-J4avCEMuXUK7=p(hp#vZ`Yo&7mtg0=fiZWhSvFIwE7kuYxih@R*x&ed+uGk% zk;Abb!9{JTZsP-t)!x$z9G;Fe@I(1}$-XwVaty}mq!06@t%`$5oIuI2b<(lr@h$iA z;@Qy+z<+`*2$tRk^BTmQ4ONQQ4gM&aLUM>WaJmE_ZXc&P{S5YrJEczwZf}&JZFQn$ z#YUCV1dl|P^4IXl=xpaIL-hYet05IK3OVX9`KD78$BO=Ae`v|xofeOOg`raLipq? zfrP-RS-(cT264+<2W25%a&Gtg-ND@vD?zhs5fE)+<`@W6syQ7tL}%jNQd zIYTJR*8tmUoIu#U=oD7j?Une`y&oYrwPKAS)2%1iFdf-;{>L+;)(u)D zRZ95hl~gNw5z&-}NhSrKwG>frmzd=-Rh4U2L86;pEEKE{7}{&!(!_-)hVF1%E1z_n zD`@jHP20V_q?W%H)|k9^FR2;>T@0e5MVd(fr{$!d0CaGvMq(Suk+*Z!*7)9WTHmao z2YD@-u2XT%3)E62v!TP%3eqZ^y3j1j8thUz17}&(Pb{&jisAl40{lT{>Dfn|hs>er zF0U{W*+D2uCJlPm`pgcExCh&xP>2~qRHlk0IA@9`WuL~eg>eGRs(3)jA;d!@mGY_D zsqjJPl9F(@bSBYVJA3xwH7#zQxsUpvN zWx=e7U?nltyd>s+aDuSKg#YXxrNXueNXJ9rKXPr^u!x{Hc zRhBKoaD!)xYvaXb#GH-VXGD{ONq_50R-)zDj`NMPfLAjAyqdYI0_LvG7BXykn|uwn zJzjr9nEGH9tneEvgOp#tOC!ElWbmCrWG2I8AjmZHgu7}){-!i_Ui4=r5$pP{v{ zsK6p(ZZ91o57ON=)60q5R*c-3FiB}((R(kGVibE(6V2$nxbr;)tWG-VS>=4 zYC;azEU5bMJj6bDPWPBZXhV{X>?l}i1PWkSxjgPEFpV?eJxawI${r=noICv0ktQiG zoRks_-L`3mVg*+SwBwvq>Rsb%&RxM%eLDOPx;~UQgugJRVPmQ=`}izq=T|u945hGQ zm3oWH_f3!gPIy`sXzDFSDM(-(Gh9l zF3JU$p=Sn3+&AobnPwgGwKGz!_d~;XtT@VMc(7w7nbCT~2|`AdGDox+234o^FQ@-T z$3-b}>cl5)mDP1UlbQ7ws?$XlP+ z1OgkZ?DY$U`EcckR;ZF*Cc(n}uoKYEhjL^Jwu>>0eTH5xV;8)=0boVmze_jAWQ6G$ zDHZ*jPi`rSErVa3pDC|Ren#ZYVaY=wm`$Ef6+{d^B&YgyjLzSnI?~+;UyOMOji^r9 zGLcjY3vaqwWX8b0!RB&q9Glc3Yg(~Gl=1n6g5@_{lzPxreW;eZu2!=$41bg=+oN-%}J;BBA=N!UOl8p{W-_AuUbQKcEQK)fzw zj;HmRYE)yvCUI@Ffgc7tY&c3zc%rF2Vu+$Q$A)J(ASl5?bDUk5B{}w^Ad_6}21ZY$ zH$^=qCx#I&=O(I1G_Q80mLASRS;N$pye*M{LSETcU5!@Z0N`biasE_R%H|3=iM~&I zij?s?a(}V8)e1q$Vp2}FNwxwWt1qPlA}MFv3F^*sKAiIBZ(O=+^qhw@U5J?Blz`AF zRO&8opJ$R)rCYQERP4XG7THU@#?gCIRWxLetDZBFy=wyk@*c$XPoXQH9>gMlS)uNx z;fe@ky#xehc-R;_{cQN{TmZ2#;Y>HZL2#Nf*wNz)qH5$t3jgRxf_&h6Q17^%pT(nd zgol*7V&zB>U`eULSMv_T$KDR9>pAf8!f?fP*i;E?(KWh@sk38M*AJaXH9st{0i5(+ zgcy``UPLiR0~-=a^K45Vvq>f>rTMK!Eho?qokn^GvBHW>Ho8#Sv$=I6Mg}5dGuSht z#KrahaX;Z=+T^pqYuX5ft^!K0#*_-=sGiPG<{JvouxnRjUV7-i_LUy5@(&9{0wb4_ z9Z0+)&OZ%~n)p++$Lm@4G)!4{2>A1_TGevuV*JP>xOGB_}3?8Mh>ccxx=0x#Np0)NZI@D_!|f zO+-MrVOvFp9Ii`a1!p+sS)v7*3pIt1M_KqtYW*_56d-xg6au1d?k?@}9< z%W0Gmz$QLJtKvCCPdzS?!Deo@VR=mJ<3TnX>Sd~3tc>u(q{1od)J%T(w(CEY{P_o+ z0+NoyvTI6>Mx3SUN!v&Hn9K%6b+d#+ZQNf6urDwKaqgih_V1D<70hr9=M!5k>yDS@ zdfZ9wEg^3q02iz@H!h99=^vDQ)NmybS_EG1`(f%XsM?@-%h$Fl|tZ}V_ zuV*IkA?mqtB=temt@hT^HLhPXxVY|ywXNZ=Y=VRJ?Lxyuf-0z&{X`DXi zMzj!h@RLtU1518*=_8@tG9eaNdKh3-Xo7Yrm#$v4;<7HiUs&fK;PQ!dJzcLGuD!_{ z&BXmSx{2OsxJ2p|0vyFOdDeU84}<_N_1`k}-}e^3D*wHJSr;a0VRiVfTdl9xASA8r z-1R`NCNjYf%fmiR@eBUKiISZwg7ClNvp6gAYZ9XHGqIQBo4b0-r{)zH{pdr+xX+eG z@3=(TOtZdlSNpQM>D}EY9$$7i@W}b~BUSNbZlLe0lUTx-w1eOUIt^x>)Y~XiLg^^mQ`u)wU1C=hfw=|3`>cMd~ow`f=vf*|E3gtnm`h z=lb1e*R1wA%S>9PM<~H6S^zx39YPjbhLDFJ>|+lEj;n-H-6f9 zt_2+10%|(z4z(AW6_=K%9k0P3a!RWc(P~+FEU-Q`)5+7LWu3?eIF@zR+&kbp)6JE+ z?hFE>L-cCo3<0XKz=<63@qDBf-pNPVRrVB@ynRiX>V5$kA|()dgZ$`0d@Pmfvb1$c znZF5Hdq~A=7y6J$ZW(Ms?G-#eHHMYo@XjPvFaiR1c;!!CC?TbUhG_7IOcB_8B8;~w z_BwGmBitWKglRqW?H{$~BG~1y3dmggi(s65P8aVAf_W%NyWnhUHyLo40Brhcg^UuQ z%FvJF;&#MTzDa9(bGX+z7wA@G#6qr4u!3TAA$S?esmiG>Jb!|xq@-(SkBVPp%`U(p*5-Lev9xqp3Pe$r(m{C@uXJrI&B9sLZRvW;MMvJKH+1J zmB!%plQ!?Zf3SzDB^;lb22cn7%2!tpGRo;dyLlmVU;FDt;OYD&-#=cIc=lC9N3lNR zIQ9zdg&Wfk{sl25azh6YKP6Q>nE0r1*CCNZ9v=2_OTT0xMJcOj6=v;~ehT)|^_$sq z|2`1?A}tXu(zA1(kBHJ~;$LXUFxk0hTr~_tseX+X1Hy%aneua5pH--52w$Pnn=rTr^>IOstT~5ln=k4&7;hhJJw1F)6%0Dvnv~>gy=3 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 DateUtil.getDateTime(effectiveTimeStart); DateTime get effectiveEndDate => DateUtil.getDateTime(effectiveTimeEnd); + String get typeValue { + switch (type) { + case 1: + return '业主'; + case 2: + return '租客'; + case 3: + return '情书'; + } + return ''; + } + + ///我的房屋页面背景颜色 + /// + List get backgroundColor { + //TODO 未通过状态 + if (status != 4) + return [ + Color(0xFFF5F5F5), + Color(0xFFEFEEEE), + Color(0xFFE8E8E8), + ]; + if (type == 1) + return [ + Color(0xFFFFDF7D), + Color(0xFFFFD654), + Color(0xFFFFC40C), + ]; + if (type == 2) + return [ + Color(0xFFFFA446), + Color(0xFFFFA547), + Color(0xFFFF8200), + ]; + if (type == 3) + return [ + Color(0xFF9ADE79), + Color(0xFF91DE6B), + Color(0xFF6ECB41), + ]; + return [ + Color(0xFFF5F5F5), + Color(0xFFEFEEEE), + Color(0xFFE8E8E8), + ]; + } - HouseModel( - {this.id, - this.roomName, - this.status, - this.effectiveTimeStart, - this.effectiveTimeEnd}); + HouseModel({ + this.id, + this.roomName, + this.status, + this.type, + this.effectiveTimeStart, + this.effectiveTimeEnd, + }); HouseModel.fromJson(Map json) { id = json['id']; roomName = json['roomName']; status = json['status']; + type = json['type']; effectiveTimeStart = json['effectiveTimeStart']; effectiveTimeEnd = json['effectiveTimeEnd']; } diff --git a/lib/provider/app_provider.dart b/lib/provider/app_provider.dart index 01bc9ece..4126fb40 100644 --- a/lib/provider/app_provider.dart +++ b/lib/provider/app_provider.dart @@ -1,3 +1,4 @@ +import 'package:akuCommunity/model/user/house_model.dart'; import 'package:flutter/material.dart'; import 'package:amap_flutter_location/amap_flutter_location.dart'; @@ -174,4 +175,30 @@ class AppProvider extends ChangeNotifier { _messageCenterModel = MessageCenterModel.fromJson(response.data); notifyListeners(); } + + List _houses = []; + + ///我的房屋列表 + List get houses => _houses; + + ///更新房屋列表 + updateHouses(List items) { + _houses = items; + notifyListeners(); + } + + HouseModel _selectedHouse; + + ///选中的房屋 + HouseModel get selectedHouse { + if (_houses?.isEmpty ?? true) return null; + if (_selectedHouse == null) _selectedHouse = _houses.first; + return _selectedHouse; + } + + ///设置当前选中的房屋 + setCurrentHouse(HouseModel model) { + _selectedHouse = model; + notifyListeners(); + } } diff --git a/lib/ui/profile/house/add_house_page.dart b/lib/ui/profile/house/add_house_page.dart index e3b80e0a..42368147 100644 --- a/lib/ui/profile/house/add_house_page.dart +++ b/lib/ui/profile/house/add_house_page.dart @@ -57,7 +57,7 @@ class _AddHousePageState extends State { children: [ Padding( padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 16.w), - child: Text(title, style: Theme.of(context).textTheme.subtitle1), + child: Text(title, style: Theme.of(context).textTheme.subtitle2), ), item ?? SizedBox(), ], @@ -279,6 +279,6 @@ class _AddHousePageState extends State { showMessage: true, ); cancel(); - if (model.status) Get.back(); + if (model.status) Get.back(result:true); } } diff --git a/lib/ui/profile/house/house_card.dart b/lib/ui/profile/house/house_card.dart new file mode 100644 index 00000000..7b3ff887 --- /dev/null +++ b/lib/ui/profile/house/house_card.dart @@ -0,0 +1,158 @@ +import 'package:akuCommunity/const/resource.dart'; +import 'package:akuCommunity/ui/profile/house/pick_my_house_page.dart'; +import 'package:flutter/material.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:get/get.dart'; + +enum CardAuthType { + FAIL, + SUCCESS, +} + +class HouseCard extends StatelessWidget { + final String plotName; + final String houseName; + final int role; + final CardAuthType type; + const HouseCard({ + Key key, + @required this.plotName, + @required this.houseName, + @required this.role, + @required this.type, + }) : super(key: key); + + const HouseCard.fail({ + Key key, + @required this.plotName, + @required this.houseName, + @required this.role, + }) : type = CardAuthType.FAIL, + super(key: key); + const HouseCard.success({ + Key key, + @required this.plotName, + @required this.houseName, + @required this.role, + }) : type = CardAuthType.SUCCESS, + super(key: key); + + String get _assetPath { + switch (type) { + case CardAuthType.FAIL: + return R.ASSETS_STATIC_HOUSE_AUTH_FAIL_WEBP; + case CardAuthType.SUCCESS: + return R.ASSETS_STATIC_HOUSE_AUTH_SUCCESS_WEBP; + } + return ''; + } + + String get _roleName { + switch (role) { + case 1: + return '业主'; + case 2: + return ''; + case 3: + return ''; + default: + return ''; + } + } + + List get _shadows { + switch (type) { + case CardAuthType.FAIL: + return [ + BoxShadow( + offset: Offset(0, 10.w), + blurRadius: 30.w, + color: Color(0xFFF0F0F0), + ), + ]; + case CardAuthType.SUCCESS: + return [ + BoxShadow( + offset: Offset(0, 10.w), + blurRadius: 30.w, + color: Color(0xFFFFF0BF), + ), + ]; + } + return []; + } + + @override + Widget build(BuildContext context) { + return AspectRatio( + aspectRatio: 686 / 386, + child: Container( + clipBehavior: Clip.antiAlias, + height: double.infinity, + width: double.infinity, + padding: EdgeInsets.only(left: 40.w), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + 28.hb, + Align( + alignment: Alignment.centerRight, + child: MaterialButton( + height: 48.w, + minWidth: 152.w, + color: Colors.white, + padding: EdgeInsets.zero, + elevation: 0, + focusElevation: 0, + hoverElevation: 0, + disabledElevation: 0, + highlightElevation: 0, + child: Text( + '切换房屋', + style: TextStyle( + color: Color(0xFF333333), + fontSize: 24.sp, + ), + ), + onPressed: () { + Get.to(PickMyHousePage()); + }, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.horizontal(left: Radius.circular(24.w)), + ), + ), + ), + 12.hb, + Text( + plotName, + style: Theme.of(context).textTheme.headline3, + ), + 10.hb, + Text( + houseName, + style: Theme.of(context).textTheme.subtitle1, + ), + Spacer(), + Text( + '身份', + style: Theme.of(context).textTheme.subtitle2.copyWith( + color: Color(0xFF666666), + ), + ), + Text( + _roleName, + style: Theme.of(context).textTheme.subtitle1, + ), + 40.hb, + ], + ), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.w), + image: DecorationImage(image: AssetImage(_assetPath)), + boxShadow: _shadows, + ), + ), + ); + } +} diff --git a/lib/ui/profile/house/house_func.dart b/lib/ui/profile/house/house_func.dart new file mode 100644 index 00000000..93da9e2d --- /dev/null +++ b/lib/ui/profile/house/house_func.dart @@ -0,0 +1,12 @@ +import 'package:akuCommunity/constants/api.dart'; +import 'package:akuCommunity/model/user/house_model.dart'; +import 'package:akuCommunity/utils/network/base_model.dart'; +import 'package:akuCommunity/utils/network/net_util.dart'; + +class HouseFunc { + static Future> get houses async { + BaseModel model = await NetUtil().get(API.user.houseList); + if (!model.status) return []; + return (model.data as List).map((e) => HouseModel.fromJson(e)).toList(); + } +} diff --git a/lib/ui/profile/house/house_owners_page.dart b/lib/ui/profile/house/house_owners_page.dart index be68fe98..5f15a128 100644 --- a/lib/ui/profile/house/house_owners_page.dart +++ b/lib/ui/profile/house/house_owners_page.dart @@ -1,3 +1,8 @@ +import 'package:akuCommunity/model/user/house_model.dart'; +import 'package:akuCommunity/provider/app_provider.dart'; +import 'package:akuCommunity/ui/profile/house/house_card.dart'; +import 'package:akuCommunity/ui/profile/house/house_func.dart'; +import 'package:akuCommunity/utils/network/base_model.dart'; import 'package:flutter/material.dart'; import 'package:flutter_easyrefresh/easy_refresh.dart'; @@ -7,9 +12,10 @@ import 'package:get/get.dart'; import 'package:akuCommunity/const/resource.dart'; import 'package:akuCommunity/constants/api.dart'; import 'package:akuCommunity/ui/profile/house/add_house_page.dart'; -import 'package:akuCommunity/utils/network/base_list_model.dart'; import 'package:akuCommunity/utils/network/net_util.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:provider/provider.dart'; class HouseOwnersPage extends StatefulWidget { HouseOwnersPage({Key key}) : super(key: key); @@ -21,48 +27,61 @@ class HouseOwnersPage extends StatefulWidget { class _HouseOwnersPageState extends State { EasyRefreshController _refreshController = EasyRefreshController(); + bool get _emptyHouse { + final appProvider = Provider.of(context, listen: false); + return appProvider.houses.isEmpty; + } + @override Widget build(BuildContext context) { - final media = MediaQuery.of(context); + final appProvider = Provider.of(context); return BeeScaffold( title: '我的房屋', - actions: [], + actions: [ + TextButton( + onPressed: _addHouse, + child: Text('新增房屋'), + ), + ], body: EasyRefresh( header: MaterialHeader(), controller: _refreshController, firstRefresh: true, onRefresh: () async { - await _getFirstHouse(); + appProvider.updateHouses(await HouseFunc.houses); }, - child: SizedBox( - height: media.size.height - media.padding.top - 56, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Padding( - padding: EdgeInsets.symmetric(horizontal: 75.w), - child: Image.asset(R.ASSETS_STATIC_REVIEWING_WEBP), - ), - ElevatedButton( + child: ListView( + children: [ + _emptyHouse + ? 280.hb + : Padding( + padding: EdgeInsets.all(32.w), + child: HouseCard.fail( + plotName: '人才公寓智慧小区', + houseName: appProvider.selectedHouse.roomName, + role: 1, + ), + ), + if (!_emptyHouse) 88.hb, + Padding( + padding: EdgeInsets.symmetric(horizontal: 75.w), + child: Image.asset(R.ASSETS_STATIC_REVIEWING_WEBP), + ), + Center( + child: ElevatedButton( onPressed: _addHouse, child: Text('添加房屋'), ), - ], - ), + ), + ], ), ), ); } + ///跳转到添加房屋 _addHouse() async { - await Get.to(() => AddHousePage()); - } - - Future _getFirstHouse() async { - BaseListModel model = await NetUtil().getList( - API.user.houseList, - params: {'pageNum': 1, 'size': 1}, - ); - print(model.tableList); + bool result = await Get.to(() => AddHousePage()); + if (result == true) _refreshController.callRefresh(); } } diff --git a/lib/ui/profile/house/pick_my_house_page.dart b/lib/ui/profile/house/pick_my_house_page.dart new file mode 100644 index 00000000..5f026e6c --- /dev/null +++ b/lib/ui/profile/house/pick_my_house_page.dart @@ -0,0 +1,128 @@ +import 'package:akuCommunity/model/user/house_model.dart'; +import 'package:akuCommunity/provider/app_provider.dart'; +import 'package:akuCommunity/ui/profile/house/house_func.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:provider/provider.dart'; +import 'package:akuCommunity/utils/headers.dart'; + +class PickMyHousePage extends StatefulWidget { + PickMyHousePage({Key key}) : super(key: key); + + @override + _PickMyHousePageState createState() => _PickMyHousePageState(); +} + +class _PickMyHousePageState extends State { + _renderTitle(String title) { + return SliverPadding( + padding: EdgeInsets.symmetric(horizontal: 32.w, vertical: 16.w), + sliver: SliverToBoxAdapter( + child: Text(title, style: Theme.of(context).textTheme.subtitle2), + ), + ); + } + + Widget get _renderSep => SliverToBoxAdapter(child: 24.hb); + + @override + Widget build(BuildContext context) { + final appProvider = Provider.of(context); + return BeeScaffold( + title: '我的房屋', + body: EasyRefresh( + header: MaterialHeader(), + onRefresh: () async { + final appProvider = Provider.of(context, listen: false); + appProvider.updateHouses(await HouseFunc.houses); + }, + firstRefresh: true, + child: CustomScrollView( + slivers: [ + _renderSep, + _renderTitle('当前房屋'), + SliverToBoxAdapter( + child: _HouseCard( + model: appProvider.selectedHouse, + highlight: true, + ), + ), + ], + ), + ).material(color: Colors.white), + bottomNavi: ElevatedButton( + child: Text('新增房屋'), + onPressed: () {}, + style: ButtonStyle( + padding: + MaterialStateProperty.all(EdgeInsets.symmetric(vertical: 26.w)), + ), + ), + ); + } +} + +class _HouseCard extends StatelessWidget { + final HouseModel model; + final bool highlight; + const _HouseCard({Key key, @required this.model, this.highlight = false}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialButton( + padding: EdgeInsets.symmetric(horizontal: 32.w), + height: 136.w, + child: Row( + children: [ + Container( + child: Text( + model.typeValue, + style: Theme.of(context).textTheme.subtitle2.copyWith( + fontWeight: FontWeight.bold, + ), + ), + alignment: Alignment.center, + height: 88.w, + width: 88.w, + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(4.w), + gradient: LinearGradient( + colors: model.backgroundColor, + begin: Alignment.topLeft, + end: Alignment.bottomRight, + ), + ), + ), + 24.wb, + Expanded( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Text( + '人才公寓智慧小区', + style: Theme.of(context).textTheme.subtitle1.copyWith( + color: + highlight ? Color(0xFFFF8200) : Color(0xFF333333), + fontWeight: FontWeight.bold, + ), + ), + 8.hb, + Text( + model.roomName, + style: Theme.of(context).textTheme.subtitle2.copyWith( + color: Color(0xFF999999), + ), + ), + ], + ), + ), + ], + ), + onPressed: () {}, + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index 76419f28..ca549faf 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -281,13 +281,6 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "3.0.0-nullsafety.2" - flutter_datetime_picker: - dependency: "direct main" - description: - name: flutter_datetime_picker - url: "https://pub.flutter-io.cn" - source: hosted - version: "1.5.0" flutter_easyrefresh: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 5bd1305f..3e94e09d 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -47,8 +47,6 @@ dependencies: dio: ^4.0.0-prev3 #骨架 shimmer: ^2.0.0-nullsafety.0 - #时间选择 - flutter_datetime_picker: ^1.4.0 #随机二维码 qr_flutter: ^4.0.0