From 083600878eb3195ceb5bbdd59513aed2a8e5f5de Mon Sep 17 00:00:00 2001 From: daodaoshi Date: Thu, 23 Jan 2025 21:51:27 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E5=9F=BA=E7=A1=80=E5=AD=A6?= =?UTF-8?q?=E4=B9=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 ++ .../gradle/wrapper/gradle-wrapper.properties | 4 +- assets/images/2.0x/icon_favourite.png | Bin 0 -> 1750 bytes assets/images/2.0x/icon_lock.png | Bin 0 -> 860 bytes assets/images/2.0x/icon_map.png | Bin 0 -> 2001 bytes assets/images/2.0x/icon_offers.png | Bin 0 -> 1165 bytes assets/images/2.0x/icon_order.png | Bin 0 -> 621 bytes assets/images/2.0x/icon_payment.png | Bin 0 -> 1865 bytes assets/images/2.0x/icon_user.png | Bin 0 -> 1601 bytes assets/images/3.0x/icon_favourite.png | Bin 0 -> 2832 bytes assets/images/3.0x/icon_lock.png | Bin 0 -> 1607 bytes assets/images/3.0x/icon_map.png | Bin 0 -> 3211 bytes assets/images/3.0x/icon_offers.png | Bin 0 -> 1944 bytes assets/images/3.0x/icon_order.png | Bin 0 -> 858 bytes assets/images/3.0x/icon_payment.png | Bin 0 -> 3032 bytes assets/images/3.0x/icon_user.png | Bin 0 -> 2570 bytes assets/images/files.txt | 7 + assets/images/icon_favourite.png | Bin 0 -> 723 bytes assets/images/icon_lock.png | Bin 0 -> 376 bytes assets/images/icon_map.png | Bin 0 -> 734 bytes assets/images/icon_offers.png | Bin 0 -> 488 bytes assets/images/icon_order.png | Bin 0 -> 329 bytes assets/images/icon_payment.png | Bin 0 -> 709 bytes assets/images/icon_user.png | Bin 0 -> 646 bytes lib/common/assets.dart | 12 +- lib/common/button copy.dart | 42 ++++++ lib/common/button.dart | 45 ++++++ lib/main.dart | 5 +- lib/pages/login.dart | 129 +++++++++++++++++- lib/pages/welcome.dart | 37 ++--- 30 files changed, 255 insertions(+), 34 deletions(-) create mode 100644 assets/images/2.0x/icon_favourite.png create mode 100644 assets/images/2.0x/icon_lock.png create mode 100644 assets/images/2.0x/icon_map.png create mode 100644 assets/images/2.0x/icon_offers.png create mode 100644 assets/images/2.0x/icon_order.png create mode 100644 assets/images/2.0x/icon_payment.png create mode 100644 assets/images/2.0x/icon_user.png create mode 100644 assets/images/3.0x/icon_favourite.png create mode 100644 assets/images/3.0x/icon_lock.png create mode 100644 assets/images/3.0x/icon_map.png create mode 100644 assets/images/3.0x/icon_offers.png create mode 100644 assets/images/3.0x/icon_order.png create mode 100644 assets/images/3.0x/icon_payment.png create mode 100644 assets/images/3.0x/icon_user.png create mode 100644 assets/images/icon_favourite.png create mode 100644 assets/images/icon_lock.png create mode 100644 assets/images/icon_map.png create mode 100644 assets/images/icon_offers.png create mode 100644 assets/images/icon_order.png create mode 100644 assets/images/icon_payment.png create mode 100644 assets/images/icon_user.png create mode 100644 lib/common/button copy.dart create mode 100644 lib/common/button.dart diff --git a/README.md b/README.md index 77aca77..8448fe2 100644 --- a/README.md +++ b/README.md @@ -41,3 +41,11 @@ samples, guidance on mobile development, and a full API reference. - 写布局前,先把结构列好,用函数拆分,用_bulid开头,表示私有布局函数 - 在使用elevatedbutton时,使用style将样式还原,在外面套一层Container作为装饰,更方便配置 - 使用Navigator.pushReplacement 替换路由 +## 表单 +- 表单TextField通过textfield.decoration进行装饰 +- 使用prefixIcon、suffixIcon设置前置、后置图标 +- 一些简单的验证可以放在TextField的onChanged中 +- 注意在涉及到更新状态时,使用setState +## 按钮组件 +- 抽取公共组件,放在commont里 +- 公共组件外露的属性,使用final修饰,并在构造函数中 \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 203dda5..039fc65 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -3,5 +3,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=file:///C:/Users/24811/.gradle/wrapper/dists/gradle-6.7-all.zip -# distributionUrl=file:///D:/Gradle/.gradle/wrapper/dists/gradle-6.7-all.zip \ No newline at end of file +# distributionUrl=file:///C:/Users/24811/.gradle/wrapper/dists/gradle-6.7-all.zip +distributionUrl=file:///D:/Gradle/.gradle/wrapper/dists/gradle-6.7-all.zip \ No newline at end of file diff --git a/assets/images/2.0x/icon_favourite.png b/assets/images/2.0x/icon_favourite.png new file mode 100644 index 0000000000000000000000000000000000000000..228fa79c3c431b24946c2b0c3ecebf50578dddd1 GIT binary patch literal 1750 zcmV;{1}XW8P)#^5li^o@Q}h9cUaBfsJ_^y-foUMQs8jR{-+T9W zx2`wSOAfuTqbO=bbh&|OKQHjA75#?_#h+yjt6SVZ@8j~uYNZzpz2Igr$$=L{^h6@u zwvk|BBk)ggSrZw;SbE9OLsdn~gKnFY0>e?tonZ3DH^zSL+VH{s{{Rg0p`>E=;sCwi z&_hcG=k*hZhXs31vA-`qP!(VI(T8?+_V^mt=oEu|$ENvULVfAwLmZ+f3_Y-?aB0YK zm?xt9QTr0U*UW9PWdDR!-O7Jypmg-O`hN6~!+qK@BP!y^qsCI(McPY2+ zxq6ai<0pLzjBrF3hcZ&9mW`TR`{w1-+%Lm@3I$BIL01De94B?8w7guoOL~B|VRQo! z6Jd>rpG6Ni+@p$_kDC>_QzM{@fFG#UjijCOZS~b2cPX!~W^s68qZ^S75uVJ7x7EL# zN>o2O<1ya2SZ%pSLKmuvpLT4#{mYt8<{HRVwPVFNgHZAnd~3V~iw^#^o^G6f^4Yw9 zU2J?^gm+LvM#%P+dWFks%=wV#UK-pUY0f{nLFt6NH)G|u;=%ODwCXSs9V##h$N_SJ zFpvaVfmWamXh=oO`qK}M-&0mrrrd+d!qSnztH2Z>0%QOYzy%tCT19G6trNK7JEkE) z@R-{gO#TIUzzCUu1JnaG7Ck0V3(_Relt{;}PiUxZzVy|pHznkMR#sM~+#|LARWas; zTdDBSNH{*w@ywURNVbZ7P*ie&v4YM+cmPN_);49Dik?vP=_d~FyufXS4)cz0K_YEu5PpT2upmDTy6K;V!i~fEoK(zQ z772K=)+o=3=>E}HF09Ev^I;8laJX$tO$}RDFZJWbJJQmUh!}XPpD~k{PZ;}2$%u(J zcU(TJ^pW>wtelb#r2m9Sp@a8^lWc!>)~WZeu4|8RC&L}2tc(k>8`q53wFdhdNP)(K zuLX_yI(;Y>Oq7DmGRSYk5-bacBPpBA5^XZlwPVTTpCsM zm+h^gmy(IVj#XziS-N28Lh+$(X%#&NNIy4t6Hxkq7268LzjF2Bx%@N7E!{A5LzKxt zB8XE%U-4-IMzoC@HSPNJe4!hLZdkG7fLPktEA$a3oH&Q5-|nU+-3+$5bi>evJq1fL zj4}qek*V#M=_B*st%?Ox$#Wu7AdU&r4MP{K&|ih&z_lb9E%Y7roWKQyv1woX(G8bQ z94soLUF{$r_dyjt5~DZi#NMJ6GIipxA*bt_@)Pm+e5-_wZ}vI99J8s`Pm51hS?(f0 zg)yfDRyhGC07vP9OD9snAmXQn;JN(~TPGRG1b3;J`90Uy__t4mWs z8%`J#+`RMQ=$<79%46I`FxNoa#L76}C|z*r#H~b@ILK&M$P`Zw7gtp&9ga``zH=)h znUmDiET7iZ3e$i(qq<$(W9h58GXMYp07*qoM6N<$g2qu_#sB~S literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/icon_lock.png b/assets/images/2.0x/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..dd9da957945765279908be1b45986bb452d89697 GIT binary patch literal 860 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 DaT$dY literal 0 HcmV?d00001 diff --git a/assets/images/2.0x/icon_user.png b/assets/images/2.0x/icon_user.png new file mode 100644 index 0000000000000000000000000000000000000000..ebbe18f9dc956a090d310137797173e954d01828 GIT binary patch literal 1601 zcmV-H2EO@;P)1vx#RJ8 z{Ag=yYdN3KJ8sD3a%N#+p}kV6JZy~FDH+~C90eR=#lcS@fSE*B> zP*_yeCsj2M>`WvQ-=R((5v9{mQ4x6>C;^`y9v;5T5=~A{&fj&{UB`eN@L)2T zyqHKN{y8-@r9@ze$n(5AfzJUm*4iHz3WY_MsZb~^I_I7N=2Z17BJu$uGDPHg-u)u7 zQ&nFE{zij1=U!6PS41S`dEQ5f$Pir`SP#5hsZ`#kL8{g29B>?1uc~PxGDM`R4*(L2 z#r{|-l^hLHDwSLi1V;e@vP5KvZVNEm($Z3;Nq2FvI3 z4!EMK2_iByDMOPoG$})qGBhbelQJ|ZLv+)?x?C=2Xs}!^XMpzsQ$%El?oD9r;^JaE z4Yshb&(s-Cvio+TnfM5_895&139W{f$Q z$z)nsrc5T&5{t#205$->x7N-Okw-*RQ&T!IG4Xmbnd|`e16wz3+H`tya&n#}=FH@DB9A)xzW=Y)t5>H)WVeWPCX>ly6B83P>ac6quC>OPUx-K! zI8!c{zc)WWf0;T6OOVNAlE4c<7w|?91V3@kz36$~+~DA#<6UI4S!1nj3&U`~h#UmA z0jGg46bgk2>Le`D=FOY$ZEtV?wul@6u87D<5jhcy#g4?|@p3+&cifQ6QS_3545ZvstOtYOS?eZKJAo1VQi-5$RFYtTE=Pp`oGQ zaEq?4uFo1{9utwBKpS9ySzrbTfev6T;D9+`$T|1?sZ*!^!Yz7wdiIFOPk|}mM6Fgk z4_sQcYSonIdDjL92bEj++@im~KUiE`{Jg5}_I-aVkOb~j)fn)PYPCAUZJcvQMC7E1 z-0z&*W{laVs&|XXecUt+oKw}mipV)tEm~{mxJ~7Tcs%YzgYwfx)48JHMj{}{++rV4ESP%pw*RNlHab#rV0`GyIo}PPw{UWjl z*bH<4?+4xj4vWZhK@eP#-Me?Mcg`JB)dPU9s?P!^w{PEm@xp}*m)ERWGoR1r9q+N; z-rjZFwr$&R@#4jMthK$W`c1$A&l+QXAbov(2c2_I14UImG(0>!!V1*g-MzyY^D`i= zs)vko?hznvjQMUDhNoGfthE<_LqHsO)CbbQ8$&}wMOLt4v1oyjOeQlXA}Ip|z%`o3 zRUj}lDMOPofCGG*M*uhj%mN?m@9z&-;rjdg1E2$#HNc;Nb=7M1@qvMXJ6NFx1_th^ zR4QKv)&R%6EnBu!thHHdZK_tQy)!;OewP0a0R#|0009ILKmY**5I_I{1dy#;x5kVy z->B7U2Z04u{h_2%Dc|$Fhkf7w5wHok3`_%-mB9lNzy{z_7=}+-YmW#wq*5tA7K`l{ zkxv4T0P6umV<^j`H(Un(RIOHz04L9!ITQXDY?z4}axg`A00000NkvXXu0mjfOOEG4 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/icon_favourite.png b/assets/images/3.0x/icon_favourite.png new file mode 100644 index 0000000000000000000000000000000000000000..6f631147459b13455529d057f63b3476cf61b005 GIT binary patch literal 2832 zcmV+r3-9!aP)Px<%1J~)RA@uxntyOq)fLCT=f2%+LJ}fM_$Bs-anzz%tXPzg?4lqA&2B=n8$hvA z9n|s1Flw=bf)R_QqIT3O^~WDnL6UutWH%8hirGz!ZPf^rhj zHrVnk-y9NHN5BLCQ3k){3G2(hbFh^&7M(4%XbC`535YOY2cQw??rXv&zaxN$1A16I z8*~<~0^|yS91OXFKvx0e0`M6dJl9jJfAXDx^}D>|5}E!EAe9K4#y6j~HM z?$sfE_qQ6h!s*SEpce^95`;%ZQu6~n5jc?L%Ortq07f$KyeI5m`mKena4j6oFkT=g zHv8^T7rATo z{oe}MGS`A1Xe@UDNCWfA$XKlP>AKmU@xg4LkAclZ5R!3wZngjEQy$iTxi={(fr=Qo zi-1N6zTOkoUmM79wM97&Q;-;Q0MttsKh3Q!{(PYC;(b4;)A*H{3#OS;swp`Z%mG_+ zOQF?dKQPmK9+|WQgzqt=-xJL2plyr`o=P>bB04b9B{@iMPjaASdxmR4?DF)LP z0i4aihE(D^k3k!qVl$7QTZXO3SvtaOX_^daP9WwBh$sV~^BFjuzz&t? z66g#DcAK{7tob|3j>KzRuSDZ^Cae;S$rA7hpp!vOfc%g_4Fvww)a<(SM9pu z!p%iRC%;z)U4_M9E>Oq8e#VXfyceKDBx#?i;ct+9$OigMLPp4j&PJJhWJzd4gn};L zS};!okj|iq1SA8noj|!dnY60(PcSvGkd4eZ2+%PQ4%@(gX-&rm18p@{yr5(PS@{={ zW}C+>(+NliC>@M3AdChu20&szx(onc5O9P6-QjRNL4j6LkB z2r167N!w2tSjXUG0(1qd*4sNQd9|lTecC}6@?j^fi)mj`?Vn%%M@&^{=>i# zNG$Wz_&1)a09NfP%`W_r4R{K~s`LYZUKFNwHh`lDT$vV;9LbvjF+_J=4Dn>y;A|U zy9AUE;86e*7&ruy>k;jIqUU%SODYs_LOsqS!t+Ely=#v1b-C4g$*BNh#fD(E?;a5D z>yE_r%ye5vqpa**$osDhYTLAHM;b}S<6yp+*?f^mOfm`U^M;`qW(BA(8UHMAT2fT3 zV(?u6RIvSmiEr|R^z8$ti>mTxHrO;yN%|PTSpfD3$@d*>8@1zRi)q<6H9X$$Drd|; zTWa=|059%}v3NZyjr;OzO5f{C*9mju;LJh~ByZ@R7L5$K?n`QXa!Du@iPxy1kPl=o zm_RmJ0pOypjE{F{nz?k|8>RbCl;E5YHkOo!KJ*cbhXMQ$%xw%_CDJ<9=Tua*4F!M| zohp|=x2xY%Pb_dXXwwCx0-m9geFip0*<4#ty>*`z z;|5zM;PlQW(6ccIbmhH|jHHIgXNE#57w-45bi~`{nm^HC?KyzvsCdb3>D9Sk&pSG&V{QFmY%Y^FZ- zRX7WO$>3ixcrOWgtGjCJ-gpMK46Bq@&R8^xHS-XI6G61b9V%Hlys*Aq3``;5p}O#- zqIm1ealyulVv^LBq~`KsPiT1a=yI30P%v#|@V)M^9(P|iF4&5!1qCdmt^xx|QJ7Ox zyfdC@bh5I6Ebr|k=qZ5rO=uZ)fz@(M&$w~H2A$pq0a87iPfX$k!<|``XBSKtBx)Im zn$hUQ`EQjq#Pb8=f(MzHm(=zO~ zEN{9&R0cvO0mUiQu-MAp7LPFl$udAer}sSqO#$OsceVePfxhYe-ZE^g_$7q81ad9` zYjVQ=|7k(SGw?T&Rj>i4ccTC;0`uGMYF!lyEkBlFE3yl&ViKx~aXNs-?y!HevfWs6#HLpsqv--Uy*eaLH*1}`d-&_tx6Q#9} zw|W@Z=DK#G!A2f{YXEjCBV+qC;}8+TtlAx|ZQBP*;(LI~odsD0Dp5syX58SZ_WyBE zVPjFSHFXmR`3$b{g!Sx!1_)&SB9&|{HvzaA!1q)H?f&K%gVlwv)GlT;3Gn+G#BW;c z@-5#0J)H{I!tatkxPnp>@Z(0eR(>`ZLH3jo~! z#@kV0I+ z9eet^Jks-hEO_nsbhNNXGYN7z0T-)v&5TY#XkcJFB&~PXlzd%k31<851>s=^J_DHx z2D-P=GnOUT3a4*11L}lR=MMX)Zok}ndZ*ns1!StJnA@#PO~ZPC!Yue1PnAFJJ56f2 z*omhJDOM0LrMo1geqI{^FN1B5q=@JjttMqkfl76MiXeWT6D}?rG|vXIeU(JG8jSad z==T!ROCS}bRL9Q*_+tW<3gXhi=;Ep9-^^pxnk*pjmFOzJfPkY63NYkh0;zi&5=2XK zLM5994YrqO4KR0tXhgU2W)RjuvOh8w`vuUECG(H8?LHs i3g+wF)%qJ&VE+Ry!@X;BNhiwy0000Px*0ZBwbRCr$PoM*@+MG%Ic(=#W`Vor#nKLjJF7%>MBbHapT#PCB;#T>zaB4$pE zh&f}tQ$Y|D${8_Z4j3?Jd5)TMl-=8z+3DH6{ifjf?wfD6yWXzq?yBmycN}9(#x;O< zJg_3L0ZZAm<5Z2)3j7Xy z2fPbB1l$OGoC0{=fCaN8a4@hJAm}RcJ#ZCp8Sn}4OO-}CeWp&p3j+rQ*rjrv{SAB$ zyb62@dVUs1 zUjYYJY;)Q;^$U1=;9_9eXz?T9Lg0o_upfiW0~`hHpKJg9cy>?KhWi1m8$Syy6rFzo z>+q#U5*8(aAHw=751h6XHU47vS_!ZU*)&({WkAE5|}*$A*M1 zD36!vu!eWn2Of+4ULB0l3x}a)0qaf^LTOiH7mlRCeun{?3Ahv3A^zqzn0Z{!@hk(_ zINABK3SiK0hXxjdkX^!^O+sD-HUxesqDUFQMm_h(V&%&0Ug*z3$TH#9rkw^mTNT|B z%K+Xf0sv!PExQl!^&rp!^8?pM2x?k+0B}bUUCIDHG{Q!cgNeWqk@Xbmr|x&$|DC(; z|0Wm5#2($VpE7_A=Fb59%(=ixF_(LGlHdjBu34A?kn4%MomZrvGJsD7PKid1aQuCc zQc0f{@N`U8X+#scKqY-z3%3^jcLXZAQ0vn5jX)&>v~#$f!|fcNIszjTX&IxM?`{ys z9(fNp=iDeBJOMme-}+Ojr84?h-FyL<^8ZEa=*T>*0h^JGidbwkmAxVZtYt0Tm<^4z zWPtP43~N;P0dD}mjR^YnVmgk`0DDMvNz{9-2zs7lCGf8i0c(Vv2(J(d9xJ!E`wKlL4uy~Aw z%pZ?nW$C465i|;TtqAQ*Qe+Qgsi!CSGHInh8Tvh!&?OoHYz(_|Fm8GgO(m&FTDdJz z($WZEIg@vXRW;r>z{9{>aSADe&x7@BFa*6TFe!nhlLOXuO*Ngjio{U))9>Wy39@Nd z3;Kf0K1B+Hl*YnDm4btl9B`g7pz_iZrgTwG&<_IAj-As|7%THByY!J9u*@0{&gDzW zcRmuZw$w>n!R3EBhf5uB7qo68>0!R8AeA@^Y`W=a>G$OLV~R3xatj|8tFzX-C5YeM z_FCt%bbpC5*3{&2%HgO}k^`18C*#%&9@73T0Smm7>;_x}EEYWL-DAO*q5WxylEzjTv&* zEsX$H>HK2U3viLet?EED23QW2adHt0%l&dtQb-FpRRLg3Ti7cVXb`nEQlM8ROIVdTlF~FJfhKp`b-cdAmR(^~K%!7C{ zs+7_=V8K|~u)<;FW%rpP3lEDg)}%-4 z(ydF^o(K7jD}8@S$dH)U5Y~{^`;ybBho0?t z%I9rs3*qvipB@s0`&Gklf-yDS&XhDyANIDW)rXOme*hOAx3Fu_G|d12002ovPDHLk FV1lmN?$-bS literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/icon_map.png b/assets/images/3.0x/icon_map.png new file mode 100644 index 0000000000000000000000000000000000000000..c7e9b5420165e16336263485c45ad9019dd6fe5e GIT binary patch literal 3211 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 literal 0 HcmV?d00001 diff --git a/assets/images/3.0x/icon_payment.png b/assets/images/3.0x/icon_payment.png new file mode 100644 index 0000000000000000000000000000000000000000..23e2db026499238e86026064c61d5ece16966dcc GIT binary patch literal 3032 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 literal 0 HcmV?d00001 diff --git a/assets/images/files.txt b/assets/images/files.txt index f73865f..25112df 100644 --- a/assets/images/files.txt +++ b/assets/images/files.txt @@ -1,2 +1,9 @@ +static const iconFavouritePng = 'assets/images/icon_favourite.png'; +static const iconLockPng = 'assets/images/icon_lock.png'; +static const iconMapPng = 'assets/images/icon_map.png'; +static const iconOffersPng = 'assets/images/icon_offers.png'; +static const iconOrderPng = 'assets/images/icon_order.png'; +static const iconPaymentPng = 'assets/images/icon_payment.png'; +static const iconUserPng = 'assets/images/icon_user.png'; static const logoPng = 'assets/images/logo.png'; static const welcomePng = 'assets/images/welcome.png'; diff --git a/assets/images/icon_favourite.png b/assets/images/icon_favourite.png new file mode 100644 index 0000000000000000000000000000000000000000..3a3f79603521d11b2aac7bba88555e7326dc5f20 GIT binary patch literal 723 zcmV;^0xbQBP)8B%30W;wmKnRhN31V|4-DSe5Gw>ff8a&)$dpaH z1fZxcsc;>CA09XTn0hs2DwNY!j?P&)SImu^KP8V&``0Em@75}4c zyV;-1R2kry)#m&IPUct}oe~z@`!X<5x;eRrJG9FIvQaIHGJU8W?t?c^QwkI=p;m@? z?{es;v%8u#ERf)KXP|egAkx$UPF1&tdhdRmnRLMmb96!m`>Bfk-AxznfBS^L7(58U zg9I>E7-dr73)99BWJtgw3?2v~o`DZ8r*REFBn!)$nZc+Pvj)^Wp-Ne z+r!jiV_2wEG(9t02th;8wJQ!Iduw^tDEgyK^90N)3ate&1~(ZVG$C!$xO}d2YjN1T z!F61NBWL;tZ})><5Wadv+{Dz}DTC%RHt#lH(}_QpRQfD&iU%+THyIunD9Ql6+-A^| zxB=DN4?7P%dSJsJBMlkm&OkU5T&n*GSx^N44L}4u`~p@V5`12jZbtwB002ovPDHLk FV1l7TIotpM literal 0 HcmV?d00001 diff --git a/assets/images/icon_lock.png b/assets/images/icon_lock.png new file mode 100644 index 0000000000000000000000000000000000000000..eb3d08da808d7fd79f9dd60b42d42e885fee6c90 GIT binary patch literal 376 zcmV-;0f+vHP)Ec^x} W*g7up(hj-+0000!DE4r1a2AdzT$&>z`aFaY;yB(%L`Rv~ z1;9$F)G&;t$;rtOLkI&Jjm9C%vgU{=)ph;XUa$9znMq1H)$jLbn0XH~f8}}JA1Dz@ zK@faoS=J$?)FsDpUSNdP)zvqd`FfURzfDa|-Ns9eMx&l2$u+#DBuQ>Io6R#Qh$xEo z648gcuAjz$IF642co#dKxURd5QkG?(o2L1o)9EZzk|bX;^RnYOODKe4_=c474iP;C z@JK0zJkL)krS=OU&bzL=i9!@bCxsA)g;MHm&-1RJB&EEX=lP=JI1llk zSV2kG^|0M;AIFe1O=pAO+Z7^W!OTmRWz_*JqOiTaeNjqz%lG|h(=>kqKvK#R zd7i(swYBvLO5JYvlxdoeX=P=_G7RHBGr#Y7UJs=>j%NT&W5@5V>;8gL5CmGKQu)y^ zj5_|cwzhWG_x;cCnwrh#tnd40QP8ksv0AN8Z)|KF#Q#`dUw=zVd30=S>>Ctx6z1pW zF*`f^r&8+X+}zyv3kwShBScYTD5Y)@(Wes=6Mv(iq2zhqb6wZ(GV?X;BG2=yLWpl2 z#|cr=Fu=C$2Sl_P1i={$@qNE8gy`9}{T&8q7}D)_uMpA6PN#DOr8G^CRIAnZgbP)TUj|;u5W%u-}cng>ndk6 z0320#1RD#V){fEVVnC93F3x8fK^Q*hxH->NEYzmTfh*qkp7ctN)t`lK`^_Wr=LS)@+VXSNrN)~r z4B45koFq{5sPXnW{&|VMjbbI^kk2Iag649)+Qff)QeW$V(h;TNqLi@Qnpt@P@FP-) z%1uj+06jq}7F{KNDR_hwF2k?JW{nERk%G!e7mC}YIYkPixyz(>0ds~_GU0-HuvlNO zBE`;h<#9ro#rpa#QfwA05R6DLBEg6RBNB{A#L~e95$duwTYl)r@s%F4#1Ja(C}2T+ e!7x=Cahm7CqqZtAA4D?%0000fEE=PJQzF}JXi|DcGOYPK4nyTp^Fo8mO|IX3DBYfg9n2LOJUfKIx5@!GO-{^;$qhb2W9lv9@wEdj1^T?uC+SFku1f%|Bn z7{IOC%?omY;3kdG3c`}0DPP%HuR1HZsWTB{i6ZVccNrPwG={VGhJm2f1YkUy4m>bR z?32Xahm7M@3DPc`jAa0ZB&NCEvSYr|xlOoOpH;a^Db(|{WyS++pBc-|a;;Lk1rF^M zn%=<7DaHOU3E2Q(NFwicWNTe2=eEx=LXA+IHgitgvGvnrx^IciN=X>?X+}rL$Q`hB zV{kMm?v-SmV{P%6-QU_-51;n~xJ1_@(M14yOxHfUFqOQYT)5mB3k4%(uD5YA>(+zt z)fM8%_J=(m@msw4I41m|N<-;OUExNR;Fk7BR~OUEXm{!GxAe_6pp^lt|Qjg?Jo)5nH?as3N-H zns|=00000NkvXXu0mjfJ2Xor literal 0 HcmV?d00001 diff --git a/assets/images/icon_user.png b/assets/images/icon_user.png new file mode 100644 index 0000000000000000000000000000000000000000..e6873054ca7e38a0c3c0cc7c72fc8281cd40bad5 GIT binary patch literal 646 zcmV;10(t$3P)l*3BO?FG8-a0~+)<7!@Lcw|<;Dc(d+hMd&}FL7H=j zopA^66@(Bg9qf=D+}L^Nowq&9t8KLV`4Ij>2r&=fJ^%qA2Ot5^(pqmtQM7|g5H28u zaFQf>Y1{U7rPO+{SlkVQpj)rkold9YGxL)qNxnFavl5137Y2k2jE|3R*|sgyG+l|~ zIK??a2-aG^l2TfShlfirU>JCwcgwP@s{oecI8I>@hG9lT%eHM_^E__>1`Gpcz60P{ z7={@x5r$#bvra^JVZboZT2B=Ug+274P$=vIaACkOEAH>_chQF+2)Y0YFklQ3V~7|- z#4!6kJ3H&35A}N80nmW~!|b5b>CB@KNs`P1Xu*JCptXL>%#Vc-j7tb1SSj^LYrP4B z91M<+kH3~mrJK22Zn09SY`5EOjdLa^C-X$KA*K8k$MJI*W^Bj_U-8CNHrP_XLNLQfr#EnDStYSv(j$26$}VHzVFl7+1ZRzYL1y_wAP=aD7uFp z*L4?(Xo-lX05||r0HN0UbreN==y6?ljhP!+mIe8IepgEQvDIoRnx3A%k!9H?fbXSJ z>HX>H>4zW)KH(pEo>wcE%l^s9$(+{u3K1=l5TZpyYt3eJ8w28b-Xak_WdN0Cv$>4{ zilS%-K$QVx7> { - //登录表达 + //检查账号输入是否有效 + bool isUserNameValid = false; + //登录表单 Widget _buildForm() { - return Container(); + return Container( + padding: const EdgeInsets.fromLTRB(20, 70, 20, 35), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(35), + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + //Username or Email + const Text( + 'Username or Email', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w300, + color: Color(0xFF838383), + ), + ), + const SizedBox(height: 16), + TextField( + //Onchange时检测输入是否有效 + onChanged: (value) { + setState(() { + isUserNameValid = value.isNotEmpty && value.length > 6; + }); + }, + decoration: InputDecoration( + hintText: '@', + prefixIcon: Image.asset( + AssetsImages.iconUserPng, + width: 23, + height: 23, + ), + suffixIcon: isUserNameValid == true + ? const Icon( + Icons.done, + size: 24, + color: Colors.green, + ) + : null, + ), + ), + + const SizedBox(height: 36), + + //password + const Text( + 'Password', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w300, + color: Color(0xFF838383), + ), + ), + const SizedBox(height: 16), + TextField( + //隐藏输入 + obscureText: true, + decoration: InputDecoration( + hintText: '6 digits', + prefixIcon: Image.asset( + AssetsImages.iconLockPng, + width: 19, + height: 26, + ), + suffixIcon: TextButton( + onPressed: (() {}), + child: const Text( + 'Forget?', + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w500, + color: Color(0xFF0274BC), + ), + ), + ), + ), + ), + + const SizedBox(height: 30), + + //Sign In btn + ButtonWidget( + text: "Sign In", + height: 57, + onPressed:(){} + ), + + + const SizedBox(height: 16), + + //Don't have an account? Sign up + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //文字 + const Text( + "Don't have an account?", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.w300, + color: Color(0xFF171717), + ), + ), + //文字按钮 + TextButton( + onPressed: (() {}), + child: const Text( + "Sign up", + style: TextStyle( + fontSize: 15, + fontWeight: FontWeight.bold, + color: Color(0xFF0274bc), + ), + ), + ) + ], + ) + + //end + ], + ), + ); } //主视图 拆成函数 diff --git a/lib/pages/welcome.dart b/lib/pages/welcome.dart index b5a44bd..a6f83eb 100644 --- a/lib/pages/welcome.dart +++ b/lib/pages/welcome.dart @@ -1,12 +1,14 @@ import 'package:flutter/material.dart'; import '../common/assets.dart'; +import '../common/button.dart'; +import '../pages/login.dart'; class WelcomePage extends StatelessWidget { const WelcomePage({Key? key}) : super(key: key); //按钮组 - Widget _bulidBtns() { + Widget _bulidBtns(BuildContext context) { return Padding( padding: const EdgeInsets.symmetric(horizontal: 20), child: Row( @@ -26,28 +28,13 @@ class WelcomePage extends StatelessWidget { const Spacer(), //getstarted按钮 - //套一层Container,可以做很多事,比如设置尺寸 - Container( - height: 42, + ButtonWidget( + text: "Get Started", width: 139, - //需要裁切,不然没有圆角 - clipBehavior: Clip.antiAlias, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(32), - ), - child: ElevatedButton( - onPressed: (() {}), - style: ButtonStyle( - elevation: MaterialStateProperty.all(0), - //设置最小值为0,是的尺寸为children尺寸 - minimumSize: MaterialStateProperty.all(Size.zero)), - child: const Text('Get Started', - style: TextStyle( - fontSize: 16, - color: Colors.white, - fontWeight: FontWeight.w300, - )), - ), + height: 42, + radius: 32, + onPressed: () => Navigator.push(context, + MaterialPageRoute(builder: ((context) => const LoginPage()))), ), ], ), @@ -69,7 +56,7 @@ class WelcomePage extends StatelessWidget { ); } - Widget _buildView() { + Widget _buildView(BuildContext context) { return Column( mainAxisAlignment: MainAxisAlignment.center, children: [ @@ -91,7 +78,7 @@ class WelcomePage extends StatelessWidget { height: 70, ), //按钮组 - _bulidBtns(), + _bulidBtns(context), //end ], @@ -101,7 +88,7 @@ class WelcomePage extends StatelessWidget { @override Widget build(BuildContext context) { return Scaffold( - body: Center(child: _buildView()), + body: Center(child: _buildView(context)), ); } }