From e63cc4a05f800d0be60210414feb17eb0c11371b Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 13:25:47 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E9=87=8D=E5=86=99=E5=85=A8=E9=83=A8?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- assets/applications/advice.png | Bin 0 -> 2643 bytes assets/applications/all_app.png | Bin 0 -> 2621 bytes assets/applications/borrow.png | Bin 0 -> 5575 bytes assets/applications/box.png | Bin 0 -> 5945 bytes assets/applications/committee.png | Bin 0 -> 6921 bytes assets/applications/community_phone.png | Bin 0 -> 7181 bytes assets/applications/complaint.png | Bin 0 -> 3677 bytes assets/applications/decoration.png | Bin 0 -> 4719 bytes assets/applications/digital.png | Bin 0 -> 3441 bytes assets/applications/door_code.png | Bin 0 -> 2132 bytes assets/applications/fix.png | Bin 0 -> 3902 bytes assets/applications/goods_out.png | Bin 0 -> 2255 bytes assets/applications/home_live.png | Bin 0 -> 5103 bytes assets/applications/hospital.png | Bin 0 -> 2200 bytes assets/applications/makeup.png | Bin 0 -> 5657 bytes assets/applications/oepn_door.png | Bin 0 -> 3169 bytes assets/applications/payment.png | Bin 0 -> 6290 bytes assets/applications/police.png | Bin 0 -> 4034 bytes assets/applications/question.png | Bin 0 -> 3089 bytes assets/applications/snack.png | Bin 0 -> 6524 bytes assets/applications/tool_bmts.png | Bin 0 -> 7453 bytes assets/applications/toy.png | Bin 0 -> 4435 bytes assets/applications/visitor_invite.png | Bin 0 -> 4575 bytes assets/applications/vote.png | Bin 0 -> 2380 bytes assets/applications/wine.png | Bin 0 -> 2853 bytes lib/const/resource.dart | 100 +++++++++++++++++++ lib/constants/application_objects.dart | 69 +++++++++++++ lib/main.dart | 2 + lib/pages/home/home_page.dart | 9 +- lib/pages/splash/splash_page.dart | 1 + lib/provider/app_provider.dart | 42 ++++++++ lib/ui/home/application/all_application.dart | 52 ++++++++++ lib/utils/headers.dart | 1 + lib/widget/container_comment.dart | 2 + lib/widget/grid_buttons.dart | 10 +- lib/widget/views/application_view.dart | 53 ++++++++++ pubspec.yaml | 1 + 37 files changed, 336 insertions(+), 6 deletions(-) create mode 100644 assets/applications/advice.png create mode 100644 assets/applications/all_app.png create mode 100644 assets/applications/borrow.png create mode 100644 assets/applications/box.png create mode 100644 assets/applications/committee.png create mode 100644 assets/applications/community_phone.png create mode 100644 assets/applications/complaint.png create mode 100644 assets/applications/decoration.png create mode 100644 assets/applications/digital.png create mode 100644 assets/applications/door_code.png create mode 100644 assets/applications/fix.png create mode 100644 assets/applications/goods_out.png create mode 100644 assets/applications/home_live.png create mode 100644 assets/applications/hospital.png create mode 100644 assets/applications/makeup.png create mode 100644 assets/applications/oepn_door.png create mode 100644 assets/applications/payment.png create mode 100644 assets/applications/police.png create mode 100644 assets/applications/question.png create mode 100644 assets/applications/snack.png create mode 100644 assets/applications/tool_bmts.png create mode 100644 assets/applications/toy.png create mode 100644 assets/applications/visitor_invite.png create mode 100644 assets/applications/vote.png create mode 100644 assets/applications/wine.png create mode 100644 lib/constants/application_objects.dart create mode 100644 lib/provider/app_provider.dart create mode 100644 lib/ui/home/application/all_application.dart create mode 100644 lib/widget/views/application_view.dart diff --git a/assets/applications/advice.png b/assets/applications/advice.png new file mode 100644 index 0000000000000000000000000000000000000000..e59df43830fe4c33805154d0c205c56c1fccceb4 GIT binary patch literal 2643 zcmV-Z3as^sP)VC000UaNklj;;0pEN2Ne#Du2|e<3tC+>3_ffm$ER1izRff8sTubH@E!v?LpyL(zi zMMc@jNJU;6CE#7bEeJstaB`@#vva5rF~VZqr}U~+D)qKx#%P!n#Jak=_omZECx{n25m&K}9bk>< zv5t<`CMTIv5Y4*!wJi8aX4agDtJu687>tz9nBUg6<1N{2DTq-s*3FDh$cn1C!W=Mk zGLy;HeX=T25No3GcL1K1LDV9kmqF((kvY3APdbE8p4U7%XUYp1wRqC0U}|(0ohkZL zI+@U)T!^QPbJ8mkI+N8Y+bN518T04@@xq5jcRZVF-QqIDn8`r=96!DJew66&=TYWf{+89lgw0O%TnQA!6OLskTkBPD(Xd6OC~e!PDhs z{PFho_Sa+!st08PR1B+hzHAVg%D4b*d>pz z(PHbWiw9zF*hO z<1yiecnCAV+E*d8)d0T_6zVI<`vJTJUE4qlMtUw9h<2lV2;~sC90C;}xeJ(`801^5 zjx>OiSb$SR$aWo4#^IP|eWM8L>eM%b171i$3^*W};VFnRE(JVBK@2z`nc*pjGA;!? z#x&#K5zLQ-^3QGo_tv-JDTuyV?Oh=S(K~N_Q&tdtv)a2t3Zi%3`lhTP`ewCvg`&}T z6N4XCt5feh_FOqy+t9?qQV>0N+QR}0qKD@CB^`Q*%n2Qblgp8|7K2cP3#I5CX!IK_ z7(VRuD2En&=L%~A?8FQT3g@DLOc}8)hYKH_kj8PP8#+!mh=U*X!x+FH8P0T*48&$p@n!* zuZO@+pcv=E3*0<~Mf2woy;{)yM)P?Cgd5@^Tmhj!1jbinZxEP|NfJ44g0u%{(a6sv zVqFgjHALGD{ugFrz_@n{7 zIiTYY0yqPWOn~gWQKVt-EeQHGk-o8`qvegfC=`%nnhnbYi)I2}B>;Pu6e+J9l$-{@ z{<+{mx^~;X~$co89tZlfF*!mSS%4LOJjyp}DpNj~7(AnC0%w_Efxv|;z z0KnG+$aMPfs`MmXK5FPg*}L~0Qw{A^o`Esp1-)M zpGYLi2M76XhIJ2s%iPp<)j9t%6>p;Am8JBtl zDW@zE`oZ{7IzpSDYi<2c&V&pB_7=Mb4jlXxvuI}UX8;s)gU^3zL{AY#ews?{a)ehj&A#vOVi$|keJ^D=y#f?{bAm`Imfnc z-8v$XcR`3_i1`$8np0a_f3qbhd%N%G!YrwowVt4X12rn9%u_l>p`A5O-`Xmr|h_(-7E6JsTt!5&8 zk~!x}@^$<0suS%O0(UVumg|2%MpwL`ErxDAxp(j0fBWRWD`i3falF%-n)sEPh6e@n zEfT9&``^{h0GKNg`-VpJt^WR*9bq_po=-kh5GM|=`m|KuNoTNo=mpB z7&sbv4k+{x?Y^t3zH~`NMPCfW>j2KU^9>R8Gq76&J>Jo==aoGD3S?SIKpg)V($mv( zg=OiVWzZLh_&R3HAfls!@jNkYGmMeHJNce2ki;?!s$?LB#c(gisUUjcs?VAVqR)nV zQBFbh!d0I&6-1v6_oAGF=!L63YbuC78}3Cp1SatfjsuKKL0Ao^^$ z7v&U0FI@FmQ$h6Ea4*U!h+eqrv!;URv*BKp`#%{o_`dJu#6AE3002ovPDHLkV1oL{ B^ico+ literal 0 HcmV?d00001 diff --git a/assets/applications/all_app.png b/assets/applications/all_app.png new file mode 100644 index 0000000000000000000000000000000000000000..9fab8df6cfcd209795659b613a75d53dca3121ee GIT binary patch literal 2621 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 X|Dw3fQJX~`&;qyhOySi!PEY;^PK$Qw literal 0 HcmV?d00001 diff --git a/assets/applications/box.png b/assets/applications/box.png new file mode 100644 index 0000000000000000000000000000000000000000..633f4036ad687e4dbca4784d6d7eadcac35ec624 GIT binary patch literal 5945 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 b0L1?Xe5R1=SqgG?00000NkvXXu0mjf$P!na literal 0 HcmV?d00001 diff --git a/assets/applications/committee.png b/assets/applications/committee.png new file mode 100644 index 0000000000000000000000000000000000000000..478ab9b5a552b5f7b619f0684cdab5896489eabe GIT binary patch literal 6921 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 z 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 P00000NkvXXu0mjf)6*d- literal 0 HcmV?d00001 diff --git a/assets/applications/community_phone.png b/assets/applications/community_phone.png new file mode 100644 index 0000000000000000000000000000000000000000..bdeb805342b43be1f6ad0496915398e10c79b2a3 GIT binary patch literal 7181 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 TD&Q(*kpyUK7~m^#b`k#rM=G`z literal 0 HcmV?d00001 diff --git a/assets/applications/digital.png b/assets/applications/digital.png new file mode 100644 index 0000000000000000000000000000000000000000..a575f236747e6027ba687a55fa525c7fb4a13d32 GIT binary patch literal 3441 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∨B1@+gjeSRg*&(FVvW@3rc zcZk21fcumu{Of#AO8{`k1Xwu#zL@}|OF-5@aYx@L0t9=-jBih@OX6w+4~$^B!hT~f z&G;qXAs|z%%R(LR6G3ZTBH8+mO&H+BJdp}tZzLN66FV2r_wsf8rIvl;LZ{r3ajv?L zOq@qA-y^xmmL}Dwn|idx+c>x@c3s74K<72&quCDm%dBAeeEBmwM^yH9Zky?i$ioZH zm*4+qQBJW=v=JjSXFEdIM%?dAKKG$7XeK%+2r4cvp0RXkU0gDcy9Ze~2o)uzB|TT4 zxg4Rjhg%1_wrGXyI9J~g;10NO@9yS*_yH=SqE7+oh`2)hn`rwCoS&E{G&U~(nd#V% ztxXS$a4iUrEVz3`M7&dYfBxg3B3F3M?*`p>WQ{pLWly(Ft-ehWrn|4PgdYILj}X97 zXG9df#GnQdsk@MuqPLEE<$YFTtzrwrYVsc{5YzH#4~``WJQ~=$+(3M&kd&sN+U04_ z=T{1Wt+}!y4L5pAWGatJfQl${Dx>yy>S}9;$H!Glpt^jE0W}{#IzDl2#(HLM%MW`( z2SnSJ>mXAiRgWJ*zjr~?(xjU+ z6DsksrIr;>y}Q;<&0lPBO9+Xx(_bjlqxsn3a1P@Og%Iow2sSaIDqf{i1o8TCa?k$S z+``lDKI3jPL24HeQE*^4Qx*zIy+oWaQ(TKue03<@@@KuZuZR=EF*){NC(PsZbtw=C zBzly*~=!iZs?{pHw#OKZbUF{{1}k?R|nEXG&Bia7C|Q1Xe#^E%SW z?-AiioDYdEaLHnosiuspoT~NtYJ#H_>Da1%U7H0G#gdonT zM#>J5rJGSY|BnU!U05o^m0|?e;9!~%uF$^@mlmeKz_?w_;(ZGMoVgvQ;f&ACe*g^! B`#=By literal 0 HcmV?d00001 diff --git a/assets/applications/fix.png b/assets/applications/fix.png new file mode 100644 index 0000000000000000000000000000000000000000..c3d77d90aa0ac3b5eff6bbf9a104432b549bdb9b GIT binary patch literal 3902 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 M07*qoM6N<$f~db&uK)l5 literal 0 HcmV?d00001 diff --git a/assets/applications/goods_out.png b/assets/applications/goods_out.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4b0b8a4d70f142500adb4f82aae1d287de9775 GIT binary patch literal 2255 zcmb7Gc{tRK7XBGyn~<_E8Ij30Bc^0;FtWtZ7(O9W_@s!DZBVjg%sj;ClaMSUTN=t3 z+gK(kWgA=dDMH!D7P6H1bnpH1KKFUW8XGsTvqZ7ES@8AaJ5-eQ zj+vObD*Pn8F%#DQxgG|Qe2kNDD=QFyLk>$~oKK8zb!eo!XT(y;f_z}>45%d?{7w6U zP&`CggBow?hv?l7SNs^_cCYJE2$F@-iw@e$+x*f1%Krd8!s*%Nb#)OU$g$VmpRyXn+23QIg5cqJv2@?*3(9g=rmuK> zFfr8CU4;O(&G}Dtb@Dk^+}+)m!7GBX_Ml#um<*n#vW%#<&0j^eo&ietW+Ef5(OZSa z?Q7#+Eh+P13{n}lLPOU}^%`X?MjAq9?z(YjvbGoXcwUv%g3#;7i-(e|tgQ9|pQP)c zIcrhO_Z9<*IkwHjNM((~{iQd@pr?*N?;hP)UpMA-FH`D-zAQF@e%{AM-yF+Fo^O}& ziip^3<$3y4l$H_oj84B^=BhQ566%hP|6x4!5}w`}ncVr(;?qJn`#^JZ?j`H$jxzdT$12|Z3L6Pt+qEJgo*5U9bu z+71%~L*?YRI|C#QR?gh$?KI zRS3HZAs0Ftg)hwFY=5O>|Fv?I>!bJZ)?Qy<-x)qyA&3>e*myZGaLLTKC6QcBnodtf zu3hK|_5?lStcNgO#hB^xMX+VqD@eWN} zMeTO7-b6}bmo*I3Z*H1*Bgm3{21Jb<%_Yd$;XCXiwMXx=+vrTnJ~=h5!68l~c}^Oi z!ch7l*VvgRJ`8of>ZTg!_r!H;$xnF=a9ytOcDsYk=j~Z870u8Zk$)(N_I?YPl1`%< ztk^rfhSOECD<{JE1mOQ!NeL4TKT)a`d5PXfq!~&hRu|2P1B3TGK|1kG##1c^d6ES7 zMm+}Y^@n+C3z5WBzd4u@NC$%EzpNV}U%zu5@V~~Q$*PSwJetB=3Np*eQ7L6wNlG2= zdKNutao=8_8-aIY_xPs*3R4F{+X<(7_`HOl=vrJhWQiEg3VbCQA{>-U13MUN;<(t< zqYGRF*vszPszh~Pw&$~$)g28C^9q0ea>2X6kGPx^^?+CQgQ&^!Zudj8CQ6~P4L|OD zCZ1HCijOpjtu+)qMNTbRh@pO#8guh^LQQ__He&B+l_{^hYZYV=Mk4y*Gnn@C+0(K5 zb1{55tujfMo^KTp>?UL82M)fPs4`H(=#TM!&C>@b_awE&%nOJAYnaMPKdHtIbvEHL8A9&mv@zImoxCosbKk)#_;% zacmqU1KVN>q4mq8X=uXpFNY%zB#+%rJO?e>SY1{jRrn*a{mK{GXmu=Ep4-ywhunIh z)-xk_E62%A4mA={>ODl|PolHS37W`$H}PzwQsaSrPqkE0a~Qb#8pTD}dWL=rqW}LTutRTPA`-cWQZ9GGyCwBuzJO&n8!`{xrICYVNXlg^kDe{+;=-}EY_cbeL{WflbVI` zMGSSyeeuT_bNnX~ozxApB2^DrZe-ucngIK{sD}kCeq`QOlYpe3xg`0*iO?a4j>`h^ jVf(;u|1Z!kf!cwNhP~j<%;2i`9~HpH5`(TZzZCxucO@_J literal 0 HcmV?d00001 diff --git a/assets/applications/home_live.png b/assets/applications/home_live.png new file mode 100644 index 0000000000000000000000000000000000000000..d8801beaff4ce9ded63265984d41217117ecf1d9 GIT binary patch literal 5103 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 literal 0 HcmV?d00001 diff --git a/assets/applications/hospital.png b/assets/applications/hospital.png new file mode 100644 index 0000000000000000000000000000000000000000..b42386ca0e7fe2741a86d523af87c787285c5d55 GIT binary patch literal 2200 zcmV;J2xs?+P)VC000PINklnUs09gvls*(fB_1epDIZx+V#yd)Y1IlS=>sfJ zRHa}(L=Yjhv(87UEQk=QA{9Ys^H5Mj1tDoGAa+C(3ZfEeW4h~|oqNzEOYq0qbMNj> z?t1pj>z;ehJ^$Z5vorVJxtAcvowz*nkFI^#`zcTZa z*=%Lkw@DlarI*25?_1g|uB45j{{W7DsHf+FD;`8CIJ28rlN8$uZP+@_Q|R>%I_`1tsGgL+zKdd(r` z^Z6Ty=m}>2(7Y)ArIh;Yp+kp$*|O+jsL1oYKBd&DI#r(^A0K~v3@#(96o`=$%{35+ z03;I)dyR&rrK*es2n*=XrN4rM?It9H|JWlu}U+fy-MU{C3WbK_ZU|zSea!rIX1-UW(PFZ+ z0zNZ;wOlTLcVc3q)QDKd5c~W4GhJO>4=Sa;0$^n$PNmEO1=w+%hccPWxAyJZ=bP$d z3~_L9aHH@0&jPsK)S1{Xslb%$x}P2!8w)4PjV@z|`F#H2+Oi5GM`FCR0z?%4C+=Cl ze*L4S|BuEH2L=XCGjng9CcOmUIRFj+L3aq~G=TR5*id`On;rJ!-QC@TBO@b5|Ba16 zEZ19B$jrBv%jK7Hxm@`4CD$Sfq|<4qTCIKxzz=Fq=~pd@=vS`me!_IEjxof1K3^A7 zcX#(n(;n2Rq&?5uu9P}j=T+sIAP7Eg`tB$YE%YRTXhHN=yA+76R@6d$0?~r#t#&C8 zTdk;t`UIi{(Od0OAhudj3-t*^3!=B$r9f=8q893FTZp+_?#-oA$!N^af_`n`(skY2 zl~Rwl-G~iyk2oZ+8;*@fsh&U=F(5Re)iUDw^p%-^rGLc%UYnc3H%S2JnbmwkaK z5cL&EfTd)jKwO}JER?d)DI^muh~8?K0#QRzK8_UDU@hSG0>r3RPvhOVK-3-s^a3#g zA{XG`lkUgB^eDiauFR~^AK>CX>aCv8=mW8v2*fCeCviP8?g0RI%$e#T`Ym$RZS+o9 zACM4;Q4mk%ZUU;u0PdM*`Z6eW8}-ecjXl*O90@h{w03(0$@uZRvYl z+Wx;@!cpoA?u^S(M?wt6PrFg-+Ds^5&uSLZ@}9&3?yzX!%g0lXQi9cG|%)rvhMBlu1dH=veio{Go&6wfe&ZFZ1cAj*?<5FmC9MV1;&SlXu2{s6Ntu=wO;{& z*nUimTO<&TC2PL|0 zbM<^Z9mly}DfR1RaEPVVu0TZLPEwx(5S~3b=g?3hI@Z zX5L!INqEHSMcMN-QhukF1oh6I-0wKf?gIx7=$wdp)sZno&+~?rQsH4$VPoWKodPpN zbWgEZ95qb@V~E4U!)r>V(lKVPjfS)?icYSHh@SI(|L!A4j!c^BU<|QPC^(aoli`}o zAIfQ_rgAT8@4K$MeQazjT;XoK1-CK8uo>Yo?4IX+2EaF%`7HqIZTr}=2oqe9Pef;x zQo{!i9(=mdI2(faKW964?%b@Dx|5kdP+OfX2SrDaAfhnS!iT^MMD(oVI7dfEN1NIN zzbS}ed;9zQ-E=yAT`ref;rsraN9IO*R+7u5QYj{)pjLXb=phzU?20U<~x3d95`kbn>*69r-d6i7e_l8FK_0SY7_ ag#QAjfSAqwI)1wV0000(COYsphzQ@)V!## zlKMw$Y9Rmso7F{Vn)=yp+W7miccg_@2Y6eiH!dQ-@%OR|bh=z?WTO8N&X5e@Hitx% zH0h+n=AR1Ov9KrOXXm-LlO#8*-B7&6=|qo>WbcL23r0ph3{36&ikMQ@K)uZ=d*6zXvW(9gz%Tphip0V7=7ftqSoytqSl zM~Vz*ltvH%nZn4K>}k-t|I4I#Cb@I36DjNgXdtt8 zql3NuZ2xABY{$Z`F7Tcejt7RW0Zo)Qd~0<0;4?gtpF;fnjvLYC4}&2GcqU=+I*Zty zJ1O12uK;JT9E(;W6w3jvG-7tPXl%8gS+)(_tZ#Rp%BKSC$N*dE9^`pa)zz>m=q_ut zgH&dc(If7^wm-(l{nVg7uY(&1?AbhR6-Kz6CsfD-O(n4wKFz3V=dq zl7-d%z)oqA5OH;VJ+LtHP&)^4wWw;ndG7KBnDEz6lp*)hym3wySHt`Ux{E>N6351l z;P7ZvP=e~=_~+^8Q=6`c^9O*dcu&@)XWKTC7cMGY5j+XBS<3Ats6Wg%Y1vzjDfm4Y zl_G##v-s@2dZyNyGV*g!|9Wf85i1YD1R>i#`ud0>eMpB{8`I#C!|%Wa9P)O-t*>Uz44_v>efNa(Wu;1LXnQEYdN{dI@ zM^)PDb<+&#Kz5xFb?WetT##Pu&Csh51-JDtV25Kybe7#CZVAh}QcQ2UxFiHxzW6qF zFzQ1M(8CDLL%paape~{z zS_-rgM+QV@VK7I*^H2421_e+H%!+ns&h_-p%gg&PvbxU*99yg1yUtTJQS01$5>ofj zX6z^pH3I;bf5bu+?{dS{>O8rN&S2V&GWg&)JMYugk_V*i7a6?Opwf0U9A^JSB99-s zxvf`UuxWNuf+}+Z0|Tl*R`)4^_d{;NS_s?p2e)Y>>WM|~Fl>^eyj=HM4=bc+B#JjY zTwVQ|OG*Sy>J|VxB_*ZFcd7W)PhqL&e{{Y%DpP;q%+KPPHCWtW3lH z{sOx?JcKd2_G7C;T>-|}#Hohh+d!YhP=dJVV+LAUl^;anpq`mUSxZaH^B?bY1DS>g z!IjJ)QF5y~NKL!cOJ#kIp-)$^kA|{w)AtZ|M?>}|6>sVq8mffq7T?1oK!z)T=ndQb zJ5c`QZa&G&sWfjJVk{Vd?PllhBJCIZs4oG5aVZN9cKr0?FQdeY9-r>4YV4Z+IN#r88i&jY(LuO}aou%?C8I)wvkYqIf}2ogW@i06J3DfS zy6<;+Lm%j!WTlCkwaz~_T3|%v16B`#+0gNZRkClW5!tM3l){{eTwQVTF%Q4T9L1x` zevV#TTm-GmJb8y-b4N6fE~p^EPqffMd0MCMgJGTGpvpCyv8LkG48O4B&N|G<-oe#{W%}4kjQ={@U)J~gtNM`GOsD<~i}iJ2qvi(E0--W3+Yf8K!%`%jBT$?gWc$3J zm<+m|h8m!A9J(>aE%QYddBy}?VuvwnD;8E)Z*MuOAo&=@8$2$r0`z}f&uE|*Zjeq` zV0G8_xuy*vyR6F-Wt_Tjc6u5DdqZ4d{BL}N<)@>G>uffz#`xk+qWrRX`oRa3fX#gq z{-V865jtfy{nNuDeatLxN;%kpsRA^z;Mk+uK}X zJ`#$})TeLG8f7F(G8mJ_zMhw)I|o<)+?6zcZ=c~VADH6w*DDnAz(pqOki_CG4=dCi z)#nS|P?k1O3X~8Dt42dBZ5OMbXLyR6XLc16LOKM1<8)^W_i^eCNsgoBQj8@ZcP*|b zkQZ8G@(Cj=7%NmR)B|sqN{3PIp0L6A@)$Ibz%c`0`SQbNVBE&~14z;sYM?83Aw$yc zpJB~WNNL7Msm3FL_c)Q_<_u76?rUmB?8>ZGwumZM4tX-CSM2UHjd|wWynpemZ<%5V z)>92A-wNzbG$_eCU-FhZ6MqN7k+a6@pZ-w+T-gcA7O6De0)RK948AyQMab}oY1o0YFSG!pkDVm2-UK-~I11`K&eY(O z9ddpR2$gU!yiX4yO9vbt8qq(&JbCi(Pcpy$_!<K%@-{HCQPSkK9ccgj>z8Sfqmj^R*cdp!=17-${g zNq10s-L_-{+T(=;wqnTqXHyZMa68Yi57|K(DUSNOf3Haov#zhNFYoW~H**v*4C;`F zf7fiCa8Dn*;HZiGv+(sy3v8!rH(!X+HDn*KVb@$gd+#j~pU=jP!};#w0PZ|9s>+=u$)VN3F+ZTI8bKX7Gk-CIsq5ms^L~@xg&-gvpHBvCWZc?Q zfzSN@{X194ca&Pt;*YQb>#@0gHm-V96OE=X`a8)Yk*DOdmY9>B9mMrY-hF)NlmDJe z!sY7D4W~p*Ht{9x*Eee)aG1wfN3cud)L_IKB47S-oFXr`oqb9GaDOirub-A`fXCNz zJqiwl0{b6eNN8Gzt5-UFeM+jRno*cKS?QQm40B| zod?5wve9^_{$K`H8}azcP!P8P+3dm4Yw4$U)TU=*A|3a}4or$ubD!Rhz9acf7AYBn z?GEyNcm6QZeQ6B3YdRv!CEoafgANX*How)x&R2tpcWae$209#b(}aa-iK;QB8b4(> zRp6&(RA4kFJ66iTkdHBNvZ0^bOFGsg61-KMy8B4R-!AiC*Z$3Syy}5)RZ2Od@}1TN z+lMnz7OY6^eLIQUT99h^K}_tu)$)_;Aa)~NqkTV~@6 zSy(*flec*}SLc)kRcQn3BSnHf)qfcs+`QiDskTHpziEOq$l^+S`^Hi8W!FN%VqDwS z8avmNGgGe5H_y4ZO%w@VCJ!}LE_(8xPEW_Y@YaPxD>>QNPHTxmkwH06J6@Dx*kZ<> zx%c0w)-gyL40`hCG%8O}Vi6ShBk{jfYx4mGCq)7WJQvMAp zu$yjEq6(pZ=@pUL;L)^%%Xvcc#l@4s?5CgVMmat}93`b+GV0+V#ML6+3^w9n1b~di$cY9 z?>CsqC_{WiQ?GNnvp>w@@5Ndi#c<>7q6A#YTeb^yy$v7uASP<`N=|Z1kTLe8!NapZ z(`z_5-5Glo?TWt-@v*rCQ?EdSvrveJwf7kn+m~DM9j#KQ^oj2cw$|1r-CSM2_g2?W)QYv<<$cOumQ;hr^LcTM z)^A0qQE`dJdD*A3zS>=KT>n+M;CNlJjQBseVHD79DAM%yTDx52aSpAlt}b9ni+6n& zibhW;cC&^j@bC~qq9lTaePE^cbxqM}yc6Sea?wT9=zYg#9A*$YEXDxg?S73ng{bcF z9UF>_$WC`9peW&<%4qaSLISU!e-jOGJRXb9wObm`8!#k@($IE=N$+AU7* ze1~j-TO3-(+9VuKdM&f59eG*4*RV4(B=IH-xBRE3BZ59%JGIArxhZ6OSHxB{(ul5o zM=6u4!*l%^>1W7Y-2D44BX2jl!W6P6%=YZXjDtD#lAlWJYsr>F*JmG{ErMPJ3z6;^ zjSe1ce>)f}dzOj28Jp-SD`Ln@rW2GXY(!wyR!~sjVv@JVpL74a{jxxuWy`e2A=Af| z$x-)XWWoum9TDd1<0D5;M~8JR3)~92>EgsZVE@s)zd-#`h=-zU@+Fp@ciw5$`}9+e zXY0wf1ES`fd*&)lpOIg|T)Bl#E8?0EZEo7GkMhKKM0?oE?*~b|9^i34COb$Sz4#6@ z$qLNU`x>zTJ00SJ(Uk`epF^^E_pLX@fHTLo%6i8;U2|lR6qbcPWOKy{PKsNpyFiiu zJ_K8d$v)Y#+E=|d<`p1ir*aSBQI%lJsMU916)32qNh71AZeeVt$){mXu1xk#f?HFI zR(`&((yW21NQ(Qv?B_C2Y|q4vdHvhS5ixyiu~uVTTu~n>?O(T^4HvAj;gg1-C^>1! zNovAlec=|BBT@0*I33l8TauiK+Z{^|!0cYtKLtkP73+>Ta^n%%gv#zlW=d$a4DuOP zQDgCk6Nv_3a89|;p%OC)1c$>jm?%90jaJ-;>&!<&h@_e?+be8^u>am`S>noI6eVkP zKl&vz0wGH()f%|*Prn4w`fS<$#j6?D-AKY=7#7Q35Bl#nFKQbaf_#E$0l_NEY|&pa z+u?cbnwsY-%VNi_fesxQsr_|Wp&CTt-N1!k?Z|&Dza3#60u&}p%QRFHmmJ^EY7WI9!2Z3TI zmNd}PdXG30vp6cYWJcYw79QCyhJUtKLgbKvnP9?>A1fgb*6{cYa)P-MQ!NlbA7d2Z2lB5%=$=V1sLKTqEI`O>;M zBksRCZ!ng(p#8paTYXQhRcsYL9RIW2Q)vt2vP$W E2TX6YW&i*H literal 0 HcmV?d00001 diff --git a/assets/applications/oepn_door.png b/assets/applications/oepn_door.png new file mode 100644 index 0000000000000000000000000000000000000000..f29f8c1a36625aa106a31a012e1389b2e2d3f806 GIT binary patch literal 3169 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 IM6N<$g0_;yod5s; literal 0 HcmV?d00001 diff --git a/assets/applications/police.png b/assets/applications/police.png new file mode 100644 index 0000000000000000000000000000000000000000..49ce6dbd0586e605479f72761c32c24401d5002d GIT binary patch literal 4034 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 literal 0 HcmV?d00001 diff --git a/assets/applications/question.png b/assets/applications/question.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4146e7914c86dd0a1e918a13478e094e5999ac GIT binary patch literal 3089 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 literal 0 HcmV?d00001 diff --git a/assets/applications/snack.png b/assets/applications/snack.png new file mode 100644 index 0000000000000000000000000000000000000000..5b66db2a043829b73422fe3012a9e98eb29250c9 GIT binary patch literal 6524 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 literal 0 HcmV?d00001 diff --git a/assets/applications/tool_bmts.png b/assets/applications/tool_bmts.png new file mode 100644 index 0000000000000000000000000000000000000000..186fc408cad61c0c48ecf0a448ff999eba82d401 GIT binary patch literal 7453 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 Z{|`5Jw(Hs5^05E_002ovPDHLkV1kVLc(DKg literal 0 HcmV?d00001 diff --git a/assets/applications/visitor_invite.png b/assets/applications/visitor_invite.png new file mode 100644 index 0000000000000000000000000000000000000000..8369c182b86cdc21648471ac346e070204a47c3b GIT binary patch literal 4575 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 literal 0 HcmV?d00001 diff --git a/lib/const/resource.dart b/lib/const/resource.dart index 89cd90e4..5fd5f746 100644 --- a/lib/const/resource.dart +++ b/lib/const/resource.dart @@ -3,6 +3,106 @@ class R { const R._(); + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/advice.png) + static const String ASSETS_APPLICATIONS_ADVICE_PNG = + 'assets/applications/advice.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/all_app.png) + static const String ASSETS_APPLICATIONS_ALL_APP_PNG = + 'assets/applications/all_app.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/borrow.png) + static const String ASSETS_APPLICATIONS_BORROW_PNG = + 'assets/applications/borrow.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/box.png) + static const String ASSETS_APPLICATIONS_BOX_PNG = + 'assets/applications/box.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/committee.png) + static const String ASSETS_APPLICATIONS_COMMITTEE_PNG = + 'assets/applications/committee.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/community_phone.png) + static const String ASSETS_APPLICATIONS_COMMUNITY_PHONE_PNG = + 'assets/applications/community_phone.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/complaint.png) + static const String ASSETS_APPLICATIONS_COMPLAINT_PNG = + 'assets/applications/complaint.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/decoration.png) + static const String ASSETS_APPLICATIONS_DECORATION_PNG = + 'assets/applications/decoration.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/digital.png) + static const String ASSETS_APPLICATIONS_DIGITAL_PNG = + 'assets/applications/digital.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/door_code.png) + static const String ASSETS_APPLICATIONS_DOOR_CODE_PNG = + 'assets/applications/door_code.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/fix.png) + static const String ASSETS_APPLICATIONS_FIX_PNG = + 'assets/applications/fix.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/goods_out.png) + static const String ASSETS_APPLICATIONS_GOODS_OUT_PNG = + 'assets/applications/goods_out.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/home_live.png) + static const String ASSETS_APPLICATIONS_HOME_LIVE_PNG = + 'assets/applications/home_live.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/hospital.png) + static const String ASSETS_APPLICATIONS_HOSPITAL_PNG = + 'assets/applications/hospital.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/makeup.png) + static const String ASSETS_APPLICATIONS_MAKEUP_PNG = + 'assets/applications/makeup.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/oepn_door.png) + static const String ASSETS_APPLICATIONS_OEPN_DOOR_PNG = + 'assets/applications/oepn_door.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/payment.png) + static const String ASSETS_APPLICATIONS_PAYMENT_PNG = + 'assets/applications/payment.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/police.png) + static const String ASSETS_APPLICATIONS_POLICE_PNG = + 'assets/applications/police.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/question.png) + static const String ASSETS_APPLICATIONS_QUESTION_PNG = + 'assets/applications/question.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/snack.png) + static const String ASSETS_APPLICATIONS_SNACK_PNG = + 'assets/applications/snack.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/tool_bmts.png) + static const String ASSETS_APPLICATIONS_TOOL_BMTS_PNG = + 'assets/applications/tool_bmts.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/toy.png) + static const String ASSETS_APPLICATIONS_TOY_PNG = + 'assets/applications/toy.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/visitor_invite.png) + static const String ASSETS_APPLICATIONS_VISITOR_INVITE_PNG = + 'assets/applications/visitor_invite.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/vote.png) + static const String ASSETS_APPLICATIONS_VOTE_PNG = + 'assets/applications/vote.png'; + + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/applications/wine.png) + static const String ASSETS_APPLICATIONS_WINE_PNG = + 'assets/applications/wine.png'; + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/example/QR_code.png) static const String ASSETS_EXAMPLE_QR_CODE_PNG = 'assets/example/QR_code.png'; diff --git a/lib/constants/application_objects.dart b/lib/constants/application_objects.dart new file mode 100644 index 00000000..f2726a40 --- /dev/null +++ b/lib/constants/application_objects.dart @@ -0,0 +1,69 @@ +import 'package:akuCommunity/const/resource.dart'; +import 'package:akuCommunity/pages/convenient_phone/convenient_phone_page.dart'; +import 'package:akuCommunity/pages/fitup_manage/fitup_manage_page.dart'; +import 'package:akuCommunity/pages/goods_deto_page/goods_deto_page.dart'; +import 'package:akuCommunity/pages/goods_manage_page/goods_manage_page.dart'; +import 'package:akuCommunity/pages/industry_committee/industry_committee_page.dart'; +import 'package:akuCommunity/pages/life_pay/life_pay_page.dart'; +import 'package:akuCommunity/pages/open_door_page/open_door_page.dart'; +import 'package:akuCommunity/pages/opening_code_page/opening_code_page.dart'; +import 'package:akuCommunity/pages/questionnaire_page/questionnaire_details_page/questionnaire_details_page.dart'; +import 'package:akuCommunity/pages/things_page/fixed_submit_page.dart'; +import 'package:akuCommunity/pages/visitor_access_page/visitor_access_page.dart'; +import 'package:akuCommunity/ui/home/application/all_application.dart'; +import 'package:akuCommunity/ui/manager/advice/advice_page.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +///应用对象 +///Application Object +class AO { + String title = ''; + String path = ''; + Widget page = Scaffold(); + + AO( + this.title, + this.path, + this.page, + ); + + AO.fromRaw(String raw) { + appObjects.forEach((element) { + if (element.title == raw) { + this.title = element.title; + this.path = element.path; + this.page = element.page; + } + }); + } + + @override + bool operator ==(Object other) => + identical(this, other) || + other is AO && runtimeType == other.runtimeType && title == other.title; + + @override + int get hashCode => title.hashCode; +} + +List appObjects = [ + AO('一键开门', R.ASSETS_APPLICATIONS_OEPN_DOOR_PNG, OpenDoorPage()), + AO('开门码', R.ASSETS_APPLICATIONS_DOOR_CODE_PNG, OpeningCodePage()), + AO('访客邀请', R.ASSETS_APPLICATIONS_VISITOR_INVITE_PNG, VisitorAccessPage()), + AO('报事报修', R.ASSETS_APPLICATIONS_FIX_PNG, FixedSubmitPage()), + AO('生活缴费', R.ASSETS_APPLICATIONS_PAYMENT_PNG, LifePayPage()), + AO('业委会', R.ASSETS_APPLICATIONS_COMMITTEE_PNG, IndustryCommitteePage()), + AO('建议咨询', R.ASSETS_APPLICATIONS_ADVICE_PNG, + AdvicePage(type: AdviceType.SUGGESTION)), + AO('便民电话', R.ASSETS_APPLICATIONS_COMMUNITY_PHONE_PNG, ConvenientPhonePage()), + AO('活动投票', R.ASSETS_APPLICATIONS_VOTE_PNG, SizedBox()), + AO('物品出门', R.ASSETS_APPLICATIONS_GOODS_OUT_PNG, GoodsDetoPage()), + AO('投诉表扬', R.ASSETS_APPLICATIONS_COMPLAINT_PNG, + AdvicePage(type: AdviceType.COMPLAIN)), + AO('问卷调查', R.ASSETS_APPLICATIONS_QUESTION_PNG, QuestionnaireDetailsPage()), + AO('装修管理', R.ASSETS_APPLICATIONS_DECORATION_PNG, FitupManagePage()), + AO('借还管理', R.ASSETS_APPLICATIONS_BORROW_PNG, GoodsManagePage()), +]; + +AO allApp = AO('全部应用', R.ASSETS_APPLICATIONS_ALL_APP_PNG, AllApplicationPage()); diff --git a/lib/main.dart b/lib/main.dart index a75aa283..97868f42 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ // Flutter imports: +import 'package:akuCommunity/provider/app_provider.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -44,6 +45,7 @@ class _MyAppState extends State { providers: [ ChangeNotifierProvider(create: (context) => CartProvidde()), ChangeNotifierProvider(create: (context) => UserProvider()), + ChangeNotifierProvider(create: (context) => AppProvider()), ChangeNotifierProvider(create: (context) => SignUpProvider()), ], child: GestureDetector( diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index 4784a24d..4d338a6d 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -4,6 +4,8 @@ import 'dart:convert'; // Flutter imports: import 'package:akuCommunity/model/community/board_model.dart'; +import 'package:akuCommunity/ui/home/application/all_application.dart'; +import 'package:akuCommunity/widget/views/application_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -74,8 +76,7 @@ class _HomePageState extends State GridButton('建议咨询', R.ASSETS_ICONS_TOOL_JYTS_PNG, AdvicePage(type: AdviceType.SUGGESTION).to), GridButton('便民电话', R.ASSETS_ICONS_TOOL_BMDH_PNG, ConvenientPhonePage().to), - GridButton( - '全部应用', R.ASSETS_ICONS_TOOL_QBYY_PNG, TotalApplicationsPage().to), + GridButton('全部应用', R.ASSETS_ICONS_TOOL_QBYY_PNG, AllApplicationPage().to), ]; @override @@ -158,6 +159,10 @@ class _HomePageState extends State HomeSearch(), HomeSwiper(), SizedBox(height: 100.w), + ContainerComment( + radius: 8, + customWidget: ApplicationView(), + ), ContainerComment( radius: 8, customWidget: GridButtons( diff --git a/lib/pages/splash/splash_page.dart b/lib/pages/splash/splash_page.dart index b2d7e837..af62e8f5 100644 --- a/lib/pages/splash/splash_page.dart +++ b/lib/pages/splash/splash_page.dart @@ -1,4 +1,5 @@ // Flutter imports: +import 'package:akuCommunity/provider/app_provider.dart'; import 'package:flutter/material.dart'; // Package imports: diff --git a/lib/provider/app_provider.dart b/lib/provider/app_provider.dart new file mode 100644 index 00000000..9f9d7be8 --- /dev/null +++ b/lib/provider/app_provider.dart @@ -0,0 +1,42 @@ +import 'package:akuCommunity/constants/application_objects.dart'; +import 'package:flutter/material.dart'; + +class AppProvider extends ChangeNotifier { + ///初始值为 + /// + ///``` + ///'一键开门', + /// '访客邀请', + /// '报事报修', + /// '生活缴费', + /// '业委会', + /// '建议投诉', + /// '便民电话', + ///``` + List _myApplications = [ + '一键开门', + '访客邀请', + '报事报修', + '生活缴费', + '业委会', + '建议咨询', + '便民电话', + ].map((e) => AO.fromRaw(e)).toList(); + + ///我的应用 + List get myApplications { + return _myApplications; + } + + ///添加我的应用 + insertApplication(AO app) { + if (!_myApplications.contains(app) && _myApplications.length < 7) + _myApplications.insert(0, app); + notifyListeners(); + } + + ///移除我的应用 + removeApplication(AO obj) { + if (_myApplications.remove(obj)) notifyListeners(); + } +} diff --git a/lib/ui/home/application/all_application.dart b/lib/ui/home/application/all_application.dart new file mode 100644 index 00000000..87b346df --- /dev/null +++ b/lib/ui/home/application/all_application.dart @@ -0,0 +1,52 @@ +import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:akuCommunity/widget/bee_back_button.dart'; +import 'package:flutter/material.dart'; +import 'package:velocity_x/velocity_x.dart'; + +class AllApplicationPage extends StatefulWidget { + AllApplicationPage({Key key}) : super(key: key); + + @override + _AllApplicationPageState createState() => _AllApplicationPageState(); +} + +class _AllApplicationPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + backgroundColor: Color(0xFFF4F4F4), + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0, + leading: BeeBackButton(), + title: MaterialButton( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + height: 72.w, + shape: StadiumBorder(), + elevation: 0, + minWidth: double.infinity, + color: Color(0xFFF3F3F3), + onPressed: () {}, + child: Row( + children: [ + Icon( + Icons.search, + size: 32.w, + color: Color(0xFF666666), + ), + 10.wb, + '搜索商品、活动、帖子、应用' + .text + .size(28.sp) + .color(ktextSubColor) + .make() + .expand(), + ], + ), + ), + ), + // body: , + ); + } +} diff --git a/lib/utils/headers.dart b/lib/utils/headers.dart index df1f61bd..c2eef697 100644 --- a/lib/utils/headers.dart +++ b/lib/utils/headers.dart @@ -3,6 +3,7 @@ export 'package:akuCommunity/extensions/page_router.dart'; export 'package:akuCommunity/extensions/num_ext.dart'; export 'package:akuCommunity/extensions/widget_list_ext.dart'; export 'package:velocity_x/velocity_x.dart'; +export 'package:akuCommunity/const/resource.dart'; // class Screenutil { // static double length(double lengthNum) => ScreenUtil().setWidth(lengthNum); diff --git a/lib/widget/container_comment.dart b/lib/widget/container_comment.dart index fd4caea0..c6fc52e3 100644 --- a/lib/widget/container_comment.dart +++ b/lib/widget/container_comment.dart @@ -5,6 +5,8 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_screenutil/flutter_screenutil.dart'; +//TODO CLEAN BOTTOM CODES. +@Deprecated("sh*t container_comment need to be cleaned.") class ContainerComment extends StatelessWidget { final Widget customWidget; final double radius; diff --git a/lib/widget/grid_buttons.dart b/lib/widget/grid_buttons.dart index 673c2992..cc6f547d 100644 --- a/lib/widget/grid_buttons.dart +++ b/lib/widget/grid_buttons.dart @@ -4,6 +4,8 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_screenutil/flutter_screenutil.dart'; +//TODO CLEAN BOTTOM CODES. +@Deprecated("sh*t grid_buttons need to be cleaned.") class GridButtons extends StatefulWidget { final List gridList; final int crossCount; @@ -21,7 +23,6 @@ class GridButton { } class _GridButtonsState extends State { - @override Widget build(BuildContext context) { return GridView.builder( @@ -55,9 +56,10 @@ class _GridButtonsState extends State { ); }, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: widget.crossCount, - mainAxisSpacing: 6.0, - childAspectRatio: 1.0), + crossAxisCount: widget.crossCount, + mainAxisSpacing: 6.0, + childAspectRatio: 1.0, + ), ); } } diff --git a/lib/widget/views/application_view.dart b/lib/widget/views/application_view.dart new file mode 100644 index 00000000..af331125 --- /dev/null +++ b/lib/widget/views/application_view.dart @@ -0,0 +1,53 @@ +import 'package:akuCommunity/utils/headers.dart'; +import 'package:akuCommunity/constants/application_objects.dart'; +import 'package:akuCommunity/provider/app_provider.dart'; +import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:provider/provider.dart'; +import 'package:velocity_x/velocity_x.dart'; + +class ApplicationView extends StatefulWidget { + ApplicationView({Key key}) : super(key: key); + + @override + _ApplicationViewState createState() => _ApplicationViewState(); +} + +class _ApplicationViewState extends State { + _buildTile(AO object) { + return MaterialButton( + shape: StadiumBorder(), + padding: EdgeInsets.zero, + onPressed: () => Get.to(object.page), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + object.path, + height: 75.w, + width: 75.w, + ), + 8.hb, + object.title.text.size(24.sp).make(), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + final appProvider = Provider.of(context); + return GridView.builder( + padding: EdgeInsets.zero, + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4), + itemBuilder: (context, index) { + if (index == appProvider.myApplications.length) + return _buildTile(allApp); + return _buildTile(appProvider.myApplications[index]); + }, + itemCount: appProvider.myApplications.length + 1, + shrinkWrap: true, + ); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 3c89e8a6..b06b4409 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -115,3 +115,4 @@ flutter: - assets/example/ - assets/tab/ - assets/json/ + - assets/applications/ From 6a6cecac38a4a768205d7b665f59635410e64121 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 14:59:48 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=97=A0=E9=99=90?= =?UTF-8?q?=E7=99=BB=E9=99=86=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/utils/network/net_util.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/utils/network/net_util.dart b/lib/utils/network/net_util.dart index c4eb7669..666cf01b 100644 --- a/lib/utils/network/net_util.dart +++ b/lib/utils/network/net_util.dart @@ -178,7 +178,7 @@ class NetUtil { _parseRequestError(BaseModel model, {bool showMessage = false}) { final userProvider = Provider.of(Get.context, listen: false); - if (!model.status && model.message == '登录失效,请登录') { + if (!model.status && model.message == '登录失效,请登录' && userProvider.isLogin) { userProvider.logout(); Get.offAll(SignInPage()); } From dcfa4e7b8f017686046578a5488a195d4404f91d Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 15:23:27 +0800 Subject: [PATCH 3/9] refactor all application page and just RTFSC. --- lib/constants/application_objects.dart | 40 +++- lib/provider/app_provider.dart | 15 ++ lib/ui/home/application/all_application.dart | 216 ++++++++++++++++++- 3 files changed, 269 insertions(+), 2 deletions(-) diff --git a/lib/constants/application_objects.dart b/lib/constants/application_objects.dart index f2726a40..f6c9d9bd 100644 --- a/lib/constants/application_objects.dart +++ b/lib/constants/application_objects.dart @@ -5,6 +5,7 @@ import 'package:akuCommunity/pages/goods_deto_page/goods_deto_page.dart'; import 'package:akuCommunity/pages/goods_manage_page/goods_manage_page.dart'; import 'package:akuCommunity/pages/industry_committee/industry_committee_page.dart'; import 'package:akuCommunity/pages/life_pay/life_pay_page.dart'; +import 'package:akuCommunity/pages/one_alarm/widget/alarm_page.dart'; import 'package:akuCommunity/pages/open_door_page/open_door_page.dart'; import 'package:akuCommunity/pages/opening_code_page/opening_code_page.dart'; import 'package:akuCommunity/pages/questionnaire_page/questionnaire_details_page/questionnaire_details_page.dart'; @@ -40,13 +41,13 @@ class AO { @override bool operator ==(Object other) => - identical(this, other) || other is AO && runtimeType == other.runtimeType && title == other.title; @override int get hashCode => title.hashCode; } +///所有应用 List appObjects = [ AO('一键开门', R.ASSETS_APPLICATIONS_OEPN_DOOR_PNG, OpenDoorPage()), AO('开门码', R.ASSETS_APPLICATIONS_DOOR_CODE_PNG, OpeningCodePage()), @@ -64,6 +65,43 @@ List appObjects = [ AO('问卷调查', R.ASSETS_APPLICATIONS_QUESTION_PNG, QuestionnaireDetailsPage()), AO('装修管理', R.ASSETS_APPLICATIONS_DECORATION_PNG, FitupManagePage()), AO('借还管理', R.ASSETS_APPLICATIONS_BORROW_PNG, GoodsManagePage()), + AO('一键报警', R.ASSETS_APPLICATIONS_POLICE_PNG, AlarmPage()), ]; +///全部应用按钮 AO allApp = AO('全部应用', R.ASSETS_APPLICATIONS_ALL_APP_PNG, AllApplicationPage()); + +///为您推荐 original value +List _recommendApp = [ + '一键开门', + '访客邀请', + '报事报修', + '建议咨询', + '一键报警', +]; + +///为您推荐 +List get recommendApp => _recommendApp.map((e) => AO.fromRaw(e)).toList(); + +///智慧管家 original value +List _smartManagerApp = [ + '一键开门', + '开门码', + '访客邀请', + '报事报修', + '生活缴费', + '业委会', + '建议咨询', + '便民电话', + '活动投票', + '物品出门', + '投诉表扬', + '问卷调查', + '装修管理', + '借还管理', + '一键报警', +]; + +///智慧管家 +List get smartManagerApp => + _smartManagerApp.map((e) => AO.fromRaw(e)).toList(); diff --git a/lib/provider/app_provider.dart b/lib/provider/app_provider.dart index 9f9d7be8..b228e555 100644 --- a/lib/provider/app_provider.dart +++ b/lib/provider/app_provider.dart @@ -1,4 +1,5 @@ import 'package:akuCommunity/constants/application_objects.dart'; +import 'package:akuCommunity/utils/hive_store.dart'; import 'package:flutter/material.dart'; class AppProvider extends ChangeNotifier { @@ -28,10 +29,24 @@ class AppProvider extends ChangeNotifier { return _myApplications; } + ///初始化我的应用 + initApplications() { + if (HiveStore.appBox.containsKey('app')) + _myApplications = (HiveStore.appBox.get('app') as List) + .map((e) => AO.fromRaw(e)) + .toList(); + notifyListeners(); + } + ///添加我的应用 insertApplication(AO app) { if (!_myApplications.contains(app) && _myApplications.length < 7) _myApplications.insert(0, app); + if (!_myApplications.contains(app) && _myApplications.length >= 7) { + _myApplications.insert(0, app); + _myApplications.removeLast(); + } + HiveStore.appBox.put('app', _myApplications.map((e) => e.title).toList()); notifyListeners(); } diff --git a/lib/ui/home/application/all_application.dart b/lib/ui/home/application/all_application.dart index 87b346df..3226e80f 100644 --- a/lib/ui/home/application/all_application.dart +++ b/lib/ui/home/application/all_application.dart @@ -1,7 +1,12 @@ import 'package:akuCommunity/base/base_style.dart'; +import 'package:akuCommunity/constants/application_objects.dart'; +import 'package:akuCommunity/provider/app_provider.dart'; import 'package:akuCommunity/utils/headers.dart'; import 'package:akuCommunity/widget/bee_back_button.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:get/get.dart'; +import 'package:provider/provider.dart'; import 'package:velocity_x/velocity_x.dart'; class AllApplicationPage extends StatefulWidget { @@ -12,6 +17,203 @@ class AllApplicationPage extends StatefulWidget { } class _AllApplicationPageState extends State { + bool _editMode = false; + + int _index = 0; + + PageController _pageController = PageController(); + + _buildTile(AO object, {bool editMode = false}) { + return MaterialButton( + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(8.w)), + padding: EdgeInsets.zero, + onPressed: editMode ? null : () => Get.to(object.page), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Image.asset( + object.path, + height: 75.w, + width: 75.w, + ), + 8.hb, + object.title.text.size(24.sp).make(), + ], + ), + ); + } + + _buildEditTile() { + return Row( + children: [ + 74.hb, + '我的应用'.text.make(), + Spacer(), + MaterialButton( + padding: EdgeInsets.zero, + elevation: 0, + height: 52.w, + minWidth: 90.w, + onPressed: () { + _editMode = !_editMode; + setState(() {}); + }, + color: kPrimaryColor, + child: (_editMode ? '完成' : '编辑').text.bold.size(28.sp).make(), + ), + ], + ).pSymmetric(h: 32.w).material(color: Colors.white); + } + + _buildMyApp() { + final appProvider = Provider.of(context); + return GridView.builder( + padding: EdgeInsets.symmetric(horizontal: 32.w), + shrinkWrap: true, + physics: NeverScrollableScrollPhysics(), + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4), + itemBuilder: (context, index) { + return Stack( + children: [ + _buildTile( + appProvider.myApplications[index], + editMode: _editMode, + ), + Positioned( + right: 0, + top: 0, + child: AnimatedOpacity( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + opacity: _editMode ? 1 : 0, + child: CupertinoButton( + minSize: 60.w, + padding: EdgeInsets.zero, + onPressed: _editMode + ? () { + appProvider.removeApplication( + appProvider.myApplications[index], + ); + } + : null, + child: Image.asset( + R.ASSETS_ICONS_APP_REDUCE_PNG, + height: 24.w, + width: 24.w, + ), + ), + ), + ), + ], + ); + }, + itemCount: appProvider.myApplications.length, + ).material(color: Colors.white); + } + + _buildListTile(String title, int index) { + bool sameIndex = _index == index; + return Stack( + fit: StackFit.passthrough, + children: [ + MaterialButton( + materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, + padding: EdgeInsets.zero, + color: sameIndex ? Colors.white : Color(0xFFEFEFEF), + elevation: 0, + height: 88.w, + onPressed: () { + setState(() { + _index = index; + }); + _pageController.animateToPage( + index, + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + ); + }, + child: title.text.size(28.sp).make(), + ), + Positioned( + left: 0, + top: 24.w, + bottom: 24.w, + child: AnimatedContainer( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + width: sameIndex ? 3.w : 10.w, + color: sameIndex ? kPrimaryColor : kPrimaryColor.withOpacity(0), + ), + ), + ], + ); + } + + Widget _buildView(List objects) { + final appProvider = Provider.of(context); + return GridView.builder( + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 3), + itemBuilder: (context, index) { + return Stack( + children: [ + _buildTile(objects[index], editMode: _editMode), + Positioned( + right: 0, + top: 0, + child: AnimatedOpacity( + duration: Duration(milliseconds: 300), + curve: Curves.easeInOutCubic, + opacity: _editMode ? 1 : 0, + child: CupertinoButton( + minSize: 60.w, + padding: EdgeInsets.zero, + onPressed: _editMode + ? () => appProvider.insertApplication(objects[index]) + : null, + child: Image.asset( + R.ASSETS_ICONS_APP_ADD_PNG, + height: 24.w, + width: 24.w, + ), + ), + ), + ), + ], + ); + }, + itemCount: objects.length, + ); + } + + Widget _buildAppList() { + return Row( + children: [ + SizedBox( + width: 172.w, + child: ListView( + padding: EdgeInsets.zero, + children: [ + _buildListTile('为您推荐', 0), + _buildListTile('智慧管家', 1), + // _buildListTile('商城购物', 2), + ], + ), + ).material(color: Color(0xFFEFEFEF)), + PageView( + physics: NeverScrollableScrollPhysics(), + scrollDirection: Axis.vertical, + controller: _pageController, + children: [ + _buildView(recommendApp), + _buildView(smartManagerApp), + ], + ).expand(), + ], + ).material(color: Colors.white); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -46,7 +248,19 @@ class _AllApplicationPageState extends State { ), ), ), - // body: , + body: Column( + children: [ + _buildEditTile(), + Divider( + indent: 32.w, + endIndent: 32.w, + height: 1.w, + ).material(color: Colors.white), + _buildMyApp(), + 32.hb, + _buildAppList().expand(), + ], + ), ); } } From 0868d28b9b4fc17190c1a90042ee563e9228bb26 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 15:39:08 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E4=BF=9D=E5=AD=98=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=8E=86=E5=8F=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/home/home_page.dart | 7 ------- lib/pages/splash/splash_page.dart | 2 ++ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index 4d338a6d..cfa70f19 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -163,13 +163,6 @@ class _HomePageState extends State radius: 8, customWidget: ApplicationView(), ), - ContainerComment( - radius: 8, - customWidget: GridButtons( - gridList: _gridList, - crossCount: 4, - ), - ), // SingleAdSpace( // imagePath: R.ASSETS_EXAMPLE_GUANGGAO2_PNG, // ), diff --git a/lib/pages/splash/splash_page.dart b/lib/pages/splash/splash_page.dart index af62e8f5..4a470e0b 100644 --- a/lib/pages/splash/splash_page.dart +++ b/lib/pages/splash/splash_page.dart @@ -40,6 +40,8 @@ class _SplashPageState extends State { //ensure call _originOp first. await _originOp(); final userProvider = Provider.of(context, listen: false); + final appProvider = Provider.of(context, listen: false); + appProvider.initApplications(); //app init delay 2 second await Future.delayed(Duration(seconds: 2)); if (HiveStore.appBox.get('login') ?? false) { From 10fefc751c55f2d2de3ae00897288d8ff37b5401 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 15:42:17 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E6=8A=A5=E8=AD=A6=E9=A1=B5=E9=9D=A2=E6=98=BE=E7=A4=BA=E6=BA=A2?= =?UTF-8?q?=E5=87=BA=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/one_alarm/widget/alarm_page.dart | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/pages/one_alarm/widget/alarm_page.dart b/lib/pages/one_alarm/widget/alarm_page.dart index 8eec80ea..5d93b905 100644 --- a/lib/pages/one_alarm/widget/alarm_page.dart +++ b/lib/pages/one_alarm/widget/alarm_page.dart @@ -126,7 +126,6 @@ class _AlarmPageState extends State { Container( margin: EdgeInsets.only(top: 32.w), width: 686.w, - height: 148.w, decoration: BoxDecoration( color: Colors.white.withOpacity(0.9), borderRadius: BorderRadius.circular(16), @@ -138,7 +137,6 @@ class _AlarmPageState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - SizedBox(height: 24.w), Container( margin: EdgeInsets.only(top: 24.w, left: 32.w), child: Text( @@ -174,6 +172,7 @@ class _AlarmPageState extends State { ], ), ), + 24.hb, ], )), Spacer(), From 707950a1f2bed405cc64ff6fb6c380268b602b67 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 15:50:00 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E7=89=A9=E4=B8=9A=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E5=BA=94=E7=94=A8=E5=8D=A1=E7=89=87=E9=87=8D=E5=86=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/market/market_page.dart | 7 ------- lib/pages/property/property_index.dart | 7 +++---- lib/widget/views/application_view.dart | 24 ++++++++++++++++++------ 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/lib/pages/market/market_page.dart b/lib/pages/market/market_page.dart index c1ca7ada..3ad2273b 100644 --- a/lib/pages/market/market_page.dart +++ b/lib/pages/market/market_page.dart @@ -133,13 +133,6 @@ class _MarketPageState extends State imagePath: 'assets/example/guanggao5.png', radius: 36, ), - ContainerComment( - radius: 8, - customWidget: GridButtons( - gridList: [], - crossCount: 4, - ), - ), ], ), ), diff --git a/lib/pages/property/property_index.dart b/lib/pages/property/property_index.dart index e8d2dc29..2bfb96c8 100644 --- a/lib/pages/property/property_index.dart +++ b/lib/pages/property/property_index.dart @@ -1,5 +1,7 @@ // Flutter imports: +import 'package:akuCommunity/constants/application_objects.dart'; import 'package:akuCommunity/ui/community/notice/notice_page.dart'; +import 'package:akuCommunity/widget/views/application_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -202,10 +204,7 @@ class _PropertyIndexState extends State SliverToBoxAdapter( child: ContainerComment( radius: 8, - customWidget: GridButtons( - gridList: _gridList, - crossCount: 4, - ), + customWidget: ApplicationView.custom(items: smartManagerApp), ), ), SliverToBoxAdapter( diff --git a/lib/widget/views/application_view.dart b/lib/widget/views/application_view.dart index af331125..16394485 100644 --- a/lib/widget/views/application_view.dart +++ b/lib/widget/views/application_view.dart @@ -7,7 +7,14 @@ import 'package:provider/provider.dart'; import 'package:velocity_x/velocity_x.dart'; class ApplicationView extends StatefulWidget { - ApplicationView({Key key}) : super(key: key); + final List items; + ApplicationView({Key key}) + : items = null, + super(key: key); + + ApplicationView.custom({Key key, @required this.items}) + : assert(items != null), + super(key: key); @override _ApplicationViewState createState() => _ApplicationViewState(); @@ -34,19 +41,24 @@ class _ApplicationViewState extends State { ); } + bool get _isCustom => widget.items != null; + List get _items { + final appProvider = Provider.of(context); + + return _isCustom ? widget.items : appProvider.myApplications; + } + @override Widget build(BuildContext context) { - final appProvider = Provider.of(context); return GridView.builder( padding: EdgeInsets.zero, gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 4), itemBuilder: (context, index) { - if (index == appProvider.myApplications.length) - return _buildTile(allApp); - return _buildTile(appProvider.myApplications[index]); + if (index == _items.length) return _buildTile(allApp); + return _buildTile(_items[index]); }, - itemCount: appProvider.myApplications.length + 1, + itemCount: _items.length + 1, shrinkWrap: true, ); } From 932648a707b82709d0d1e62bd6adffa9fcd41662 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 15:53:45 +0800 Subject: [PATCH 7/9] BeeScaffold add FAB option --- lib/pages/community/community_index.dart | 85 +++++++++++------------- lib/widget/bee_scaffold.dart | 46 +++++++------ 2 files changed, 63 insertions(+), 68 deletions(-) diff --git a/lib/pages/community/community_index.dart b/lib/pages/community/community_index.dart index b507052a..83713e91 100644 --- a/lib/pages/community/community_index.dart +++ b/lib/pages/community/community_index.dart @@ -103,7 +103,6 @@ class _CommunityIndexState extends State child: Icon( Icons.add, color: Colors.white, - size: 40.sp, ), onPressed: noteCreateRouter, ); @@ -115,61 +114,53 @@ class _CommunityIndexState extends State return BeeScaffold( title: '社区', actions: _listActions(), - body: Stack( + body: Column( children: [ - Column( - children: [ - Material( - color: kForeGroundColor, - child: PreferredSize( - preferredSize: Size.fromHeight(kToolbarHeight), - child: Align( - alignment: Alignment.centerLeft, - child: TabBar( - indicatorPadding: EdgeInsets.zero, - controller: _tabController, - isScrollable: true, - indicatorColor: Color(0xffFFd000), - indicatorWeight: 2.w, - indicatorSize: TabBarIndicatorSize.label, - unselectedLabelStyle: TextStyle( - color: Color(0xFF333333), - fontSize: 28.sp, - ), - labelStyle: TextStyle( - fontSize: 28.sp, - color: Color(0xff333333), - fontWeight: FontWeight.bold, - ), - tabs: List.generate( - tabs.length, - (index) => Tab( - text: tabs[index]['name'], - ), - ), - ), - ), - ), - ), - Expanded( - child: TabBarView( + Material( + color: kForeGroundColor, + child: PreferredSize( + preferredSize: Size.fromHeight(kToolbarHeight), + child: Align( + alignment: Alignment.centerLeft, + child: TabBar( + indicatorPadding: EdgeInsets.zero, controller: _tabController, - children: List.generate( + isScrollable: true, + indicatorColor: Color(0xffFFd000), + indicatorWeight: 2.w, + indicatorSize: TabBarIndicatorSize.label, + unselectedLabelStyle: TextStyle( + color: Color(0xFF333333), + fontSize: 28.sp, + ), + labelStyle: TextStyle( + fontSize: 28.sp, + color: Color(0xff333333), + fontWeight: FontWeight.bold, + ), + tabs: List.generate( tabs.length, - (index) => TabList(index: index), + (index) => Tab( + text: tabs[index]['name'], + ), ), ), ), - // _floatingActionButton(), - ], + ), + ), + Expanded( + child: TabBarView( + controller: _tabController, + children: List.generate( + tabs.length, + (index) => TabList(index: index), + ), + ), ), - Positioned( - right: 30.w, - bottom: 50.w, - child: _floatingActionButton(), - ) + // _floatingActionButton(), ], ), + fab: _floatingActionButton(), ); } } diff --git a/lib/widget/bee_scaffold.dart b/lib/widget/bee_scaffold.dart index df31eb0a..686c5f82 100644 --- a/lib/widget/bee_scaffold.dart +++ b/lib/widget/bee_scaffold.dart @@ -22,28 +22,31 @@ class BeeScaffold extends StatefulWidget { final Widget leading; final Widget bottomNavi; final PreferredSizeWidget appBarBottom; - BeeScaffold( - {Key key, - @required this.title, - this.body, - this.actions, - this.leading, - this.bgColor = Colors.white, - this.bodyColor = const Color(0xFFF9F9F9), - this.bottomNavi, - this.appBarBottom}) - : super(key: key); + final FloatingActionButton fab; + BeeScaffold({ + Key key, + @required this.title, + this.body, + this.actions, + this.leading, + this.bgColor = Colors.white, + this.bodyColor = const Color(0xFFF9F9F9), + this.bottomNavi, + this.appBarBottom, + this.fab, + }) : super(key: key); - BeeScaffold.white( - {Key key, - @required this.title, - this.body, - this.actions, - this.leading, - this.bgColor = Colors.white, - this.bottomNavi, - this.appBarBottom}) - : this.bodyColor = Colors.white, + BeeScaffold.white({ + Key key, + @required this.title, + this.body, + this.actions, + this.leading, + this.bgColor = Colors.white, + this.bottomNavi, + this.appBarBottom, + this.fab, + }) : this.bodyColor = Colors.white, super(key: key); @override @@ -67,6 +70,7 @@ class _BeeScaffoldState extends State { ), body: widget.body, bottomNavigationBar: widget.bottomNavi, + floatingActionButton: widget.fab, ); } } From b025d6dfa036928d811c7bfcdd88bded9c10e27a Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 16:24:22 +0800 Subject: [PATCH 8/9] add columnActionButton --- assets/icons/alarm.png | Bin 0 -> 1161 bytes lib/const/resource.dart | 3 ++ lib/widget/buttons/column_action_button.dart | 29 +++++++++++++++++++ 3 files changed, 32 insertions(+) create mode 100644 assets/icons/alarm.png create mode 100644 lib/widget/buttons/column_action_button.dart diff --git a/assets/icons/alarm.png b/assets/icons/alarm.png new file mode 100644 index 0000000000000000000000000000000000000000..f9400ca1b6c87abe53e755e073fb7b2cb898d721 GIT binary patch literal 1161 zcmeAS@N?(olHy`uVBq!ia0vp^2|!%O!3HF6yNFx{Qk(@Ik;M!QiWVTu=sL|1q=KZN)`%hbF5Lg z>^O7MxxAGN7H_%f$S18ZB_xs6BBxq`Fg`6 z`9-cz6rnw`90#yHoR>4XP^B&UKhV~R>c56gs!3`Rl@ZcHcMDAeZ6{ONhd;923B zd%U-AS6%q~=xg2?ew8!2OWZpwHR9I(2wjsm@7SLHpAw&0AK9-tp&YaSN=)b*+rA5% zTzBu{IB`Dhtf!^stqaynJ6hwiyX79yC)HRzqVxAE`C^pD!{*7nj-3c@HwD@-CxAJH7DVm8- zT+`y)m4EmU_Xmk2W5F|K>s1mq@3mu|&+~JV%gt}>Do$;msxL~sG<5rUZ?+<%-Qt+V z?H=N@4X4i3^>s*VDLR^e*!0h}V@5(5$D4WXYX55jvYam({$YwLJz3GX)$-=T6+VxT zW$2sjsjyFXX!d!SeTDN@e|guf2>lQ5{;Fv@|K6A?`2M590!FoS$9OKtws|ZOPdV4- zbJ2E>b(}-5%<>ByLX7*)$6d9YFx5wvcg0?5p^smhjIX#fU-ouIRw&nO?#sL4l30FZ1-{I@`k>Nph1?(hY~uXYyqx_`an5702bK%|IMsjP zSh0n@g5}Hw`E!AS_p+Uz_vHrtsore0a*5h6<4{QIz?x)eCRoh=NNw9r?lZgQ@7;Cz z)FSpfUtF^JKleQ=^0is>YiIt6`6~-b-F3C=X0m_OxOyaO-)`amm6D%D7G-`*(#z?Y z<;1@u-O!k^m_w>eV4mZK88aEqpIzZ<`)BRmG{-qLPKMmSWIyXYWBPe;$GUdS- zAB;TndPe$+5C0ZBaVWM3ICXrxu)O+T{P)P&f0U;2F#aq~-*f)eTJ39X?k^;nKU`0m zX6)jB;z7Mi)#Q!yZv3#4c)V#!gUR^=kstXl8t^bmUQ%^FY`}76f?n_!hS#s&%sjs; z;-m4G7R5_i|5U3?xT6yMrROe~msIuH_!;x3PR3Sy?_7Q+odPjNV9CMY>FVdQ&MBb@ E0O0xeNB{r; literal 0 HcmV?d00001 diff --git a/lib/const/resource.dart b/lib/const/resource.dart index 5fd5f746..9773b63e 100644 --- a/lib/const/resource.dart +++ b/lib/const/resource.dart @@ -205,6 +205,9 @@ class R { /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/icons/add.png) static const String ASSETS_ICONS_ADD_PNG = 'assets/icons/add.png'; + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/icons/alarm.png) + static const String ASSETS_ICONS_ALARM_PNG = 'assets/icons/alarm.png'; + /// ![preview](file:///Users/akufe/Documents/akuCommunity/assets/icons/app_add.png) static const String ASSETS_ICONS_APP_ADD_PNG = 'assets/icons/app_add.png'; diff --git a/lib/widget/buttons/column_action_button.dart b/lib/widget/buttons/column_action_button.dart new file mode 100644 index 00000000..84793698 --- /dev/null +++ b/lib/widget/buttons/column_action_button.dart @@ -0,0 +1,29 @@ +import 'package:akuCommunity/utils/headers.dart'; +import 'package:flutter/material.dart'; +import 'package:velocity_x/velocity_x.dart'; + +class ColumnActionButton extends StatelessWidget { + final VoidCallback onPressed; + final String title; + final String path; + const ColumnActionButton({Key key, this.onPressed, this.title, this.path}) + : super(key: key); + + @override + Widget build(BuildContext context) { + return MaterialButton( + minWidth: 72.w, + padding: EdgeInsets.zero, + onPressed: onPressed, + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + mainAxisSize: MainAxisSize.max, + children: [ + Image.asset(path, height: 48.w, width: 48.w), + 4.hb, + title.text.size(20.sp).black.make(), + ], + ), + ); + } +} From 19e23f66a4e4d7ec6cf70cb20db3fb82ef15a724 Mon Sep 17 00:00:00 2001 From: laiiihz Date: Wed, 3 Feb 2021 17:58:54 +0800 Subject: [PATCH 9/9] deprecated sh*t activity page. refactor new activity page's topic page. --- lib/constants/api.dart | 3 + .../community/community_topic_model.dart | 146 ++++++++++++++++++ .../activities_page/activities_page.dart | 2 + lib/pages/community/community_index.dart | 2 + lib/pages/home/home_page.dart | 25 +-- lib/pages/tab_navigator.dart | 4 +- .../community_views/community_page.dart | 67 ++++++++ .../community_views/my_community_view.dart | 20 +++ .../community_views/new_community_view.dart | 20 +++ .../topic/topic_community_view.dart | 125 +++++++++++++++ .../topic/topic_detail_page.dart | 38 +++++ .../topic/topic_scrollable_text.dart | 47 ++++++ lib/widget/tab_bar/bee_tab_bar.dart | 12 +- 13 files changed, 486 insertions(+), 25 deletions(-) create mode 100644 lib/model/community/community_topic_model.dart create mode 100644 lib/ui/community/community_views/community_page.dart create mode 100644 lib/ui/community/community_views/my_community_view.dart create mode 100644 lib/ui/community/community_views/new_community_view.dart create mode 100644 lib/ui/community/community_views/topic/topic_community_view.dart create mode 100644 lib/ui/community/community_views/topic/topic_detail_page.dart create mode 100644 lib/ui/community/community_views/topic/topic_scrollable_text.dart diff --git a/lib/constants/api.dart b/lib/constants/api.dart index 0da0fa35..49184be1 100644 --- a/lib/constants/api.dart +++ b/lib/constants/api.dart @@ -159,6 +159,9 @@ class _Community { ///社区公告:根据社区公告主键id查询社区公告信息 String get boardDetail => '/user/announcement/findById'; + + ///社区话题:查询最新的所有主题信息 + String get topicList => '/user/gambit/list'; } class _Upload { diff --git a/lib/model/community/community_topic_model.dart b/lib/model/community/community_topic_model.dart new file mode 100644 index 00000000..6508ff3c --- /dev/null +++ b/lib/model/community/community_topic_model.dart @@ -0,0 +1,146 @@ +import 'package:akuCommunity/model/common/img_model.dart'; + +class CommunityTopicModel { + int id; + int createId; + int isComment; + int isLike; + String createName; + String content; + String gambitTitle; + String createDate; + List likeNames; + List imgUrls; + List headSculptureImgUrl; + List gambitThemeCommentVoList; + + CommunityTopicModel( + {this.id, + this.createId, + this.isComment, + this.isLike, + this.createName, + this.content, + this.gambitTitle, + this.createDate, + this.likeNames, + this.imgUrls, + this.headSculptureImgUrl, + this.gambitThemeCommentVoList}); + + CommunityTopicModel.fromJson(Map json) { + id = json['id']; + createId = json['createId']; + isComment = json['isComment']; + isLike = json['isLike']; + createName = json['createName']; + content = json['content']; + gambitTitle = json['gambitTitle']; + createDate = json['createDate']; + if (json['likeNames'] != null) { + likeNames = new List(); + json['likeNames'].forEach((v) { + likeNames.add(new LikeNames.fromJson(v)); + }); + } + if (json['imgUrls'] != null) { + imgUrls = new List(); + json['imgUrls'].forEach((v) { + imgUrls.add(new ImgModel.fromJson(v)); + }); + } else + imgUrls = []; + if (json['headSculptureImgUrl'] != null) { + headSculptureImgUrl = new List(); + json['headSculptureImgUrl'].forEach((v) { + headSculptureImgUrl.add(new ImgModel.fromJson(v)); + }); + } else + headSculptureImgUrl = []; + if (json['gambitThemeCommentVoList'] != null) { + gambitThemeCommentVoList = new List(); + json['gambitThemeCommentVoList'].forEach((v) { + gambitThemeCommentVoList.add(new GambitThemeCommentVoList.fromJson(v)); + }); + } + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['createId'] = this.createId; + data['isComment'] = this.isComment; + data['isLike'] = this.isLike; + data['createName'] = this.createName; + data['content'] = this.content; + data['gambitTitle'] = this.gambitTitle; + data['createDate'] = this.createDate; + if (this.likeNames != null) { + data['likeNames'] = this.likeNames.map((v) => v.toJson()).toList(); + } + if (this.imgUrls != null) { + data['imgUrls'] = this.imgUrls.map((v) => v.toJson()).toList(); + } + if (this.headSculptureImgUrl != null) { + data['headSculptureImgUrl'] = + this.headSculptureImgUrl.map((v) => v.toJson()).toList(); + } + if (this.gambitThemeCommentVoList != null) { + data['gambitThemeCommentVoList'] = + this.gambitThemeCommentVoList.map((v) => v.toJson()).toList(); + } + return data; + } +} + +class LikeNames { + int id; + String name; + + LikeNames({this.id, this.name}); + + LikeNames.fromJson(Map json) { + id = json['id']; + name = json['name']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['name'] = this.name; + return data; + } +} + +class GambitThemeCommentVoList { + int id; + String parentName; + String content; + String createName; + String createDate; + + GambitThemeCommentVoList( + {this.id, + this.parentName, + this.content, + this.createName, + this.createDate}); + + GambitThemeCommentVoList.fromJson(Map json) { + id = json['id']; + parentName = json['parentName']; + content = json['content']; + createName = json['createName']; + createDate = json['createDate']; + } + + Map toJson() { + final Map data = new Map(); + data['id'] = this.id; + data['parentName'] = this.parentName; + data['content'] = this.content; + data['createName'] = this.createName; + data['createDate'] = this.createDate; + return data; + } +} diff --git a/lib/pages/activities_page/activities_page.dart b/lib/pages/activities_page/activities_page.dart index 2d32e722..9d7944ef 100644 --- a/lib/pages/activities_page/activities_page.dart +++ b/lib/pages/activities_page/activities_page.dart @@ -10,6 +10,8 @@ import 'package:pull_to_refresh/pull_to_refresh.dart'; import 'package:akuCommunity/widget/activity_card.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; +//TODO CLEAN BOTTOM CODES. +@Deprecated("sh*t activities_page need to be cleaned.") class ActivitiesPage extends StatefulWidget { ActivitiesPage({Key key}) : super(key: key); diff --git a/lib/pages/community/community_index.dart b/lib/pages/community/community_index.dart index 83713e91..e6473843 100644 --- a/lib/pages/community/community_index.dart +++ b/lib/pages/community/community_index.dart @@ -12,6 +12,8 @@ import 'package:akuCommunity/utils/headers.dart'; import 'package:akuCommunity/widget/bee_scaffold.dart'; import 'widget/tab_list.dart'; +//TODO CLEAN BOTTOM CODES. +@Deprecated("sh*t community_index need to be cleaned.") class CommunityIndex extends StatefulWidget { CommunityIndex({Key key}) : super(key: key); diff --git a/lib/pages/home/home_page.dart b/lib/pages/home/home_page.dart index cfa70f19..99c4b40a 100644 --- a/lib/pages/home/home_page.dart +++ b/lib/pages/home/home_page.dart @@ -5,6 +5,7 @@ import 'dart:convert'; // Flutter imports: import 'package:akuCommunity/model/community/board_model.dart'; import 'package:akuCommunity/ui/home/application/all_application.dart'; +import 'package:akuCommunity/widget/buttons/column_action_button.dart'; import 'package:akuCommunity/widget/views/application_view.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -105,23 +106,6 @@ class _HomePageState extends State }); } - _buildColButton({IconData icon, String title, VoidCallback onTap}) { - return MaterialButton( - onPressed: onTap, - minWidth: 0, - padding: EdgeInsets.symmetric(horizontal: 16.w), - materialTapTargetSize: MaterialTapTargetSize.shrinkWrap, - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Icon(icon, size: 48.w, color: Colors.black), - 4.hb, - title.text.size(20.sp).black.make(), - ], - ), - ); - } - @override Widget build(BuildContext context) { super.build(context); @@ -132,12 +116,11 @@ class _HomePageState extends State appBar: AnimateAppBar( scrollController: _scrollController, actions: [ - _buildColButton( - icon: AntDesign.bells, + ColumnActionButton( + onPressed: MessageCenterPage().to, title: '消息', - onTap: MessageCenterPage().to, + path: R.ASSETS_ICONS_ALARM_PNG, ), - 16.wb, ], ), body: EasyRefresh( diff --git a/lib/pages/tab_navigator.dart b/lib/pages/tab_navigator.dart index ac10db5f..0269f741 100644 --- a/lib/pages/tab_navigator.dart +++ b/lib/pages/tab_navigator.dart @@ -1,4 +1,5 @@ // Flutter imports: +import 'package:akuCommunity/ui/community/community_views/community_page.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -37,7 +38,8 @@ class _TabNavigatorState extends State { HomePage(), // MarketPage(), PropertyIndex(), - CommunityIndex(), + // CommunityIndex(), + CommunityPage(), PersonalIndex() ]; } diff --git a/lib/ui/community/community_views/community_page.dart b/lib/ui/community/community_views/community_page.dart new file mode 100644 index 00000000..4d58a2d9 --- /dev/null +++ b/lib/ui/community/community_views/community_page.dart @@ -0,0 +1,67 @@ +import 'package:akuCommunity/ui/community/community_views/my_community_view.dart'; +import 'package:akuCommunity/ui/community/community_views/new_community_view.dart'; +import 'package:akuCommunity/ui/community/community_views/topic/topic_community_view.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:akuCommunity/widget/bee_scaffold.dart'; +import 'package:akuCommunity/widget/buttons/column_action_button.dart'; +import 'package:akuCommunity/widget/tab_bar/bee_tab_bar.dart'; +import 'package:flutter/material.dart'; + +class CommunityPage extends StatefulWidget { + CommunityPage({Key key}) : super(key: key); + + @override + _CommunityPageState createState() => _CommunityPageState(); +} + +class _CommunityPageState extends State + with TickerProviderStateMixin, AutomaticKeepAliveClientMixin { + TabController _tabController; + List _tabs = ['最新', '话题', '我的']; + @override + void initState() { + super.initState(); + _tabController = TabController( + vsync: this, + length: _tabs.length, + ); + } + + @override + Widget build(BuildContext context) { + super.build(context); + return BeeScaffold( + title: '社区', + actions: [ + ColumnActionButton( + onPressed: () {}, + title: '消息', + path: R.ASSETS_ICONS_ALARM_PNG, + ), + ], + appBarBottom: PreferredSize( + preferredSize: Size.fromHeight(48), + child: Align( + alignment: Alignment.centerLeft, + child: BeeTabBar( + controller: _tabController, + tabs: _tabs, + scrollable: true, + ), + ), + ), + body: TabBarView( + children: [ + NewCommunityView(), + TopicCommunityView(), + MyCommunityView(), + ], + controller: _tabController, + ), + bodyColor: Colors.white, + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/community/community_views/my_community_view.dart b/lib/ui/community/community_views/my_community_view.dart new file mode 100644 index 00000000..3a101b32 --- /dev/null +++ b/lib/ui/community/community_views/my_community_view.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class MyCommunityView extends StatefulWidget { + MyCommunityView({Key key}) : super(key: key); + + @override + _MyCommunityViewState createState() => _MyCommunityViewState(); +} + +class _MyCommunityViewState extends State + with AutomaticKeepAliveClientMixin { + @override + Widget build(BuildContext context) { + super.build(context); + return Container(); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/community/community_views/new_community_view.dart b/lib/ui/community/community_views/new_community_view.dart new file mode 100644 index 00000000..626bfbf8 --- /dev/null +++ b/lib/ui/community/community_views/new_community_view.dart @@ -0,0 +1,20 @@ +import 'package:flutter/material.dart'; + +class NewCommunityView extends StatefulWidget { + NewCommunityView({Key key}) : super(key: key); + + @override + _NewCommunityViewState createState() => _NewCommunityViewState(); +} + +class _NewCommunityViewState extends State + with AutomaticKeepAliveClientMixin { + @override + Widget build(BuildContext context) { + super.build(context); + return Container(); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/community/community_views/topic/topic_community_view.dart b/lib/ui/community/community_views/topic/topic_community_view.dart new file mode 100644 index 00000000..a1e4190c --- /dev/null +++ b/lib/ui/community/community_views/topic/topic_community_view.dart @@ -0,0 +1,125 @@ +import 'dart:ui'; + +import 'package:akuCommunity/ui/community/community_views/topic/topic_detail_page.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:akuCommunity/constants/api.dart'; +import 'package:akuCommunity/model/community/community_topic_model.dart'; +import 'package:akuCommunity/pages/things_page/widget/bee_list_view.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_easyrefresh/easy_refresh.dart'; +import 'package:get/get.dart'; + +class TopicCommunityView extends StatefulWidget { + TopicCommunityView({Key key}) : super(key: key); + + @override + _TopicCommunityViewState createState() => _TopicCommunityViewState(); +} + +class _TopicCommunityViewState extends State + with AutomaticKeepAliveClientMixin { + EasyRefreshController _refreshController = EasyRefreshController(); + + _buildItem(CommunityTopicModel model) { + var firstImg = ''; + if (model?.imgUrls?.isNotEmpty ?? false) { + firstImg = model?.imgUrls?.first?.url ?? ''; + } + return MaterialButton( + padding: EdgeInsets.symmetric(horizontal: 53.w, vertical: 20.w), + onPressed: () { + Get.to(TopicDetailPage(id: model.id)); + }, + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + clipBehavior: Clip.antiAlias, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.w), + color: Colors.black12, + ), + child: Stack( + children: [ + FadeInImage.assetNetwork( + placeholder: R.ASSETS_IMAGES_LOGO_PNG, + image: API.image(firstImg), + height: 160.w, + width: 250.w, + ), + Positioned( + bottom: 0, + left: 0, + right: 0, + child: ClipRRect( + borderRadius: BorderRadius.vertical( + bottom: Radius.circular(8.w), + ), + child: BackdropFilter( + filter: ImageFilter.blur(sigmaX: 5, sigmaY: 5), + //TODO 等待后端接口补充话题摘要 + // model.summary + child: ('#${''}') + .text + .center + .size(28.sp) + .white + .make() + .material(color: Colors.black26), + ), + ), + ), + ], + ), + ), + 12.wb, + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + (model?.gambitTitle ?? '') + .text + .maxLines(2) + .size(28.sp) + .bold + .overflow(TextOverflow.ellipsis) + .make(), + (model?.content ?? '') + .text + .maxLines(1) + .size(22.sp) + .overflow(TextOverflow.ellipsis) + .make(), + 12.hb, + ], + ).expand(), + ], + ), + ); + } + + @override + Widget build(BuildContext context) { + super.build(context); + return BeeListView( + path: API.community.topicList, + controller: _refreshController, + convert: (model) { + return model.tableList + .map((e) => CommunityTopicModel.fromJson(e)) + .toList(); + }, + builder: (items) { + return ListView.separated( + itemBuilder: (context, index) { + return _buildItem(items[index]); + }, + separatorBuilder: (_, __) => 20.hb, + itemCount: items.length, + ); + }, + ); + } + + @override + bool get wantKeepAlive => true; +} diff --git a/lib/ui/community/community_views/topic/topic_detail_page.dart b/lib/ui/community/community_views/topic/topic_detail_page.dart new file mode 100644 index 00000000..0f0efcd1 --- /dev/null +++ b/lib/ui/community/community_views/topic/topic_detail_page.dart @@ -0,0 +1,38 @@ +import 'package:akuCommunity/ui/community/community_views/topic/topic_scrollable_text.dart'; +import 'package:akuCommunity/utils/headers.dart'; +import 'package:flutter/material.dart'; + +class TopicDetailPage extends StatefulWidget { + final int id; + TopicDetailPage({Key key, @required this.id}) : super(key: key); + + @override + _TopicDetailPageState createState() => _TopicDetailPageState(); +} + +class _TopicDetailPageState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + body: CustomScrollView( + slivers: [ + SliverAppBar( + expandedHeight: 500.w, + backgroundColor: Colors.transparent, + elevation: 0, + pinned: true, + flexibleSpace: FlexibleSpaceBar( + title: TopicScrollableText(title: '#TEST'), + titlePadding: EdgeInsets.zero, + collapseMode: CollapseMode.pin, + background: Container(color: Colors.red), + ), + ), + SliverToBoxAdapter( + child: 40000.hb, + ), + ], + ), + ); + } +} diff --git a/lib/ui/community/community_views/topic/topic_scrollable_text.dart b/lib/ui/community/community_views/topic/topic_scrollable_text.dart new file mode 100644 index 00000000..bb23f6e0 --- /dev/null +++ b/lib/ui/community/community_views/topic/topic_scrollable_text.dart @@ -0,0 +1,47 @@ +import 'package:akuCommunity/utils/headers.dart'; +import 'package:flutter/material.dart'; + +class TopicScrollableText extends StatefulWidget { + final String title; + TopicScrollableText({Key key, @required this.title}) : super(key: key); + + @override + _TopicScrollableTextState createState() => _TopicScrollableTextState(); +} + +class _TopicScrollableTextState extends State { + ScrollPosition _scrollPosition; + + _positionListener() { + setState(() {}); + } + + @override + void dispose() { + _scrollPosition?.removeListener(_positionListener); + super.dispose(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + _scrollPosition = Scrollable.of(context)?.position; + _scrollPosition?.addListener(_positionListener); + } + + double get offset { + if (_scrollPosition.pixels >= 500.w) return 1; + if (_scrollPosition.pixels < 500.w && _scrollPosition.pixels >= 0) { + return _scrollPosition.pixels / 500.w; + } else + return 0; + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.only(bottom: 202.w - offset * 160.w), + child: Text(widget.title), + ); + } +} diff --git a/lib/widget/tab_bar/bee_tab_bar.dart b/lib/widget/tab_bar/bee_tab_bar.dart index 19c09a29..837c5d94 100644 --- a/lib/widget/tab_bar/bee_tab_bar.dart +++ b/lib/widget/tab_bar/bee_tab_bar.dart @@ -11,9 +11,14 @@ class BeeTabBar extends StatefulWidget with PreferredSizeWidget { final TabController controller; final List tabs; final Function(int index) onTap; - BeeTabBar( - {Key key, @required this.controller, @required this.tabs, this.onTap}) - : super(key: key); + final bool scrollable; + BeeTabBar({ + Key key, + @required this.controller, + @required this.tabs, + this.onTap, + this.scrollable = false, + }) : super(key: key); @override _BeeTabBarState createState() => _BeeTabBarState(); @@ -54,6 +59,7 @@ class _BeeTabBarState extends State { indicatorSize: TabBarIndicatorSize.label, tabs: widget.tabs.map((e) => Tab(text: e)).toList(), onTap: widget.onTap, + isScrollable: widget.scrollable, ); } }