From 9df28c3935d0703e73cdb3ba67624a32912aad35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Wed, 2 Jan 2019 20:29:00 +0800 Subject: [PATCH 1/8] =?UTF-8?q?=E5=B7=A5=E5=85=B7=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/color_const.dart | 20 ++++++++++++ lib/ui/home/HomePage.dart | 1 + lib/utils/GradientUtil.dart | 63 ++++++++++++++++++++++++++++++++++++ lib/utils/SizeUtil.dart | 46 ++++++++++++++++++++++++++ sources/imags/logo.png | Bin 0 -> 15772 bytes 5 files changed, 130 insertions(+) create mode 100644 lib/common/color_const.dart create mode 100644 lib/utils/GradientUtil.dart create mode 100644 lib/utils/SizeUtil.dart create mode 100644 sources/imags/logo.png diff --git a/lib/common/color_const.dart b/lib/common/color_const.dart new file mode 100644 index 0000000..ac45f05 --- /dev/null +++ b/lib/common/color_const.dart @@ -0,0 +1,20 @@ +/// +/// Created by NieBin on 18-12-14 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import "package:flutter/material.dart"; + +const MAIN_COLOR = Color(0xFF303030); +const DARK_COLOR = Color(0xFFBDBDBD); +const BOTTOM_COLORS = [MAIN_COLOR, DARK_COLOR]; +const YELLOW = Color(0xfffbed96); +const BLUE = Color(0xffabecd6); +const BLUE_DEEP = Color(0xffA8CBFD); +const BLUE_LIGHT = Color(0xffAED3EA); +const PURPLE = Color(0xffccc3fc); +const RED = Color(0xffF2A7B3); +const GREEN = Color(0xffc7e5b4); +const RED_LIGHT = Color(0xffFFC3A0); +const TEXT_BLACK = Color(0xFF353535); +const TEXT_BLACK_LIGHT = Color(0xFF34323D); diff --git a/lib/ui/home/HomePage.dart b/lib/ui/home/HomePage.dart index 82c9b40..c33d748 100644 --- a/lib/ui/home/HomePage.dart +++ b/lib/ui/home/HomePage.dart @@ -32,6 +32,7 @@ class _HomePageState extends State ) ], ), + body: Text(('开发中..'))); } } diff --git a/lib/utils/GradientUtil.dart b/lib/utils/GradientUtil.dart new file mode 100644 index 0000000..ae1f0e5 --- /dev/null +++ b/lib/utils/GradientUtil.dart @@ -0,0 +1,63 @@ +import 'package:coderiver/common/color_const.dart'; +/// +/// Created by NieBin on 2018/12/28 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import "package:flutter/material.dart"; + +class GradientUtil { + static LinearGradient _getLinearGradient(Color left, Color right, + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + LinearGradient( + colors: [ + left.withOpacity(opacity), + right.withOpacity(opacity), + ], + begin: begin, + end: end, + ); + + static LinearGradient yellowGreen( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(YELLOW, GREEN, + begin: begin, end: end, opacity: opacity); + + static LinearGradient red( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(RED_LIGHT, RED, + begin: begin, end: end, opacity: opacity); + + static LinearGradient yellowBlue( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(YELLOW, BLUE, + begin: begin, end: end, opacity: opacity); + + static LinearGradient blue( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(BLUE_LIGHT, BLUE_DEEP, + begin: begin, end: end, opacity: opacity); + + static LinearGradient greenRed( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(GREEN, RED, begin: begin, end: end, opacity: opacity); + + static LinearGradient greenPurple( + {begin = AlignmentDirectional.centerStart, + end = AlignmentDirectional.centerEnd, + opacity = 1.0}) => + _getLinearGradient(GREEN, PURPLE, + begin: begin, end: end, opacity: opacity); +} diff --git a/lib/utils/SizeUtil.dart b/lib/utils/SizeUtil.dart new file mode 100644 index 0000000..f55ec20 --- /dev/null +++ b/lib/utils/SizeUtil.dart @@ -0,0 +1,46 @@ +/// +/// Created by NieBin on 2018/12/26 +/// Github: https://github.com/nb312 +/// Email: niebin312@gmail.com +/// +import 'package:flutter/material.dart'; +import 'dart:math'; + +class SizeUtil { + static const _DESIGN_WIDTH = 750; + static const _DESIGN_HEIGHT = 1334; + + //logic size in device + static Size _logicSize; + + //device pixel radio. + + static get width { + return _logicSize.width; + } + + static get height { + return _logicSize.height; + } + + static set size(size) { + _logicSize = size; + } + + //@param w is the design w; + static double getAxisX(double w) { + return (w * width) / _DESIGN_WIDTH; + } + +// the y direction + static double getAxisY(double h) { + return (h * height) / _DESIGN_HEIGHT; + } + + // diagonal direction value with design size s. + static double getAxisBoth(double s) { + return s * + sqrt((width * width + height * height) / + (_DESIGN_WIDTH * _DESIGN_WIDTH + _DESIGN_HEIGHT * _DESIGN_HEIGHT)); + } +} diff --git a/sources/imags/logo.png b/sources/imags/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 zcmeHtcU)6Vx9$!BLhnTo2-2nZ4xvaBks=)=(m{HY&=D0BDFO-#2ufF)bSVN-ML|G% z@4W@2gqj_5l8$F%1KGvm3|KUzf_H!E9a9S1jWH!lY_cV=Z}W??}g31%)W zOKV5h^UkXPrbAL%NLX4(kXcAjT1Z@4L3@Uudlr!38}J1dIiK$DMx$r& zzdCq(yGsiQxO(whp4-50?dBqYuyhv?;ujPEWMK$*OKT@vZ)Pi7dq-C}maWrEFMW^31XbX@rZri>m!VODnYv}G3K7v&dZ!Ho8_v6I%jruyet%sV-jKaKSD_2u^! z;dk@27Z8$?k`fRU77!NZ!$|OX`MG*qBKTarSbuA{X6t3`>FDn5=;q3NuF=xU&Bt4g z1vB#>Cb_s@sQp{t&jsD3l|5}Oy=|{ysvOIC1o?!7`Gf@Zf5-nHgxoy!-Q1kzSpJ1O z`Nt?NHycMgzyDgb045Xyf5ze*UIbO1`QPQ=5%_lm{vCmTN8sNP_;&>U|BJw1w9M8O z!^M0tqzgcA0Fr<4M-hHOKvGFV3;UdPV#+Vf{tJ@zGe(WX0;Sk1q4+P?QA)w+S)ySL zWo5XIp0=vS4V7PnnCOe8ySpFR-iCP3_@OMzY==b!|yRg~LQ}x0}7cb1n zKj*c!{A(_62mSL?*Drf)y^JsHv9Z0Ta?$T48i@cR=NR1$SX(zqyh2+vH(Hh5#mAdgz;4IOz~Xt!tfID-s9Ed{lHto zJH{u&XUCVu*T%QO_rs6H&%&?4@5W!iKPDh2;3SYE&?mS{aG&5MK@mYK!8pNBLPA0o zLMcLBLPx?-!k2^}2)_`{5FQdy5OEVJ6PXkF5XBJX5;YQy5d9=3CgvbkAT}lTCXOL~ zN8C(2NsJ<)B;hB~Ah96{AxR;rB>6$INs3R(PO3<1LF!MMNLohPO}b8oPsTx}OlCE$tK9BHACc2bV5iQn+M$De_YBrGZOFbj)-rbWU_}bX9Z{^w{*=^t$xE^l9|1 z^y`HVbtW1n1*W@9&zb6( zR-lwnd8i}wIkW+~%1q6y$n4DglDUN$d4=JM`W2rmZ?Am6a?HZXV!#r{Qp_^JO28_~ zYRCGVwTTtU24&M?3uMb@8)e65mt=QfPhxLpKj7fxFye^dsNz`Wyu_)&>Cc(ZInG7Q z1>^GI%HZn1ihEV^s?*iiS9`dzxW%{~xKp^hd9ZlIc^r9O^YrrK@JjKz@@DW3@e%PU z^4;Uh=bPcD;lIHj#$Uz1DZnORDi9~oE^sC&Cg?1fB{(KTA#`0ROsGa^N0?jKS~x|x zUxZjhRU|~@qsX=>kEpF^n&_|?rI?mjgjkcU+GbyA1Y;?myIrP5n6d@@cl?`4){Ic05Svt;MwSmZ3_-pWnOGt1wReWx!??SQTs(auk*nuPWYEEKuB35>)b3s!%#mmR1f@ZoCG*rgkmz+IJNS6$6!I zl}S|=ReRNZRiv7jT7X)kI*z)gdYt-@2BU_x#ybtpx>kbL_)Yekt~aZ+0c{QK1nmhOP8|=OT3uXS9o-b&MLi+CK)v=`l(*ow-rw5S zSJIEwA2Z-G@G)pIBsDZQd}nxIbj>K$3B8G<$wyO&siA3(>7JR2*$cA; zb20O9^TFGkw-L8HEa)wqEk40X;g;~SJ2-cY?!3QqVySJJVYz3eVU=oyv{trGvR<=M zuz7B?Vk>7GZ@XkCXBTg`Y%gb@V87x3b4YYpcT{#vcHF+JemDK@fs?jVt`pkX$hp`B z&*hFwwJU|IlWU6`lN-XV*PX{b+(o@qj#|z|j+v}q@6^7h&`f&L?@|n3O ze=p@8%Gc1h3_*@?MRfXc`#ten@>liG4!{nu4rmIz5_mswCP*>pZ7?Xdb_29M5>mO+f zX+`Ob=}*&--Z;J)eyjGjGJ_){F%viQUglz!VOD##WcIrp`kbdZr@5}V(|LM%E$<}W zy?f8_J~kgK-zR^iz`UTR@LJ)=BEF)x#WclFKL8(mKCG79DH$x)ENv>2EGsH!FHfzY ztca`xRr*yTs~oDPKbm~(t-fB}R3lSUQOjSOTX&@{C2^Rq|`qH}P+konoC8U1D7o z-^IUIc1v`B?2+oJ>6PuR{{j2)x$jzETfavCw}G1jy@LjW!$amn)5A8y%OlPs+oShJ zkHD{vM za@~sRO3$j<>cX1)+VOh$2Kh$nCf8>9mcmvi(ipk0?YWKKiTX+RGj~^Xw`osjZ*t#d z|M(yhMTg2elss%dGCEp1_C0}|yga>nT63m(HjZ{dqunh%Eq`$VFy@M7hsk>HP)#NW)Zi3?{;~ z=afia0l*Rwxu}?)^WtSEBK!-0h&(aW1cgTbWCQ?64FH^aqS42%(dg4G40j&^fJTo$ zxcIp=E*Sv4p*TmKOu^^PKNWN%K#m6z0SSUZEC3cc2uuz_w*XL#?Kl`>f+@eHL0DjH z99#$*{pn?p*0)fF;*kBx-^8*wp2=h6BO^!oxMMx2sQr8l~;z1>RKkh9at5V5l zYQ0`0n~0TX7(M|F?Ik*Tb`DOitK6bu;u4Zl(#qFVRMpfquHVu(Ff_tYGHV-KJ9`Jm zyI$Tt_k0n4{tq5L3XgdFBr-nX`HRG)m#>mDGPAOCa`WE3FD)ytsI2-}UDMRu(%RPk zrQ_?5zW#y1q2ZCync2Ddg~g@imDTN?pSyee2dKlNbH6|U_z$-(Jo^uRkz@SA!o~(; zL(csIVfkVzm>e7DiV!Y^qAtYJgOWw~J|2})+}o1R_^cv&NNOw3UIH36(HZvbbJu=( z_OCe>_W$JBg=2sDH3ldH7+!@b1eiY(0s;aO3KC4Aprtr3v<$Sr3d5g;fh7&=Z(1R4CD-01+63SxjJZ00tc8L~^~s`d_M~=$`*& zeZBw7`hNV2`gk~QhbV;~AM?8?4e)=5x%V+ArKMkysXo%dt)S9X!1=#aD7x=onuth% zaup2>%QN)*ya73BI{KT@V*=|5S-C#;et$RNk_(`=$jTzz~f^ABe_eQ-sV_ABjQza77735 zU4x?g|BJiD^Ig_w8`hkL^SJdM8gOi|d|v)I`ec{ipXE4B`;G&+_Xz=^P$NUU)7L=F z?exaU%XSYoRL^D*JB2_3WMYRbU`KtoI9}FvTdg%s^j_rt^w>y3YXNov0u4CTrXPIV z#i~99e?DW|7MW8mjkozul)DfWbo)a?xR*jocKzah+cBgq2|)K38+QyiaYnx}{E z^M?L(v8lB@xpjT2LtJ3R@J;80L*~Lh>d{=KOZ)A9kqr-K=rb|@q1mJs9+4VG*Od}9 zAa_X<4P=6ihVD&*kj|3E-cG9R2XBpFC?rRPQDZ$c4igfq5gfVbI_2FlHO_nNrpK%^ zg&}QcyxU566&tEfFZ(yi<7wn3YsqlB>v{UmAPB?7Il~ZY^ESiD5mU)aQEo5V23h;L z<4LRc#dc**xRBnPY)RM4^+?>`l?Q9yzx^rgiIY9OGMPanGnQ&3wE`mmuBssDn4H5r zYvN^dXVJi;Jv2bOd?bJW?bu<|5R-Rl$r!`+$430^r)NNi4Q^vZ|IF+P1a>XG}^!g|cqN=R{3-(l2R*X-a?COGYPdSme!JY`x_T+}p3b!ib;C+1eDw=ioQm(Tbut&84VJbmgGtkFOm$tJ@JF;$b zrPBpC;+Z@<_erjYDlC zX2$&+te5vCd44W6VWKVTGUKOfUFS4rIXJoeik2y|WfShq5I}#-(-=Zl4rf|foYUsG zoTu<}BXwbp^CPS!w~Vv}+zR+U*HruJk9c=ff{c3j?GHF^KI|^A0{#0 zd5knWU7Q!l<^1pk7uE`o#(z^+&w$JT>SNJ4*I;`fC$CjjIvA++{*dM! z-^Ru_8n*b(mOVS`qxies5wcS6QDuf&0yngFV4a&&KD4#fyUetsJIbS0rri)(WaKjO)g?rtQ4(KY`5z}UHT>w+X zrl3L`%h;GIHI=0) z;VB*__r_{h#>PuP{cBZ}Q|x-PsaW3UHHAVd_^9-ge?MA?;?-wW6Akeqg-v1rrmW7-F5V_`5>F44nqe=~?D{4`y_ z$Dz*I*@dnvwMTvE>i0&fz$mpFn~jk1NZ{D>6`O8n_|@mq5;(>-&^*y2F7T`L&lV)r zZo+daee>2QS}x?Uw9zWtnPL*hBDTKrZ!&g_M1rahgSj&*mwzz^QaV&D@`1{>OIFp< zwX62|T)ai0+&9#aUm$d_$yJ$o4>%*r&0?UAaMq!Mi#qdT*|T<8zMV}S4>o7H?O5w> zU3j*^Hs=P;%Z8;sC;){@y4E({M4;7m!64h393N` z{eq{&=EZy{p}f~>Gv8l+_eA0|!}hy|1o9=SG~0$haygFW)8$PY#a-_XG|;0GbQLZh z{3GH0vb0tSOk_gl{`!*#XyC05Zo~SDR8r%C5cJSCgc+*L;BwMY99W!&2JCiOKM!pU zuadyHGSC415k)8gSH`ajLl6C@J3ty*FSeR%fO?V#jA$w{mIgTM7>7*R=C7nj_#6L_ zrOh6-ChFnsUaN7NWH^LtVZxT6kP*oR{H{e-%`N*$re~Qm zBOZ)h4^-W?r(*Pt453fBgW5k9rPZ6F2IRA+w=O%%OZ-4lHr;s<^5`U|!w?Pl8C#!@ z$Eb*M1~>$1s`#OS2Z0_rh)m6xvo@`j#yHZWFDb_bu((ZWqrjMWE*mMx$G7uPHQkSr$MI6KlsI7Yg9J7KKimb zybP(91dk6bo|U|Zqf%~H54eH?QdXXBSonGEygw!Z_TTUaWg|&i3(lAnWr%``W*sAX zB$CiTsZqHhn;-H$gr=kL=&v2}ADDVw#Ozj!x-8w>PcNb# z92@QtG`{&skw%o;2W?)RY#e$wrR?Kj&ntfGG}%{)HN_z)%3pkNdah@vxn2@wu+1{0 zm#+6I=C)gxOWPvR*Nv5zXGhcbfV^d50I}}r{L0qV{d4TJ)2^SfaQLlfe$TL zWlX1(+3Px@d%tF1vazu>#uDb)ip9IjlaGMk=m&Kqj>=7KJtCM&0Gr;D+9tH~HNADx z4b6k>6ecfh*zVXH$%#DJ73=L1NFeMa&l=9IeDh5l*BwH~S#h=SdL~a>OSvIQ^lU6C z;=aZY0jt+TS2Bq!^;z>A#z?aK$$0$V40GizByzC|cdkCJOSA%@dQLE{!QCLsoZB2b zm&;t0zRlNs)bj&gu-S!*{oa2((c4Q8`RZI|@}nuNC~h5p^CLYedlkHL#H6^-QOnH* z{%NG$f1)BD~h< zU;!%!5o<=lJSSHlv<;$x(b1d3J_sWqjmC$OJk}1{Gk0Di^MY${vfmxqljKCVG&}AwMD}P{KeH1j-YtF*$hV!)QbUnllpTF@#9ioW z%X_)3B^Z)9gy6u1b`BC&aVNtp@xya8fb(^O4h;m_h6r;P(w3x)&ec@!;!rn_tX2Bv zF*O}Y_3sK@FM=uE?LT^QUt)aR&uO)*JlLjpy?Lyt-FP!DsuqW7FUjkDD}4fuBpvTK zAm{Yer{T#YQLjOC+nXfe*h72gz(vkJo}CAKEcIU7?X87ot-A8B?xb6OaHUi1j3-sI zY=o}Iwj}c=&U8sR7u-fwZ(l;aKRAZocwU+Ad}z)E!7W{o1~rzI3I=)JlxGTZVL^DXkzNVZ=W@NBtBB z*&e>zjlcZC!C%iMoctTKZZr62$)*Mx05#^hE_Rq0Ph~`2CHj4@(f|4INgCbYFhMqo zi2rsw+JkYgA+h}|St;PuAZe#4cKT*rl|OaceV*W*Hf>=cG;kw(DK>KnrfZSA{j{kR zk^9+*e3bK*uZ>DSvyWA1gzlb_yG*K4Yd!9^Y#PNjdu3rqguMAGERyqhN>9>q6G#8{ zD{9uR%TWIzHA`3uaO)u9!6{EtRodk|*6Jz`HoZJ=+j-#+Us#7D<64R@D^l&4`8{yb zpqW@D^%=he-c&5KDT*=mT(FNlu|+mCN5oZ_ooa|iTZV5)A zD+~!_BM5IMnbt7)-DhYaJ?72~h&`V7r!+6#kKKS4k_wNGt*iTul}-x$u(GIs-M8B% zqfteZe7oH6L(CHbZh`qX2CFJimI;kxb%(F6**_Om<{uA^&cTp4L{rZS1@O;$lCC0Z z>|~2+Ihj;N7 zf+sYHv;qhca+9UiQS)+MwHbf&9r z$~|Tst+U=oY>{V*zCEh+thX3h5d&nV2lK@;X^Yu zulO2|4)ae%EF_M_&B~mP3WppvbV&!s$NRYcp|&{P0n0@GD&fDAo!bJD6qlA~u81SZt0&1M5?^(eqqg+=8c>d48oWQ!-xiGwRAJpJj0oa|5b*pi3-WPukO z`ERm5^_NjY$iq6G!q;wEvGjHs3!%C#x0p=i?jL_c#S9#<+pHyXq|C~32VFLNtm)=n zYwXJum0Je>A{Pw=zCwn~^3r&a60G&{dhlx%{2-$ac!~KzimzU9+KVkTfXP63orT>? zKRAP(ao6i?8+|UObCAv-T^aPcYZ#>wj-b6~)Z6b_AhW+K))mrJwS903Y=vxn3wdOk zVtVOor0ddzA(IetG?wMIUMJ}c2PRt}@X53R`2uBj7B&b+kweh{H5~Y-kx*peNe~)P zkeNE(nVQj?=wc}-z`RET`0z&!%Y3$I;6CQ2Y#VGxw7bA>49a>fI(oJXD>_kWv)!OG z+37wAS8TikBQnCMCYWlU+68|?0}Xs<)D>?7S+^^T5&KorKCQ_G!e2^nJff<(!u3j$ z&aQEvPVOC50Ow~Yb+o2R2+4TEk!pIUiEKF$#^U-*bIU40w2pbWSW@3f?e>m_8b{s2 z&N!EctPV7P>=8QlQ4NRBVUAHH5-xcvzJj%uZB9f z)WrV*k~4%cEF^vVxX&1)`|=4lvG&LOdF|LVSf7~BgC~uNYmePx{Il~%;OzyPM5)5m?w9--tXYSLuKcs3RG{HN!nnS+c$VD&Da9jP z<&)N+T$jA(AkJ@~o`d2Ch0 zMt1>z3bt;a`x;;Nzr~@9o;rpQ1hXQFjrrc2cDpTpaNI2R6qHGo=xpyH?J*iVW9%si z6v-G}Hg#{I$s?m2h&8m{Y>5x*Qq1@%o|h4c`}>6bk8Q}mn2yA{$OH3;FPZeN7tMaC z`&1RS7_#S~!Oa_+CU3w-i6Q`g{3f)2(}FK@X*|#tiLGo0`j~gn$?}S1kG*I@(gg*m zY@jY`$}f9W1mX30fkyM*Rk<+$&2lq_A|dP;HaVQ?zs@?s<3FYald(S=cM^g zXgx{^ILVLk^<(I`!rQ6Awxc1ZQT(GD59Qh1Gzl&L!OLRY;!*sv@lFQ^?vnL*!WknM zc($AH#BsYSVl%Fof9h7nm!DUvWrkypZKT|Tq*(juj~^%u@ycpujyWY;yH?d`t);!$ z<(^zsgp3=#M8!_~K0MKw#TVM(5E6b2Z6rY7%d6Cuphk>QD= z(d3NGlQzw@Qscwe3$b+ViuX4Z7^$gul3HQW{;zZ1!6Ia#%=cYhw#yBJUS}}~x2J|u zARIqk1xHWn*Bt;^rYKX3FD$ptvrpQ&CAWs|UGLSoP2YC?1 zMoT{aA@XttR*j7N+wIV=+H`G-tLiJew6U_cAz^_c9z|cnOlZlQ=_E;cPJ4nP*p9&p zjM0HZ+Xt-{EXak)XUWvNgH{ep!gwi{BcHbgzY?1^f|AvY3?EGg8|)ecmK=)&b%m@sqJfJ10@SDNyCD$udMFa5+Ha$< zbA8UUvGBk>H*Bd`78FC`0G?bfez+@&8k&2|KCm0Gp=7KZxkYP-%`0_<)*p-_B1me6 z)5*HcXql}Cvm}}wBeI0X6}>vY=+9JEA3h*eWebr8j?)^X(7=rSi6Z6!G%XX^-C}Fe0abMFirLT-O_*ay&Y{J5j|I% z=^%8B9w?)4HJjO|wZ#^zB??!LU0UJ`G`>#>Jt2_Omd6BadFYX>iqmX2sR=5q>pJ@n zo3~P2tJiCm>MxO}ojNU&K7rz&_!c2H*Yx@Q&( z=4LCPBE5sl1>VfZMJpV! zq}mcIs1itdHZpzcv``E=G29NSiu7I@tT21B-qn<~{dMGa%)JuU(`R0LRG@>`)N_~& zz=@gP3>+_Zy?T^zY~%;mYZ5wxU|&lV(17ILnF=!%-2K9j z?Q2H*K*O{sXzvB}G@Q1cZyce7IlD%LF{<>)mPryZ8y>&8I$h21v+>gOQY?8d3ub{h z`T4wNI@U>~vZ`$zxlc&)_SXWr_lC4)xi~yfXgjH`o_Zj-eOAi0p)y99v4xhQ^C5%y z5KMew*GkP*dT4kwF_*FZk!wY?uz6OZo;G&=vNdlMOj&^uhx%|W`^0#=H8I=8&-cCg zcr(#Ewr6E0rQ9FbNy|uxedMVJ>$wqCt^1UW$~s|}M-J#{{m1Z<7K7f0c)P!uzB4}? zDnIk*|3&ccBxkA5sa%B%q0Wzlt=pqrKzG4oqoctJD$pUES5KK$S@^j(yNNb7`De%q zJUfkYn>gahE}@o1lfg3$io;Nb=Luj>!F9}vW_mFbLM@L!;pG3Yo(=g}yZolFxoHU= zW4BRs>{r4NGBzx~?z@MpZV^*tyszI%^S@1K_H(a&ccMdv*&0Wj?Qq6i2c8gQwuLe@| zZ;5GOPSCq1kG|1ymVYs%U^2<%1j1!sd{Lp32749*MhH0j?Mdd9-4*J zrdqpIdMGf#@t${v5gn$4cYX4;j|y02|1BcrCKF6FV90yFnQxfaKeo|-qyA!cN)h8lm(DK~jhRWS^0k_fMZqAh0Pi2Um zpQx=?zZdPzu}|a~2Y|{x0qkvw%}w5cRDWC()|K=?sOiK&J;jMy^@j-ae#^9@vrQ!? zju3Hu6)-VtqHJ2I%`{060LcpOobrMnjfQO8-EMe#7IMNHZNEV`v6v%rI>m?iB4+Mm z@mqNi%BV&Dl9r9rpq|O;n=!v&J9(Eh*Y!JTub{6@QJ;~?OKlXKk7eb`j#Wj;zfqE9 zc*ARynZPlrNHvcb1=*_4;JKH`*4&dTW3bW&zxj~%^nOmkIj3CmAX1xOBw;eSV_vz%YoEx{4X+%SIL^zjWb3MmoM#cUzeoYmlS(9 z6A}?ZQ?YStL;6wI<_n_Y`hX`n-U$f_m4ct2GK~NMJ&?WzV(&uuHKb}v)>_G-QR0{7 zm1;P+(#y>9nvM;#-mq9hp z2Bm=(ZHRw%#Ww4QdBd;}B4@(9OuD`B3N>(Gd)9hPPIK4~Qy=yihAoLC|oPFR^F zYK(8W6doLzOD Date: Thu, 3 Jan 2019 12:05:31 +0800 Subject: [PATCH 2/8] sth --- lib/main.dart | 11 ++---- lib/ui/login/LoginPage.dart | 56 +++++++++++++++++++++++++++++ lib/utils/GradientUtil.dart | 2 +- sources/{imags => images}/logo.png | Bin 4 files changed, 59 insertions(+), 10 deletions(-) rename sources/{imags => images}/logo.png (100%) diff --git a/lib/main.dart b/lib/main.dart index 069b124..91562a3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,4 +1,5 @@ import 'package:coderiver/ui/Application.dart'; +import 'package:coderiver/ui/login/LoginPage.dart'; import 'package:flutter/material.dart'; void main() => runApp(MyApp()); @@ -8,16 +9,8 @@ class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - - primarySwatch: Colors.blue, - ), home: Scaffold( - appBar: AppBar( - title: Text("CodeRiver"), - ), - body: ApplicationPage(), + body: LoginPage(), ) ); } diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index e69de29..fa6d0f4 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -0,0 +1,56 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/utils/SizeUtil.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class LoginPage extends StatefulWidget { + @override + _MarketPageState createState() => new _MarketPageState(); +} + +class _MarketPageState extends State { + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + /*appBar: new AppBar( + title: new Text('登录', textAlign: TextAlign.right), + ),*/ + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(280.0, 10.0, 0.0, 0.0), + child: Text( + '登录', + style: TextStyle( + fontSize: 18, + inherit: false, //2.不继承默认样式 + color: Colors.white), + //TextDirection.ltr从左至右,TextDirection.rtl从右至左 + textDirection: TextDirection.rtl, + ), + ), + ImageIcon( + AssetImage('sources/images/logo.png'), color: Colors.white,) + //TopTitleBar(), + //_body(), + ], + ), + ),) + , + ); + } +} diff --git a/lib/utils/GradientUtil.dart b/lib/utils/GradientUtil.dart index ae1f0e5..9756cce 100644 --- a/lib/utils/GradientUtil.dart +++ b/lib/utils/GradientUtil.dart @@ -38,7 +38,7 @@ class GradientUtil { {begin = AlignmentDirectional.centerStart, end = AlignmentDirectional.centerEnd, opacity = 1.0}) => - _getLinearGradient(YELLOW, BLUE, + _getLinearGradient(YELLOW, GREEN, begin: begin, end: end, opacity: opacity); static LinearGradient blue( diff --git a/sources/imags/logo.png b/sources/images/logo.png similarity index 100% rename from sources/imags/logo.png rename to sources/images/logo.png From de165f633b4151e8dde8b42ff55613fabd09d166 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Thu, 3 Jan 2019 22:49:02 +0800 Subject: [PATCH 3/8] =?UTF-8?q?=E7=99=BB=E5=BD=95=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/logo.png | Bin 0 -> 15772 bytes lib/ui/login/LoginPage.dart | 145 ++++++++++++++++++++++++++++++------ pubspec.yaml | 3 +- 3 files changed, 123 insertions(+), 25 deletions(-) create mode 100644 images/logo.png diff --git a/images/logo.png b/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 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 { Widget build(BuildContext context) { return new MaterialApp( home: new Scaffold( - /*appBar: new AppBar( - title: new Text('登录', textAlign: TextAlign.right), - ),*/ body: Container( alignment: AlignmentDirectional.topStart, padding: EdgeInsets.only(top: 40, left: 20, right: 20), @@ -28,29 +26,128 @@ class _MarketPageState extends State { colors: [GREEN, GlobalConfig.colorPrimary]), ), child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Padding( - padding: const EdgeInsets.fromLTRB(280.0, 10.0, 0.0, 0.0), - child: Text( - '登录', - style: TextStyle( - fontSize: 18, - inherit: false, //2.不继承默认样式 - color: Colors.white), - //TextDirection.ltr从左至右,TextDirection.rtl从右至左 - textDirection: TextDirection.rtl, + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + new Align( + alignment: FractionalOffset.topRight, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: new GestureDetector( + child: new Text( + '登录', + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + onTap: () { + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new LoginPage())); + }, + ), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), + child: new Image.asset( + 'images/logo.png', + width: 90, + height: 90, + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 0.0), + child: new Text( + '欢迎来到CodeRiver', + style: new TextStyle( + fontSize: 24.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Snack.show(context, "666"); + }, + label: new Text('使用GitHub账号登录使用GitHub账号登录')), + RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Snack.show(context, "777"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(null), + label: new Text( + '创建账号创建账号创建账号创建账号创建账号', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), + child: new Text( + '更多登录方式', + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.all(10.0), + child: RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text('新浪微博', + style: new TextStyle( + color: Colors.white, + fontStyle: FontStyle.normal)))), + Padding( + padding: EdgeInsets.all(20.0), + child: RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text( + '微信', + style: new TextStyle( + color: Colors.white, + fontStyle: FontStyle.normal), + ))), + ], + ) + //_body(), + ], ), ), - ImageIcon( - AssetImage('sources/images/logo.png'), color: Colors.white,) - //TopTitleBar(), - //_body(), - ], ), - ),) - , ); } } + +Widget _buildLoginBtn(BuildContext context) { + return RaisedButton( + padding: const EdgeInsets.all(8.0), + color: GlobalConfig.colorPrimary, + textColor: Colors.white, + child: Text("登录"), + elevation: 4.0, + onPressed: () { + Snack.show(context, "账号/密码不符合标准"); + }); +} diff --git a/pubspec.yaml b/pubspec.yaml index 31e9c96..08c2843 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,4 +37,5 @@ flutter: # the material Icons class. uses-material-design: true - + assets: + - images/logo.png From 751475317edc8b61b49092646b998d5f52d8090b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 09:25:50 +0800 Subject: [PATCH 4/8] sth --- lib/ui/login/LoginPage.dart | 143 ++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 78 deletions(-) diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 0baed5e..06cf9a8 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -29,28 +29,7 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - new Align( - alignment: FractionalOffset.topRight, - child: new Padding( - padding: EdgeInsets.only(right: 0.0, top: 0.0), - child: new GestureDetector( - child: new Text( - '登录', - style: new TextStyle( - fontSize: 18.0, - color: Colors.white, - fontStyle: FontStyle.normal), - ), - onTap: () { - Navigator.push( - context, - new MaterialPageRoute( - builder: (BuildContext context) => - new LoginPage())); - }, - ), - ), - ), + _logText(BuildContext), Padding( padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), child: new Image.asset( @@ -68,32 +47,8 @@ class _MarketPageState extends State { fontStyle: FontStyle.normal), ), ), - RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(Icons.star), - onPressed: () { - Snack.show(context, "666"); - }, - label: new Text('使用GitHub账号登录使用GitHub账号登录')), - RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - onPressed: () { - Snack.show(context, "777"); - }, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(null), - label: new Text( - '创建账号创建账号创建账号创建账号创建账号', - style: new TextStyle( - color: Colors.white, fontStyle: FontStyle.normal), - )), + _btnGithubLogin(BuildContext), + _btnCreadeAccound(BuildContext), Padding( padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), child: new Text( @@ -108,27 +63,8 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(10.0), - child: RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text('新浪微博', - style: new TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal)))), - Padding( - padding: EdgeInsets.all(20.0), - child: RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text( - '微信', - style: new TextStyle( - color: Colors.white, - fontStyle: FontStyle.normal), - ))), + padding: EdgeInsets.all(10.0), child: weiboOR('新浪微博')), + Padding(padding: EdgeInsets.all(20.0), child: weiboOR('微信')), ], ) //_body(), @@ -140,14 +76,65 @@ class _MarketPageState extends State { } } -Widget _buildLoginBtn(BuildContext context) { - return RaisedButton( - padding: const EdgeInsets.all(8.0), - color: GlobalConfig.colorPrimary, - textColor: Colors.white, - child: Text("登录"), - elevation: 4.0, +Widget _logText(context) { + return new Align( + alignment: FractionalOffset.topRight, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: new GestureDetector( + child: new Text( + '登录', + style: new TextStyle( + fontSize: 18.0, color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => new LoginPage())); + }, + ), + ), + ); +} + +Widget _btnGithubLogin(context) { + return RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Snack.show(context, "666"); + }, + label: new Text('使用GitHub账号登录')); +} + +Widget _btnCreadeAccound(context) { + return RaisedButton.icon( + color: Colors.transparent, + disabledColor: Colors.transparent, onPressed: () { - Snack.show(context, "账号/密码不符合标准"); - }); + Snack.show(context, "777"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(null), + label: new Text( + '创建账号', + style: new TextStyle(color: Colors.white, fontStyle: FontStyle.normal), + )); +} + +Widget weiboOR(String str) { + return RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + icon: new Icon(Icons.star), + label: new Text(str, + style: + new TextStyle(color: Colors.white, fontStyle: FontStyle.normal))); } From 2dc51edc3a22da5046c16970a0688dcaed426524 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 10:59:19 +0800 Subject: [PATCH 5/8] sth --- images/github_icon.png | Bin 0 -> 945 bytes images/logo.png | Bin 15772 -> 13228 bytes images/silan_icon.png | Bin 0 -> 721 bytes images/wechat_icon.png | Bin 0 -> 544 bytes lib/ui/login/LoginPage.dart | 73 +++++++++++++++++++++--------------- pubspec.yaml | 3 ++ 6 files changed, 46 insertions(+), 30 deletions(-) create mode 100644 images/github_icon.png create mode 100644 images/silan_icon.png create mode 100644 images/wechat_icon.png diff --git a/images/github_icon.png b/images/github_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ee52ac00ecfbefb74c3bc2b4ed6eecd6ec6cd84d GIT binary patch literal 945 zcmV;i15W&jP)RQ}so?>IXw(?3q)RR}dCty^M* zWf9*C{>k4xYw!o#Uaj=s0!+A03Peeb0Dw%(myY3QV}!Hvzo2CP+Us?q)9$cyg@*Et6^;n*iuv}~wj4t~8 zXvDS`H-tKl*=Q7MNwWt;L-;}f_`Z*$OgK)JBEcAd#~{4}a2JR)fEfyBR}}P2wxzGE zclC6(RRInWcrJV{4azE;yPdIc;1#sMhk1aW}EAHk~XM^mZUa$-E+ z_d382!;xHv0fC^mM_W?w7lDc4;fQYjdIEutff(?Yf@9jIx*!^zolM%-E6a|#eJ`3a zPLqgMs2g71?j4-k-@dTEZR#Cod(;d*2=}0bDMG^mF=tfY(>>DEwBDe&>ofzw83NJb zbO;lkZ=}a<`&zLrm8b9N?zXD#zN;P3TLfzbOYdLYu}teIq~6iMoQ7@tm7@Lu4%Ce_ T>Vz)n00000NkvXXu0mjff-S%b literal 0 HcmV?d00001 diff --git a/images/logo.png b/images/logo.png index 12d0e6f48d177e1b98bb9a128eba8670d0368eff..74678795f12240af6a32803c2eee45ee3a45eead 100644 GIT binary patch literal 13228 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 Dq_9_k literal 0 HcmV?d00001 diff --git a/images/wechat_icon.png b/images/wechat_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..2c2302bb7bc605880899b9561fdf904bda91767e GIT binary patch literal 544 zcmV+*0^j|KP)X78q703$5Gk*2UL{H?30;p8DUX2=r3?^KBqI#mC-_ck+|Rvda!%*$z4kt9t#d-dsH$odmS8p};sYMwKCVZ^>&E!*){&c4 zRrSLf?8I2~X$t;<=h%%45%Ikha8y;5$(yhr1MsEHStQ5LvNsqBd<459BG>Q?ChQ;VWU);b}9L7w1!qSN7Yz24-Taed(gKd~qfV2BYIEc-dRJy&2^%3!{88kb* zf&~o+U4_Hn{3gYCg>&V~qcH|Aa2K5s@v_cOz{^0Oh)7klK$<$wH{d`i(h4_U(@AXn1K29E zs;Z$lid9XPsZ$c{BGyI3`yK&Hx5?{rtj5%0v9IOB$j_ubB5r4FuK?>-s;Wx=r5|&C iTa->0bVbCqjQa)eES4?Yy6c1h0000 { mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ - _logText(BuildContext), + _logText(context), Padding( padding: const EdgeInsets.fromLTRB(0.0, 70.0, 0.0, 0.0), child: new Image.asset( @@ -38,7 +38,7 @@ class _MarketPageState extends State { height: 90, )), Padding( - padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 0.0), + padding: const EdgeInsets.fromLTRB(0.0, 40.0, 0.0, 20.0), child: new Text( '欢迎来到CodeRiver', style: new TextStyle( @@ -47,8 +47,8 @@ class _MarketPageState extends State { fontStyle: FontStyle.normal), ), ), - _btnGithubLogin(BuildContext), - _btnCreadeAccound(BuildContext), + _btnGithubLogin(context), + _btnCreadeAccound(context), Padding( padding: const EdgeInsets.fromLTRB(0.0, 30.0, 0.0, 0.0), child: new Text( @@ -99,34 +99,47 @@ Widget _logText(context) { } Widget _btnGithubLogin(context) { - return RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(Icons.star), - onPressed: () { - Snack.show(context, "666"); - }, - label: new Text('使用GitHub账号登录')); + return Container( + child: RaisedButton.icon( + color: Colors.white, + disabledColor: Colors.transparent, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + icon: new Icon(Icons.star), + onPressed: () { + Fluttertoast.showToast(msg: "使用GitHub账号登录"); + }, + label: new Text( + '使用GitHub账号登录', + style: new TextStyle( + color: Colors.green, fontStyle: FontStyle.normal, fontSize: 16), + )), + width: double.infinity, + height: 50, + ); } Widget _btnCreadeAccound(context) { - return RaisedButton.icon( - color: Colors.transparent, - disabledColor: Colors.transparent, - onPressed: () { - Snack.show(context, "777"); - }, - shape: new RoundedRectangleBorder( - side: BorderSide(color: Colors.white), - borderRadius: BorderRadius.all(Radius.circular(50))), - icon: new Icon(null), - label: new Text( - '创建账号', - style: new TextStyle(color: Colors.white, fontStyle: FontStyle.normal), - )); + return Container( + margin: new EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 5.0), + child: RaisedButton( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Fluttertoast.showToast(msg: "创建账号"); + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + child: new Text( + '创建账号', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 16), + )), + width: double.infinity, + height: 50, + ); } Widget weiboOR(String str) { diff --git a/pubspec.yaml b/pubspec.yaml index 08c2843..f079573 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -39,3 +39,6 @@ flutter: assets: - images/logo.png + - images/github_icon.png + - images/silan_icon.png + - images/wechat_icon.png From 3453fafdeeb1fd723cb0187e67d7ca34aa8a1b62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Fri, 4 Jan 2019 11:11:49 +0800 Subject: [PATCH 6/8] sth --- lib/ui/login/LoginPage.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index b789d84..3712970 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -123,7 +123,7 @@ Widget _btnGithubLogin(context) { Widget _btnCreadeAccound(context) { return Container( margin: new EdgeInsets.fromLTRB(0.0, 10.0, 0.0, 5.0), - child: RaisedButton( + child: FlatButton( color: Colors.transparent, disabledColor: Colors.transparent, onPressed: () { From 9e61da0239605f7f4beb5044c4d3442a5730e08b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Sat, 5 Jan 2019 16:54:24 +0800 Subject: [PATCH 7/8] sth --- images/splash_logo.png | Bin 0 -> 15772 bytes lib/fonts/iconfont.ttf | Bin 0 -> 4444 bytes lib/main.dart | 11 ++++--- lib/ui/home/SplashPage.dart | 44 +++++++++++++++++++++++++ lib/ui/login/LoginPage.dart | 64 +++++++++++++++++++++++++++++------- pubspec.yaml | 1 + 6 files changed, 105 insertions(+), 15 deletions(-) create mode 100644 images/splash_logo.png create mode 100644 lib/fonts/iconfont.ttf create mode 100644 lib/ui/home/SplashPage.dart diff --git a/images/splash_logo.png b/images/splash_logo.png new file mode 100644 index 0000000000000000000000000000000000000000..12d0e6f48d177e1b98bb9a128eba8670d0368eff GIT binary patch literal 15772 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
  • 71&i#W;4dE;}un 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 + // 路由 + '/HomePage': (BuildContext context) => new LoginPage() + }, ); } } - diff --git a/lib/ui/home/SplashPage.dart b/lib/ui/home/SplashPage.dart new file mode 100644 index 0000000..72fbc67 --- /dev/null +++ b/lib/ui/home/SplashPage.dart @@ -0,0 +1,44 @@ +import 'dart:async'; +import 'package:flutter/material.dart'; +import 'package:flutter/widgets.dart'; + +class SplashPage extends StatefulWidget { + @override + State createState() { + return _SplashPageState(); + } +} + +class _SplashPageState extends State { + @override + Widget build(BuildContext context) { + return new MaterialApp( + theme: new ThemeData(backgroundColor: Colors.blue), + home: new Scaffold( + backgroundColor: Colors.white, + body: new Center( + child: new Image.asset( + "images/splash_logo.png", + width: 170, + height: 170, + ), + ), + )); + } + + @override + void initState() { + super.initState(); + countDown(); + } + +// 倒计时 + void countDown() { + var _duration = new Duration(seconds: 3); + new Future.delayed(_duration, go2HomePage); + } + + void go2HomePage() { + Navigator.of(context).pushReplacementNamed('/HomePage'); + } +} diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 3712970..16fc26d 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -63,8 +63,11 @@ class _MarketPageState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ Padding( - padding: EdgeInsets.all(10.0), child: weiboOR('新浪微博')), - Padding(padding: EdgeInsets.all(20.0), child: weiboOR('微信')), + padding: EdgeInsets.fromLTRB(0.0, 26.0, 0.0, 0.0), + child: weiboOR('新浪微博')), + Padding( + padding: EdgeInsets.fromLTRB(20.0, 26.0, 0.0, 0.0), + child: weChatOR('微信')), ], ) //_body(), @@ -113,7 +116,7 @@ Widget _btnGithubLogin(context) { label: new Text( '使用GitHub账号登录', style: new TextStyle( - color: Colors.green, fontStyle: FontStyle.normal, fontSize: 16), + color: Colors.green, fontStyle: FontStyle.normal, fontSize: 20), )), width: double.infinity, height: 50, @@ -135,7 +138,7 @@ Widget _btnCreadeAccound(context) { child: new Text( '创建账号', style: new TextStyle( - color: Colors.white, fontStyle: FontStyle.normal, fontSize: 16), + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 20), )), width: double.infinity, height: 50, @@ -143,11 +146,50 @@ Widget _btnCreadeAccound(context) { } Widget weiboOR(String str) { - return RaisedButton.icon( - color: Colors.white, - disabledColor: Colors.transparent, - icon: new Icon(Icons.star), - label: new Text(str, - style: - new TextStyle(color: Colors.white, fontStyle: FontStyle.normal))); + return Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new Image.asset( + 'images/silan_icon.png', + )), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new GestureDetector( + child: new Text( + str, + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Fluttertoast.showToast(msg: "微博登录"); + }), + ), + ], + ); +} + +Widget weChatOR(String str) { + return Row( + children: [ + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new Image.asset( + 'images/wechat_icon.png', + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(0.0, 0.0, 10.0, 0.0), + child: new GestureDetector( + child: new Text( + str, + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal), + ), + onTap: () { + Fluttertoast.showToast(msg: "微信登录"); + }), + ), + ], + ); } diff --git a/pubspec.yaml b/pubspec.yaml index f079573..6e07555 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -42,3 +42,4 @@ flutter: - images/github_icon.png - images/silan_icon.png - images/wechat_icon.png + - images/splash_logo.png From a66ef927036856683b6810d1d4cf53db089de8c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=9B=E4=B8=8D=E8=A7=81jj?= <18310600325@163.com> Date: Sun, 6 Jan 2019 18:34:55 +0800 Subject: [PATCH 8/8] =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=92=8C=E9=A6=96?= =?UTF-8?q?=E9=A1=B5=E8=B0=83=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/common/GlobalConfig.dart | 13 +- lib/common/NavigationIconView.dart | 21 + lib/ui/Application.dart | 101 +- lib/ui/four/HeroPage.dart | 33 + lib/ui/home/HomePage.dart | 1232 ++++++++++++++++++++++++- lib/ui/home/MinePage.dart | 32 +- lib/ui/home/SeconedPage.dart | 31 +- lib/ui/login/LoginPage.dart | 17 +- lib/ui/login/LoginPhone.dart | 187 ++++ lib/ui/mine/ClearableInputField.dart | 126 +++ lib/ui/mine/MinePage.dart | 0 lib/ui/mine/RegisterNickNamePage.dart | 94 ++ lib/ui/three/AddPage.dart | 33 + 13 files changed, 1847 insertions(+), 73 deletions(-) create mode 100644 lib/common/NavigationIconView.dart create mode 100644 lib/ui/four/HeroPage.dart create mode 100644 lib/ui/login/LoginPhone.dart create mode 100644 lib/ui/mine/ClearableInputField.dart delete mode 100644 lib/ui/mine/MinePage.dart create mode 100644 lib/ui/mine/RegisterNickNamePage.dart create mode 100644 lib/ui/three/AddPage.dart diff --git a/lib/common/GlobalConfig.dart b/lib/common/GlobalConfig.dart index 79e97cf..d7649a3 100644 --- a/lib/common/GlobalConfig.dart +++ b/lib/common/GlobalConfig.dart @@ -9,10 +9,15 @@ class GlobalConfig { static Color color_white_a80 = Color(0xccffffff); static Color color_blue = Color(0xcc0000ff); + static bool dark = false; + static ThemeData themeData = new ThemeData.light(); + static Color searchBackgroundColor = Colors.white10; + static Color cardBackgroundColor = new Color(0xFF222222); + static Color fontColor = Colors.white30; ///导航 static String homeTab = "首页"; - static String secondTab = "二页"; - static String thiredTab = "三页"; - static String fourthTab = "四页"; - static String fifthTab = "五页"; + static String secondTab = "项目中心"; + static String thiredTab = ""; + static String fourthTab = "英雄广场"; + static String fifthTab = "发现"; } diff --git a/lib/common/NavigationIconView.dart b/lib/common/NavigationIconView.dart new file mode 100644 index 0000000..ac0aca8 --- /dev/null +++ b/lib/common/NavigationIconView.dart @@ -0,0 +1,21 @@ +import 'package:flutter/material.dart'; + +class NavigationIconView { + + NavigationIconView({ + Widget icon, + Widget title, + TickerProvider vsync + }): + item = new BottomNavigationBarItem( + icon: icon, + title: title, + ), + controller = new AnimationController( + duration: kThemeAnimationDuration, + vsync: vsync + ); + + final BottomNavigationBarItem item; + final AnimationController controller; +} \ No newline at end of file diff --git a/lib/ui/Application.dart b/lib/ui/Application.dart index 0924a81..29c327c 100644 --- a/lib/ui/Application.dart +++ b/lib/ui/Application.dart @@ -1,8 +1,11 @@ import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/NavigationIconView.dart'; import 'package:coderiver/common/User.dart'; +import 'package:coderiver/ui/four/HeroPage.dart'; import 'package:coderiver/ui/home/HomePage.dart'; import 'package:coderiver/ui/home/MinePage.dart'; import 'package:coderiver/ui/home/SeconedPage.dart'; +import 'package:coderiver/ui/three/AddPage.dart'; import 'package:flutter/material.dart'; class ApplicationPage extends StatefulWidget { @@ -13,8 +16,101 @@ class ApplicationPage extends StatefulWidget { } class _ApplicationPageState extends State - with SingleTickerProviderStateMixin { - int _page = 0; + with TickerProviderStateMixin { + int _currentIndex = 0; + List _navigationViews; + List _pageList; + StatefulWidget _currentPage; + + @override + void initState() { + super.initState(); + _navigationViews = [ + new NavigationIconView( + icon: new Icon(Icons.account_balance), + title: new Text(GlobalConfig.homeTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.album), + title: new Text(GlobalConfig.secondTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.add_circle_outline), + title: new Text(GlobalConfig.thiredTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.add_alert), + title: new Text(GlobalConfig.fourthTab), + vsync: this, + ), + new NavigationIconView( + icon: new Icon(Icons.perm_identity), + title: new Text(GlobalConfig.fifthTab), + vsync: this, + ), + ]; + for (NavigationIconView view in _navigationViews) { + view.controller.addListener(_rebuild); + } + + _pageList = [ + new HomePage(), + new SeconedPage(), + new AddPage(), + new HeroPage(), + new MinePage() + ]; + _currentPage = _pageList[_currentIndex]; + } + + void _rebuild() { + setState(() {}); + } + + @override + void dispose() { + super.dispose(); + for (NavigationIconView view in _navigationViews) { + view.controller.dispose(); + } + } + + @override + Widget build(BuildContext context) { + final BottomNavigationBar bottomNavigationBar = new BottomNavigationBar( + items: _navigationViews + .map((NavigationIconView navigationIconView) => + navigationIconView.item) + .toList(), + currentIndex: _currentIndex, + fixedColor: Colors.blue, + type: BottomNavigationBarType.fixed, + onTap: (int index) { + setState(() { + _navigationViews[_currentIndex].controller.reverse(); + _currentIndex = index; + _navigationViews[_currentIndex].controller.forward(); + _currentPage = _pageList[_currentIndex]; + }); + } + ); + + return new MaterialApp( + home: new Scaffold( + body: new Center( + child: _currentPage + ), + bottomNavigationBar: bottomNavigationBar, + ), + theme: new ThemeData.light() + ); + } + +} +/*int _page = 0; PageController _pageController; final List _bottomTabs = [ @@ -75,3 +171,4 @@ class _ApplicationPageState extends State }); } } +*/ \ No newline at end of file diff --git a/lib/ui/four/HeroPage.dart b/lib/ui/four/HeroPage.dart new file mode 100644 index 0000000..fb51f54 --- /dev/null +++ b/lib/ui/four/HeroPage.dart @@ -0,0 +1,33 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:flutter/material.dart'; + +class HeroPage extends StatefulWidget { + + @override + _IdeaPageState createState() => new _IdeaPageState(); + +} + +class _IdeaPageState extends State { + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [ + new Container( + + ) + ], + ), + body: new Center( + child: null + ), + ), + theme: GlobalConfig.themeData + ); + } + +} \ No newline at end of file diff --git a/lib/ui/home/HomePage.dart b/lib/ui/home/HomePage.dart index c33d748..b0a5aa2 100644 --- a/lib/ui/home/HomePage.dart +++ b/lib/ui/home/HomePage.dart @@ -1,38 +1,1224 @@ import 'package:coderiver/common/GlobalConfig.dart'; -import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; class HomePage extends StatefulWidget { @override - State createState() { - return _HomePageState(); - } + _HomePageState createState() => new _HomePageState(); } -class _HomePageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; +class _HomePageState extends State { + Widget barSearch() { + return new Container( + child: new FlatButton( + onPressed: () {}, + child: new Row( + children: [ + new Container( + child: new Icon( + Icons.search, + size: 18.0, + ), + margin: const EdgeInsets.only(right: 26.0), + ), + new Expanded( + child: new Container( + child: new Text("搜索知乎内容"), + )), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Icon(Icons.settings_overscan, size: 18.0), + ), + width: 40.0, + ), + ], + )), + decoration: new BoxDecoration( + borderRadius: const BorderRadius.all(const Radius.circular(4.0)), + color: GlobalConfig.searchBackgroundColor)); + } - @override - void initState() { - super.initState(); + Widget myInfoCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 10.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: + const EdgeInsets.only(left: 16.0, right: 16.0, bottom: 16.0), + decoration: new BoxDecoration( + color: GlobalConfig.dark == true + ? Colors.white10 + : new Color(0xFFF5F5F5), + borderRadius: new BorderRadius.all(new Radius.circular(6.0))), + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new ListTile( + leading: new Container( + child: new CircleAvatar( + backgroundImage: new NetworkImage( + "https://pic1.zhimg.com/v2-ec7ed574da66e1b495fcad2cc3d71cb9_xl.jpg"), + radius: 20.0), + ), + title: new Container( + margin: const EdgeInsets.only(bottom: 2.0), + child: new Text("learner"), + ), + subtitle: new Container( + margin: const EdgeInsets.only(top: 2.0), + child: new Text("查看或编辑个人主页"), + ), + ), + )), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "57", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "我的创作", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ), + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "210", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "关注", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "18", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "我的收藏", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + )), + ), + new Container( + height: 14.0, + width: 1.0, + decoration: new BoxDecoration( + border: new BorderDirectional( + start: new BorderSide( + color: GlobalConfig.dark == true + ? Colors.white12 + : Colors.black12, + width: 1.0))), + ), + new Container( + width: (MediaQuery.of(context).size.width - 6.0) / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + height: 50.0, + child: new Column( + children: [ + new Container( + child: new Text( + "33", + style: new TextStyle( + fontSize: 16.0, + color: GlobalConfig.fontColor), + ), + ), + new Container( + child: new Text( + "最近浏览", + style: new TextStyle( + fontSize: 12.0, + color: GlobalConfig.fontColor), + ), + ) + ], + ), + ))) + ], + ), + ) + ], + ), + ); } - @override - Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, + Widget myServiceCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + child: new Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.book, color: Colors.white), + backgroundColor: Colors.green, + ), + ), + new Container( + child: new Text( + "我的书架", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.flash_on, + color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("我的 Live", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.free_breakfast, + color: Colors.white), + backgroundColor: new Color(0xFFA68F52), + ), + ), + new Container( + child: new Text("私家课", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.attach_money, + color: Colors.white), + backgroundColor: new Color(0xFF355A9B), + ), + ), + new Container( + child: new Text("付费咨询", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ), + new Container( + margin: const EdgeInsets.only(top: 16.0), + child: new Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.shop, color: Colors.white), + backgroundColor: new Color(0xFF088DB4), + ), + ), + new Container( + child: new Text( + "已购", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0), + ), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.radio, color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Container( + child: new Text("余额礼卷", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.wifi_tethering, + color: Colors.white), + backgroundColor: new Color(0xFF029A3F), + ), + ), + new Container( + child: new Text("服务", + style: new TextStyle( + color: GlobalConfig.fontColor, + fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ) + ], + ), + ); + } + + Widget settingCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.invert_colors, + color: Colors.white), + backgroundColor: new Color(0xFFB88800), + ), + ), + new Container( + child: new Text("社区建设", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.golf_course, color: Colors.white), + backgroundColor: new Color(0xFF63616D), + ), + ), + new Container( + child: new Text("反馈", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () { + setState(() { + if (GlobalConfig.dark == true) { + GlobalConfig.themeData = new ThemeData( + primaryColor: Colors.white, + scaffoldBackgroundColor: new Color(0xFFEBEBEB), + ); + GlobalConfig.searchBackgroundColor = + new Color(0xFFEBEBEB); + GlobalConfig.cardBackgroundColor = Colors.white; + GlobalConfig.fontColor = Colors.black54; + GlobalConfig.dark = false; + } else { + GlobalConfig.themeData = new ThemeData.dark(); + GlobalConfig.searchBackgroundColor = Colors.white10; + GlobalConfig.cardBackgroundColor = new Color(0xFF222222); + GlobalConfig.fontColor = Colors.white30; + GlobalConfig.dark = true; + } + }); + }, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon( + GlobalConfig.dark == true + ? Icons.wb_sunny + : Icons.brightness_2, + color: Colors.white), + backgroundColor: new Color(0xFFB86A0D), + ), + ), + new Container( + child: new Text( + GlobalConfig.dark == true ? "日间模式" : "夜间模式", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + new Container( + width: MediaQuery.of(context).size.width / 4, + child: new FlatButton( + onPressed: () {}, + child: new Container( + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(bottom: 6.0), + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.perm_data_setting, + color: Colors.white), + backgroundColor: new Color(0xFF636269), + ), + ), + new Container( + child: new Text("设置", + style: new TextStyle( + color: GlobalConfig.fontColor, fontSize: 14.0)), + ) + ], + ), + )), + ), + ], + ), + ); + } + + Widget videoCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(left: 16.0, bottom: 20.0), + child: new Row( + children: [ + new Container( + child: new CircleAvatar( + radius: 20.0, + child: new Icon(Icons.videocam, color: Colors.white), + backgroundColor: new Color(0xFFB36905), + ), + ), + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 8.0), + child: new Text( + "视频创作", + style: new TextStyle(fontSize: 18.0), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "拍一个", + style: new TextStyle(color: Colors.blue), + )), + ) + ], + )), + new Container( + margin: const EdgeInsets.only(left: 16.0), + child: new SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: new Row( + children: [ + new Container( + width: MediaQuery.of(context).size.width / 2.5, + margin: const EdgeInsets.only(right: 6.0), + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-5942a51e6b834f10074f8d50be5bbd4d_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + margin: const EdgeInsets.only(right: 6.0), + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic3.zhimg.com/50/v2-7fc9a1572c6fc72a3dea0b73a9be36e7_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + margin: const EdgeInsets.only(right: 6.0), + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic4.zhimg.com/50/v2-898f43a488b606061c877ac2a471e221_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))), + new Container( + width: MediaQuery.of(context).size.width / 2.5, + child: new AspectRatio( + aspectRatio: 4.0 / 2.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic1.zhimg.com/50/v2-0008057d1ad2bd813aea4fc247959e63_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + ), + ), + ) + ], + )); + } + + Widget ideaCard() { + return new Container( + color: GlobalConfig.cardBackgroundColor, + margin: const EdgeInsets.only(top: 6.0, bottom: 6.0), + padding: const EdgeInsets.only(top: 12.0, bottom: 8.0), + child: new Column( + children: [ + new Container( + margin: const EdgeInsets.only(left: 16.0, bottom: 20.0), + child: new Row( + children: [ + new Container( + child: new CircleAvatar( + radius: 20.0, + child: + new Icon(Icons.all_inclusive, color: Colors.white), + backgroundColor: Colors.blue, + ), + ), + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 8.0), + child: new Text( + "想法", + style: new TextStyle(fontSize: 18.0), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "去往想法首页", + style: new TextStyle(color: Colors.blue), + )), + ) + ], + )), + new Container( + margin: const EdgeInsets.only(left: 16.0), + child: new SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: new Row( + children: [ + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "苹果 WWDC 2018 正在举行", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "软件更新意料之中,硬件之谜...", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-55039fa535f3fe06365c0fcdaa9e3847_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "此刻你的桌子是什么样子?", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "晒一晒你的书桌/办公桌", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic3.zhimg.com/v2-b4551f702970ff37709cdd7fd884de5e_294x245|adx4.png"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "关于高考你印象最深的是...", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "聊聊你的高三生活", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic2.zhimg.com/50/v2-ce2e01a047e4aba9bfabf8469cfd3e75_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + new Container( + margin: const EdgeInsets.only(right: 6.0), + decoration: new BoxDecoration( + color: GlobalConfig.searchBackgroundColor, + borderRadius: + new BorderRadius.all(new Radius.circular(6.0))), + child: new Row( + children: [ + new Container( + padding: const EdgeInsets.only(left: 10.0), + child: new Column( + children: [ + new Align( + alignment: Alignment.centerLeft, + child: new Container( + child: new Text( + "夏天一定要吃的食物有哪些", + style: new TextStyle( + color: GlobalConfig.dark == true + ? Colors.white70 + : Colors.black, + fontSize: 16.0), + ), + ), + ), + new Align( + alignment: Alignment.centerLeft, + child: new Container( + margin: const EdgeInsets.only(top: 6.0), + child: new Text( + "最适合夏天吃的那种", + style: new TextStyle( + color: GlobalConfig.fontColor), + ), + )) + ], + ), + ), + new Container( + margin: const EdgeInsets.all(10.0), + width: MediaQuery.of(context).size.width / 5, + child: new AspectRatio( + aspectRatio: 1.0 / 1.0, + child: new Container( + foregroundDecoration: new BoxDecoration( + image: new DecorationImage( + image: new NetworkImage( + "https://pic1.zhimg.com/50/v2-bb3806c2ced60e5b7f38a0aa06b89511_400x224.jpg"), + centerSlice: new Rect.fromLTRB( + 270.0, 180.0, 1360.0, 730.0), + ), + borderRadius: const BorderRadius.all( + const Radius.circular(6.0))), + ))) + ], + )), + ], + ), + ), ) ], - ), + )); + } - body: Text(('开发中..'))); + @override + Widget build(BuildContext context) { + return new MaterialApp( + theme: GlobalConfig.themeData, + home: new Scaffold( + appBar: new AppBar( + title: new Text('首页'), + actions: [new Container()], + ), + body: new SingleChildScrollView( + child: new Container( + child: new Column( + children: [ + myInfoCard(), + myServiceCard(), + myServiceCard(), + settingCard(), + videoCard(), + ideaCard() + ], + ), + ), + )), + ); } } diff --git a/lib/ui/home/MinePage.dart b/lib/ui/home/MinePage.dart index a67cae4..dfbbbb0 100644 --- a/lib/ui/home/MinePage.dart +++ b/lib/ui/home/MinePage.dart @@ -9,29 +9,19 @@ class MinePage extends StatefulWidget { } } -class _MinePageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; - - @override - void initState() { - super.initState(); - } - +class _MinePageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, - ) - ], + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [new Container()], + ), + body: new Center( + child: new Text('想法'), + ), ), - body: Text(('开发中..'))); + theme: GlobalConfig.themeData); } } diff --git a/lib/ui/home/SeconedPage.dart b/lib/ui/home/SeconedPage.dart index 10c3209..3f7e2e9 100644 --- a/lib/ui/home/SeconedPage.dart +++ b/lib/ui/home/SeconedPage.dart @@ -9,29 +9,20 @@ class SeconedPage extends StatefulWidget { } } -class _SeconedPageState extends State - with AutomaticKeepAliveClientMixin { - @override - bool get wantKeepAlive => null; - - @override - void initState() { - super.initState(); - } +class _SeconedPageState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(GlobalConfig.homeTab), - centerTitle: true, - actions: [ - IconButton( - icon: new Icon(Icons.assignment), - onPressed: () {}, - ) - ], + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [new Container()], + ), + body: new Center( + child: new Text('想法'), + ), ), - body: Text(('开发中..'))); + theme: GlobalConfig.themeData); } } diff --git a/lib/ui/login/LoginPage.dart b/lib/ui/login/LoginPage.dart index 16fc26d..ab4686f 100644 --- a/lib/ui/login/LoginPage.dart +++ b/lib/ui/login/LoginPage.dart @@ -2,6 +2,10 @@ import 'package:coderiver/common/GlobalConfig.dart'; import 'package:coderiver/common/ShowToast.dart'; import 'package:coderiver/common/Snack.dart'; import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/Application.dart'; +import 'package:coderiver/ui/home/HomePage.dart'; +import 'package:coderiver/ui/login/LoginPhone.dart'; +import 'package:coderiver/ui/mine/RegisterNickNamePage.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -94,7 +98,7 @@ Widget _logText(context) { Navigator.push( context, new MaterialPageRoute( - builder: (BuildContext context) => new LoginPage())); + builder: (BuildContext context) => new LoginPhonePage())); }, ), ), @@ -111,7 +115,10 @@ Widget _btnGithubLogin(context) { borderRadius: BorderRadius.all(Radius.circular(50))), icon: new Icon(Icons.star), onPressed: () { - Fluttertoast.showToast(msg: "使用GitHub账号登录"); + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => new ApplicationPage())); }, label: new Text( '使用GitHub账号登录', @@ -130,7 +137,11 @@ Widget _btnCreadeAccound(context) { color: Colors.transparent, disabledColor: Colors.transparent, onPressed: () { - Fluttertoast.showToast(msg: "创建账号"); + Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new RegisterNickNamePage())); }, shape: new RoundedRectangleBorder( side: BorderSide(color: Colors.white), diff --git a/lib/ui/login/LoginPhone.dart b/lib/ui/login/LoginPhone.dart new file mode 100644 index 0000000..4ce6a80 --- /dev/null +++ b/lib/ui/login/LoginPhone.dart @@ -0,0 +1,187 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/ShowToast.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/login/LoginPage.dart'; +import 'package:coderiver/ui/mine/ClearableInputField.dart'; +import 'package:coderiver/ui/mine/RegisterNickNamePage.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class LoginPhonePage extends StatefulWidget { + @override + _LoginPhonePageState createState() => new _LoginPhonePageState(); +} + +class _LoginPhonePageState extends State { + ClearableInputField _userNameInputForm; + ClearableInputField _psdInputForm; + TextEditingController _userNameController = TextEditingController(); + TextEditingController _psdController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + floatingActionButton: new Theme( + data: Theme.of(context).copyWith(accentColor: Colors.white), + child: new FloatingActionButton( + onPressed: () { + Fluttertoast.showToast(msg: "....."); + }, + child: new Icon(Icons.arrow_forward_ios, + color: GlobalConfig.colorPrimary), + ), + ), + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(6.0), + child: new GestureDetector( + child: Icon(Icons.arrow_back_ios, color: Colors.white), + onTap: () { + Navigator.pop(context); + }), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + child: new Text( + '登录', + style: new TextStyle( + fontSize: 28.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 10.0), + child: new Text( + '手机号码', + style: new TextStyle( + fontSize: 20.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + SizedBox(height: 0.0), + _buildUserNameInputForm(), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 20.0, 0.0, 0.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + new Expanded( + child: new Container( + margin: const EdgeInsets.only(left: 0.0), + child: new Text( + "输入密码", + style: new TextStyle( + fontSize: 18.0, + color: Colors.white, + ), + ), + ), + ), + new Container( + child: new FlatButton( + onPressed: () {}, + child: new Text( + "隐藏", + style: new TextStyle( + color: Colors.white, fontSize: 18), + textAlign: TextAlign.right, + )), + ) + ]), + ), + SizedBox(height: 0.0), + _buildPsdInputForm(), + Expanded( + child: Container( + padding: EdgeInsets.all(5.0), + child: _emailText(context), + ), + flex: 1, + ), + ], + ), + ), + ), + ); + } + + Widget _buildUserNameInputForm() { + _userNameInputForm = ClearableInputField( + controller: _userNameController, + inputType: TextInputType.text, + hintTxt: null, + showPrefixIcon: false, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 4.0, 0.0, 20.0), + ); + return _userNameInputForm; + } + + Widget _buildPsdInputForm() { + _psdInputForm = ClearableInputField( + controller: _psdController, + inputType: TextInputType.text, + hintTxt: null, + showPrefixIcon: true, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 4.0, 0.0, 20.0), + ); + return _psdInputForm; + } +} + +Widget _emailText(context) { + return new Align( + alignment: FractionalOffset.bottomLeft, + child: new Padding( + padding: EdgeInsets.only(right: 0.0, top: 0.0), + child: _btnCreadeAccound(context), + ), + ); +} + +Widget _btnCreadeAccound(context) { + return Container( + margin: new EdgeInsets.fromLTRB(0.0, 0.0, 0.0, 20.0), + child: FlatButton( + color: Colors.transparent, + disabledColor: Colors.transparent, + onPressed: () { + Fluttertoast.showToast(msg: "使用邮箱"); + /*Navigator.push( + context, + new MaterialPageRoute( + builder: (BuildContext context) => + new RegisterNickNamePage()));*/ + }, + shape: new RoundedRectangleBorder( + side: BorderSide(color: Colors.white), + borderRadius: BorderRadius.all(Radius.circular(50))), + child: new Text( + '使用邮箱', + style: new TextStyle( + color: Colors.white, fontStyle: FontStyle.normal, fontSize: 20), + )), + height: 50, + width: 160, + ); +} diff --git a/lib/ui/mine/ClearableInputField.dart b/lib/ui/mine/ClearableInputField.dart new file mode 100644 index 0000000..26de932 --- /dev/null +++ b/lib/ui/mine/ClearableInputField.dart @@ -0,0 +1,126 @@ +import 'package:flutter/material.dart'; +import 'package:flutter/services.dart'; + +class ClearableInputField extends StatefulWidget { + final ValueChanged onchange; + final ValueChanged onSubmit; + final String hintTxt; + final bool autoFocus; + final TextStyle textStyle; + final TextStyle hintStyle; + final InputBorder border; + final TextEditingController controller; + final TextInputType inputType; + final bool obscureText; + final EdgeInsetsGeometry padding; + final Color fillColor; + final bool showPrefixIcon; + + ClearableInputField( + {this.onchange, + this.hintTxt, + this.autoFocus = true, + this.onSubmit, + this.textStyle, + this.hintStyle, + this.border, + this.fillColor, + this.controller, + this.inputType, + this.padding, + this.showPrefixIcon = true, + this.obscureText = false}); + + @override + State createState() => new _ClearableInputFieldState(); +} + +class _ClearableInputFieldState extends State { + bool _showClearIcon = false; + FocusNode _focusNode; + + @override + Widget build(BuildContext context) { + var _controller = (null == widget.controller) + ? TextEditingController() + : widget.controller; + _focusNode = FocusNode(); + return TextField( + obscureText: widget.obscureText, + keyboardType: widget.inputType, + autofocus: widget.autoFocus, + focusNode: _focusNode, + controller: _controller, + cursorColor: Colors.white, + style: widget.textStyle, + onChanged: onTextChanged, + onSubmitted: onSubmit, + decoration: InputDecoration( + contentPadding: + (null == widget.padding) ? EdgeInsets.all(0.0) : widget.padding, + /* suffixIcon: Icon(Icons.chevron_right), //输入框内右侧图标 + icon: Icon(Icons.person), //输入框左侧图标 + prefixIcon: Icon(Icons.skip_previous), //输入框内左侧图标 + helperText: 'helperText',*/ + + hintText: widget.hintTxt, + hintStyle: widget.hintStyle, + fillColor: widget.fillColor, + filled: null != widget.fillColor, + border: widget.border, + labelText: widget.hintTxt, + labelStyle: widget.hintStyle, + errorBorder: widget.border, + focusedBorder: widget.border, + enabledBorder: widget.border, + disabledBorder: widget.border, + focusedErrorBorder: widget.border, + suffixIcon: _buildDefaultClearIcon(context, _controller), + prefixIcon: widget.showPrefixIcon + ? (_buildDefaultPrefixIcon()) + : Icon(Icons.person)), + ); + } + + void onTextChanged(String str) { + bool newState = (str.length <= 0) ? false : true; + if (newState != _showClearIcon) { + setState(() { + _showClearIcon = newState; + }); + } + widget.onchange(str); + } + + void onSubmit(String str) { + SystemChannels.textInput.invokeMethod('TextInput.hide'); +// FocusScope.of(context).requestFocus(new FocusNode()); + widget.onSubmit(str); + } + + Widget _buildDefaultClearIcon( + BuildContext context, TextEditingController controller) { + return Visibility( + child: InkWell( + child: Icon( + Icons.close, + color: Colors.white, + ), + onTap: () { + controller.clear(); + widget.onchange(""); + FocusScope.of(context).requestFocus(_focusNode); + setState(() { + _showClearIcon = false; + }); + }, + ), + visible: _showClearIcon, + ); + } + + Widget _buildDefaultPrefixIcon() { + return null; + //return Icon(Icons.close, color: Colors.white); + } +} diff --git a/lib/ui/mine/MinePage.dart b/lib/ui/mine/MinePage.dart deleted file mode 100644 index e69de29..0000000 diff --git a/lib/ui/mine/RegisterNickNamePage.dart b/lib/ui/mine/RegisterNickNamePage.dart new file mode 100644 index 0000000..1fa3cd5 --- /dev/null +++ b/lib/ui/mine/RegisterNickNamePage.dart @@ -0,0 +1,94 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:coderiver/common/color_const.dart'; +import 'package:coderiver/ui/login/LoginPhone.dart'; +import 'package:coderiver/ui/mine/ClearableInputField.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class RegisterNickNamePage extends StatefulWidget { + @override + _RegisterNickNamePageState createState() => new _RegisterNickNamePageState(); +} + +class _RegisterNickNamePageState extends State { + ClearableInputField _userNameInputForm; + TextEditingController _userNameController = TextEditingController(); + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + floatingActionButton: new Theme( + data: Theme.of(context).copyWith(accentColor: Colors.white), + child: new FloatingActionButton( + onPressed: () { + + }, + child: new Icon(Icons.arrow_forward_ios, + color: GlobalConfig.colorPrimary), + ), + ), + body: Container( + alignment: AlignmentDirectional.topStart, + padding: EdgeInsets.only(top: 40, left: 20, right: 20), + constraints: BoxConstraints.expand(), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.topRight, + end: Alignment.bottomLeft, + colors: [GREEN, GlobalConfig.colorPrimary]), + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: const EdgeInsets.all(6.0), + child: new GestureDetector( + child: Icon(Icons.arrow_back_ios, color: Colors.white), + onTap: () { + Navigator.pop(context); + }), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + child: new Text( + '您的昵称?', + style: new TextStyle( + fontSize: 28.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + Padding( + padding: const EdgeInsets.fromLTRB(10.0, 40.0, 0.0, 20.0), + + child: new Text( + '昵称', + style: new TextStyle( + fontSize: 20.0, + color: Colors.white, + fontStyle: FontStyle.normal), + ), + ), + SizedBox(height: 0.0), + _buildUserNameInputForm(), + ], + ), + ), + ), + ); + } + + Widget _buildUserNameInputForm() { + _userNameInputForm = ClearableInputField( + controller: _userNameController, + inputType: TextInputType.text, + hintTxt: null, + hintStyle: new TextStyle(color: Colors.white, fontSize: 18.0), + textStyle: new TextStyle(color: Colors.white, fontSize: 24.0), + padding: const EdgeInsets.fromLTRB(10.0, 10.0, 0.0, 20.0), + ); + return _userNameInputForm; + } +} diff --git a/lib/ui/three/AddPage.dart b/lib/ui/three/AddPage.dart new file mode 100644 index 0000000..e29e5b8 --- /dev/null +++ b/lib/ui/three/AddPage.dart @@ -0,0 +1,33 @@ +import 'package:coderiver/common/GlobalConfig.dart'; +import 'package:flutter/material.dart'; + +class AddPage extends StatefulWidget { + + @override + _IdeaPageState createState() => new _IdeaPageState(); + +} + +class _IdeaPageState extends State { + + @override + Widget build(BuildContext context) { + return new MaterialApp( + home: new Scaffold( + appBar: new AppBar( + title: new Text('想法'), + actions: [ + new Container( + + ) + ], + ), + body: new Center( + child: null + ), + ), + theme: GlobalConfig.themeData + ); + } + +} \ No newline at end of file pFad - Phonifier reborn

    Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

    Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


    Alternative Proxies:

    Alternative Proxy

    pFad Proxy

    pFad v3 Proxy

    pFad v4 Proxy