From 7c663e0e2ae0b7cca68bf7544f3dc861429be982 Mon Sep 17 00:00:00 2001 From: gracentruth <63465350+gracentruth@users.noreply.github.com> Date: Tue, 10 Jan 2023 13:00:07 +0900 Subject: [PATCH] =?UTF-8?q?1/10=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/build.gradle | 4 +- assets/account/bnk.png | Bin 0 -> 806 bytes assets/account/dgb.png | Bin 0 -> 1025 bytes assets/account/hana_send.png | Bin 0 -> 885 bytes assets/account/ibk.png | Bin 0 -> 3141 bytes assets/account/ibk_send.png | Bin 0 -> 1078 bytes assets/account/kakaobank.png | Bin 0 -> 474 bytes assets/account/kakaopay.png | Bin 0 -> 497 bytes assets/account/kb.png | Bin 0 -> 1168 bytes assets/account/kbank.png | Bin 0 -> 661 bytes assets/account/new.png | Bin 0 -> 1199 bytes assets/account/nh.png | Bin 0 -> 976 bytes assets/account/point.png | Bin 0 -> 2345 bytes assets/account/shinhan.png | Bin 0 -> 1900 bytes assets/account/toss.png | Bin 0 -> 3516 bytes assets/account/tossbank.png | Bin 0 -> 2629 bytes assets/account/wori_send.png | Bin 0 -> 1456 bytes assets/icons/bottombar/catchbox.png | Bin 0 -> 1000 bytes assets/icons/bottombar/community.png | Bin 0 -> 351 bytes assets/icons/bottombar/mypage.png | Bin 0 -> 1509 bytes assets/icons/bottombar/today_catch.png | Bin 0 -> 677 bytes assets/icons/greenCheck.png | Bin 0 -> 1003 bytes assets/icons/mypage/MYcoin.png | Bin 0 -> 63346 bytes assets/icons/mypage/Mycash_minus_coin.png | Bin 0 -> 1598 bytes assets/icons/mypage/cash_warn.png | Bin 0 -> 1135 bytes assets/icons/mypage/mycash_add_coin.png | Bin 0 -> 1753 bytes assets/icons/trash_can.png | Bin 0 -> 1292 bytes ios/Runner.xcodeproj/project.pbxproj | 320 ++++- ios/Runner/Base.lproj/Main.storyboard | 13 +- ios/Runner/Info.plist | 34 +- lib/Auth/auth_service.dart | 119 +- lib/LoginPage.dart | 140 +- lib/join/joinPage.dart | 215 +-- lib/join/joinPage7.dart | 93 ++ lib/join/joinStep2.dart | 237 ++-- lib/join/joinStep3.dart | 727 +++++----- lib/join/joinStep4.dart | 106 +- lib/join/joinStep5.dart | 101 +- lib/join/joinStep6.dart | 323 ++--- lib/main.dart | 23 +- lib/screen/Camera/camera_page.dart | 5 +- lib/screen/Camera/camera_viewer.dart | 13 +- lib/screen/MyPage/MyCash.dart | 328 +++++ lib/screen/MyPage/MyPage.dart | 329 ++++- lib/screen/MyPage/cashCahnge.dart | 215 +++ lib/screen/MyPage/makeAccount.dart | 563 ++++++++ lib/screen/album/catchbox_detail.dart | 1383 ++++++++++++------- lib/screen/mainHome.dart | 146 +- lib/screen/projectPage/progect_main.dart | 460 +++--- lib/screen/projectPage/project_detail1.dart | 252 ++-- lib/screen/projectPage/project_detail2.dart | 175 ++- lib/utils/widget.dart | 62 +- pubspec.yaml | 3 + 53 files changed, 4382 insertions(+), 2007 deletions(-) create mode 100644 assets/account/bnk.png create mode 100644 assets/account/dgb.png create mode 100644 assets/account/hana_send.png create mode 100644 assets/account/ibk.png create mode 100644 assets/account/ibk_send.png create mode 100644 assets/account/kakaobank.png create mode 100644 assets/account/kakaopay.png create mode 100644 assets/account/kb.png create mode 100644 assets/account/kbank.png create mode 100644 assets/account/new.png create mode 100644 assets/account/nh.png create mode 100644 assets/account/point.png create mode 100644 assets/account/shinhan.png create mode 100644 assets/account/toss.png create mode 100644 assets/account/tossbank.png create mode 100644 assets/account/wori_send.png create mode 100644 assets/icons/bottombar/catchbox.png create mode 100644 assets/icons/bottombar/community.png create mode 100644 assets/icons/bottombar/mypage.png create mode 100644 assets/icons/bottombar/today_catch.png create mode 100644 assets/icons/greenCheck.png create mode 100644 assets/icons/mypage/MYcoin.png create mode 100644 assets/icons/mypage/Mycash_minus_coin.png create mode 100644 assets/icons/mypage/cash_warn.png create mode 100644 assets/icons/mypage/mycash_add_coin.png create mode 100644 assets/icons/trash_can.png create mode 100644 lib/join/joinPage7.dart create mode 100644 lib/screen/MyPage/MyCash.dart create mode 100644 lib/screen/MyPage/cashCahnge.dart create mode 100644 lib/screen/MyPage/makeAccount.dart diff --git a/android/app/build.gradle b/android/app/build.gradle index 82abcb9..4f14a1f 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -59,8 +59,8 @@ android { // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion 21 targetSdkVersion 31 - versionCode flutterVersionCode.toInteger() - versionName flutterVersionName + versionCode 2 + versionName "2.0" multiDexEnabled true } diff --git a/assets/account/bnk.png b/assets/account/bnk.png new file mode 100644 index 0000000000000000000000000000000000000000..652d5e6c67df3a10d054ecb41bad5f249d240f85 GIT binary patch literal 806 zcmV+>1KIqEP)K~#7FjZ;lX zR8bT@=iU2;shMoV7UGO$n;c`FKk24gL_y@nKq8?cX&Eg_2%#dRzg1v=AVG^Z68#8L z3wJ>!t;EprjYvfyIa6s7pZ)7ww?+8xS_a8Y6%o zfcR*JeqGuVkI#(;tM4nM(@UqH9HJw;5~I<4el!$WFaSN%^O>T+1{o$Y1`uI9GGTAe z=Zpp;ErifTfLqx8V#V!k5|ADfl30W8M=%ZmQCkrervc&}S#tZ)051ZT0AZ7f(DMwA zR<%Hnn=2twOc=ao%FRFtnQI%WuQ%<<%q;|9aC%OJpLJaFg$V>I~uBIwD)(8pc)A<4o1J*J7d*%f53o_HURwCA%k4u*N z0+8~Mk2Z|>te6fmnB;~yiD3+UrDJL39^54489+IWOoCOY;f~w+s1N?nE-s3T_f`g_ zOG+_&FcHremf%&I~!U0 z9Yio*ov?dWo)u){1#3s8j_Hq4S{ZDNDTKfePZtxGi^4zO^Ip*1T$qfr@DJk=pUX9d zc!NiKYN#|^QBa`JHHrSn*XTgr=S0an@Q~+Lsr?0}=+%6gq4u*<-jP|=W&kyhY_^L3 z1|BV|tmN(+`8N#?JTXl80Mbki1!{Neos))MT{Z!9jX}Q^SQ8!A-1&Q>eMd0?vAkz> zRXq$T`0H16|#cIvzO(~#ix8ew`@ktfy@aN;OFLJCNEVMuQp7+n;j~x k-Ouavn#X%Q7V7=@2jk5kBg>J`kN^Mx07*qoM6N<$f~`bjK>z>% literal 0 HcmV?d00001 diff --git a/assets/account/dgb.png b/assets/account/dgb.png new file mode 100644 index 0000000000000000000000000000000000000000..5cfa302960846f5c11c80956cc766d4dba6d48ab GIT binary patch literal 1025 zcmV+c1pfPpP)2%?Bm!O)&Rk0yT2B3J)V1$4K}e zR*qdTG*RuGa%iKO9`EAOnkYkxbN&d6HEM-jny(W#R9ByNC4E?$cOK7-6QenOkiBsT z{4WFfnw9x1okj^_&Yz)bqB>chVh_a+JQ$g_>CpB+yx?ir1~UtisSGu~$R?=E?kbvw z!(d|B_R9}bPXbpXzr;yW3hf`K;|7k;b7lqHK|L_GGUGqs-yFq>saaxuu5MZB6B1e^ za6gg8Fc<^ukLb#cUX-(+d!se}JJct`w3ov0zM`c&3Pvw1M$zk%Q8`0UoQB)q�>4 zTa|R$mz$9vyW2&-2G4g{!Z5=L;hFMbkCEIxxu;pkuBarsonelLqoyM)A!IWG(Z==D z`0YiQM&F>HC&Jy@Lx6Q?{q-_0js~=j{ri)asy7Gxg5d%+$x&ReB)zsi)7#M&-E;A#rnnvJd%wW!ZYVZ8t4geni-q!9WwZzDnn%KCO?hhb zLWhS>>Y4DxCKRciCD!xOd-8e$g#*tTR^O{o-iyLuZ-UO z-I_(&yDq#)MbN_Xl-@ycfwo3ivImy)DQq=D*-p8#Re@AKq}2~77lLo0sN1353liNd zGP@cN)X#596+H*CdR7^v8TP9(ZP~-InEeFZ1q%yf@M98ER2MlJ{WQFTpgQB9Wt1 vjAV+yUWc^Y-O?U746}Fj<-fi^mk;U|_@_XF$vDL*00000NkvXXu0mjf%!uK9 literal 0 HcmV?d00001 diff --git a/assets/account/hana_send.png b/assets/account/hana_send.png new file mode 100644 index 0000000000000000000000000000000000000000..5deecbe573a1722e5e200e3509988f1e01819e42 GIT binary patch literal 885 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 literal 0 HcmV?d00001 diff --git a/assets/account/ibk_send.png b/assets/account/ibk_send.png new file mode 100644 index 0000000000000000000000000000000000000000..b2956fc79711f6c583cbc367be28a4a62c506eaf GIT binary patch literal 1078 zcmV-61j+k}P)X1^@s6z#LUx00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yPb zu));5o!@34wh~Y-PoE(`i$PT1Q}J6hd;rkSnCI_2#g6$l!2ycOg~1IoI^biFeR;HN zg4R3uf?b*Ek_fRP+jap0pK5A z=z@W8@~to$L#NAn9Fcvsr?VCW_+acR1N1oXQ>gppQyx#Y`oslEdW}JN`PG@S0N9ba zcV3^C>5BG%V@U5{YnPXG-I6whu!&Gs_tvehR+H@+YWN=j1)PEiXA>${kc{*}NFLs) z$L%}xhp^aDSpeez3XzKu{jS6CISI1d-PgZnQD?^Ie8-|=rW0k6s!p`=^s_T;2?Y!! z$OJ~c)_Ac34B8f-u@p7Lhr&vR-9&nJimm3;KG#&vzh|+dI5r}qpp_P_s2|{tZ0Ca)SxE_j(&QTl9 zm>j>Ig!bSCZ=#_T7fwI?Aa7sCr3@V^nf%qzu4$KsG8;&)voc{*U)`#pnXd|EE;vNt z_qz`LURXU>RkVvp=vDqMC}J7+54$x|@wB8*&NA`-5iXf{mQ;|i$o`=jwXb!`q?}?- zPxL_|rIbHHgDEbUy)R!AkrQeJ=jkr^i%q{$NN*e=L-^5dX%uk8+B$KR0{pF~>7d-! zVC4QY?MxP3~SxEY4Y28G%$#W4bFPuXlm-D!Z;(9m+-ccy( zwrApgMbMCJQe#^1n^MK&s@Tcop6@{vrTk@Q!5AQ_EkQLUu>)2SlU}xcFYl3GNv48pO_`7gip;%GO!pCCh!wh z5^lXwz$@&vNg0?N3cDZHuMLlzEE%4yq&}E*_2)Ou_XDbkTw~LBsWH5(VQr>lOOiq@!n;Wtx`QIascY@Y+8VJi$e*gdg07*qoM6N<$f`y9rAOHXW literal 0 HcmV?d00001 diff --git a/assets/account/kakaobank.png b/assets/account/kakaobank.png new file mode 100644 index 0000000000000000000000000000000000000000..5b33993113b80f0154915cf0d04218ecf9e97a1e GIT binary patch literal 474 zcmV<00VV#4P)P000>X1^@s6#OZ}&00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP8rgT~tIXxlbq+xw%W?_C5)vB9hZmpKt%4xAlw56rO86F5jz> zh*#w5I_2>VrT<}d6}OsDCX&mVI5~XB)Og2toIFp2-vCE2+J(J-u8}d{Pk#ukiJXW> zJoRO|Y^a11!6{i)sKmh&r^f+Q!m!8LFiO+Mvr3k|48jAk zpo<(p;h}u+Se^qq+zcMmemvX-kxmEj_Ns`rq2UHbM(dcFQ!z1FcieAVgHnkdf!zoL z1RNdAGDvd0g4jS)9-wIi8>>;|^9p1Xi#2g__KtA4HCD?ST%3o5b3&*XA`${yaog+5 zZp&|$fcx8^m?}NDi26Zt8fyB zQIo%^geDJIUa6utqC-X;#7|K&Rgnkuvkk|mA7Z1MxXr=Qr>(7Pv)fEX@%+^K!;g*E z5Rca}zf`fTnIXqkp{YbT=h1ENeEmcj>d_sYN&_+(KNc3NEWc%Ghi3iX2Y&#-3Q&Y+ nqB$RHC0qOfZ59P(fh+sp!`6q+Bh=N%00000NkvXXu0mjfGbhQM literal 0 HcmV?d00001 diff --git a/assets/account/kb.png b/assets/account/kb.png new file mode 100644 index 0000000000000000000000000000000000000000..756251550b1922db3dd77f6dd7bfb579302ede89 GIT binary patch literal 1168 zcmV;B1aJF^P)$dCRfuIfU05pN$P@%R+h%z)@h;$XnnC)7 zX#9~I0wv)c#F@ZLgnpZ_s^PE_(t&LooTxyUK_W_F+L0C=X0b>o@y+Lyv z`EMa#&wSc3>VWlV;sTWrD;=%52Y~PTn_Jo4neGq1W83OeZcohlXIjZtB3`7$yC`2a zRhfCW$B607fD^?@@$+_Q{4A|fR3JR@vmq6R+cE4nC`BI|BO~d7;EU4T1}1cM-kS9e zGw+-Sln5Z5SQE&&202aRZVatdgNy#K@HF%OtNJv3y5U|Em>L4$VQhyyP216m z!`W!q^A|<(n612TooMaO<+)1sxw3%YXj*8tI>z@|q2w+M44)wl_V;B#EKOk+k=E7sq!TL&j!p-NBq6}udq#7Xf5Kdu zjh(J26RUsDq^^vhU^=1b(N1~`hmv39=`=E%#q_u=l8B>4n(g9I&`pq4fx4`Y ifRraFxal(81o;mJJ+wR5(H;{30000I9PSe?~MEcQGXu)*eTU)Oea0W*GHEwQPM9e7}^= zWHS2(l4kU8vUoau@LwYSe$zBn@Pj-2-TjdNA=T+e(nSU=)D~t-yG=$s*K9{84&gQ$ zseI9~t?5KEdz>&-1%hLe&ITi8AK3HHhEut9MX=WFsKMsu_Lh;(T>!6Z+RtXEp)CEI%ADK1M2 z2Ot_d9M}U~URo@@6(cVYIrdAhS2}rAFjikIeG4L0q}FB3A+hyb$9kp&GR5U~w&`;?s@H^hQt*akep&WFNJk^wm5Z1q|2}*RvNj~43X{5LB(Dzo6Tb6w zr{&mpRsi)CBJXtKQvQr;g>ND7Dx-QTVy6_Nv0N=}x&%Xlkvy))a<(b;q2;!}i|~7S v;a_(Yxgk=kBKSpW#i`t#5%3A%o*O>_b+PB$uw)l{00000NkvXXu0mjfG1?si literal 0 HcmV?d00001 diff --git a/assets/account/new.png b/assets/account/new.png new file mode 100644 index 0000000000000000000000000000000000000000..bb6b1b1316c6f8dbe2f6b30c49a868b5bb8f7c59 GIT binary patch literal 1199 zcmV;g1W@~lP)9-l`$hsAxrQkWf);<4Y>F(&Qnfu~wqeNK()Qf1VUnq@alXfm#tMD*8|# zY>HCEs%cXU1+k6Ah8C+2qOm{F+!9L#g~qn`?#|BcoSxa6o21a&HaT!OJ3F)Ax97~6 zZxF7-ns<)2>)5_!BE2lpiIUoYh)rY+9X2}Lapt{M{nx_4t4%&Wc&6c8T;3I$v^6#< zXq|x3F<_j4BTG1jQ3_T^BmBN+;?t*3*TNFDCe{p{y_F#TC6Kb!lLCZ55H7M4KLfiI zJVxZPTFRs0y63;XdDcWJ=?@vCpcqqTpzIO>8QhUjMv9=6;CGT2$wJOkU(SkX&G+Mr zID;OUVKNwlJ0gCb;P5jb4s%vznk09GsHDrZqv3^Jt=CNiB6&FrOu`u8xhUipDvcXY zzVy(e#aCL|g5=yi2)5t-fSN3+b=gXM=1P$2ibN=yfwBr!N@nTTBVA3;&RjCOZq+{= z`tE)IU}Juszua)M#3cn6|NDRCHHqq99jHeG>vU*Za)DP#j>!U~ccF$YzJI|7R>wDTTm8a12-n2y1$#L0G;=i?s@*W(YIdzpFWBkl8p z+)epF!43S2<&w@;63~!Jl8u0A&GX?C<^|z;Uc3`5aq0Lws<<wNlbuu1O@6j%bAd`Ams)~eGiPp z^|K{$w);umd}}scNGz06f-tpEW{*<)7!!HTHs^t50`j;CIeNZ03Uf9+Q07)InFKB- zDU_Ksw)SBqeXrh0h|5s81BY(U;`1;^8$Tc4Xc*5O_KGATgznk%{bImn3pf)O=dlY_ z*9&vB3z4_Psk~-okDR(!yexu19m?mJfcGiy2;Fl&_gdRGCzi|vc^oDtlK8jQ<8Tn!jGFa|MVjYdy-HsrIgx)%s*pLn)u?baRVG><%j?mO9+}Oc`ANTVWsJQSs`R z`?T4Ruk}!aiFiLaYK{@Rj@?rQ)5 N002ovPDHLkV1i6pJahm6 literal 0 HcmV?d00001 diff --git a/assets/account/nh.png b/assets/account/nh.png new file mode 100644 index 0000000000000000000000000000000000000000..e9251d609a35a3c07eb358bcbc2f082924baec84 GIT binary patch literal 976 zcmV;>126oEP)K~#7Fot0gP zRaF$ne|w*E&s=9rw1>W|kR~caiqIYs3mRu8M=BCzP@jryp6a3Kt)!?hl3s!ylmQ#==wlr8skGhQ_W z3G)n` z7Q4+pd}rGEPi)_i@8&9jVcB;i(53YgmBb-yn!4Cp8sKSs-Z2SXvOgfx?rWem6+~kA zV-&MdS$mb}VH#yPGW2-xp<>%Iw%yhd;Hk6~o><55xx-Epv(AfEMI&HET%c2dFgIt& zYk8#3VE9A7NA#OFU92T!y&U$tj3Ky*Mly5XH>d{4^Jd{nXUHwEo{Gz(vDkeP* zK89xmbfSg~j14h+X2c!^Jm{(^PS~V297-(n#p-pJkMzU2OPbLYoUbr#3E40mV7f74 za?1aUFU5F7nqAZQJz8#=>b05d=Sh>}U#)|T+qjy!uF2*V)Y+p4N~08t%2U{ zP)}MJ_GPu&ftB1u(kVzU9*2I!#xZ|746hV_Vd;%PO9j^Gu{f*OsT)WylpWC60?+6B z;sDRP0E@rUroL~adLpm0A=W+oyGe%d!-zhyd(9C)p~ep=vR|WeMnLy#y1-Xy&(?@UUuVQmUHMYt;Zh@~x9 zE$U})2TiRw5nEQ~+Znv7Gg+sJpLxs%e5>Wco1n#t9*RQN&gkNBt;sn3HG^S+=X8Ir y(z;Ev+$wcmK$jJr z6UQ0;_fBtFvSj>{4F-b@Hqb!946Y5+IuJsb4h&=`-HHg^@9Szh8Qv?sVHb*|PPxlg`HdMmM_q_uqfN z-GBGr|MmbT0T^SVyu6&`|G5jn{}B^1e%^Ls+O6&{3+%rB`C6I5%wW$`ZrYWoAml#o z`4I))djuwJ3aqRtS-$U1KFW8)BtbIahxn@UeC?$lv<9m>3>a8W&L5-{6n<}Aq-D|xP&VzEV9}p=W`Dn|2;YA?VE)`LVGyUG6p57rcK(c z3ua^9?yWiddSHTxN%-=k57NHw{nu|>osZTrEKR_85k(w8uQYZqN-26Nr(@aG;^JZk z#tBivmOC#k>~(gWAE0`2v1nB+%q;dJ$Ot);t)FvhY2x$y*5s_AU>uMM36ENL&8hFa zd)33ZP2nY>P2&jik{^NdmdrL(_bP)K4Yv+n8PB|q8sXFT-pIPubL$Jr@0~7Q4TG?A z#N@&t5P>tbGY_ek<{Y#j3oEHk=tE8CS#6!&`p4L0L7Ws88hvrF*pIs0EqfH-^sE7i z2qS!@LyMl1U{BhHaM)uPFMXZ3nXBa@cZ}PTGBXZeT|z_0&Ub%e^Ex4yQl@r9Hy_e{Lv?O-OY`5>?{Ocfs={&*K_E(;t^Z}l0CjES zFg0Q5REf49nO|K2-~uOTA%T;55QVNboH^L$YI%9IYY4&o)WruDB!Bl$q4jIKD~qbS zzqrVIFmxb-#1ZKw4B4OSYbwo_{b#*A;WAOekDc|K+_Xajv49a>khZcbQhdGh>`(q; z`>4R-9ahPWm!Y?FzHvPx0#l~eNT6scutjaPnQWEV;rM?xkQyv53$FlnkVA-(Oy*^Th z_^|b)k@3@c5C;gvd$fIC+5Ndm3oHa813ILD4(li4FF)i5U7B@Rp9Qk65sq5k!5N_{ zL|?Zp&C7T*BiKa&$64>Y=bw0Qy3YLZu&(gVB_+aWk{d_wJszC%xs@v8^X#CE@PU6i z3w|OjFPK0A$ZxNC#(AZBWm2;rx$ZhDqDH*^)O;!>m!lj~&*OVf$kX zKzMjiT$h&QywN((n7=huo@56h#v&wx?FI;`!ZS~b!rHqH)QiFROwgDjA_)pI6X*wT zn7XV>L27Mr1A|CX5_D*@z5cB;4~{Jt ztxw9t42M0rd*=v=fx$3y(IQY0YcqGa6Xe>jCU}@IT8(CD`PZE{-mhr9WDrv1M>viN z@KbtlbmT^g18}=h##hY_bs!*T>C6|otZT%eh+Pas>;^G77<=yZ?hC)>q6Z105ML{v zJ~OxmO@gH~!zz4o9SZnqiZbJ-UT(B%?GNscn{wx?cp{&89&FlAVj;UA#+eqtmA$4D}ZH$GfSlc*=HMp94_ILYewC?*7VBnbP8k5*bX7& zx^S}6cW@j>8$o;Z4@JrH;8LfS{CqTaIIPkf z8LSMtYd1qn)q3!{jFPG>%p+gEd{lKh_$-U1JaR~P@%4`$G}p9$c_ne?^>n478A39+ z5bcN<9dhb|Sp^I|`X03XXB`Z-=YrJul4?YstjbcJyA0uGC1Jxp-9lxqqs4D zQhZrnffN4mZ_g_0BY45##NTnaA%lN$6w*~Iz-`czwv;4%ZH9?FpCfOwmX_v7{xCD? z$?eS+tiE08o7LQbr#1C}xu*{sNd>S|Q`q**WTIhqHZ*Nnt!kR+2gd&a87Z6c0NXu5 P00000NkvXXu0mjf&bD%n literal 0 HcmV?d00001 diff --git a/assets/account/shinhan.png b/assets/account/shinhan.png new file mode 100644 index 0000000000000000000000000000000000000000..8a064dceb72f0751f153cf5f626c796ee027462b GIT binary patch literal 1900 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 LNkvXXu0mjfAu`j+ literal 0 HcmV?d00001 diff --git a/assets/icons/bottombar/today_catch.png b/assets/icons/bottombar/today_catch.png new file mode 100644 index 0000000000000000000000000000000000000000..33dc689feda135539d0d6f41c879a457e6f27b1b GIT binary patch literal 677 zcmV;W0$TlvP)tb z+b|S{e@d>=M~#p^^dcasO>_Zgg0>SR*}$H_$^^{@aW?1%&U+phCo$aG1>z9`&msw6{5bbp;Q+A}D6F4P388F1JJ~xjA&3&_%csW{wBW z5i|?`3dX9rk;|!Q#Y;0L)L2*;d!feSY^*9y5fsyTSIG%2K%fcIHvc21F>NIb#!ii- znk%N$E*z*FL2>b82QnRHJ$Z!mWxwn`6KCJ`+#S;iu*)~!9^t+O#ra|gl8Nb%+~=J* zu{v)uOTdC*wqlU*t=Ido#9Gi*4xW-$f;z`R(r(t1d;EPof&*gmt*`FOEJp@x#5dpU z-E~f>;98Dj@-yFxkKut3>H!N$KjBun@>apJG~!E@G{hcSuBzl(9=t2Z)rD=Y{3n7{ zb6j1N<;uT;zG=jlVj7Y}gAbi|2SD*BCfR>1IgMFUt!<~X$!A%b!M`$g4)()vF>pKJdHhUZ5M-9JcB00000 LNkvXXu0mjfBFrZR literal 0 HcmV?d00001 diff --git a/assets/icons/greenCheck.png b/assets/icons/greenCheck.png new file mode 100644 index 0000000000000000000000000000000000000000..1f4ef69299d7c5d1018c5ab3eea1df5a4a1d1e60 GIT binary patch literal 1003 zcmV@~0drDELIAGL9O(c600d`2O+f$vv5yPWU-8oxu&<0B)cs5SBt&gcA@?5GV~Si6_7t$PHvc5q8cITpBEgHo$0U4^Q(d?nAtGRbpMm-5CH%H00000000000Dx11z|P>}ghbvR{UG}E>fo3x zU;u2~pLa=8`=8(C@*}-I?9hVN2o`hO+nc)h+PXL*3r`5j8+4m$(m0_C;SN|x<5GQV zvWIf{g)CqI%F>H2(T?G0M#C2!vVcXnjAH6({4k#&UQ+9QMiy`f%=5jwp)US6^9ibc zEHA!>0hs4`Lr*+OAjI8J0!)%=t~vFpm#~JiX=HXmTQ3AoBo~H`#Z2kKSbtljmITz(X*#r@+sov+<}ptrPfkuX8M=9J zTHM-39`ZDS*iP3%fJ!?sK2S+B@?JLLJZF6nl?2IypBFyqF(?2002ovPDHLkV1hOs%y$3) literal 0 HcmV?d00001 diff --git a/assets/icons/mypage/MYcoin.png b/assets/icons/mypage/MYcoin.png new file mode 100644 index 0000000000000000000000000000000000000000..cf9e2cc0402a8fa5059c596c8e96f51a533a00e7 GIT binary patch literal 63346 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

Kk6ls% z>VBcowqeTMN`RP&3^UP#JCwGY@07FKbF${E;YEEzUqIK~N4G*rnH&#uYGz2t1#O+u_j*m;lC_xd#FGgaU2k z{U|U*(hQyE-0$H)-|#YOV>H8@gwtsSAJ24ElJ2u1meYZ%kN3 z7k@oIdEcAl?`2)_PeaMktAE}CsAB27boQu@b{_rC3i8gD+vZdIBr-TVGA;M6_kQk_ zOA1;L;S5A3TibMGHId9rI;64u+Z*>``{O@`?c06@D_8$3^e=lMWN+P+d3S&$Tn#ry zp}!>+HoQ-!s?F2)VQ~K&m5<~9Z|_T>r8%neZuQK(dH*K;Lc+pGXh9O20>U=VAsoCY zc!?7)$jCCt0vmAbu$mLhAxdJS0|(-8>^Rtt62cMpzawW>EYAL)S(}Qu2{{y3WKm@Kmqa^AUXfS2Xg=k+D8%2DmTRp^+#g^1YiK` z)+W7gON+ig*{xQ-D7kj{MGc+WGBwblP|zHotS&jev<_#9o|rz$6^rU&+9+)u#yI62 z*>Bum@Tu)NSovAkLyUb!fWxscxmJ6%eZDQ79R(nctiA1JRx`N3GTCakpIqlt$i*9# zP7_(NrYv`+Ms@hBf1SW2fW_)cCC#}#v?hucl1LSq&NUO6An7hw%z!}Tu;s67M{a`q z4qXgKzV*Lg?`hA0!O7=a?PUE;(*=BH0jFs|v-*R(VD0Aj!P@Qr2*rJ$f*w|;IsY`6 z1fAc>FMxxc0UoaCPBZWh$F7FlX;o(GzJ|<>%pILE8LTDDq?>W@z)FjD+Q;&c?GS9z zE;+T#LffGCIDbaau^@>jxv$adK+9hZGr5eQS;)3@uvrA{HHmr1AIeA>YNRpk9n1$O zb&ctDWa?1&A0U&JWexjhTp+0C9}3`obz`P=qzhiZ*p|)?7|Kn$?J9U(f7$$YGAl-O zw%7saF%68OnrSuc8(5p5H&ew0F;p?(J+~p-|ZQ;aYx@g$f@aW;1pq6>|8)CeETGrE4?{jQVn_#3ke-XMgjGGbpg?& z;QE9UaGd{a&;Bqm15yUirA&0KG1X3=-o{{aqJ1u54XJYZw58pF*|$YgpLGPKX&In$ zL+#tZO^xp`J{18hHPgz?@U~wK4^#(2ZM472Syzr1d5t;nOQ`ZJCj~y{)L(|L0P<9ogaV{4ik-|<-(-TCom)dU9RW`sE4@athLU<~(G<~yf#6boJ)yvMBPxcvnL4+v&UH_!FQMHFoX28~{Kj zJ+7S~-!}nFEb)1my!n|JM6O#y- z__~kS2MyeD?+RSsnilL(y5&lE^U|_;Mx1pL!W(^8bZjz___I2KvvCw0>T)%(@Az)B zvHih;G=YW_D_(Svc-Bj_aK}jjZkCvHu&*BWhi+BUK*+i~mt4VM9{Iu&TJMrkp$TmDApw z2I5VCtPbUAe4W>ZbO`26oHVzY5&@M&C6HvwfYZ{Ic{E;zP8va0o5-ZuDE1V7fVuop zd;*I2q5b_2EkMOe^BnGnxo~Uh?_^Sq4s$N>#J$__(X>h98K2Xm6JZ4 zX9xKKZca)nUcM9>mehYY_#B9oy`Xu}3(OYnD$1FV+#sca+fZK(z%2ZCR`Qxi06lN= zarwZ6e28O<-W353D~$ z^uF>wTR$T!;o5}9N31#On=o1VzO|#>0Heb<0v@3 z;XN*_XFovzJ~oS=L^JxUEy$8d97Uqq`xw9wpm`p<%tJEoTz-Q2%Ow17TVG<&)Cr+2 zAfY`lnK;sY4Z&27cyAg-1nJx8 z2j_TyiJ4mZ3^;ZeS;1sB$N3E8!HJs#5R$37J`R^Qlb7qh<^XOKmIyh29sx0n+T^Lz z>Y58-qODOppGv4)W9D6xd8Pmh0<^0`vhFk_gfz@FgVNW+O-@KO$~#(I4Llk?j}E}$ zo#ef03w9?+&Q0)Q;89J_WwQh)&@``B!t^($CA(t*#L?sk{IO+JPqBmNOk!S+kckzo zeaLAc2BNQF5~ljnp)=ex<^ZIicoWh15{5SuP=Y2>1kiIf&m}htXA}Tr6ig&+t~Sk_ zC^?9RV)`(vaWtehC13jS)yo)`yQaGF(~t+1Gu(A>2PC~gZK9g1wlQaN;9;noE?|!3 zjLygj2lrGUNtgy@A1?f(5Z^0?Wd;7OZoLVR_kB_Jm<|iind6f2BAECz-aWOta7qGH z0QpP{r!b?0(Y*pBicFc11|B}H@_r)?)YDZ>RygH4{Km06soKkJ!rJxZKv}dl?K3*f zLtZ7DToi>I6haTemtYF*XaG6sm*IQ2egrQo`sS6%vA3*;$hJ#1M#S2;;U&3#wS|dS z{fR-cZ6+LuEbpzD;Uqk3kkV;ed+d5CG`b14ddEl{!}d&S%w|oL;eO0aU9`|hFfmOM zinG_kU@c6|V9BJ`3u|VGnfbq^>es)!9oj}ta$v-nD5>b)957FiBk6g<24)G3!=pe0 z52yv5$XCkBbmgemtDWZrLPi2fC_|%d1&|NA-%rh)|Z4L5Gxub*ADe|_U9Q^Z&R2_DG%sF;}wb(!7i z*R4}{9qniU@nqmNID!jp=RP}1#bQusl0@uC!Ib3!20^NKZRVZR29n<8!kh!!N!Jcw z_yVw)1*yE@noE_NMuD+=$8V7M-6|O>A8pt-5etE^tiy28XJG-E>+v{gj;XTslDsRH7rzlQc7gXWovX zJH}6C3IB1k2|b7^a!LM>I!*)v@)DYQyL)$AXy;>WCuppLJYcSE66l4tC-9yK@J0b1 zoYAAaE^BSsCmm+AxwiIg!TMMU3X=l{G>jQVM>}VZlrO!?`ip!>@5nCBnfBBw#VPkn z-VIPfJ-W$6iDOlZAQ-# zNj@n)eb+~Xro_t9pnmBc=V8kddgi7>J1y7&$!MjLTFKlzE24j{s+_g$$@o09^LyR`l8>W*3N9=heD@SMRObE$XUvW}8`yksOyO81vx zs}q`)6{p1trxGRQ{2?wb*`@)MKD?8_gGlN8+mgmMQru~GUW*t7Vc2n(&x%9RLI9d3 zEC5yea07jHt!7+q9nCSvSu@9hdgZa(p}?&RqM2kx!S==iXlw|XXr(;dK*Isge&U5R zpCX8O8cEauy$dBgUVx7VAn{@y{V}GCEd>(gX*?4^MAuxfB%c>89Cd)c}K4 zk}gnid9E!u!0_6I3nNV=NOYuy`1G)Hs=Jw4apzuy#1WdM?Pk97$a|fGcH7BRtIfU7 zW0SzcOL!&Q;eea3pcXa=JQ~13zsO8iHfYI8sRyi?V^07ND*G@vTmAl6Zl{9#f@V^P z$qghaDa;(8mNpwwyn&`9ii)&8rB0Gx5M9UU(PVyeBl;ebhWQ@_P;wv-Je+G9$Qbpc zYA@Gr&bPsj)i!$3vd?Cwf;A^isA2t)Z;&X#qfw|T?CLJy;b>O@$RmCQ?!EB}d_k{g zK5XrY2MueW#vmmUo!Nv&_tpZEhcv`)C_1)*6=v()`N#T80cVdunu+LbNzL=uljRoxCN#T zNc{SsQI!s#Z5Ek-RKc6Ll308AcoAkRuBC8uk>*QL8Dy?6b?swvEc0t@My2P;S>kdm zqQW;AvhlHwyp2f+?N@uf^_Q8Mv;*L7q+3SWphyGa@yTK*ga{0%^TWnM_;EB*x9n+E@GijOUzsetrjD zPP+jKaZu<35< zN=;MEs&Ma=6G)CI<)qnI=R)&N?`R+|LRE~i2x})cYqpDboR0!y9#w!v=Y5o1^H7)- z2M<5%s;qa~_29A8z1&eshwg*euX0}tWgb`MCr!JtNE9Fi4o2M9m}nG`z9${=b0M74 z{aL-op@Qr^A&H|{C*>E;h8-9D@dJ)8u=?2O_sr5>k$ArJ8zx^M6JFx?1cA4qQK1N9 z*Z#-9gO{Fi9y|{^(yr7%9G&!w@b@==3@`if2L#c!FqjcYw9nzcT^N%C2G?&voJsGrDF-aH*V;H9Y?e+N25tg#c{1}CKN>gI z84utEm%^0{14t4>Y`XgBfAfz|~cMXGu6Syp^q zM`LlIzi0x5+P~<%3497>E8gxUTQS9LSDMTFd*B!1@s6Q0Haf6iAbj4uzvr3=hAF;$ zQJ9zl=V%b@pyUjd4Wsgb-3S01V7^1E-6p4;)Y^N)6b8^R9VWsZ=(y2d7;%}A ztP`LR{-3y)ThK0`P{0D3d?8nyO=X;{9%+{d{%xgLteRL!u-WgpV8eyshDK7ty)eSl z9&!QP2_0$IY9Nkm1(&zK7oR=pnNOM_JdAJ25pA*5ONAJNY>@kSCB%JedPTi~UE(XJ zjv3x}>kQnlTe0pRbF~p5brb?@T>IEA+U#<#GktFgTCKrjUFL<3dHcLZ^_Kc^YX~+F zQ2`Dbv^4#DOnV^htxTchl&2NwagiVhfn|&P4%z;D)VCou3B`TZ#`R)KSzgQlVoZmr z6f_QfFoIMpDwhM_R)@5q5FU4n?$uksMDQ|-2`HmkbODFW0uK&m4d7sZ@s!I_)Gapq z9w0O|Hx&0k`QR0&%m5y~oNyG-cRvb0TP&H&ZD(IfI*J%{jagdkx}k}L*%f1&*$^5G zcmsy_omAr%e|f+u+Xwun`9^jbb(vJqN?0*-FJZ11Ji2BTq;a=kkWL$PU=jy3Yi|^s zkKd2OYI8Rc!8B-8>KrLlLlfkb0y8vb~fptx@k+6__HQT%-lVkML zv<3E_w1#b~R?$XA(S}IdU_1vUXq1p>U=Xeo?E|2m#thKxr_??rU@^g;JL!D53T7+% z(LpzV6kfHoY%cE6cHIcAc33V=`5@jg1BlQrwQ-X>Y);jTC?B>gp!l6YWCziP8Tw3_ zf!Zcrxgu#E#YQxbE)=u_CqN|NvBqY;aH$(0mF`&BB=|jCnfD)HYduJs=F@Ds?}2Z@ zBBc5CwilOS=0U`KX8|NBMvpy9ujX-8Z`;(jvfdl5JQ(glH_T!-JJ zKN_Wf@_WbM5WZR-#K)d~F08-|w5v^6oF;d}E5-#r)D-5|X^V%XQiUET2OmvM^o?8A z>u(B^0!aa4woM?v75w3_=S>00SsWT=!EKvpOF?ZKc(j0tZyVa*st4&R<9QPeE?O`+ zs`4)Rz~+Ji8_2xd`4a}iK39W5)klgRlMtawF9L{5pU;RY*f}lCyk*u2Cex}+GS+E~ zRwxTofkcMM_xZ!FOkM-AF7ekx8v$T#GJ+?XRYiP5%mC#=YeRd0^f%2AlKx4*d`fop z9$q#pcu?|34c&MZ96tbaReu>CTkyH`Eet7%1EOOKX^^I0YIaCIh@Df^&FYAf1UB=J z9UgZcm~0AlZ3E25#V`YEJ&Obzd2}FJFgOa1^Ko#TM{Shal>tU{ShD-oa6GNE(eJTl zt9`V`6=Nca{actcxOT!#Ts)7&*8s5TeQ6p<>_(d9J34nG(Z1U58K|t^X!zEc;F~zb zDI6eOaSthvY49J`cdhVyw;AI@A2Or=!_hjIEbUA>`Dfsc(Gh&EH8C7XR*JXu48DdW zHY&Y_HCPa%r_K2ad9V`e9OJMW*u9fXgXH;Au{2Q(*2x@q2&rYq4&M~w7@kh}^Nf3K zgWwVJ=oGCQSoK;D<}i-7=`esx$-JQ+plc)gm~a&Ea@abD%7W=&j%l(5VthO9$)rAk zlKMC~km=;e2r_frfml+e+ioe%6C=BVM`wIyJRw=Q8D6G|2l0=sKjUZkBoh+Kv;au? zWXflFK<48r%L~4JJ>cQ!r~(j2C;t-sg9VYN*+E}s)q18gbIG4qItLMI)H2M#>J@Cw zff%gB^xObnJ5v1?h0=*YX;V}$cOB*GT@B9+0Pak5{*E%7r%-GJJUUR63McifE1Js6 z2RC^-pnvKtKY31dn8Dt`I1QClS9&gpN$PTE}6X z#)>V%n_!)EwDhG0-FO8&XL+x=wDlk%se@xPjN4_S2_Xa`8{BbLglv4MI+3$`yZ1`b zDLA1h8fiW8`DUXE)xkET6YCUM6O@(o?*eFpz>VfJjW~Gt^&YF$CWX=W!R^vex05u1 zu8nGe!-;9`Y!7F;BL7G74g8h~H-^e!aT6zBVhddcB zG96AI%+<$HOSgO&{%o+%yr37H>O|@yLw?W6q?KgkG)q*ZQZjilM&nHwOO+YJw_}%? zTH0vcY?_rRvwHBi24)93)BIE~@w>g7`fUH9Eg-*Ga8#Kg*O=cUIcpwSd1=71KD0*W zr4Z)Y+<}MNLANIsJI4A-IvE2C78ZY5c;YKzzeWf=@sz_*M$gMonMLNl(Lm>^!W&`6 z^Gsv2^OC0KhR+J>@k~eB@-berY1j}Z>F`MqR5l47aa<`N64{pmB=I}7_lQqT;0IXZ zMw>jqL!T7fdJSeYL5HT!{)G+9l#wG*Z39GlHp9E$dZ<931X3@3zw4&oq1xvLk>P)RGAr zXqdFPWS3|oOe5hPi#n%wdIqKv)!UF)j_+l8p?I+FSzTJj9htCNZ=jb?j$(>V(teNm zm$r&%pR2f4NjPI;!nSGWWlaDi{5rFhtak^3ezU~A^$CLUJp(B-ll8{y$B1e(;vG?! zT*Hyt35Cb$!2~FbQ4(__lUK1x@)4nhRe&>fZM=XTpLqzS>wDjSZg&FOy)%>jIEAng%4S zK6&|)vWW6UMm1^rIyTE>rAqx6W?TjEaHcETWj8Jsq;CixAT@%-Y(;~+SNT5nhBH2R z8F*Qwd4we!=j(R@6S_76S6JUP3`7!OVb3_26yXn|kW|?EC~H6|Bj3#TT?KG9i!@)F ztRK_%%Lq9baB~!eVfxE~B^H9E1(|1By=Cjsq-i9>5?M49>F}~SGwm3kd;0nCzhQ&4 zNyBvK(Kp@$XYD`Me8_^x!zG9i@y?fJmZo{>-;>jIF*9R_PtBuzOuf;Ybb98>!5Od- z;Zi)-I$7hhSjUVSjLa}ctROrulPPQL|Bg9_v%qO#AQS*o!D@~~PIG^@`4I~QtHIRB zH4jmr{)YxLR8ICp*a**@?_=-&>TK**KaOd(p&C~*Io=mdGj38Glg2Yf#3LXP;8F;H z>3M+Z+3UXjqXu(xm8&g&OYGVFj@bHeY<6OQ#|Z!@Km(9U*&Rp<0EreS>PNFSH0qC) zsg#Ts**Fwo@p~jN06^ogIcyn!qE2Ghr?Ck6=X`u=;E_DTnh#mN^mnJ6hv(Wl>2z#u z8{KaJ#L*4!f|CZvnNJOt;f!P^43Wm=a-?)fve%~)8#ERQX`M3yNv}GJmG90<>1bs_ zXm%ux`Ah?l#>ZefIHi+Z1Dr0M$$!SAnwsnL=m)KXF)-`^a`T`BJXY#iS9C<<%Fg*oduG{Ludt>ETGVT z5@6V~MEi!S{})g>_zJT(fX={vs|6ce^AXWLH@4CdD%3@vkOLYALL)%pcH!$WI1{Pf zbKk{-P%zMj*-3-}8)Mpd)68~q+(z@Xh{vxDD->qR%J~lm3mGRF^ZXkClDd*wlog6@ z8y~?Zp79%S9n68cjQOLAZhAjFq`%*M!kQG$fN7=@F2$h;XZP9+4S6U}ZYRwM5}4*; zdTi@y(~LVSA!AYrGXzM?D6Id2L?;OpT|tBLC`sce!-BxD=q(=D15I$6g=Ts$l!vD4 zt{!1dbDFLj6HfTN|BFW;r%6WX&rR3ed!X7lkqawR!Im*;b(@w9;50x)y@6IR;bBs; zZ^Sn#=$K3zn&wl3Q0UzD&m@UggT#buO!vf2ByxYr0fIk6g#n{TgE9UjZtfmLTBw9I z3fsJwNA)Z$jZS(p+;G!}@!#3e z`N94W9tOR1AT&5a_=(I(#$izj`J=;}0ZE+xOIk<)js0#60|^W}w@wU1DV^r_Ct!mx zm8kr{KGTO|Em@*?MvMcsYY~^X2b5=c(5$~dOJg7K!!b}yki{eU32-W=%gIjA<;Qe z1dp&&fCrCoJZ)?P1NA~IV(#JnwK1D92YR`OLHlqk&y8X#&Gj{-069;$Ezd?98s&8k zHbzfJjh~AqGL>4aR)z>L{6pn^u6&t(l7IrX#7E_ErjKcwM59Y$@{^2JUo^q#8(Ea)%HiIOB;Q*o)SMkCf{8FJt2z+=z8+Wbf){YDL9%##Zn{JH36 z$+PTWHfmCtg!18SLY7o=+9nLp*qH}$tWnzqJ9d3cnKXqpqH#eH>i*F9e)j%U;1HDi z9*VC4SyE=YC-4}<-DZSOJmsnIWtcPFuK~o72a!I!b+Fg`bTRF02`(L>5)J}XKvXad za?SUGHF#i~pCrUhBop^vFHF7UdmjbqP7X5J*|kq>5X(DEu!;NkIM4vnvU>GzAwV;h z7xIH=E~I=!Gz)UG)sf%?FVk14pj2+BEsiIm4U|0mnd8HteJq2zj-{0eGfk5fW2$z+ z3$H2}Qd5x6r=>gX8O#O8DqIemK=*q9afF|M{>?|=%}aaDg}p(Gbm$|qd(`73 z%-ZCc0H1l3lt(N+}1=HHRvIh90O*tnSTZijSLEuPweJu(`zZwWwI z4-z0VfYVs8$-#quF$zp2jPV7h{2E*en?wr$VRX|K@W)Gg%!}g|8j?hVW*HfamrQ$w zb|9hn6e0RR7>MvrLX%VY>4=d@v-^gm0wTUff&o!EG5nHWht8wcfKW?rra`_zO2A{S zo^9nwJ{PnyG$ z_eGibLphEjurOXxZT*igKkX@SiCO1HiCt(5H;dT$boCG5rK^YWKU$~i_sei-kSAjB zxeg$i1q)B4s?fN}xFTR6a}e8i$!E*9hju2mUcdhJTZ8wjDY4%C*01An9|SRZx&6Fh z{t4Q0KK}7Mmcmx*!*E#EFl@uJ6t*47Oov8ZPnZJYrW1ijSYhsfW94wAeK^en%DPzr zfJ@)sHU(Zd*#}Q^;Nb#(^x1Ip@jnDl>i6(cHyG(X{>g6r4xe?^MkdG9i0Ok~MSe{R zF*4Kab{a8RqE54gsm3OvHiH@34cjtp3FD8o`24!eq=!oWMtP>a7w%EXG6pC>+nD+b z`lq3izibQ4<(o#Ui^1B5w^Ia<5x(rS5?;QU;E|MPK{Z|fL3rYD*}QGA45wsgXldFA zKwd=Q?{tw41BXg96`maLw0scA0f8{pnI6++T9Dxnrf3(Ew$d@4%b&p5P0#hStqxaa zt1?W#<&zoc!j84KA1L63C;ukgkxTp9H^6!2#Js^~aUB0XXSQKWw9=>O2-ZR((|Duo^`(;H$&_^l1C!$VFjJAbw zB-10g=!?(W;K;L$iX@348D?ecS4m@{9wKd=1(Kw^?)_eofWrajk8S85w}0RjG?<$X;S;tvze zdONv_1hkI*wvmQNij#plU8BF+5E|8?s(?o$KPCvuu^fRU_($DB!SM+Hr7a2x;6-~Cz4FPrP11)>3n8UE)LgnGmn$|Yy{K(Zlk;?Ue&nlw9cA~ zBLRZKG6ho^x0aR&<|G+6jW@s+P{>pgwgkw0lH@QC9>HvN503HWr=Ac0W3$axoE8Am zfxhzrce(bDJqT%W0bKks3T4 zm?Y+^>UvZde2djmUh$~khU;Mibj|;TUlxcWSqn)4EZXjKe&1sr8Vlw=D3UFkb zUK46eK3c0bqdd$?&&o6PTlg~y&m|Tj=WxViej~LAd0LPL9{$!qbJ1Te5$#c%_JMjl z3QYV{rSIeSlp}oJ=@-D;wh}xXEdZn=-Esvy%GTDK`g_ce_t@rtku>e0P1^wFU7Qjp zq^o5$Z^|)*Tp71Z^Ps`x&o3Xx5U@TiM3a=w6sDgf1P!e=CoCHoAM@$tvgr~AnKI<~dkzOX zH)4x+qUIMOpnL&44B5;8!tB5j?}7jjWcL9?ys35sH<<}uc*?KC-@-P~0zhV<+pS5< znk`<`ADaJawUH%lTMkcI@n=TLjI!tx;Zh7^;L>cNH8M(&1CbY`dCp929BQM)1`}b`+jpLr@=Vb0z7Hr5(l_jdTDqHq3NZvbZ(#T0Es0TFE- zM632W>*zHz1?!P;wgl$g^fQqdgQ_N^MEBP@)kX_uf?dM&p?xC_yuEayZTO(zw zJOE-&)JcnBs(Z4VZkVE5mbLU>@ov1;kzAN(sA!XFHl z&A;g{1^f3jZ3JK@pMko@D6J=fj4 z^lVj+O%MOZ4zfRe#CNQ7{F2S_ajciFdn+7czx~-}0Kad6tcq&PcVcW5pP}+{XQrNB$OkW+$lh zZS<|n;6amRc(HY~ztH+emU#b2oa~GdCE!BT1{hODblXaHh5tABd=fd=KXbHR?StY1 zOhExi7c`1&ayZ75;2?^i~U4u6Sh7y*a7w*pdWwT_Qjt^4=Rcq)7ib|5VP zWE1FH?}0~HP2@lImdyEsCD>Q6b0HE2!AS{gogLMMI)F`s@e4_JD+#$o7Bmj$BzIe{ zuLa<63k9vv{yi(Iz1|M2cRlLa@J~A(I3#`jFX2q=!E=g%d3N79+Ix`qj{r1<5Y|Qs zaYhOqKt=(OoPsd5FXezi(JUHCDRGi?u;rOdqXTh`LoE-BC_#p&p_a3Gn?}xn2M3Oz zZ6AUW{+Cm4gTFB^++Ig{8!Z526Y1OUgGcuJaEaAO&hHPc)q>l=870iRO)bxmDpk&b zr6!WtH0H5^{N$?Inq`G@>Mt0 z9sj9s;Ej_Wyzfy@hg;x&Ncb*T`synD>%jn?XC3Z8Qw(6aU_b(jRzml&IZOsfU^;(J z(n(*9@5?at1<6=*qI_GS+5k$VGtGhCnP?no@AJNl?e8~MmUG}3!(klZ2Ub_$j~@OE zxOTSz2hjpRwvnvFIXLDx__@79_#Lxke%{)_hyK8*aMGWnMCzP@TGx(r98nuFm8t6b zgicDUvnr069kS&3D3CrVl@7&0FX72j(Y>CFu9U ziGd)Pg+`stSzV~BHUo|Ch`&AwI^d?PH#>BihCkS840m9O?<@^`d|1NYp7kua9Tt?O zTi*iv?lSPpy(RdyLC>6P&0GiN>@Cv_GbJo8hGX5Pqe<4CnRw z<|hV27#6f02A{>nB*N`zNom*hmjX0sqeJ&M8Q~4~*@x{wa?@`=d4KS0YzAHXb~tee z@MJ4sJgexL$5|6sQ81^wGj*X5IHd5Q`rI@IuSFxFLd4f(ls3y&HWH&Y%a#OyMmYhR zvl|WQ=a(x8f?7HNdC&;Yn6^E(ef|UX_w{Fd4L-KrJ0olcEdXSP({*o!ldWd*L<=HM zE(&w5l|X+e`b?DFUK^$h9@c?5P&~|pC(oHpH*Rhi7X5kO#+p^u$M~7?#5%zdt~mP` z`22S4OLa8UwXcOUmiEKbt-s{Sre_{)1&u;(;KX z=CHl~js=TrZTKMz6QAAJgHNA6<4J!DS|7Q6x4!Zwc+Bz;o@51%b8XxIgw~IxO}W3PX9^l5L7Hk{#JvpbV2?`HJ85YNplARFLaRwuhV${zCOp|bKZXfj zW3}#2udTxSul*o=`hp#{<;Z5y0zh^#dEd#q;TRmjnbw!^7z-ZfSPkWo79bvK!R5qW z&+N0mh1?0&w1|QdG`uQKCaJLvD)EQ~j63c9_4e5z`}-9e?V8aMICRc;;k!F+AFBH+ zUH4~j%;Y%uX{(X^sx@^z(e{PYop#db3y_+-G!QU3u#g-YrendZ)Ww7)u_@6!SQ$~q zRRE)r2@faXsnWJr$_akij)5yyENFaX4_tG>{ZPAJ0LW2DcnS2sa~2%9dks!p>cNA{ z9-L$w`ow+@j<>%Luu+b+OkuAbAVWJImYmrfE2rMb4uLg$ai6`u*A9}qZRqXx{#(NLLZO1RcU8nsPtR5|nz@wckm<%Te;n5aIo&F13x;-*0D&!$NV}Mpp5_2oO;!vz;_e8g{Wrlo?U?wS6{J2g8pBnO zdi9vaH?qmAPZX1 zg5aOu498Cj`0?dFJi!9UkAX9X_WaiKCh@5m$j|QLW-oC+E6utFDZ4SE;=7>ue8=aB z^J5?$vYN){?Dc0RYw+=FFNbg3Uwj$sr3HX2Xh92VkTruAUppOs7z=OudaU)OonwLJ zOv~BNvRX>IgD_;kCC6R3#?eA57-X~*&41CDDOH)Ha5BMr?fuv6{WaqfzFdyr3;hDV zc-BR`e}m4grUig3Xh93=O!!(De0vE_I%2`3KY%l=KjkFr*Eqp)k`pa6IoX2D57}r3 z?ft%@F#aF|ZK`?VtViXVlMLsRJs>`_z~Hn6JYr2!_gJ8~%?96Se{Z+XZ<~zZmIC3r zl?i-hWd&|I8aL(K4q5=nf)=!(xsjW|ap#$^_q!`_oCTNT#s!?P)Q1x+$UML@@`Koe zgO-uI9f$W>2EWg~GPGQ1*)pQOW%hj=)(cqU7Trzk{m5RsZOvC~z={Qj`)s^>ZTQ{R zRdcrmhP&+hw~yT!F(bI+m;&xR>4ESA_yt&7_$oG^767uK1ubaD5E4(SobL+&SkQtN zw4enoXh92F(1I4Upam^xK?_>Yf)=!(1ubYn3tG^Y)BguSDdw%!-=K^D0000P)@~0drDELIAGL9O(c600d`2O+f$vv5yPdxAA5h;xECC)nf!I5$X6fJ}HNdjiA>*3VQ~v)wae zFhTNs^~jdduS$s{k7ViZ?wOwMQ2+)81_lNO1_lOxMFi{^`RrK^j~*2u#Gkn3xQn(U z^LvvDx25_m<-fSy!)SCb%CdqTvJ(O2ix&lC*=rQ+4g4&WFBNVjtX9|JCpQ30}&=!`03P0llEwk*(GLs9~k#G-LqKnVb%CAxjnN&de>Ji=@nvmlZl&AnU*(#1;OW`FzvcFe$Scp7#{u@v=f63oL*~JaX45mw4)wcrKjZ zPU+kbkCzp?3n=9|#G=KUK_b+-X&{O|k-H^3xv;8Xj7IMv26S7pylqXCE3Q@(%p@O! zo*w4rtqOE<^xBrLH(kwVh(+fQOIx$wz=hH1Z-}G9ZPxbYx3s^MQxvbMo5o)dz-v%e2)IYYxM8Ict>_h7M7&s8(wM#RrfaW4| z2!~v5-g@rvxKbUfx|j9&c<1N2eE$3oTO+#*uU2Dp9SBB;EX~9RdY~SPnd-nU_1d7Xt{2b`toNSQ0^1__(P$1aUrbj> z`Nh`6E}+9nS`nf#-czG9N8&R*)~?1bV3x)7S4TLI6fNhatVsntEFpzOJKVdA3zrZ> zODRBEA!dCcPQ-O(k7~$NJ3a$mtOB~F^f7q}adYC<^ms&0uyNTgWvg+2eEo(pNsGl3 zTO+qPP|90~LCSY+F(C<{F4VoEwp4A~*0N;T9C#>Q8o3FWWj7E38bjRVFb`t!)`qU0>F`u0^b4-3+It{ldy!Uj@9-*o8r!T zTIo%YfU1w+S&O$H=(Rf)1Q49k#}B;hNlI!vTD;)(G(mmfCfLExdsOHB5goEjAcANC ziQ!?xNYsTmPQLd7vOEUy2)44Oa)mw&EPAQ&1ejp03!9V_Wrg=K#Gz2-%(hP37nVNo zA&H)7ilH>Kj0%`ZBH$YJT%E3oqE)FN%K!iX07*qoM6N<$g3&DPRR910 literal 0 HcmV?d00001 diff --git a/assets/icons/mypage/cash_warn.png b/assets/icons/mypage/cash_warn.png new file mode 100644 index 0000000000000000000000000000000000000000..350f36845391db5743b24f317412d8403c757976 GIT binary patch literal 1135 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 - + + + - + + @@ -14,13 +16,14 @@ - + - + + diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index ca384bf..123a52a 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -2,23 +2,12 @@ - CFBundleURLTypes - - - CFBundleTypeRole - Editor - CFBundleURLSchemes - - - - com.googleusercontent.apps.368970870839-kmqjuejcrgmmhfmp5gk2juesu7714j4b - - - + CADisableMinimumFrameDurationOnPhone + CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleDisplayName - Catch2 0 1 + com.catchroad.catch2_1 CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -33,10 +22,23 @@ $(FLUTTER_BUILD_NAME) CFBundleSignature ???? + CFBundleURLTypes + + + CFBundleTypeRole + Editor + CFBundleURLSchemes + + com.googleusercontent.apps.368970870839-kmqjuejcrgmmhfmp5gk2juesu7714j4b + + + CFBundleVersion $(FLUTTER_BUILD_NUMBER) LSRequiresIPhoneOS + UIApplicationSupportsIndirectInputEvents + UILaunchStoryboardName LaunchScreen UIMainStoryboardFile @@ -56,9 +58,5 @@ UIViewControllerBasedStatusBarAppearance - CADisableMinimumFrameDurationOnPhone - - UIApplicationSupportsIndirectInputEvents - diff --git a/lib/Auth/auth_service.dart b/lib/Auth/auth_service.dart index 344da08..c831e7c 100644 --- a/lib/Auth/auth_service.dart +++ b/lib/Auth/auth_service.dart @@ -1,4 +1,9 @@ + + import 'package:catch2_0_1/Auth/user_information.dart'; +import 'package:catch2_0_1/join/joinPage.dart'; +import 'package:catch2_0_1/join/joinStep2.dart'; +import 'package:catch2_0_1/join/joinStep4.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/cupertino.dart'; @@ -9,6 +14,8 @@ import 'package:google_sign_in/google_sign_in.dart'; import 'package:firebase_storage/firebase_storage.dart'; import '../LoginPage.dart'; +import '../join/joinStep3.dart'; +import '../join/joinStep6.dart'; import '../screen/mainHome.dart'; class AuthService { @@ -206,56 +213,84 @@ contentsUpdate(user, _photo, TitleController, contentsController, } } +LikeFunction(like, id, user) async { + // 좋아요 기능 + List _likes = like; + _likes.add(user); + var doc = FirebaseFirestore.instance.collection('Contents').doc(id); + doc.update({ + '_like': _likes, + }).whenComplete(() => print('좋아요 업데이트 성공')); +} - LikeFunction(like,id,user) async { // 좋아요 기능 - List _likes = like; - _likes.add(user); - var doc = FirebaseFirestore.instance.collection('Contents').doc(id); - doc.update({ - '_like' : _likes, - }).whenComplete(() => print('좋아요 업데이트 성공')); - } - +LikeCancelFunction(like, id, user) async { + // 좋아요 기능 + List _likes = like; + _likes.remove(user); + var doc = FirebaseFirestore.instance.collection('Contents').doc(id); + doc.update({ + '_like': _likes, + }).whenComplete(() => print('좋아요 업데이트 성공')); +} +Future signUpWithEmailAndPassword() async { + // 이메일 로그인 생성 + try { + UserCredential userCredential = await FirebaseAuth.instance + .createUserWithEmailAndPassword( + email: emailCode().email, password: passwordCode().password); - LikeCancelFunction(like,id,user) async { // 좋아요 기능 - List _likes = like; - _likes.remove(user); - var doc = FirebaseFirestore.instance.collection('Contents').doc(id); - doc.update({ - '_like' : _likes, - }).whenComplete(() => print('좋아요 업데이트 성공')); + FirebaseFirestore.instance + .collection('user') + .doc() + .set({ + 'name': informationCode().name, + 'password' : passwordCode().password, + 'email': emailCode().email, + 'birth': informationCode().year + '/' + informationCode().month + '/' + informationCode().day, + 'NickName': nicknameCode().nickname, + 'Bank': bankInformationCode().bankName, + 'Bank - Num': bankInformationCode().bankNum, + '수취인': bankInformationCode().nameForBank + }) + .then((value) => print('User Added')) + .catchError((error) => print('Failed to add user: $error')); + } on FirebaseAuthException catch (e) { + if (e.code == 'weak-password') { + print('The password provided is too weak.'); + } else if (e.code == 'email-already-in-use') { + print('The account already exists for that email.'); } + } catch (e) { + print(e); + } +} - -Future signUpWithEmailAndPassword() async { // 이메일 로그인 +Future loginWithIdandPassword(email,password) async { try { + print('로그인정보'); + print('이메일: ${email.text} / ${password.text}'); + // sign in with email and password using signInWithEmailAndPassword() UserCredential userCredential = await FirebaseAuth.instance - .createUserWithEmailAndPassword( - email: code().email, password: code().password); - - FirebaseFirestore.instance - .collection('user') - .doc() - .set({ - 'name': code().displayName, - 'email': code().email, - 'birth': code().year + '/' + code().month + '/' + code().day, - 'NickName': code().nickname, - 'Bank' : code().bank, - 'Bank - Num' : code().bankNum, - '수취인' : code().bankName - }) - .then((value) => print('User Added')) - .catchError((error) => print('Failed to add user: $error')); + .signInWithEmailAndPassword( + email: email.text, password: password.text); + + print('로그인'); + print(userCredential); + + // navigate to Homepage } on FirebaseAuthException catch (e) { - if (e.code == 'weak-password') { - print('The password provided is too weak.'); - } else if (e.code == 'email-already-in-use') { - print('The account already exists for that email.'); + if (e.code == 'user-not-found') { + + print('No user found for that email.'); + } else if (e.code == 'wrong-password') { + + print('Wrong password provided for that user.'); } - } catch (e) { - print(e); } - } + + + + + } \ No newline at end of file diff --git a/lib/LoginPage.dart b/lib/LoginPage.dart index 1c46f78..a425922 100644 --- a/lib/LoginPage.dart +++ b/lib/LoginPage.dart @@ -1,8 +1,10 @@ -import 'package:catch2_0_1/join/joinPage.dart'; import 'package:flutter/material.dart'; import 'Auth/auth_service.dart'; +import 'join/joinPage.dart'; +import 'join/joinStep6.dart'; import 'screen/Camera/camera_load.dart'; import 'screen/mainHome.dart'; +import 'utils/app_text_styles.dart'; class LoginPage extends StatefulWidget { const LoginPage({Key? key}) : super(key: key); @@ -11,6 +13,10 @@ class LoginPage extends StatefulWidget { _LoginPageState createState() => _LoginPageState(); } +bool maintain = false; + final _email = TextEditingController(); + final _password= TextEditingController(); + class _LoginPageState extends State { @override Widget build(BuildContext context) { @@ -24,7 +30,7 @@ class _LoginPageState extends State { children: [ Padding( padding: EdgeInsets.only(top: size.height * 0.25), - child: Image.asset('assets/logo.png', width: 170), + child: Image.asset('assets/logo.png', width: 144), ), // 아이디 또는 이메일 textfield Padding( @@ -34,35 +40,34 @@ class _LoginPageState extends State { right: size.width * 0.04), child: SizedBox( child: TextField( + controller: _email, style: TextStyle(fontSize: 13), decoration: InputDecoration( focusColor: Color.fromARGB(6, 61, 50, 50), contentPadding: EdgeInsets.only( top: size.height * 0.01, left: size.width * 0.04), hintText: '아이디 또는 이메일', - hintStyle: TextStyle( - fontWeight: FontWeight.w700, - color: Color.fromRGBO(0, 0, 0, 0.4)), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), focusedBorder: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), borderSide: BorderSide( width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.4)), + color: Color.fromRGBO(0, 0, 0, 0.2)), ), enabledBorder: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), borderSide: BorderSide( width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.4)), + color: Color.fromRGBO(0, 0, 0, 0.2)), ), border: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), ), filled: true, - fillColor: Color.fromRGBO(0, 0, 0, 0.03)), + fillColor: Colors.white), keyboardType: TextInputType.emailAddress, ), )), @@ -72,36 +77,36 @@ class _LoginPageState extends State { top: size.height * 0.015, left: size.width * 0.04, right: size.width * 0.04), - child: const SizedBox( + child: SizedBox( child: TextField( + controller: _password, style: TextStyle(fontSize: 13), decoration: InputDecoration( focusColor: Color.fromRGBO(0, 0, 0, 0.03), contentPadding: EdgeInsets.only(top: 7, left: 15), hintText: '비밀번호', - hintStyle: TextStyle( - fontWeight: FontWeight.w700, - color: Color.fromRGBO(0, 0, 0, 0.4)), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + // hintStyle: bodyLargeStyle(color: Color(0xff9FA5B2)), focusedBorder: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), borderSide: BorderSide( width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.4)), + color: Color.fromRGBO(0, 0, 0, 0.2)), ), enabledBorder: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), borderSide: BorderSide( width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.4)), + color: Color.fromRGBO(0, 0, 0, 0.2)), ), border: OutlineInputBorder( borderRadius: - BorderRadius.all(Radius.circular(15.0)), + BorderRadius.all(Radius.circular(36.0)), ), filled: true, - fillColor: Color.fromRGBO(0, 0, 0, 0.03)), + fillColor: Colors.white), keyboardType: TextInputType.emailAddress, ), )), @@ -133,16 +138,24 @@ class _LoginPageState extends State { children: [ Padding( padding: EdgeInsets.only( - top: size.height * 0.0, left: size.width * 0.06 + top: size.height * 0.0, left: size.width * 0.02 // right: size.width * 0.8, ), - child: Image.asset('assets/passCheck.png', height: 23), + child: IconButton( + onPressed: () { + setState(() { + maintain = !maintain; + }); + }, + icon: maintain + ? Image.asset('assets/checkbox_on.png', height: 23) + : Image.asset('assets/checkbox_un.png', + height: 23)), ), ////text style 적용하기 Padding( - padding: EdgeInsets.only( - top: size.height * 0.0, left: size.width * 0.02), - child: Text("비밀번호 저장", + padding: EdgeInsets.only(top: size.height * 0.0), + child: Text("로그인 유지", style: TextStyle( fontSize: 12, color: Color.fromRGBO(0, 0, 0, 0.4), @@ -174,32 +187,16 @@ class _LoginPageState extends State { padding: EdgeInsets.only(top: size.height * 0.03), child: SizedBox( width: size.width * 0.92, - height: size.height * 0.05, + height: size.height * 0.06, child: OutlinedButton( style: OutlinedButton.styleFrom( shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(13.0), + borderRadius: BorderRadius.circular(20.0), ), - backgroundColor: Color(0xff2C63BB)), - onPressed: () - //MainHomePage - { - - signInWithGoogle(); - - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return MainHomePage(); - })); + backgroundColor: Color.fromRGBO(58, 148, 238, 1)), + onPressed: () async { + loginWithIdandPassword(_email,_password); - // Navigator.push( - // context, - // PageRouteBuilder( - // pageBuilder: (_, __, ___) => MainHomePage(), - // transitionDuration: Duration(seconds: 0), - // transitionsBuilder: (_, a, __, c) => - // FadeTransition(opacity: a, child: c)), - // ); }, child: Text( "로그인", @@ -209,17 +206,43 @@ class _LoginPageState extends State { ), ), Padding( - padding: EdgeInsets.only(top: size.height * 0.05), - child: Image.asset( - 'assets/divider.png', - width: size.width * 0.9, + padding: EdgeInsets.only( + top: size.height * 0.05, + ), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + ElevatedButton( + style: ElevatedButton.styleFrom( + primary: Colors.white, elevation: 0), + onPressed: () async{ + signInWithGoogle(); + await Future.delayed(Duration(seconds: 10)); + userstart(); + }, + child: Image.asset( + 'assets/icons/google.png', + width: 50, + )), + SizedBox( + width: size.width * 0.04, + ), + Image.asset( + 'assets/icons/apple.png', + width: 50, + ), + ], ), ), Padding( padding: EdgeInsets.only(top: size.height * 0.04), child: Text( "계정이 없으신가요?", - style: TextStyle(fontSize: 12), + style: TextStyle( + fontSize: 14, + color: Color.fromRGBO(0, 0, 0, 0.4), + fontWeight: FontWeight.bold), ), ), Padding( @@ -231,16 +254,17 @@ class _LoginPageState extends State { tapTargetSize: MaterialTapTargetSize.shrinkWrap, ), onPressed: () { + // joinPage Navigator.push(context, MaterialPageRoute(builder: (context) { - return joinPage(); - })); + return joinPage(); + })); }, child: Text("회원가입", style: TextStyle( - fontSize: 12, + fontSize: 14, color: Color(0xff2C63BB), - fontWeight: FontWeight.w700))), + fontWeight: FontWeight.w500))), ) ], ), @@ -352,7 +376,9 @@ class _forgotLoginState extends State { Padding( padding: EdgeInsets.only(top: size.height * 0.01), child: TextButton( - onPressed: () {}, + onPressed: () { + signInWithGoogle(); + }, child: Text("비밀번호를 잊으셨나요?", style: TextStyle( fontSize: 12, diff --git a/lib/join/joinPage.dart b/lib/join/joinPage.dart index 4b0f36f..f73ee01 100644 --- a/lib/join/joinPage.dart +++ b/lib/join/joinPage.dart @@ -3,6 +3,13 @@ import '../Auth/user_information.dart'; import '../utils/app_text_styles.dart'; import 'joinStep2.dart'; + +String _email = ''; +class emailCode extends ChangeNotifier { + String email = _email; + notifyListeners(); +} + class joinPage extends StatefulWidget { const joinPage({super.key}); @@ -10,11 +17,12 @@ class joinPage extends StatefulWidget { State createState() => _joinPageState(); } + class _joinPageState extends State { + final Emailcontroller = TextEditingController(); + final _formKey = GlobalKey(); @override Widget build(BuildContext context) { - final Emailcontroller = TextEditingController(); -final _formKey = GlobalKey(); final Size size = MediaQuery.of(context).size; return Scaffold( appBar: AppBar( @@ -36,104 +44,115 @@ final _formKey = GlobalKey(); ), elevation: 0, ), - body: Column( - children: [ - Row( - children: [ - Image.asset('assets/step1.png', width: size.width * 0.87), - SizedBox(width: 12), - Text("1/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) - ], - ), - SizedBox(height: size.height * 0.07), - Text("이메일", style: titleLargeStyle(color: Color(0xff3174CD))), - SizedBox(height: size.height * 0.02), - Text("계정에 사용하실 이메일을 입력해주세요.\n이메일은 마에페이지에서 수정 가능합니다.", - textAlign: TextAlign.center, - style: labelMediumStyle(color: Color(0xff9FA5B2))), - Padding( - padding: EdgeInsets.only( - top: size.height * 0.07, - left: size.width * 0.06, - right: size.width * 0.06), - child: SizedBox( + body: SingleChildScrollView( + child: Column( + children: [ + Row( + children: [ + Image.asset('assets/step1.png', width: size.width * 0.87), + SizedBox(width: 12), + Text("1/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) + ], + ), + SizedBox(height: size.height * 0.07), + Text("이메일", style: titleLargeStyle(color: Color(0xff3174CD))), + SizedBox(height: size.height * 0.02), + Text("계정에 사용하실 이메일을 입력해주세요.\n이메일은 마에페이지에서 수정 가능합니다.", + textAlign: TextAlign.center, + style: labelMediumStyle(color: Color(0xff9FA5B2))), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.07, + left: size.width * 0.06, + right: size.width * 0.06), + child: SizedBox( + height: size.height * 0.08, + child: _Form() + )), + SizedBox(height: size.height * 0.1), + SizedBox( + width: size.width * 0.85, height: size.height * 0.08, - child: Form( - key: _formKey, - child: TextFormField( - validator: (val) { - if(val?.length == 0) { - return '이메일은 필수사항입니다.'; - } - if(!RegExp( - r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$') - .hasMatch(val!)){ - return '잘못된 이메일 형식입니다.'; - } + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3174CD), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () async { + _email = Emailcontroller.text; + if (_formKey.currentState!.validate()) { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => joinStep2(), + transitionDuration: Duration(seconds: 0), + transitionsBuilder: (_, a, __, c) => + FadeTransition(opacity: a, child: c)), + ); + print('입력한 이메일 주소는 : ${Emailcontroller.text}'); + print('이동된 주소 : ${emailCode().email}'); + } + }, + child: Text( + "이메일 입력하기", + style: titleMediumStyle(color: Color(0xffFAFBFB)), + ))) + ], + ), + ), + ); + } + + Widget _Form() { + return Form( + key: _formKey, + child: TextFormField( + validator: (val) { + if (val?.length == 0) { + return '이메일은 필수사항입니다.'; + } + if (!RegExp( + r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$') + .hasMatch(val!)) { + return '잘못된 이메일 형식입니다.'; + } + else { + print('통과'); + } + }, + controller: Emailcontroller, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + top: 40, left: 40), + hintText: '이메일을 입력해주세요', + // errorText: '이메일 형식으로 작성해주세요', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + // filled: true, - return null; - }, - controller: Emailcontroller, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '이메일을 입력해주세요', - // errorText: '이메일 형식으로 작성해주세요', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.emailAddress, - ), - ), - )), - SizedBox(height: size.height * 0.1), - SizedBox( - width: size.width * 0.85, - height: size.height * 0.08, - child: OutlinedButton( - style: OutlinedButton.styleFrom( - backgroundColor: Color(0xff3174CD), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(30)))), - onPressed: () async { - if (_formKey.currentState!.validate()) { - Navigator.push( - context, - PageRouteBuilder( - pageBuilder: (_, __, ___) => joinStep2(), - transitionDuration: Duration(seconds: 0), - transitionsBuilder: (_, a, __, c) => - FadeTransition(opacity: a, child: c)), - ); - code().email = Emailcontroller.text; - } - }, - child: Text( - "이메일 입력하기", - style: titleMediumStyle(color: Color(0xffFAFBFB)), - ))) - ], + fillColor: Colors.white), + autofocus: true, ), ); } diff --git a/lib/join/joinPage7.dart b/lib/join/joinPage7.dart new file mode 100644 index 0000000..ec9fae9 --- /dev/null +++ b/lib/join/joinPage7.dart @@ -0,0 +1,93 @@ +import 'package:catch2_0_1/Auth/auth_service.dart'; +import 'package:catch2_0_1/LoginPage.dart'; +import 'package:catch2_0_1/utils/app_colors.dart'; +import 'package:flutter/material.dart'; +import '../Auth/user_information.dart'; +import '../utils/app_text_styles.dart'; +import 'joinPage.dart'; +import 'joinStep2.dart'; + + +class joinPage7 extends StatefulWidget { + const joinPage7({super.key}); + + @override + State createState() => _joinPage7State(); +} + + +class _joinPage7State extends State { + final Emailcontroller = TextEditingController(); + final _formKey = GlobalKey(); + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + leading: IconButton( + onPressed: () { + Navigator.pop(context); + }, + icon: Icon( + Icons.arrow_back_ios_new, + size: 24, + color: Color(0xffCFD2D9), + )), + centerTitle: true, + title: Text( + "회원가입", + style: TextStyle( + color: Colors.black, fontWeight: FontWeight.w700, fontSize: 16), + ), + elevation: 0, + ), + body: SingleChildScrollView( + child: Column( + children: [ + Padding( + padding: EdgeInsets.only( + top: size.height * 0.19, + left: size.width * 0.06, + right: size.width * 0.06), + child: SizedBox( + // height: size.height * 0.08, + child: Center( + child:Image.asset('assets/icons/car.png', height: 110,width: 310,) + ) + )), + SizedBox(height: size.height * 0.1), + Text("${emailCode().email}님,", style: titleLargeStyle(color: Colors.black)), + Text("Catch에 오신 걸 환영합니다.", style: titleLargeStyle(color: Colors.black)), + SizedBox(height: size.height * 0.2), + SizedBox( + width: size.width * 0.85, + height: size.height * 0.08, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3174CD), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () async { + signUpWithEmailAndPassword(); + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => LoginPage(), + transitionDuration: Duration(seconds: 0), + transitionsBuilder: (_, a, __, c) => + FadeTransition(opacity: a, child: c)), + ); + }, + child: Text( + "다음", + style: titleMediumStyle(color: Color(0xffFAFBFB)), + ))) + ], + ), + ), + ); + } + +} diff --git a/lib/join/joinStep2.dart b/lib/join/joinStep2.dart index 6d4932b..df6470e 100644 --- a/lib/join/joinStep2.dart +++ b/lib/join/joinStep2.dart @@ -3,6 +3,12 @@ import '../Auth/user_information.dart'; import '../utils/app_text_styles.dart'; import 'joinStep3.dart'; +String _password = ''; +class passwordCode extends ChangeNotifier { + String password= _password; + notifyListeners(); +} + class joinStep2 extends StatefulWidget { const joinStep2({super.key}); @@ -11,12 +17,12 @@ class joinStep2 extends StatefulWidget { } bool isObscure = false; - + final passwordcontroller = TextEditingController(); + final _formKey = GlobalKey(); class _joinStep2State extends State { @override Widget build(BuildContext context) { - final passwordcontroller = TextEditingController(); -final _formKey = GlobalKey(); + final Size size = MediaQuery.of(context).size; return Scaffold( appBar: AppBar( @@ -38,118 +44,123 @@ final _formKey = GlobalKey(); ), elevation: 0, ), - body: Column( - children: [ - Row( - children: [ - Image.asset('assets/step2.png', width: size.width * 0.87), - SizedBox(width: 12), - Text("2/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) - ], - ), - SizedBox(height: size.height * 0.07), - Text("비밀번호", style: titleLargeStyle(color: Color(0xff3174CD))), - SizedBox(height: size.height * 0.02), - Text("계정에 사용하실 비밀번호를 입력해주세요.\n숫자를 포함한 6~12자리를 작성해주세요.", - textAlign: TextAlign.center, - style: labelMediumStyle(color: Color(0xff9FA5B2))), - Padding( - padding: EdgeInsets.only( - top: size.height * 0.07, - left: size.width * 0.06, - right: size.width * 0.06), - child: SizedBox( + body: SingleChildScrollView( + child: Column( + children: [ + Row( + children: [ + Image.asset('assets/step2.png', width: size.width * 0.87), + SizedBox(width: 12), + Text("2/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) + ], + ), + SizedBox(height: size.height * 0.07), + Text("비밀번호", style: titleLargeStyle(color: Color(0xff3174CD))), + SizedBox(height: size.height * 0.02), + Text("계정에 사용하실 비밀번호를 입력해주세요.\n숫자를 포함한 6~12자리를 작성해주세요.", + textAlign: TextAlign.center, + style: labelMediumStyle(color: Color(0xff9FA5B2))), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.07, + left: size.width * 0.06, + right: size.width * 0.06), + child: SizedBox( + height: size.height * 0.08, + child: _FormPassword() + )), + SizedBox(height: size.height * 0.1), + SizedBox( + width: size.width * 0.85, height: size.height * 0.08, - child: Form( - key: _formKey, - child: TextFormField( - validator: (val) { - if(val!.length == 0) { - return '비밀번호는 필수사항입니다.'; - } - if(val!.length < 8 || val!.length > 13){ - return '6~12자리를 입력해주세요!'; - } - return null; - }, - controller: passwordcontroller, - obscureText: isObscure ? true : false, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - suffixIcon: IconButton( - onPressed: () { - isObscure = !isObscure; - }, - icon: isObscure - ? Image.asset('assets/icons/password_eye.png') - : Image.asset( - 'assets/icons/password_openeye.png')), - suffixIconConstraints: - BoxConstraints(minHeight: 6, minWidth: 16), - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.emailAddress, - ), - ), - )), - SizedBox(height: size.height * 0.1), - SizedBox( - width: size.width * 0.85, - height: size.height * 0.08, - child: OutlinedButton( - style: OutlinedButton.styleFrom( - backgroundColor: Color(0xff3174CD), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(30)))), - onPressed: () { - if (_formKey.currentState!.validate()) { + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3174CD), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () { + if (_formKey.currentState!.validate()) { Navigator.push( - context, - PageRouteBuilder( - pageBuilder: (_, __, ___) => joinStep3(), - transitionDuration: Duration(seconds: 0), - transitionsBuilder: (_, a, __, c) => - FadeTransition(opacity: a, child: c)), - ); - code().password = passwordcontroller.text; - } - }, - child: Text( - "다음", - style: titleMediumStyle(color: Color(0xffFAFBFB)), - ))) - ], + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => joinStep3(), + transitionDuration: Duration(seconds: 0), + transitionsBuilder: (_, a, __, c) => + FadeTransition(opacity: a, child: c)), + ); + _password = passwordcontroller.text; + print('새로 지정된 비밀번호는 : ${passwordCode().password}'); + } + }, + child: Text( + "다음", + style: titleMediumStyle(color: Color(0xffFAFBFB)), + ))) + ], + ), ), ); } -} + + Widget _FormPassword() { + return Form( + key: _formKey, + child: TextFormField( + validator: (val) { + if (val!.length == 0) { + return '비밀번호는 필수사항입니다.'; + } + if (val.length < 8 || val.length > 13) { + return '8~12자리를 입력해주세요!'; + } + return null; + }, + controller: passwordcontroller, + obscureText: isObscure ? true : false, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + suffixIcon: IconButton( + onPressed: () { + isObscure = !isObscure; + }, + icon: isObscure + ? Image.asset('assets/icons/password_eye.png') + : Image.asset('assets/icons/password_openeye.png')), + suffixIconConstraints: BoxConstraints(minHeight: 6, minWidth: 16), + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( left: 30), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.emailAddress, + ), + ); + } + } diff --git a/lib/join/joinStep3.dart b/lib/join/joinStep3.dart index d990ae6..f043fea 100644 --- a/lib/join/joinStep3.dart +++ b/lib/join/joinStep3.dart @@ -3,6 +3,20 @@ import '../Auth/user_information.dart'; import '../utils/app_text_styles.dart'; import 'joinStep4.dart'; + +String _displayName = ''; +String _id = ''; +String _year = ''; +String _month = ''; +String _day = ''; + +class informationCode extends ChangeNotifier { + String name = _displayName; + String year = _year; + String month = _month; + String day = _day; + notifyListeners(); +} class joinStep3 extends StatefulWidget { const joinStep3({super.key}); @@ -11,20 +25,19 @@ class joinStep3 extends StatefulWidget { } bool isObscure = false; + final Namecontroller = TextEditingController(); + final Yearcontroller = TextEditingController(); + final Monthcontroller = TextEditingController(); + final Daycontroller = TextEditingController(); + final _formNameKey = GlobalKey(); + final _formyearKey = GlobalKey(); + final _formmonthKey = GlobalKey(); + final _formdatKey = GlobalKey(); + class _joinStep3State extends State { @override Widget build(BuildContext context) { - final Namecontroller = TextEditingController(); - final Yearcontroller = TextEditingController(); - final Monthcontroller = TextEditingController(); - final Daycontroller = TextEditingController(); -final _formNameKey = GlobalKey(); -final _formyearKey = GlobalKey(); -final _formmonthKey = GlobalKey(); -final _formdatKey = GlobalKey(); - - final Size size = MediaQuery.of(context).size; return Scaffold( @@ -48,367 +61,359 @@ final _formdatKey = GlobalKey(); ), elevation: 0, ), - body: Column( - children: [ - Row( - children: [ - Image.asset('assets/step3.png', width: size.width * 0.87), - SizedBox(width: 12), - Text("3/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) - ], - ), - SizedBox(height: size.height * 0.07), - Text("사용자 정보 입력", style: titleLargeStyle(color: Color(0xff3174CD))), - SizedBox(height: size.height * 0.02), - Padding( - padding: EdgeInsets.only( - top: size.height * 0.07, - left: size.width * 0.06, - right: size.width * 0.06), - child: Column( - children: [ - Row( - children: [ - Text("이름", - style: titleSmallStyle(color: Color(0xff9FA5B2))), - Spacer() - ], - ), - SizedBox( - height: size.height * 0.01, - ), - SizedBox( - height: size.height * 0.08, - child: Form( - key: _formNameKey, - child: TextFormField( - validator: (val) { - if(val?.length == 0) { - return '이름은 필수사항입니다.'; - } - return null; - }, - controller: Namecontroller, - obscureText: isObscure ? true : false, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.emailAddress, - ), + body: SingleChildScrollView( + child: Column( + children: [ + Row( + children: [ + Image.asset('assets/step3.png', width: size.width * 0.87), + SizedBox(width: 12), + Text("3/7", style: labelMediumStyle(color: Color(0xff9FA5B2))) + ], + ), + SizedBox(height: size.height * 0.07), + Text("사용자 정보 입력", style: titleLargeStyle(color: Color(0xff3174CD))), + SizedBox(height: size.height * 0.02), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.07, + left: size.width * 0.06, + right: size.width * 0.06), + child: Column( + children: [ + Row( + children: [ + Text("이름", + style: titleSmallStyle(color: Color(0xff9FA5B2))), + Spacer() + ], + ), + SizedBox( + height: size.height * 0.01, + ), + SizedBox( + height: size.height * 0.08, + child: _formName() ), - ), - SizedBox( - height: size.height * 0.015, - ), - Row( - children: [ - Text("생년월일", - style: titleSmallStyle(color: Color(0xff9FA5B2))), - Spacer() - ], - ), - SizedBox( - height: size.height * 0.01, - ), - Row( - children: [ - // 태어난 년도 - SizedBox( - width: size.width * 0.26, - child: Form( - key: _formyearKey, - child: TextFormField( - validator: (val) { - if (val?.length != 4) { - return '4자리를 입력해주세요.'; - } - return null; - }, - obscureText: isObscure ? true : false, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, - left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: - bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, + SizedBox( + height: size.height * 0.015, + ), + Row( + children: [ + Text("생년월일", + style: titleSmallStyle(color: Color(0xff9FA5B2))), + Spacer() + ], + ), + SizedBox( + height: size.height * 0.01, + ), + Row( + children: [ + // 태어난 년도 + SizedBox( + width: size.width * 0.26, + child: formYear() + ), + Padding( + padding: EdgeInsets.only( + left: size.width * 0.02, + right: size.width * 0.04, + bottom: size.height * 0.02), + child: Text( + "년", + style: bodyLargeStyle(color: Colors.black), ), ), - ), - Padding( - padding: EdgeInsets.only( - left: size.width * 0.02, - right: size.width * 0.04, - bottom: size.height * 0.02), - child: Text( - "년", - style: bodyLargeStyle(color: Colors.black), + // 태어난 월 + SizedBox( + width: size.width * 0.155, + child: formMonth() ), - ), - // 태어난 월 - SizedBox( - width: size.width * 0.155, - child: Form( - key : _formmonthKey, - child: TextFormField( - validator: (val) { - if (val?.length != 2) { - return '2자리를 입력해주세요..'; - } - return null; - }, - obscureText: isObscure ? true : false, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, - left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: - bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, + Padding( + padding: EdgeInsets.only( + left: size.width * 0.02, + right: size.width * 0.04, + bottom: size.height * 0.02), + child: Text( + "월", + style: bodyLargeStyle(color: Colors.black), ), ), - ), - Padding( - padding: EdgeInsets.only( - left: size.width * 0.02, - right: size.width * 0.04, - bottom: size.height * 0.02), - child: Text( - "월", - style: bodyLargeStyle(color: Colors.black), + //태어난 일 + SizedBox( + width: size.width * 0.155, + child: formDay() ), - ), - //태어난 일 - SizedBox( - width: size.width * 0.155, - child: Form( - key: _formdatKey, - child: TextFormField( - validator: (val) { - if (val?.length != 2) { - return '2자리를 입력해주세요..'; - } - return null; - }, - obscureText: isObscure ? true : false, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, - left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: - bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, + Padding( + padding: EdgeInsets.only( + left: size.width * 0.02, + right: size.width * 0.04, + bottom: size.height * 0.02), + child: Text( + "일", + style: bodyLargeStyle(color: Colors.black), ), ), - ), - Padding( - padding: EdgeInsets.only( - left: size.width * 0.02, - right: size.width * 0.04, - bottom: size.height * 0.02), - child: Text( - "일", - style: bodyLargeStyle(color: Colors.black), - ), - ), - ], - ), - ], - )), - SizedBox(height: size.height * 0.1), - SizedBox( - width: size.width * 0.85, - height: size.height * 0.08, - child: OutlinedButton( - style: OutlinedButton.styleFrom( - backgroundColor: Color(0xff3174CD), - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.all(Radius.circular(30)))), - onPressed: () { - // if (_formNameKey.currentState!.validate()) { - // if (_formyearKey.currentState!.validate()) { - // if (_formmonthKey.currentState!.validate()) { - // if (_formdatKey.currentState!.validate()) { - Navigator.push( - context, - PageRouteBuilder( - pageBuilder: (_, __, ___) => joinStep4(), - transitionDuration: Duration(seconds: 0), - transitionsBuilder: (_, a, __, c) => - FadeTransition(opacity: a, child: c)), - ); - code().displayName = Namecontroller.text; - code().year = Yearcontroller.text; - code().month = Monthcontroller.text; - code().day = Daycontroller.text; - // } - // } - // } - // } - }, - child: Text( - "다음", - style: titleMediumStyle(color: Color(0xffFAFBFB)), - ))) - ], + ], + ), + ], + )), + SizedBox(height: size.height * 0.1), + SizedBox( + width: size.width * 0.85, + height: size.height * 0.08, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3174CD), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () { + if (_formNameKey.currentState!.validate()) { + if (_formyearKey.currentState!.validate()) { + if (_formmonthKey.currentState!.validate()) { + if (_formdatKey.currentState!.validate()) { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => joinStep4(), + transitionDuration: Duration(seconds: 0), + transitionsBuilder: (_, a, __, c) => + FadeTransition(opacity: a, child: c)), + ); + _displayName = Namecontroller.text; + _year = Yearcontroller.text; + _month = Monthcontroller.text; + _day = Daycontroller.text; + print('이름은 : ${informationCode().name}'); + print('${informationCode().year}년생 ${informationCode().month}월 ${informationCode().day}일'); + } + } + } + } + }, + child: Text( + "다음", + style: titleMediumStyle(color: Color(0xffFAFBFB)), + ))) + ], + ), + ), + ); + } + + void nextEdit() { + do { + FocusScope.of(context).nextFocus(); + } while ( + FocusScope.of(context).focusedChild!.context!.widget is! EditableText); + } + + Widget _formName() { + return Form( + key: _formNameKey, + child: TextFormField( + onEditingComplete: () => nextEdit(), + validator: (val) { + if (val?.length == 0) { + return '이름은 필수사항입니다.'; + } + return null; + }, + controller: Namecontroller, + obscureText: isObscure ? true : false, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only(top: 20, left: 20), + hintText: '홍길동', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + ), + ); + } + + Widget formYear() { + return Form( + key: _formyearKey, + child: TextFormField( + controller: Yearcontroller, + onEditingComplete: () => nextEdit(), + validator: (val) { + if (val?.length != 4) { + return '4자리를 입력해주세요.'; + } + return null; + }, + // obscureText: isObscure ? true : false, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + top: 20, left: 40), + hintText: '2023', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, + ), + ); + } + + Widget formMonth() { + return Form( + key: _formmonthKey, + child: TextFormField( + controller: Monthcontroller, + onEditingComplete: () => nextEdit(), + validator: (val) { + if (val?.length != 2) { + return '2자리를 입력해주세요..'; + } + return null; + }, + obscureText: isObscure ? true : false, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + top: 20, left: 25), + hintText: '01', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, ), ); } + + Widget formDay() { + return Form( + key: _formdatKey, + child: TextFormField( + controller: Daycontroller, + onEditingComplete: () {}, + validator: (val) { + if (val?.length != 2) { + return '2자리를 입력해주세요.'; + } + return null; + }, + autofocus: true, + obscureText: isObscure ? true : false, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + top: 20, left: 25), + hintText: '01', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, + ), + ); + } } diff --git a/lib/join/joinStep4.dart b/lib/join/joinStep4.dart index 07c69ae..81375ca 100644 --- a/lib/join/joinStep4.dart +++ b/lib/join/joinStep4.dart @@ -1,8 +1,15 @@ import 'package:catch2_0_1/Auth/user_information.dart'; import 'package:flutter/material.dart'; import '../utils/app_text_styles.dart'; +import 'joinPage.dart'; import 'joinStep5.dart'; + +String _Nickname = ''; +class nicknameCode extends ChangeNotifier { + String nickname= _Nickname; + notifyListeners(); +} class joinStep4 extends StatefulWidget { const joinStep4({super.key}); @@ -71,55 +78,7 @@ class _joinStep4State extends State { ), SizedBox( height: size.height * 0.08, - child: Form( - child: TextFormField( - controller: Nicknamecontroller, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: 'Catcher', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.text, - ), - ), + child: _formNickname() ), ], )), @@ -141,11 +100,13 @@ class _joinStep4State extends State { transitionsBuilder: (_, a, __, c) => FadeTransition(opacity: a, child: c)), ); - if(Nicknamecontroller == '') { - code().nickname = code().email; + if (Nicknamecontroller == '') { + _Nickname = emailCode().email; } else { - code().nickname = Nicknamecontroller.text; + _Nickname = Nicknamecontroller.text; } + + print('닉네임은 : ${nicknameCode().nickname}'); }, child: Text( "다음", @@ -155,4 +116,45 @@ class _joinStep4State extends State { ), ); } + Widget _formNickname() { + return Form( + child: TextFormField( + controller: Nicknamecontroller, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only(left: 30), + hintText: 'Catcher', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.text, + ), + ); + } } diff --git a/lib/join/joinStep5.dart b/lib/join/joinStep5.dart index cfe1ecd..9ec4325 100644 --- a/lib/join/joinStep5.dart +++ b/lib/join/joinStep5.dart @@ -3,6 +3,12 @@ import 'package:catch2_0_1/join/joinStep6.dart'; import 'package:flutter/material.dart'; import '../utils/app_text_styles.dart'; + +String _PhoneNum = ''; +class phoneNumCode extends ChangeNotifier { + String phoneNum= _PhoneNum; + notifyListeners(); +} class joinStep5 extends StatefulWidget { const joinStep5({super.key}); @@ -70,55 +76,7 @@ class _joinStep5State extends State { ), SizedBox( height: size.height * 0.08, - child: Form( - child: TextField( - controller: PhoneNumcontroller, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, - ), - ), + child: _formPhone() ), ], )), @@ -140,7 +98,8 @@ class _joinStep5State extends State { transitionsBuilder: (_, a, __, c) => FadeTransition(opacity: a, child: c)), ); - code().phoneNum = PhoneNumcontroller.text; + _PhoneNum = PhoneNumcontroller.text; + print('전화번호 : ${phoneNumCode().phoneNum}'); }, child: Text( "다음", @@ -150,4 +109,46 @@ class _joinStep5State extends State { ), ); } + + Widget _formPhone() { + return Form( + child: TextField( + controller: PhoneNumcontroller, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + left: 30), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + ), + ); + } } diff --git a/lib/join/joinStep6.dart b/lib/join/joinStep6.dart index 0041e83..fb4b5bb 100644 --- a/lib/join/joinStep6.dart +++ b/lib/join/joinStep6.dart @@ -1,9 +1,22 @@ import 'package:catch2_0_1/Auth/user_information.dart'; import 'package:catch2_0_1/LoginPage.dart'; +import 'package:catch2_0_1/join/joinPage7.dart'; import 'package:flutter/material.dart'; import '../Auth/auth_service.dart'; import '../utils/app_text_styles.dart'; + + +String _bankName = ''; +String _bankNum = ''; +String _nameForBank = ''; + +class bankInformationCode extends ChangeNotifier { + String bankName = _bankName; + String bankNum = _bankNum; + String nameForBank = _nameForBank; + notifyListeners(); +} class joinStep6 extends StatefulWidget { const joinStep6({super.key}); @@ -11,10 +24,10 @@ class joinStep6 extends StatefulWidget { State createState() => _joinStep6State(); } -class _joinStep6State extends State { - final Bankcontroller = TextEditingController(); - final BankNumcontroller = TextEditingController(); final BankNamecontroller = TextEditingController(); + final BankNumcontroller = TextEditingController(); + final nameforBankcontroller = TextEditingController(); +class _joinStep6State extends State { @override Widget build(BuildContext context) { final Size size = MediaQuery.of(context).size; @@ -73,75 +86,7 @@ class _joinStep6State extends State { ), SizedBox( height: size.height * 0.08, - child: TextField( - onTap: () { - // showModalBottomSheet( - // context: context, - // builder: (context) { - // return Column( - // mainAxisSize: MainAxisSize.min, - // children: [ - // // Text({_dateTime}), - // SizedBox( - // height: 20, - // ), - // TextButton( - // onPressed: () { - // // setState(() { - // // _dateTime - // // }); - // }, - // child: Text("확인")) - // ], - // ); - // }); - }, - controller: Bankcontroller, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - showCursor: false, - ), + child: _formBank() ), Row( children: [ @@ -155,53 +100,7 @@ class _joinStep6State extends State { ), SizedBox( height: size.height * 0.08, - child: TextField( - style: TextStyle(fontSize: 13), - controller: BankNumcontroller, - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, - ), + child: _formBankNum() ), Row( children: [ @@ -215,53 +114,7 @@ class _joinStep6State extends State { ), SizedBox( height: size.height * 0.08, - child: TextField( - controller: BankNamecontroller, - style: TextStyle(fontSize: 13), - decoration: InputDecoration( - focusColor: Color.fromARGB(6, 61, 50, 50), - contentPadding: EdgeInsets.only( - top: size.height * 0.01, left: size.width * 0.04), - hintText: '', - errorText: '', - errorStyle: labelSmallStyle(color: Colors.red), - focusedErrorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - errorBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), - focusedBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - enabledBorder: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - borderSide: BorderSide( - width: 0.5, - color: Color.fromRGBO(0, 0, 0, 0.2)), - ), - border: OutlineInputBorder( - borderRadius: - BorderRadius.all(Radius.circular(36.0)), - ), - filled: true, - fillColor: Colors.white), - keyboardType: TextInputType.number, - ), + child: _formNameForBank() ), ], )), @@ -278,14 +131,14 @@ class _joinStep6State extends State { Navigator.push( context, PageRouteBuilder( - pageBuilder: (_, __, ___) => LoginPage(), + pageBuilder: (_, __, ___) => joinPage7(), transitionDuration: Duration(seconds: 0), transitionsBuilder: (_, a, __, c) => FadeTransition(opacity: a, child: c)), ); - code().bank = Bankcontroller.text; - code().bankName = BankNamecontroller.text; - code().bankNum = BankNumcontroller.text; + _bankName = BankNamecontroller.text; + _bankNum = BankNumcontroller.text; + _nameForBank = nameforBankcontroller.text; signUpWithEmailAndPassword(); }, child: Text( @@ -296,4 +149,134 @@ class _joinStep6State extends State { ), ); } + + Widget _formBank() { + return Form( + child: TextField( + onTap: () {}, + controller: BankNamecontroller, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + left: 20), + hintText: 'EX) 포항은행', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + showCursor: false, + ), + ); + } + + Widget _formBankNum() { + return Form( + child: TextField( + style: TextStyle(fontSize: 13), + controller: BankNumcontroller, + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + left: 20), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, + ), + ); + } + + Widget _formNameForBank() { + return Form( + child: TextField( + controller: BankNamecontroller, + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + left: 20), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: + BorderSide(width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, + ), + ); + } } diff --git a/lib/main.dart b/lib/main.dart index 771002e..9f6b794 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,9 +1,10 @@ -import 'package:catch2_0_1/screen/Community/DetailPage.dart'; import 'package:firebase_core/firebase_core.dart'; import 'package:flutter/material.dart'; import 'Auth/auth_service.dart'; import 'firebase_options.dart'; +import 'screen/Community/DetailPage.dart'; +import 'screen/mainHome.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); @@ -14,6 +15,8 @@ void main() async { } class MyApp extends StatelessWidget { + //const MyApp({super.key}); + // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( @@ -28,6 +31,22 @@ class MyApp extends StatelessWidget { theme: ThemeData( primarySwatch: Colors.lightBlue, ), - home: AuthService().handleAuthState()); + // home: test()); + // home: MainHomePage()); + home: AuthService().handleAuthState()); + } +} + +class test extends StatefulWidget { + const test({super.key}); + + @override + State createState() => _testState(); +} + +class _testState extends State { + @override + Widget build(BuildContext context) { + return Container(); } } diff --git a/lib/screen/Camera/camera_page.dart b/lib/screen/Camera/camera_page.dart index 02390a9..303d878 100644 --- a/lib/screen/Camera/camera_page.dart +++ b/lib/screen/Camera/camera_page.dart @@ -42,7 +42,7 @@ class _CameraPageState extends State { } @override - Future takepicture() async { + Future noauto_takepicture() async { print('is saving1 : $issaving'); CameraImage image = cameraImage2; try { @@ -682,7 +682,8 @@ class _CameraPageState extends State { issaving = true; }); print('clicked!!'); - takepicture(); + noauto_takepicture(); + // takepicture(); await Future.delayed(Duration(seconds: 1)); setState(() { issaving = false; diff --git a/lib/screen/Camera/camera_viewer.dart b/lib/screen/Camera/camera_viewer.dart index e0c5735..e083d4c 100644 --- a/lib/screen/Camera/camera_viewer.dart +++ b/lib/screen/Camera/camera_viewer.dart @@ -64,6 +64,7 @@ class _CameraViewerState extends State { } + @override void initState() { super.initState(); @@ -141,10 +142,10 @@ class _CameraViewerState extends State { print('is sav'); print('is saving1 : $issaving'); - Coordinates cordi=await getCurrentLocation(); - var address=await Geocoder.local.findAddressesFromCoordinates(cordi); - var first=address.first; - print('주소 ${first.thoroughfare}');//동 받아옴 + // Coordinates cordi=await getCurrentLocation(); + // var address=await Geocoder.local.findAddressesFromCoordinates(cordi); + // var first=address.first; + // print('주소 ${first.thoroughfare}');//동 받아옴 CameraImage image = cameraImage2; try { @@ -176,7 +177,7 @@ class _CameraViewerState extends State { .add({ "url": url, "time":DateFormat('dd/MM/yyyy').format(DateTime.now()), - "location":first.thoroughfare, + "location":"흥해읍"//first.thoroughfare, //위치추가 }); await FirebaseFirestore.instance @@ -186,7 +187,7 @@ class _CameraViewerState extends State { .add({ "url": url, "time":DateFormat('dd/MM/yyyy').format(DateTime.now()), - "location":first.thoroughfare, + "location":"흥해읍"//first.thoroughfare, //위치추가 }); diff --git a/lib/screen/MyPage/MyCash.dart b/lib/screen/MyPage/MyCash.dart new file mode 100644 index 0000000..81c2a06 --- /dev/null +++ b/lib/screen/MyPage/MyCash.dart @@ -0,0 +1,328 @@ +import 'package:catch2_0_1/utils/app_text_styles.dart'; +import 'package:flutter/material.dart'; + +import '../../utils/widget.dart'; +import 'cashCahnge.dart'; +import 'makeAccount.dart'; + +class MyCash extends StatefulWidget { + const MyCash({super.key}); + + @override + State createState() => _MyCashState(); +} + +class _MyCashState extends State { + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; + return Scaffold( + floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, + floatingActionButton: SizedBox( + width: size.width * 0.8, + height: size.height * 0.08, + child: FloatingActionButton.extended( + onPressed: () { + // 계좌정보가 없는 경우 + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0))), + insetPadding: EdgeInsets.only(top: size.height * 0.65), + content: Container( + height: size.height * 0.3, + width: size.width, + child: Column( + children: [ + Center( + child: Column( + children: [ + SizedBox( + height: size.height * 0.02, + ), + Text( + "계좌정보가 등록되어 있지 않습니다.", + style: bodyLargeStyle(color: Colors.black), + ), + SizedBox(height: size.height * 0.01), + Center( + child: Text("등록하시겠습니까?", + style: + bodyLargeStyle(color: Colors.black)), + ), + SizedBox( + height: size.height * 0.04, + ), + Padding( + padding: EdgeInsets.only( + left: size.width * 0.06, + right: size.width * 0.03), + child: Center( + child: Row( + children: [ + TextButton( + child: Text( + '취소', + style: TextStyle( + fontWeight: FontWeight.w500, + fontSize: 16, + color: Color(0xff9FA5B2)), + ), + onPressed: () { + Navigator.pop(context); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: + Alignment.centerLeft)), + Spacer(), + TextButton( + child: Text( + '확인', + style: TextStyle( + fontWeight: FontWeight.w500, + fontSize: 16, + color: Color(0xff3A94EE)), + ), + onPressed: () { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => + makeAccount(), + transitionDuration: + Duration(seconds: 0), + transitionsBuilder: + (_, a, __, c) => + FadeTransition( + opacity: a, + child: c)), + ); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: + Alignment.centerLeft)), + ], + ), + ), + ) + ], + ), + ) + ], + )), + ); + }, + ); + + // 계좌정보가 있는 경우 + // Navigator.push( + // context, + // PageRouteBuilder( + // pageBuilder: (_, __, ___) => cashChange(), + // transitionDuration: Duration(seconds: 0), + // transitionsBuilder: (_, a, __, c) => + // FadeTransition(opacity: a, child: c)), + // ); + }, + backgroundColor: Color(0xff3A94EE), + label: + Text("캐시 현금화 하기", style: titleMediumStyle(color: Colors.white)), + ), + ), + backgroundColor: Color(0xff3A94EE), + appBar: AppBar( + elevation: 0.2, + backgroundColor: Colors.white, + title: Text( + "나의 캐시", + style: titleMediumStyle(color: Colors.black), + ), + centerTitle: true, + ), + body: Column( + children: [ + Row( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only( + top: size.height * 0.04, + left: size.width * 0.08, + bottom: size.height * 0.01), + child: Column( + children: [ + Text("나의 캐시", + style: titleMediumStyle(color: Colors.white)), + ], + ), + ), + Padding( + padding: EdgeInsets.only(left: size.width * 0.08), + child: Text( + "10,000", + style: displaySmallStyle(color: Colors.white), + ), + ), + ], + ), + Spacer(), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.03, right: size.width * 0.05), + child: Image.asset( + 'assets/icons/mypage/MYcoin.png', + width: 120, + ), + ) + ], + ), + SizedBox( + height: size.height * 0.03, + ), + SizedBox( + height: size.height * 0.670, + width: double.infinity, + child: Card( + margin: EdgeInsets.zero, + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(20), + topRight: Radius.circular(20), + bottomRight: Radius.circular(0), + bottomLeft: Radius.circular(0))), + child: Padding( + padding: EdgeInsets.only(left: size.width * 0.01), + child: SingleChildScrollView( + child: Column( + children: [ + SizedBox( + height: size.height * 0.02, + ), + _addListTile("자전거 사진 구합니다", "2022년 11월 31일", 300), + MyWidget().DivderLineMyCash(), + _subListTile('캐시 현금화', '2022년 11월 31일', 300), + MyWidget().DivderLineMyCash(), + _subListTile('캐시 현금화', '2022년 11월 31일', 300), + MyWidget().DivderLineMyCash(), + _addListTile("자전거 사진 구합니다", "2022년 11월 31일", 300), + MyWidget().DivderLineMyCash(), + _subListTile('캐시 현금화', '2022년 11월 31일', 300), + MyWidget().DivderLineMyCash(), + _subListTile('캐시 현금화', '2022년 11월 31일', 300), + MyWidget().DivderLineMyCash(), + _addListTile("자전거 사진 구합니다", "2022년 11월 31일", 300), + ], + ), + ), + ), + ), + ) + ], + ), + ); + } + + ListTile _addListTile(String title, String subtitle, int cash) { + final Size size = MediaQuery.of(context).size; + return ListTile( + title: Row( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: size.height * 0.02), + child: Text( + title, + style: labelLargeStyle(color: Colors.black), + ), + ), + SizedBox( + height: size.height * 0.005, + ), + Padding( + padding: EdgeInsets.only(bottom: size.height * 0.02), + child: Text( + subtitle, + style: labelMediumStyle(color: Color(0xff9FA5B2)), + ), + ), + ], + ), + Spacer(), + Text("+ ", style: titleMediumStyle(color: Color(0xff00D796))), + Image.asset( + 'assets/icons/mypage/mycash_add_coin.png', + width: 20, + ), + Text( + cash.toString(), + style: titleMediumStyle(color: Color(0xff00D796)), + ) + ], + ), + ); + } + + ListTile _subListTile(String title, String subtitle, int cash) { + final Size size = MediaQuery.of(context).size; + return ListTile( + title: Row( + children: [ + Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: EdgeInsets.only(top: size.height * 0.02), + child: Text( + title, + style: labelLargeStyle(color: Colors.black), + ), + ), + SizedBox( + height: size.height * 0.005, + ), + Padding( + padding: EdgeInsets.only(bottom: size.height * 0.02), + child: Text( + subtitle, + style: labelMediumStyle(color: Color(0xff9FA5B2)), + ), + ), + ], + ), + Spacer(), + Text("- ", style: titleMediumStyle(color: Colors.red)), + Image.asset( + 'assets/icons/mypage/Mycash_minus_coin.png', + width: 20, + ), + Text( + cash.toString(), + style: titleMediumStyle(color: Colors.red), + ) + ], + ), + ); + } +} diff --git a/lib/screen/MyPage/MyPage.dart b/lib/screen/MyPage/MyPage.dart index 85263a2..74a6abf 100644 --- a/lib/screen/MyPage/MyPage.dart +++ b/lib/screen/MyPage/MyPage.dart @@ -1,3 +1,7 @@ +import 'package:catch2_0_1/Auth/auth_service.dart'; +import 'package:catch2_0_1/screen/MyPage/MyCash.dart'; +import 'package:catch2_0_1/screen/MyPage/makeAccount.dart'; +import 'package:catch2_0_1/screen/projectPage/part_pro.dart'; import 'package:catch2_0_1/utils/app_text_styles.dart'; import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; @@ -5,8 +9,6 @@ import 'package:flutter/material.dart'; import '../../utils/app_text_styles.dart'; import '../../utils/widget.dart'; import '../notFound.dart'; -import '../projectPage/part_pro.dart'; -import '../projectPage/progect_main.dart'; class MYPage extends StatefulWidget { const MYPage({super.key}); @@ -18,82 +20,251 @@ class MYPage extends StatefulWidget { class _MYPageState extends State { @override Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; return Scaffold( appBar: AppBar( + elevation: 0.5, + centerTitle: true, leading: SizedBox(), backgroundColor: Color(0xffFAFBFB), - title: Text('마이 페이지',style: titleMediumStyle(color: Colors.black),), + title: Text( + '마이 페이지', + style: titleMediumStyle(color: Colors.black), + ), ), - body: Column(children: [ - Container( - margin: EdgeInsets.fromLTRB(0, 30, 0, 20), - child: Column( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Center( - child: ClipRRect( - borderRadius: BorderRadius.circular(100), // Image border - child: SizedBox.fromSize( - size: Size.fromRadius(48), // Image radius - child: Image.asset('assets/icons/laucher_icon.png', fit: BoxFit.cover),) - ), + body: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.only( + left: size.width * 0.06, right: size.width * 0.06), + child: + Column(crossAxisAlignment: CrossAxisAlignment.start, children: [ + Container( + margin: EdgeInsets.fromLTRB(0, 30, 0, 20), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Row( + children: [ + Center( + child: ClipRRect( + borderRadius: + BorderRadius.circular(100), // Image border + child: SizedBox.fromSize( + size: Size.fromRadius(35), // Image radius + child: Image.asset('assets/icons/laucher_icon.png', + fit: BoxFit.cover), + )), + ), + Stack( + children: [ + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Padding( + padding: + EdgeInsets.only(left: size.width * 0.04), + child: Row( + children: [ + Text( + '1234@handong.ac.kr', + style: titleMediumStyle( + color: Colors.black), + ), + Text(" 님", + style: labelMediumStyle( + color: Colors.black)), + ], + ), + ), + ], + ), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.035, + left: size.width * 0.04), + child: Text( + '1234@handong.ac.kr', + style: + labelSmallStyle(color: Color(0xff9FA5B2)), + ), + ), + Padding( + padding: EdgeInsets.only(left: size.width * 0.55), + child: IconButton( + onPressed: () {}, + icon: Icon( + Icons.arrow_forward_ios_rounded, + color: Color(0xffCFD2D9), + )), + ), + ], + ) + ], + ), + SizedBox( + height: size.height * 0.03, + ), + // Stack( + // children: [ + // // SizedBox( + // // height: size.height * 0.03, + // // ), + // Padding( + // padding: EdgeInsets.only(top: size.height * 0.1), + // child: Image.asset( + // 'assets/icons/mypage/coin.png', + // width: 100, + // ), + // ), + // ], + // ), + Stack( + children: [ + Card( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + //set border radius more than 50% of height and width to make circle + ), + child: Column( + children: [ + SizedBox( + height: size.height * 0.1, + child: ListTile( + onTap: () { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => MyCash(), + transitionDuration: + Duration(seconds: 0), + transitionsBuilder: (_, a, __, c) => + FadeTransition( + opacity: a, child: c)), + ); + }, + title: Padding( + padding: EdgeInsets.only( + bottom: size.height * 0.005), + child: Text( + "나의 캐시", + style: + labelSmallStyle(color: Colors.white), + ), + ), + subtitle: Text("10,000", + style: + titleLargeStyle(color: Colors.white)), + textColor: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(10), + bottomRight: Radius.circular(0), + bottomLeft: Radius.circular(0))), + tileColor: Color(0xff3A94EE), + ), + ), + SizedBox( + height: size.height * 0.05, + child: ListTile( + onTap: () {}, + title: Padding( + padding: EdgeInsets.only( + bottom: size.height * 0.015), + child: Row( + children: [ + Spacer(), + Text("캐시 현금화 하기 ", + style: labelSmallStyle( + color: Colors.black)), + Icon( + Icons.arrow_forward_ios_rounded, + size: 14, + color: Colors.black, + ) + ], + ), + ), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(0), + topRight: Radius.circular(0), + bottomRight: Radius.circular(10), + bottomLeft: Radius.circular(10))), + tileColor: Color(0xffE7E8EC), + ), + ) + ], + ), + ), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.0, left: size.width * 0.57), + child: Image.asset( + 'assets/icons/mypage/MYcoin.png', + width: 100, + ), + ), + ], + ), + ]), ), - SizedBox(height: 16), - Text('1234@handong.ac.kr 님',style: labelMediumStyle(color: Colors.black),), - SizedBox(height: 4), - Text('1234@handong.ac.kr',style: labelSmallStyle(color: Color(0xff9FA5B2)),), - SizedBox(height: 20), - MyWidget().DivderLine(), - SizedBox(height: 20), - Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - _buildButtonColumn('assets/icons/mypage/my_coin2.png','10000',Colors.black), - _buildButtonColumn('assets/icons/mypage/black_pencil.png','내가 쓴 글',Colors.black), - _buildButtonColumn('assets/icons/mypage/part_pro.png','참여 프로젝트',Colors.black) - ],), - MyWidget().DivderLine(), - _buildListTileButton('내 정보 수정'), - _buildListTileButton('결제 정보 수정'), - _buildListTileButton('계좌 정보 수정'), - MyWidget().DivderLine(), - SizedBox(height: 20), - _buildListTileButton('공지 사항'), - _buildListTileButton('약관 및 개인정보 처리'), + SizedBox(height: size.height * 0.005), + _buildListTileButton('내가 올린 프로젝트'), + _buildListTileButton('내가 작성한 커뮤니티 글'), + _buildListTileButton('참여중인 프로젝트'), + MyWidget().DivderLine(), + _buildListTileButton('결제 정보 수정'), + _buildListTileButton('계좌 정보 수정'), + MyWidget().DivderLine(), + _buildListTileButton('공지 사항'), + _buildListTileButton('약관 및 개인정보 처리'), + MyWidget().DivderLine(), + _buildListTileButton('로그아웃'), + Padding( + padding: EdgeInsets.only( + left: size.width * 0.015, bottom: size.height * 0.05), + child: TextButton( + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(0, 20), + tapTargetSize: MaterialTapTargetSize.shrinkWrap, + alignment: Alignment.topLeft), + onPressed: () {}, + child: Text( + "탈퇴하기", + style: bodySmallStyle(color: Color(0xff9FA5B2)), + )), + ) ]), - ) - ]), + ), + ), ); } - Container _buildButtonColumn( String image ,String label,Color color) { + + Container _buildButtonColumn(String image, String label, Color color) { return Container( margin: EdgeInsets.fromLTRB(30, 0, 25, 20), child: InkWell( - onTap: (){ + onTap: () { + + if(label=='') Navigator.push( context, - MaterialPageRoute( - builder: (BuildContext context){ - if(label=='참여 프로젝트'){ - - return partiprojectPage(); - }else{ - return notFound(); - } - } + MaterialPageRoute( + builder: (BuildContext context) => notFound(), )); - }, child: Column( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.center, children: [ - Image.asset('${image}', height: 40,width: 40), + Image.asset('${image}', height: 40, width: 40), Container( margin: const EdgeInsets.only(top: 8), child: Text( - label, + label, style: TextStyle( fontSize: 12, fontWeight: FontWeight.w400, @@ -106,19 +277,43 @@ class _MYPageState extends State { ), ); } - ListTile _buildListTileButton(String word){ + + ListTile _buildListTileButton(String word) { + final Size size = MediaQuery.of(context).size; return ListTile( - onTap: (){ - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => - notFound(), - )); + contentPadding: EdgeInsets.only(left: size.width * 0.014), + onTap: () { + if(word=="참여중인 프로젝트"){ + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => partiprojectPage(), + )); + }else if(word=="계좌 정보 수정"){ + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => makeAccount(), + )); - }, - leading: Text(' ${word}',style: bodyLargeStyle()), - trailing: Icon(Icons.arrow_forward_ios), - ); + } else if(word=="로그아웃"){ + signOut(); + + } + else{ + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (BuildContext context) => notFound(), + // )); + + } + + }, + leading: Text('${word}', style: labelLargeStyle(color: Colors.black)), + trailing: Icon( + Icons.arrow_forward_ios_rounded, + color: Color(0xffCFD2D9), + )); } -} \ No newline at end of file +} diff --git a/lib/screen/MyPage/cashCahnge.dart b/lib/screen/MyPage/cashCahnge.dart new file mode 100644 index 0000000..3a23d24 --- /dev/null +++ b/lib/screen/MyPage/cashCahnge.dart @@ -0,0 +1,215 @@ +import 'package:catch2_0_1/screen/MyPage/MyPage.dart'; +import 'package:catch2_0_1/utils/app_text_styles.dart'; +import 'package:flutter/material.dart'; + +class cashChange extends StatefulWidget { + const cashChange({super.key}); + + @override + State createState() => _cashChangeState(); +} + +class _cashChangeState extends State { + @override + Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0.2, + centerTitle: true, + title: Text( + "캐시 현금화", + style: titleMediumStyle(color: Colors.black), + )), + body: Padding( + padding: EdgeInsets.only( + left: size.width * 0.06, + right: size.width * 0.06, + ), + child: Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + SizedBox( + height: size.height * 0.05, + ), + Text( + "보유 캐시", + style: titleSmallStyle(color: Color(0xff9FA5B2)), + ), + Text( + "10,035", + style: bodyLargeStyle(color: Colors.black), + ), + SizedBox( + height: size.height * 0.04, + ), + Text( + '현금화 할 캐시', + style: titleSmallStyle(color: Color(0xff9FA5B2)), + ), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.01, right: size.width * 0.06), + child: TextFormField( + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + suffixIconConstraints: + BoxConstraints(minHeight: 6, minWidth: 16), + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only( + top: size.height * 0.01, left: size.width * 0.04), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.number, + ), + ), + Row( + children: [ + SizedBox( + width: size.width * 0.02, + ), + Image.asset( + 'assets/icons/mypage/cash_warn.png', + width: 16, + ), + Text( + " 캐시 현금화는 1,000 캐시 단위로 가능합니다.", + style: labelMediumStyle(color: Colors.red), + ) + ], + ), + SizedBox( + height: size.height * 0.07, + ), + SizedBox( + width: double.infinity, + height: size.height * 0.06, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3A94EE), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0))), + insetPadding: + EdgeInsets.only(top: size.height * 0.4), + content: Container( + height: size.height * 0.7, + width: size.width, + child: Column( + children: [ + Center( + child: Column( + children: [ + SizedBox( + height: size.height * 0.2, + ), + Text( + "캐시가 현금화되었습니다.\n", + style: bodyLargeStyle( + color: Colors.black), + ), + Text( + "현금화는 영업일 기준으로", + style: bodyLargeStyle( + color: Colors.black), + ), + Text( + "최대 7일까지 소요될 수 있습니다.", + style: bodyLargeStyle( + color: Colors.black), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.03, + bottom: size.height * 0.02), + child: SizedBox( + width: double.infinity, + height: size.height * 0.06, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: + Color(0xff3A94EE), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all( + Radius.circular( + 30)))), + onPressed: () { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: + (_, __, ___) => + MYPage(), + transitionDuration: + Duration( + seconds: 0), + transitionsBuilder: (_, + a, __, c) => + FadeTransition( + opacity: a, + child: c)), + ); + }, + child: Text( + "확인", + style: titleMediumStyle( + color: Colors.white), + ))), + ) + ], + )), + ); + }, + ); + }, + child: Text( + "현금화 하기", + style: titleMediumStyle(color: Colors.white), + ))) + ]), + ), + ); + } +} diff --git a/lib/screen/MyPage/makeAccount.dart b/lib/screen/MyPage/makeAccount.dart new file mode 100644 index 0000000..a481439 --- /dev/null +++ b/lib/screen/MyPage/makeAccount.dart @@ -0,0 +1,563 @@ +import 'package:flutter/material.dart'; + +import '../../utils/app_text_styles.dart'; +import 'MyCash.dart'; + +class makeAccount extends StatefulWidget { + const makeAccount({super.key}); + + @override + State createState() => _makeAccountState(); +} + +class _makeAccountState extends State { + @override + Widget build(BuildContext context) { + // final Size size = MediaQuery.of(context).size; + return Scaffold( + appBar: AppBar( + backgroundColor: Colors.white, + elevation: 0.2, + centerTitle: true, + title: + Text("계좌 정보 등록", style: titleMediumStyle(color: Colors.black))), + body: SingleChildScrollView( + child: Padding( + padding: EdgeInsets.only(left: 24, right: 24), + child: Column( + children: [ + SizedBox( + height: 30, + ), + _textfieldLabel('은행'), + SizedBox( + height: 6, + ), + TextFormField( + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + suffixIcon: IconButton( + onPressed: () { + showDialog( + context: context, + builder: (BuildContext context) { + return _dialogGrid(); + }, + ); + }, + icon: Icon( + Icons.keyboard_arrow_down_outlined, + size: 35, + color: Color(0xffCFD2D9), + )), + suffixIconConstraints: + BoxConstraints(minHeight: 6, minWidth: 16), + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only(top: 8, left: 24), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.emailAddress, + ), + _textfieldLabel('계좌번호'), + SizedBox( + height: 6, + ), + TextFormField( + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + suffixIconConstraints: + BoxConstraints(minHeight: 6, minWidth: 16), + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only(top: 8, left: 24), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.emailAddress, + ), + _textfieldLabel('수취인명'), + SizedBox( + height: 6, + ), + TextFormField( + style: TextStyle(fontSize: 13), + decoration: InputDecoration( + suffixIconConstraints: + BoxConstraints(minHeight: 6, minWidth: 16), + focusColor: Color.fromARGB(6, 61, 50, 50), + contentPadding: EdgeInsets.only(top: 2, left: 5), + hintText: '', + errorText: '', + errorStyle: labelSmallStyle(color: Colors.red), + focusedErrorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + errorBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + hintStyle: bodyMediumStyle(color: Color(0xff9FA5B2)), + focusedBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + enabledBorder: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + borderSide: BorderSide( + width: 0.5, color: Color.fromRGBO(0, 0, 0, 0.2)), + ), + border: OutlineInputBorder( + borderRadius: BorderRadius.all(Radius.circular(36.0)), + ), + filled: true, + fillColor: Colors.white), + keyboardType: TextInputType.emailAddress, + ), + SizedBox( + height: 20, + ), + SizedBox( + width: double.infinity, + height: 45, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xffCFD2D9), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () { + showModalBottomSheet( + context: context, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(30), + ), + ), + builder: (BuildContext context) { + return StatefulBuilder(builder: + (BuildContext context, + StateSetter bottomState) { + return Container( + height: 380, + child: Column(children: [ + Container( + margin: + EdgeInsets.fromLTRB(100, 40, 100, 20), + child: Image.asset( + 'assets/checkToFinish.gif', + height: 160, + width: 160, + ), + ), + Container( + margin: EdgeInsets.fromLTRB(24, 0, 24, 24), + child: Text( + "계좌 정보가 등록 되었습니다.", + style: bodyLargeStyle(), + ), + ), + Container( + height: 40, + width: 312, + decoration: BoxDecoration( + borderRadius: + BorderRadius.circular(20), + color: Color(0XFF3A94EE)), + margin: + EdgeInsets.fromLTRB(46, 0, 46, 50), + child: TextButton( + onPressed: () { + Navigator.push( + context, + PageRouteBuilder( + pageBuilder: (_, __, ___) => + MyCash(), + transitionDuration: + Duration(seconds: 0), + transitionsBuilder: + (_, a, __, c) => + FadeTransition( + opacity: a, + child: c)), + ); + // setState(() async{ + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => HomePage()), + // ); + // print('데이터 전송 시작'); + // UploadFunction(_selectedFileList!); + // await Future.delayed(Duration(seconds: 25)); + // contentsFunction(FirebaseAuth.instance.currentUser!.displayName!,_road,_arrImageUrls,contentsController,roadAddress); + // _road == null; + // postCode = '-'; + // _arrImageUrls.clear(); + // contentsController.clear(); + // }); + }, + child: Text('확인', + style: titleMediumStyle( + color: Colors.white)))) + ]), + ); + }); + }); + + // showDialog( + // context: context, + // builder: (BuildContext context) { + // return AlertDialog( + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.only( + // topLeft: Radius.circular(30.0), + // topRight: Radius.circular(30.0))), + // insetPadding: EdgeInsets.only(top: 500), + // content: Container( + // margin: EdgeInsets.zero, + // height: 350, + // width: 320, + // child: Column( + // children: [ + // Center( + // child: Column( + // children: [ + // SizedBox( + // height: 90, + // ), + // Text( + // "계좌정보가 등록되었습니다.", + // style: bodyLargeStyle( + // color: Colors.black), + // ), + // ], + // ), + // ), + // Padding( + // padding: + // EdgeInsets.only(top: 20, bottom: 5), + // child: SizedBox( + // width: double.infinity, + // height: 50, + // child: OutlinedButton( + // style: OutlinedButton.styleFrom( + // backgroundColor: + // Color(0xff3A94EE), + // shape: RoundedRectangleBorder( + // borderRadius: + // BorderRadius.all( + // Radius.circular( + // 30)))), + // onPressed: () { + // Navigator.pop(context); + // }, + // child: Text( + // "확인", + // style: titleMediumStyle( + // color: Colors.white), + // ))), + // ) + // ], + // )), + // ); + // }, + // ); + }, + child: Text( + "등록하기", + style: titleMediumStyle(color: Color(0xff9FA5B2)), + ))) + ], + ), + )), + ); + } + + Row _textfieldLabel(String labels) { + return Row( + children: [ + Text( + labels, + style: titleSmallStyle(color: Color(0xff9FA5B2)), + ), + Spacer() + ], + ); + } + + AlertDialog _dialogMy() { + final Size size = MediaQuery.of(context).size; + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0))), + insetPadding: EdgeInsets.only(top: size.height * 0.6), + content: Container( + height: size.height * 0.3, + width: size.width, + child: Column( + children: [ + Center( + child: Column( + children: [ + SizedBox( + height: size.height * 0.1, + ), + Text( + "계좌정보가 등록되었습니다.", + style: bodyLargeStyle(color: Colors.black), + ), + ], + ), + ), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.03, bottom: size.height * 0.01), + child: SizedBox( + width: double.infinity, + height: 30, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3A94EE), + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(30)))), + onPressed: () {}, + child: Text( + "확인", + style: titleMediumStyle(color: Colors.white), + ))), + ) + ], + )), + ); + } + + AlertDialog _dialogGrid() { + // final Size size = MediaQuery.of(context).size; + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0))), + insetPadding: EdgeInsets.only(top: 230), + content: + Container(height: 500, width: double.infinity, child: send_grid()), + ); + } +} + +class send_grid extends StatelessWidget { + List grids = [ + 'nh', + 'kb', // + 'kakaobank', + 'shinhan', + 'wori_send', + 'ibk_send', + 'hana_send', + 'new', + 'dgb', + 'bnk', + 'kbank' // + ]; + List names = [ + 'NH농협', + 'KB국민', + '카카오뱅크', + '신한', + '우리', + 'IBK기업', + '하나', + '새마을', + '대구', + '부산', + '케이뱅크' + ]; + send_grid({super.key}); + + @override + Widget build(BuildContext context) { + // final Size size = MediaQuery.of(context).size; + return SingleChildScrollView( + child: Column( + children: [ + Container( + height: 375, + width: 325, + child: SizedBox( + child: GridView.count( + physics: new NeverScrollableScrollPhysics(), + childAspectRatio: 1.24, + crossAxisCount: 3, + mainAxisSpacing: 9, + crossAxisSpacing: 8, + children: List.generate(11, (index) { + return Container( + height: 17, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + shape: BoxShape.rectangle, + color: Color(0xffFAFAFA)), + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Align( + alignment: Alignment.topCenter, + child: Image.asset( + 'assets/account/${grids[index]}.png', + height: 36)), + Padding( + padding: + const EdgeInsets.only(bottom: 3.0, top: 2), + child: Text( + names[index], + style: SubTitleStyle(color: Colors.black), + ), + ), + ], + ), + ); + }))), + ), + SizedBox( + height: 10, + ), + SizedBox( + width: double.infinity, + height: 60, + child: OutlinedButton( + style: OutlinedButton.styleFrom( + backgroundColor: Color(0xff3A94EE), + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.all(Radius.circular(30)))), + onPressed: () { + Navigator.pop(context); + }, + child: Text( + "확인", + style: titleMediumStyle(color: Colors.white), + ))), + ], + ), + ); + } + + void _showEnroll(context) { + // 업로드 관련 스냅바 + showModalBottomSheet( + context: context, + shape: const RoundedRectangleBorder( + borderRadius: BorderRadius.vertical( + top: Radius.circular(30), + ), + ), + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter bottomState) { + return Container( + height: 380, + child: Column(children: [ + Container( + margin: EdgeInsets.fromLTRB(100, 40, 100, 20), + child: Image.asset( + 'assets/checkToFinish.gif', + height: 160, + width: 160, + ), + ), + Container( + margin: EdgeInsets.fromLTRB(24, 0, 24, 28), + child: Text( + "계좌 정보가 등록 되었습니다.", + style: labelSmallStyle(), + ), + ), + Container( + height: 40, + width: 312, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(20), + color: Color(0XFF3A94EE)), + margin: EdgeInsets.fromLTRB(46, 0, 46, 50), + child: TextButton( + onPressed: () { + // setState(() async{ + // Navigator.push( + // context, + // MaterialPageRoute( + // builder: (context) => HomePage()), + // ); + // print('데이터 전송 시작'); + // UploadFunction(_selectedFileList!); + // await Future.delayed(Duration(seconds: 25)); + // contentsFunction(FirebaseAuth.instance.currentUser!.displayName!,_road,_arrImageUrls,contentsController,roadAddress); + // _road == null; + // postCode = '-'; + // _arrImageUrls.clear(); + // contentsController.clear(); + // }); + }, + child: Text('확인', + style: labelSmallStyle(color: Colors.white)))) + ]), + ); + }); + }); + } +} diff --git a/lib/screen/album/catchbox_detail.dart b/lib/screen/album/catchbox_detail.dart index 39f1fd6..c828298 100644 --- a/lib/screen/album/catchbox_detail.dart +++ b/lib/screen/album/catchbox_detail.dart @@ -7,6 +7,10 @@ import 'dart:math' as math; import '../../utils/app_text_styles.dart'; import '../mainHome.dart'; +int check_num=0; + +ListcolorList=[Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9)]; + class Catchbox_detail extends StatefulWidget { final QueryDocumentSnapshot query; @@ -30,6 +34,10 @@ class _Catchbox_detailState extends State { String _selectedDate = ''; String _rangeCount = ''; String _range1 = ''; + String _range2 = ''; + String _month_0 = ''; + String _day_0 = ''; + int count = 0; //String _range2 = ''; List num_list = []; @@ -37,6 +45,7 @@ class _Catchbox_detailState extends State { List placenamelist=['장성동','흥해읍','양덕동'];//,'장량동','환호동','두호동','우현동','창포동','죽도동']; List _checks = List.generate(1000, (_) => false); List _checks_url = List.generate(1000, (_) => ''); + List _checks_docs = List.generate(1000, (_) => ''); // 1 String _selectDate = '날짜'; @@ -69,8 +78,8 @@ class _Catchbox_detailState extends State { .collection('category') .doc('1234@handong.ac.kr') .collection(query['category']) - // .doc('place') - // .collection('place_url') + // .doc('place') + // .collection('place_url') .where('location', whereIn: place_list) .snapshots(); } @@ -79,7 +88,7 @@ class _Catchbox_detailState extends State { .collection('category') .doc('1234@handong.ac.kr') .collection(query['category']) - .where('time', isEqualTo: _range1) + .where('time', whereIn: num_list) .snapshots(); } @@ -98,32 +107,82 @@ class _Catchbox_detailState extends State { Color? bgColorBottomNavigationBar; Color? iconColor; + void _onSelectionChanged(DateRangePickerSelectionChangedArgs args) { setState(() { if (args.value is PickerDateRange) { - //List days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; - //_range1 = '${DateFormat('dd/MM/yyyy').format(args.value.Date)}'; - //_range2 = '${DateFormat('dd/MM/yyyy').format(args.value.endDate ?? args.value.startDate)}'; - // I tried to use whereIn(), but only 10 elements are available. - // for(int i = int.parse(_range1.substring(3,5)); i<= int.parse(_range2.substring(3,5)); i++){ - // if(i == int.parse(_range1.substring(3,5))) - // for(int j = int.parse(_range1.substring(0,2)); j < days[i]; j++){ - // String temp = (j.toString()) + (i.toString()) + _range1.substring(5,8); - // num_list.add(temp); - // } - // if(i == _range2.substring(3,5)) - // for(int j = 1; j <= int.parse(_range2.substring(0,2)); j++){ - // String temp = j.toString() + i.toString() + _range1.substring(5,8); - // num_list.add(temp); - // } - // else - // for(int j = 1; j <= days[i]; j++){ - // String temp = j.toString() + i.toString() + _range1.substring(4,8); - // num_list.add(temp); - // } - // print(i); - // } - //print(num_list); + List days = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; + _range1 = '${DateFormat('dd/MM/yyyy').format(args.value.startDate)}'; + _range2 = '${DateFormat('dd/MM/yyyy').format(args.value.endDate)}'; + //I tried to use whereIn(), but only 10 elements are available. + print("here!!!!"); + print(_range1); + print(_range2); + print(_range1.substring(3,5)); + count = 0; + + for(int i = int.parse(_range1.substring(3,5)); i <= int.parse(_range2.substring(3,5)); i++){ + if(int.parse(_range2.substring(3,5)) == int.parse(_range1.substring(3,5))){ + if(count < 10) + for(int j = int.parse(_range1.substring(0,2)); j <= int.parse(_range2.substring(0,2)); j++){ + //format 맞추기 위해서 + if(j.toString().length == 1){ + _month_0 = '0' + j.toString(); + } + else _month_0 = j.toString(); + + if(j.toString().length == 1){ + _day_0 = '0' + i.toString(); + } + else _day_0 = i.toString(); + String temp = _month_0 + '/'+ _day_0 + '/' + _range1.substring(6,10); + num_list.add(temp); + count ++; + if(count == 10) break; + } + } + + else{ + if(count < 10){ + if(i == int.parse(_range1.substring(3,5))) + for(int j = int.parse(_range1.substring(0,2)); j <= days[i]; j++){ + //format 맞추기 위해서 + if(j.toString().length == 1){ + _month_0 = '0' + j.toString(); + } + else _month_0 = j.toString(); + + if(j.toString().length == 1){ + _day_0 = '0' + i.toString(); + } + else _day_0 = i.toString(); + String temp = _month_0 + '/'+ _day_0 + '/' + _range1.substring(6,10); + num_list.add(temp); + count ++; + if(count == 10) break; + } + if(i == int.parse(_range2.substring(3,5))) + for(int j = 1; j <= int.parse(_range2.substring(0,2)); j++){ + //format 맞추기 위해서 + if(j.toString().length == 1){ + _month_0 = '0' + j.toString(); + } + else _month_0 = j.toString(); + + if(j.toString().length == 1){ + _day_0 = '0' + i.toString(); + } + else _day_0 = i.toString(); + String temp = _month_0 + '/'+ _day_0 + '/' + _range1.substring(6,10); + num_list.add(temp); + count ++; + if(count == 10) break; + } + } + } + print(i); + } + //print(args.value.startDate - args.value.endDate); } else if (args.value is DateTime) { _selectedDate = args.value.toString(); @@ -142,11 +201,14 @@ class _Catchbox_detailState extends State { _selectedIndex = index; print(_selectedIndex); selectedIndex0 = _selectedIndex; + main_colorList=[Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9)]; + main_colorList[index]=Color(0xff3A94EE); }); Navigator.push(context, MaterialPageRoute(builder: (context) { return MainHomePage(); })); } + print(_selectedIndex); } return Scaffold( @@ -165,71 +227,40 @@ class _Catchbox_detailState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ SizedBox( - height: 20, + height: 30, ), Row( children: [ - //선택,취소버튼 - Container( - margin: EdgeInsets.zero, - width: (size.width - 35) / 3, - child: Align( - alignment: Alignment.centerLeft, - child: TextButton( - onPressed: () { - print(_checks); - setState(() { - if (_selectCheckIcon) { - pressed = true; - _selectCheck = '취소'; - _selectCheckColor = Colors.blue; // primary[40]!; - _selectCheckTextColor = Color(0XFFF3F4F5); - // _selectPlaceTextColor = Colors.red; - _selectCheckIcon = false; - } else { - pressed = false; - _selectCheckColor = Color(0XFFF3F4F5); - _selectCheck = '선택'; - _selectCheckTextColor = Color(0xFF9FA5B2); - _selectCheckIcon = true; - _checks.fillRange(0, _checks.length-1,false); - _checks_url.fillRange(0, _checks_url.length-1,''); - } - }); - }, - child: Text( - pressed ? "취소" : "선택", - style: TextStyle(fontSize: 12, color: Colors.grey), - ) - ), - ), - ), - //선택,취소버튼 - Container( - width: (size.width - 35) / 3, - child: Center( - child: Text( - _selectPlace, - // query['category'], - style: titleMediumStyle(color: Colors.black), - ), - )), - Container( - width: (size.width - 35) / 3, - child: Align( - alignment: Alignment.centerRight, - child: TextButton( - onPressed: () async { - // await Future.delayed(Duration(seconds: 3)); - // - // Navigator.push(context, MaterialPageRoute(builder: (context) { - // return MainHomePage(); - // })); - }, - child: Text('업로드', style: TextStyle(color: Colors.white)), + Expanded( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Text( + query['category'], + style: titleMediumStyle(color: Colors.black), + ), + ] ), ), ), + + // Container( + // width: (size.width - 35) / 3, + // child: Align( + // alignment: Alignment.centerRight, + // child: TextButton( + // onPressed: () async { + // // await Future.delayed(Duration(seconds: 3)); + // // + // // Navigator.push(context, MaterialPageRoute(builder: (context) { + // // return MainHomePage(); + // // })); + // }, + // child: Text('업로드', style: TextStyle(color: Colors.white)), + // ), + // ), + // ), ], ), SizedBox(height: 15), @@ -237,315 +268,359 @@ class _Catchbox_detailState extends State { children: [ Expanded( child: Container( - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - //1 - SizedBox(width: 20), - InkWell( - onTap: () { - if (_selectDateIcon) - setState(() { - _selectPlace = '장소'; - _selectPlaceIcon = true; - _selectPlaceTextColor = Color(0xFF9FA5B2); - _selectPlaceColor = Color(0XFFF3F4F5); - _selectDateColor = Colors.blue; // primary[40]!; - _selectDateTextColor = Colors.white; - }); - if (_selectDateIcon) - // ignore: curly_braces_in_flow_control_structures - showModalBottomSheet( - shape: const RoundedRectangleBorder( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(30.0), - topRight: Radius.circular(30.0))), - context: context, - builder: (BuildContext context) { - return SizedBox( - height: 600, - child: Column( - children: [ - Padding( - padding: EdgeInsets.only( - top: 40.0, left: 40, right: 40), - child: SfDateRangePicker( - controller: _dataPickerController, - onSelectionChanged: - _onSelectionChanged, - //selectionMode: DateRangePickerSelectionMode.range, - ), - ), - Padding( - padding: EdgeInsets.only( - left: 50.0, right: 30), - child: Container( - child: Row( - children: [ - TextButton( - child: Text( - '취소', - style: TextStyle( - color: Color.fromRGBO( - 159, 165, 178, 1)), - ), - onPressed: () { - Navigator.pop(context); - setState(() { - _selectDateColor = - Color(0XFFF3F4F5); - _selectDateTextColor = - Color(0xFF9FA5B2); - _range1 = ''; - //_range2 = ''; - _dataPickerController - .selectedRanges = null; - }); - }, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - minimumSize: Size(50, 30), - tapTargetSize: - MaterialTapTargetSize - .shrinkWrap, - alignment: - Alignment.centerLeft)), - Spacer(), - TextButton( - child: Text('확인'), - onPressed: () { - setState(() { - _selectDateColor = Colors.blue; // primary[40]!; - _selectDateTextColor = Colors.white; - _selectDate = _range1.substring(8, 10) + '.' + _range1.substring(3, 5) + - '.' + - _range1.substring(0, 2); - _selectDateSize = 80; - _selectDateIcon = false; - print("range $_range1"); - print("date:$_selectDate"); - }); - Navigator.pop(context); - }, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - minimumSize: Size(50, 30), - tapTargetSize: - MaterialTapTargetSize - .shrinkWrap, - alignment: - Alignment.centerLeft)) - ], - )), - ) - ], - ), - ); - }, - ); - else - setState(() { - _selectDateIcon = true; - _selectDate = '날짜'; - _selectDateColor = Color(0XFFF3F4F5); - _selectDateTextColor = Color(0xFF9FA5B2); - _selectDateSize = 67.2; - _range1 = ''; - //_range2 = ''; - }); - }, - //1-1 //날짜 칩 - child: Container( - width: _selectDateSize, - height: 30, - decoration: BoxDecoration( - color: _selectDateColor, - borderRadius: BorderRadius.circular(100.0)), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - _selectDate, - style: TextStyle( - color: _selectDateTextColor, - fontSize: 12), - ), - Icon( - _selectDateIcon - ? Icons.keyboard_arrow_down_outlined - : Icons.clear_outlined, - color: _selectDateTextColor), - ], - )), - ), - SizedBox(width: 10), - // 2. 장소칩 - InkWell( - onTap: () async { - setState(() { - //var respectsQuery = FirebaseFirestore.instance.collection('category').doc('user1').collection(query['category']).doc('place').collection('place'), - - //날짜 필터 초기화 - _selectDateIcon = true; - _selectDate = '날짜'; - _selectDateColor = Color(0XFFF3F4F5); - _selectDateTextColor = Color(0xFF9FA5B2); - _selectDateSize = 67.2; - _range1 = ''; - - //장소 필터 on - _selectPlaceColor = Colors.blue; // primary[40]!; - _selectPlaceTextColor = Colors.white; - place_list = []; - _selectPlaceIcon=true; - }); - - if (_selectPlaceIcon) - showDialog( - context: context, - builder:(BuildContext context) { - return AlertDialog( - shape: RoundedRectangleBorder( + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + //1. 날짜칩 + SizedBox(width: 20), + InkWell( + onTap: () { + if (_selectDateIcon) + setState(() { + num_list = []; + _selectPlace = '장소'; + _selectPlaceIcon = true; + _selectPlaceTextColor = Color(0xFF9FA5B2); + _selectPlaceColor = Color(0XFFF3F4F5); + _selectDateColor = Colors.blue; // primary[40]!; + _selectDateTextColor = Colors.white; + }); + if (_selectDateIcon) + // ignore: curly_braces_in_flow_control_structures + showModalBottomSheet( + shape: const RoundedRectangleBorder( borderRadius: BorderRadius.only( topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0))), - insetPadding: EdgeInsets.only(top: 519), - content: Container( - height: 244, - width: 360, + context: context, + builder: (BuildContext context) { + return SizedBox( + height: 1000, child: Column( children: [ - Row( - children: [ - InkWell( - onTap:(){ - setState(() { - place_list.add("장량동"); - jangrangdong=!jangrangdong; - }); - }, - child: Container( - width: size.width*0.236, - height: size.height*0.0375, - decoration: BoxDecoration( - color: !jangrangdong?Color(0xffF3F4F5):_selectPlaceColor, - borderRadius: BorderRadius.circular(100.0)), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - '장량동', + Padding( + padding: EdgeInsets.only( + top: 40.0, left: 40, right: 40), + child: SfDateRangePicker( + controller: _dataPickerController, + onSelectionChanged: + _onSelectionChanged, + selectionMode: DateRangePickerSelectionMode.range, + ), + ), + Padding( + padding: EdgeInsets.only( + left: 50.0, right: 30), + child: Container( + child: Row( + children: [ + TextButton( + child: Text( + '취소', style: TextStyle( - fontSize: 12, - color: !jangrangdong?Color(0xff9FA5B2):_selectPlaceTextColor, - ), + color: Color.fromRGBO( + 159, 165, 178, 1)), ), + onPressed: () { + Navigator.pop(context); + setState(() { + _selectDateColor = + Color(0XFFF3F4F5); + _selectDateTextColor = + Color(0xFF9FA5B2); + _range1 = ''; + //_range2 = ''; + _dataPickerController + .selectedRanges = null; + }); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: + Alignment.centerLeft)), + Spacer(), + TextButton( + child: Text('확인'), + onPressed: () { + setState(() { + _selectDateColor = Colors.blue; // primary[40]!; + _selectDateTextColor = Colors.white; + _selectDate = _range1.substring(8, 10) + '.' + _range1.substring(3, 5) + + '.' + + _range1.substring(0, 2); + _selectDateSize = 80; + _selectDateIcon = false; + print("range $_range1"); + print("date:$_selectDate"); + }); + Navigator.pop(context); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: + Alignment.centerLeft)) + ], + )), + ) + ], + ), + ); + }, + ); + else + setState(() { + _selectDateIcon = true; + _selectDate = '날짜'; + _selectDateColor = Color(0XFFF3F4F5); + _selectDateTextColor = Color(0xFF9FA5B2); + _selectDateSize = 67.2; + _range1 = ''; + //_range2 = ''; + }); + }, + //1-1 //날짜 칩 + child: Container( + width: _selectDateSize, + height: 30, + decoration: BoxDecoration( + color: _selectDateColor, + borderRadius: BorderRadius.circular(100.0)), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + _selectDate, + style: TextStyle( + color: _selectDateTextColor, + fontSize: 12), + ), + Icon( + _selectDateIcon + ? Icons.keyboard_arrow_down_outlined + : Icons.clear_outlined, + color: _selectDateTextColor), + ], + )), + ), + SizedBox(width: 10), + // 2. 장소칩 + InkWell( + onTap: () async { + setState(() { + //var respectsQuery = FirebaseFirestore.instance.collection('category').doc('user1').collection(query['category']).doc('place').collection('place'), - ], - )), - ) - ], - ), - + //날짜 필터 초기화 + _selectDateIcon = true; + _selectDate = '날짜'; + _selectDateColor = Color(0XFFF3F4F5); + _selectDateTextColor = Color(0xFF9FA5B2); + _selectDateSize = 67.2; + _range1 = ''; + _range2 = ''; + num_list = []; + //장소 필터 on + _selectPlaceColor = Colors.blue; // primary[40]!; + _selectPlaceTextColor = Colors.white; + place_list = []; + _selectPlaceIcon=true; + }); - Container( - child: Row( - children: [ - SizedBox(width: 208), - TextButton( - child: Text('취소'), - onPressed: () { - Navigator.pop(context); + if (_selectPlaceIcon) + showDialog( + context: context, + builder:(BuildContext context) { + return AlertDialog( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0))), + insetPadding: EdgeInsets.only(top: 519), + content: Container( + height: 244, + width: 360, + child: Column( + children: [ + Row( + children: [ + InkWell( + onTap:(){ setState(() { - _selectPlaceColor = - Color(0XFFF3F4F5); - _selectPlaceTextColor = - Color(0xFF9FA5B2); + place_list.add("흥해읍"); + jangrangdong=!jangrangdong; }); }, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - minimumSize: Size(50, 30), - tapTargetSize: - MaterialTapTargetSize - .shrinkWrap, - alignment: Alignment - .centerLeft)), - SizedBox(width:25), - TextButton( - child: Text('확인'), - onPressed: () { - print("place_list------->"); - print(place_list); - setState(() { - _selectPlaceIcon = false; - _selectPlaceColor = Colors - .blue; // primary[40]!; - _selectPlaceTextColor = - Colors.white; - if (place_list.isEmpty) { - _selectPlace = '장소'; - } else - _selectPlace = - place_list[0]; - }); - Navigator.pop(context); - }, - style: TextButton.styleFrom( - padding: EdgeInsets.zero, - minimumSize: Size(50, 30), - tapTargetSize: - MaterialTapTargetSize - .shrinkWrap, - alignment: - Alignment.centerLeft)) - ], - )) - ], - )), + child: Container( + width: size.width*0.236, + height: size.height*0.0375, + decoration: BoxDecoration( + color: !jangrangdong?Color(0xffF3F4F5):_selectPlaceColor, + borderRadius: BorderRadius.circular(100.0)), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + '흥해읍', + style: TextStyle( + fontSize: 12, + color: !jangrangdong?Color(0xff9FA5B2):_selectPlaceTextColor, + ), + ), + + ], + )), + ) + ], + ), + + + + Container( + child: Row( + children: [ + SizedBox(width: 208), + TextButton( + child: Text('취소'), + onPressed: () { + Navigator.pop(context); + setState(() { + _selectPlaceColor = + Color(0XFFF3F4F5); + _selectPlaceTextColor = + Color(0xFF9FA5B2); + }); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: Alignment + .centerLeft)), + SizedBox(width:25), + TextButton( + child: Text('확인'), + onPressed: () { + print("place_list------->"); + print(place_list); + setState(() { + _selectPlaceIcon = false; + _selectPlaceColor = Colors + .blue; // primary[40]!; + _selectPlaceTextColor = + Colors.white; + if (place_list.isEmpty) { + _selectPlace = '장소'; + } else + _selectPlace = + place_list[0]; + }); + Navigator.pop(context); + }, + style: TextButton.styleFrom( + padding: EdgeInsets.zero, + minimumSize: Size(50, 30), + tapTargetSize: + MaterialTapTargetSize + .shrinkWrap, + alignment: + Alignment.centerLeft)) + ], + )) + ], + )), + ); + } + ); - } + else + setState(() { + _selectPlaceIcon = true; + _selectPlace = '장소'; + _selectPlaceColor = Color(0XFFF3F4F5); + _selectPlaceTextColor = Color(0xFF9FA5B2); + }); + }, - ); - else - setState(() { - _selectPlaceIcon = true; - _selectPlace = '장소'; - _selectPlaceColor = Color(0XFFF3F4F5); - _selectPlaceTextColor = Color(0xFF9FA5B2); - }); - }, + //// 장소 칩 + child: Container( + width: 70, + height: 30, + decoration: BoxDecoration( + color: _selectPlaceColor, + borderRadius: BorderRadius.circular(100.0)), + child: Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + _selectPlace,// _selectPlace, + style: TextStyle( + fontSize: 12, + color: _selectPlaceTextColor, + ), + ), + Icon( + _selectPlaceIcon + ? Icons.keyboard_arrow_down_outlined + : Icons.clear_outlined, + color: _selectPlaceTextColor), + ], + )), + ), + Spacer(), + // 임시 delete - //// 장소 칩 - child: Container( - width: 70, - height: 30, - decoration: BoxDecoration( - color: _selectPlaceColor, - borderRadius: BorderRadius.circular(100.0)), - child: Row( - mainAxisAlignment: MainAxisAlignment.center, - children: [ - Text( - _selectPlace,// _selectPlace, - style: TextStyle( - fontSize: 12, - color: _selectPlaceTextColor, - ), - ), - Icon( - _selectPlaceIcon - ? Icons.keyboard_arrow_down_outlined - : Icons.clear_outlined, - color: _selectPlaceTextColor), - ], - )), + //선택,취소버튼 + Container( + margin: EdgeInsets.zero, + width: (size.width - 170) / 3, + child: Align( + alignment: Alignment.centerLeft, + child: TextButton( + onPressed: () { + + print(_checks); + setState(() { + if (_selectCheckIcon) { + check_num=0; + pressed = true; + _selectCheck = '취소'; + _selectCheckColor = Colors.blue; // primary[40]!; + _selectCheckTextColor = Color(0XFFF3F4F5); + // _selectPlaceTextColor = Colors.red; + _selectCheckIcon = false; + } else { + + pressed = false; + _selectCheckColor = Color(0XFFF3F4F5); + _selectCheck = '선택'; + _selectCheckTextColor = Color(0xFF9FA5B2); + _selectCheckIcon = true; + _checks.fillRange(0, _checks.length-1,false); + _checks_url.fillRange(0, _checks_url.length-1,''); + _checks_docs.fillRange(0, _checks_docs.length-1,''); + } + }); + }, + child: Text( + pressed ? "취소" : "선택", + style: TextStyle(fontSize: 12, color: Colors.grey), + ) + ), + ), + ), + ], ), - Spacer() - ], - ), - )), + )), ], ), ], @@ -589,161 +664,449 @@ class _Catchbox_detailState extends State { // ):Container(), // ], ), - bottomNavigationBar: Container( + bottomNavigationBar:pressed + ? Container( decoration: BoxDecoration( + color: Colors.white, borderRadius: BorderRadius.only( topRight: Radius.circular(30), topLeft: Radius.circular(30)), boxShadow: [ - BoxShadow(color: Colors.black38, spreadRadius: 0, blurRadius: 1), + BoxShadow(color: Colors.black, spreadRadius: 0, blurRadius: 0.5), ], ), - height: 70, + height: 100, child: ClipRRect( borderRadius: BorderRadius.only( topLeft: Radius.circular(30.0), topRight: Radius.circular(30.0), ), - child: BottomNavigationBar( - elevation: 10, - items: [ - BottomNavigationBarItem( - icon: Icon( - Icons.home, - color: iconColor, - ), - label: '오늘의 캐치', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.bookmark, - color: iconColor, - ), - label: '커뮤니티', + //// 선택 눌렀을 때 + child: Column( + children: [ + SizedBox( + height: size.height * 0.01, ), - BottomNavigationBarItem( - icon: Icon( - Icons.image, - color: iconColor, - ), - label: '캐치박스', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.account_circle_outlined, - color: iconColor, - ), - label: '마이페이지', - ), - ], + Row(children: [ + SizedBox(width: size.width * 0.4), + Text("$check_num 개의 사진이 선택됨", + style: labelMediumStyle( + color: Color.fromRGBO(26, 26, 26, 1))), + // Padding( + // padding: EdgeInsets.only(left: size.width * 0.15), + // child: pressed==true?TextButton( + // onPressed: () async { + // // for(int i = 0; i < 1000; i++){ + // // if(_checks[i]){ + // // try { + // // await FirebaseFirestore.instance + // // .collection("project_url") + // // .doc(query2['id']) + // // .collection(query2['id']) + // // .doc() + // // .set({ + // // "project": query2['id'], + // // "category": query['category'], + // // "url": _checks_url[i], + // // "user":"1234@handong.ac.kr",// FirebaseAuth.instance.currentUser!.email, + // // }); + // // } catch (e) { + // // print(e); + // // } + // // //_checks_url[i] + // // } + // // } + // + // Navigator.push(context, MaterialPageRoute(builder: (context) { + // return uploadCheck(); + // })); + // + // // await Future.delayed(Duration(seconds: 3)); + // // + // // Navigator.push(context, MaterialPageRoute(builder: (context) { + // // return MainHomePage(); + // // })); + // + // }, + // child: Text('올리기', style: labelMediumStyle( + // color: Color.fromRGBO(26, 26, 26, 1))), + // ):Container(), + // ), + SizedBox(width: size.width * 0.13), + //if(pressed == true) + IconButton( - currentIndex: _selectedIndex, - //selectedLabelStyle: Theme.of(context).primaryTextTheme.caption, - showUnselectedLabels: true, - type: BottomNavigationBarType.fixed, - backgroundColor: bgColorBottomNavigationBar, - onTap: _onItemTapped, - selectedFontSize: 10, - unselectedFontSize: 10, + padding: EdgeInsets.all(0), + icon: Image.asset("assets/icons/trash_can.png", + + width:size.width*0.044, + ), + // Icon(Icons.delete), + //color: Colors.lightBlue, + + onPressed: (){ + showModalBottomSheet( + enableDrag: true, + isScrollControlled: true, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0))), + context: context, + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return Container( + height: size.height * 0.266, + padding: EdgeInsets.fromLTRB(0, 20, 0, 0), + child: Column( + children: [ + SizedBox( + height: size.height * 0.05, + ), + + Text('사진을 삭제하시겠습니까?', + textAlign: TextAlign.center, + style: TextStyle( + + ), + ), + SizedBox( + height: size.height * 0.025, + ), + Text('삭제한 사진은 복구할 수 없습니다. ', + textAlign: TextAlign.center, + style: TextStyle( + + ), + ), + + SizedBox( + height: size.height * 0.025, + ), + Row( + children: [ + SizedBox( + width: size.width*0.055, + ), + TextButton(onPressed: (){ + Navigator.pop(context); + }, child: Text('취소', + style:TextStyle(color: Color(0xff9FA5B2)), + )), + SizedBox( + width: size.width*0.544, + ), + TextButton( + onPressed: (){ + for(int i = 0; i< 1000; i++){ + if(_checks_docs[i] != ''){ + FirebaseFirestore.instance.collection('category').doc('1234@handong.ac.kr').collection(query['category']).doc(_checks_docs[i]).delete(); + } + } + setState(() { + pressed = false; + _selectCheck = '선택'; + _checks.fillRange(0, _checks.length-1,false); + _checks_url.fillRange(0, _checks_url.length-1,''); + _checks_docs.fillRange(0, _checks_docs.length-1,''); + }); + + showModalBottomSheet( + enableDrag: true, + isScrollControlled: true, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0))), + context: context, + builder: (BuildContext context) { + return StatefulBuilder( + builder: (BuildContext context, StateSetter setState) { + return Container( + height: size.height * 0.48, + padding: EdgeInsets.fromLTRB(0, 20, 0, 0), + child: Column( + children: [ + SizedBox( + height: size.height * 0.06, + ), + + SizedBox( + height:150, + child: Image.asset('assets/checkToFinish.gif')), + SizedBox( + height: size.height * 0.0475, + ), + Text('사진이 삭제되었습니다. '), + + SizedBox(height: size.height * 0.025), + + SizedBox( + height: 20, + ), + ElevatedButton( + style:ButtonStyle( + fixedSize: + MaterialStateProperty.all(Size(307, 50)), + backgroundColor: MaterialStateProperty.all( + Color(0xff3A94EE), + //_onTap3? primary[40] : onSecondaryColor, + ), + shape: MaterialStateProperty.all< + RoundedRectangleBorder>( + RoundedRectangleBorder( + borderRadius: BorderRadius.circular(30.0), + )), + ), + + child: Text('확인', + style: titleMediumStyle( + color: Color(0xffFAFBFB))), + onPressed: () { + print("here"); + Navigator.pop(context); + Navigator.pop(context); + + } + + ) + ], + ), + ); + }); + }, + ); + + }, child: Text('확인', + style: TextStyle( + color: Color(0xff3A94EE), + ), + )) + + ], + + ) + + + // ElevatedButton( + // style:ButtonStyle( + // fixedSize: + // MaterialStateProperty.all(Size(307, 50)), + // backgroundColor: MaterialStateProperty.all( + // Color(0xff3A94EE), + // //_onTap3? primary[40] : onSecondaryColor, + // ), + // shape: MaterialStateProperty.all< + // RoundedRectangleBorder>( + // RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(30.0), + // )), + // ), + // + // child: Text('확인', + // style: titleMediumStyle( + // color: Color(0xffFAFBFB))), + // onPressed: () { + // for(int i = 0; i< 1000; i++){ + // if(_checks_docs[i] != ''){ + // FirebaseFirestore.instance.collection('category').doc('1234@handong.ac.kr').collection(query['category']).doc(_checks_docs[i]).delete(); + // } + // } + // setState(() { + // pressed = false; + // _selectCheck = '선택'; + // _checks.fillRange(0, _checks.length-1,false); + // _checks_url.fillRange(0, _checks_url.length-1,''); + // _checks_docs.fillRange(0, _checks_docs.length-1,''); + // }); + // Navigator.pop(context); + // + // } + // + // ) + ], + ), + ); + }); + }, + ); + + }, + ), + + ]), + ], ), ), + ): + Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.only( + topRight: Radius.circular(30), topLeft: Radius.circular(30)), + boxShadow: [ + BoxShadow(color: Colors.black38, spreadRadius: 0, blurRadius: 1), + ], + ), + height: 70, + child: ClipRRect( + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0), + ), + child: BottomNavigationBar( + elevation: 10, + items: [ + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/today_catch.png', + color:Color(0xffCFD2D9),// colorList[0], + width:size.width*0.055, + ), + label: '\n 오늘의 캐치', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/community.png', + color: Color(0xffCFD2D9),//colorList[1], + width:size.width*0.055, + ), + label: '\n 커뮤니티', + ), + // BottomNavigationBarItem( + // icon: Icon(Icons.add, color: Colors.transparent,), + // label: '카메라', + // ), + BottomNavigationBarItem( + icon:Image.asset( + 'assets/icons/bottombar/catchbox.png', + color: Color(0xff3A94EE),//colorList[2], + width:size.width*0.055, + ), + label: '\n 캐치박스', + ), + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/mypage.png', + color:Color(0xffCFD2D9),//colorList[3], + width:size.width*0.055, + ), + label: '\n 마이페이지', + ), + ], + selectedItemColor: Color(0xff3A94EE), + unselectedItemColor: Color(0xffCFD2D9), + currentIndex: selectedIndex0, + showUnselectedLabels: true, + type: BottomNavigationBarType.fixed, + backgroundColor: bgColorBottomNavigationBar, + selectedLabelStyle: labelSmallStyle(color:Color(0xff3A94EE)), + unselectedLabelStyle: labelSmallStyle(color:Color(0xffCFD2D9)), + onTap: _onItemTapped, + )), ), body: Container( - // child: Center( + // child: Center( child: Column( - mainAxisAlignment: MainAxisAlignment.start, - children: [ - Expanded( - child: Container( - margin: EdgeInsets.fromLTRB(10, 0, 10, 10), - child: Center( - child: StreamBuilder( - stream: stream_ordering(), - builder: (context, snapshot) { - if (snapshot.hasData) { - if (snapshot.data != null) { - print(snapshot.data!.docs.length); - return GridView.builder( - gridDelegate: - SliverGridDelegateWithFixedCrossAxisCount( - crossAxisCount: 3), - itemCount: snapshot.data!.docs.length, - padding: EdgeInsets.all(2.0), - itemBuilder: (BuildContext context, int index) { - QueryDocumentSnapshot x = - snapshot.data!.docs[index]; - return InkWell( - onLongPress: () { - setState(() { - pressed = true; - }); - }, - child: Stack( - children: [ - SizedBox( - height: 119.04, - width: 118.08, - child: Card( - // shape: RoundedRectangleBorder( - // borderRadius: BorderRadius.circular(15.0), - // ), - margin: - EdgeInsets.fromLTRB(5, 5, 5, 5), - clipBehavior: Clip.antiAlias, - child: Transform.rotate( - angle: (query['category'] == + mainAxisAlignment: MainAxisAlignment.start, + children: [ + Expanded( + child: Container( + margin: EdgeInsets.fromLTRB(10, 0, 10, 10), + child: Center( + child: StreamBuilder( + stream: stream_ordering(), + builder: (context, snapshot) { + if (snapshot.hasData) { + if (snapshot.data != null) { + print(snapshot.data!.docs.length); + return GridView.builder( + gridDelegate: + SliverGridDelegateWithFixedCrossAxisCount( + crossAxisCount: 3), + itemCount: snapshot.data!.docs.length, + padding: EdgeInsets.all(2.0), + itemBuilder: (BuildContext context, int index) { + QueryDocumentSnapshot x = + snapshot.data!.docs[index]; + return InkWell( + onLongPress: () { + setState(() { + pressed = true; + }); + }, + child: Stack( + children: [ + SizedBox( + height: 119.04, + width: 118.08, + child: Card( + // shape: RoundedRectangleBorder( + // borderRadius: BorderRadius.circular(15.0), + // ), + margin: + EdgeInsets.fromLTRB(5, 5, 5, 5), + clipBehavior: Clip.antiAlias, + child: Transform.rotate( + angle: (query['category'] == 'kickboard' || - query['category'] == - 'traffic light') - ? 0 - : 90 * math.pi / 180, - child: Image.network( - x['url'], - fit: BoxFit.cover, + query['category'] == + 'traffic light') + ? 0 + : 90 * math.pi / 180, + child: Image.network( + x['url'], + fit: BoxFit.cover, + ), + )), ), - )), - ), - //Image.network(x['url'], fit: BoxFit.cover), - if (pressed == true) - Align( - alignment: Alignment.bottomRight, - child: Checkbox( - value: _checks[index], - onChanged: (newValue) { - setState(() { - _checks[index] = newValue!; - _checks_url[index] = x['url']; - }); - }, - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(10)), - checkColor: Colors.white, - activeColor: Color(0XFF007AFF), + //Image.network(x['url'], fit: BoxFit.cover), + if (pressed == true) + Align( + alignment: Alignment.bottomRight, + child: Checkbox( + value: _checks[index], + onChanged: (newValue) { + setState(() { + check_num=0; + _checks[index] = newValue!; + _checks_url[index] = x['url']; + _checks_docs[index] = x.id; + for(int i=0;i<_checks.length;i++){ + if(_checks[i]==true) + check_num=check_num+1; + } + }); + }, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(10)), + checkColor: Colors.white, + activeColor: Color(0XFF007AFF), + ), + ), + ], ), - ), - ], - ), - ); - }, - ); - } else { - return Container( - child: Center( - child: Text( - 'Es wurden noch keine Fotos im Chat gepostet.', - style: - TextStyle(fontSize: 20.0, color: Colors.grey), - textAlign: TextAlign.center, - ))); - } - } else { - return CircularProgressIndicator(); - } - }) - ), + ); + }, + ); + } else { + return Container( + child: Center( + child: Text( + 'Es wurden noch keine Fotos im Chat gepostet.', + style: + TextStyle(fontSize: 20.0, color: Colors.grey), + textAlign: TextAlign.center, + ))); + } + } else { + return CircularProgressIndicator(); + } + }) + ), + )), + ], )), - ], - )), ); } } diff --git a/lib/screen/mainHome.dart b/lib/screen/mainHome.dart index a1847cf..afdd1fe 100644 --- a/lib/screen/mainHome.dart +++ b/lib/screen/mainHome.dart @@ -4,65 +4,65 @@ import 'package:flutter/material.dart'; import 'package:sliding_switch/sliding_switch.dart'; import '../Auth/auth_service.dart'; +import '../utils/app_text_styles.dart'; import 'Camera/camera_load.dart'; import 'Community/HomePage.dart'; import 'MyPage/MyPage.dart'; import 'album/catchbox.dart'; + //import 'album/albumPage.dart'; import 'projectPage/progect_main.dart'; - - List cameras = []; int selectedIndex0 = 0; +List main_colorList=[Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9)]; class MainHomePage extends StatefulWidget { - - @override _HomePageState createState() => _HomePageState(); - } class _HomePageState extends State { -@override -void initState() { - // TODO: implement initState - super.initState(); - initCamera(); - -} - -void initCamera() async{ - cameras = await availableCameras(); - -} + @override + void initState() { + // TODO: implement initState + super.initState(); + initCamera(); + } + void initCamera() async { + cameras = await availableCameras(); + } Color? bgColorBottomNavigationBar; Color? iconColor; + + void _onItemTapped(int index) { setState(() { selectedIndex0 = index; print(selectedIndex0); + main_colorList=[Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9),Color(0xffCFD2D9)]; + main_colorList[index]=Color(0xff3A94EE); + }); } -var my_list2 = ['홈', '커뮤니티','캐치박스','마이페이지']; + var my_list2 = ['홈', '커뮤니티', '캐치박스', '마이페이지']; - final List _widgetOptions = [ + final List _widgetOptions = [ projectPage(), HomePage(), Catchbox(), MYPage(), - ]; + ]; //String? user = FirebaseAuth.instance.currentUser!.email ?? FirebaseAuth.instance.currentUser!.displayName; @override Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; return Scaffold( - body: SafeArea( child: _widgetOptions.elementAt(selectedIndex0), ), @@ -76,73 +76,73 @@ var my_list2 = ['홈', '커뮤니티','캐치박스','마이페이지']; ), height: 70, child: ClipRRect( - borderRadius: BorderRadius.only( - topLeft: Radius.circular(30.0), - topRight: Radius.circular(30.0), - ), - child: BottomNavigationBar( - - elevation: 10, - items: [ - BottomNavigationBarItem( - icon: Icon( - Icons.home, - color: iconColor, + borderRadius: BorderRadius.only( + topLeft: Radius.circular(30.0), + topRight: Radius.circular(30.0), + ), + child: BottomNavigationBar( + elevation: 10, + items: [ + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/today_catch.png', + color: main_colorList[0], + width:size.width*0.055, + ), + label: '\n 오늘의 캐치', ), - label: '오늘의 캐치', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.bookmark, - color: iconColor, + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/community.png', + color: main_colorList[1], + width:size.width*0.055, + ), + label: '\n 커뮤니티', ), - label: '커뮤니티', - ), - // BottomNavigationBarItem( - // icon: Icon(Icons.add, color: Colors.transparent,), - // label: '카메라', - // ), - BottomNavigationBarItem( - icon: Icon( - Icons.image, - color: iconColor, + // BottomNavigationBarItem( + // icon: Icon(Icons.add, color: Colors.transparent,), + // label: '카메라', + // ), + BottomNavigationBarItem( + icon:Image.asset( + 'assets/icons/bottombar/catchbox.png', + color: main_colorList[2], + width:size.width*0.055, + ), + label: '\n 캐치박스', ), - label: '캐치박스', - ), - BottomNavigationBarItem( - icon: Icon( - Icons.account_circle, - color: iconColor, + BottomNavigationBarItem( + icon: Image.asset( + 'assets/icons/bottombar/mypage.png', + color:main_colorList[3], + width:size.width*0.055, + ), + label: '\n 마이페이지', ), - label: '프로필', - ), - ], - currentIndex: selectedIndex0, - showUnselectedLabels: true, - type: BottomNavigationBarType.fixed, - backgroundColor: bgColorBottomNavigationBar, - onTap: _onItemTapped, - ) - ), + ], + selectedItemColor: Color(0xff3A94EE), + unselectedItemColor: Color(0xffCFD2D9), + currentIndex: selectedIndex0, + showUnselectedLabels: true, + type: BottomNavigationBarType.fixed, + backgroundColor: bgColorBottomNavigationBar, + selectedLabelStyle: labelSmallStyle(color:Color(0xff3A94EE)), + unselectedLabelStyle: labelSmallStyle(color:Color(0xffCFD2D9)), + onTap: _onItemTapped, + )), ), - - - - floatingActionButton: FloatingActionButton( backgroundColor: Colors.white, - elevation:5, + elevation: 5, child: SizedBox( - width:20, + width: 20, height: 20, child: Image.asset('assets/camera.png'), - ), onPressed: () { Navigator.push(context, MaterialPageRoute(builder: (context) { return CamerLoad(cameras); })); - }, ), floatingActionButtonLocation: diff --git a/lib/screen/projectPage/progect_main.dart b/lib/screen/projectPage/progect_main.dart index f20e7a7..c3ab1e1 100644 --- a/lib/screen/projectPage/progect_main.dart +++ b/lib/screen/projectPage/progect_main.dart @@ -2,6 +2,7 @@ import 'package:catch2_0_1/screen/projectPage/project_detail2.dart'; import 'package:catch2_0_1/screen/projectPage/project_detail1.dart'; import 'package:catch2_0_1/utils/app_colors.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:firebase_auth/firebase_auth.dart'; import 'package:flutter/material.dart'; import 'package:flutter/src/widgets/container.dart'; import 'package:flutter/src/widgets/framework.dart'; @@ -50,7 +51,7 @@ class _projectPageState extends State { return Container( margin: EdgeInsets.fromLTRB(24, 30, 24, 16), decoration: BoxDecoration( - border: Border.all( + border: Border.all( width: 1, ), ), @@ -109,7 +110,7 @@ class _add_personalState extends State {*/ elevation: 0, centerTitle: true, title: Text( - '오늘의 캐치', + FirebaseAuth.instance.currentUser!.email.toString(),// '오늘의 캐치', style: titleMediumStyle(color: Colors.black), ), ), @@ -126,13 +127,20 @@ class _add_personalState extends State {*/ onChanged: (bool value) { setState(() { part = value; + print(part); }); }, height: 40, - animationDuration: const Duration(milliseconds: 200), - onTap: () {}, + animationDuration: const Duration(milliseconds: 100), + onTap: () { + if (part == false) + part = false; + else + part = true; + }, + onDoubleTap: () {}, onSwipe: () {}, textOff: "모든 프로젝트", @@ -169,14 +177,14 @@ class _add_personalState extends State {*/ Expanded( child: StreamBuilder( stream: - FirebaseFirestore.instance.collection('project').snapshots(), + FirebaseFirestore.instance.collection('project').snapshots(), builder: (context, snapshot) { if (!snapshot.hasData) return Center( child: Text( - ' 업로드 된\n글이 없어요 :(', - style: labelLargeStyle(color: Color(0XFF9FA5B2)), - )); + ' 업로드 된\n글이 없어요 :(', + style: labelLargeStyle(color: Color(0XFF9FA5B2)), + )); if (part == true) return ListView.builder( itemCount: snapshot.data!.docs.length, @@ -191,10 +199,10 @@ class _add_personalState extends State {*/ right: size.width * 0.05, bottom: size.height * 0.01), child: Card( - elevation: 3, + elevation: 0.3, shape: RoundedRectangleBorder( borderRadius: - BorderRadius.all(Radius.circular(16))), + BorderRadius.all(Radius.circular(16))), child: InkWell( //카드 누르는 경우 onTap: () { @@ -213,13 +221,13 @@ class _add_personalState extends State {*/ Padding( padding: EdgeInsets.only( top: size.height * 0.03, - right: size.width * 0.7), + right: size.width * 0.745), child: Text( "D-" + snapshot .data!.docs[index]['final_day'] .toString(), - style: labelLargeStyle( + style: labelSmallStyle( color: Color(0xff9FA5B2)), ), ), @@ -236,15 +244,24 @@ class _add_personalState extends State {*/ subtitle: Row( children: [ Container( + height: size.height * 0.025, decoration: BoxDecoration( borderRadius: BorderRadius.all( - Radius.circular(10)), - color: Color(0xffF3F4F5), + Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, ), margin: EdgeInsets.only( top: size.height * 0.01), child: Padding( - padding: EdgeInsets.all(8), + padding: EdgeInsets.only( + top: size.height * 0.000, + bottom: size.height * 0.000, + left: size.width * 0.02, + right: size.width * 0.02), child: Text( snapshot.data!.docs[index]['type'] .toString(), @@ -266,6 +283,39 @@ class _add_personalState extends State {*/ ), ], ), + // Row( + // children: [ + // Container( + // decoration: BoxDecoration( + // borderRadius: BorderRadius.all( + // Radius.circular(10)), + // color: Color(0xffF3F4F5), + // ), + // margin: EdgeInsets.only( + // top: size.height * 0.01), + // child: Padding( + // padding: EdgeInsets.all(8), + // child: Text( + // snapshot.data!.docs[index]['type'] + // .toString(), + // style: labelMediumStyle( + // color: Color(0xff9FA5B2)), + // ), + // ), + // ), + // Padding( + // padding: EdgeInsets.only( + // top: size.height * 0.01, + // left: size.width * 0.02), + // child: Text( + // snapshot.data!.docs[index]['user'] + // .toString(), + // style: labelMediumStyle( + // color: Color(0xff9FA5B2)), + // ), + // ), + // ], + // ), ), Row( children: [ @@ -273,47 +323,54 @@ class _add_personalState extends State {*/ margin: EdgeInsets.only( left: size.width * 0.05, bottom: size.height * 0.02, - top: size.height * 0.01), - width: size.width * 0.60, + top: size.height * 0.02), + width: size.width * 0.65, height: size.height * 0.01, child: ClipRRect( borderRadius: BorderRadius.all( Radius.circular(46)), child: LinearProgressIndicator( value: snapshot.data! - .docs[index]['percentage'] - .toDouble() * + .docs[index]['percentage'] + .toDouble() * 0.01, - valueColor: !snapshot.data!.docs[index]['part_user'].contains('1234@handong.ac.kr') + valueColor: snapshot + .data!.docs[index] + ['participate'] == + 0 ? AlwaysStoppedAnimation( - Color(0xff3A94EE)) + Color(0xff3A94EE)) : AlwaysStoppedAnimation( - Color(0xff00D796)), + Color(0xff00D796)), backgroundColor: Color(0xffE7E8EC), ), ), ), Padding( padding: EdgeInsets.only( + top: size.height * 0.01, bottom: size.height * 0.02, left: size.width * 0.03), - child: !snapshot.data!.docs[index]['part_user'].contains('1234@handong.ac.kr') + child: snapshot.data!.docs[index] + ['participate'] == + 0 ? Image.asset( - 'assets/coin.png', - width: 20, - ) + 'assets/coin.png', + width: 20, + ) : Image.asset( - 'assets/coin2.png', - width: 20, - ), + 'assets/coin2.png', + width: 20, + ), ), Padding( padding: EdgeInsets.only( + top: size.height * 0.01, bottom: size.height * 0.02, left: size.width * 0.01), child: Text( snapshot.data!.docs[index]['cash'] - .toString() + + .toString() + "00", style: labelMediumStyle( color: Color(0xff1A1A1A)), @@ -326,12 +383,7 @@ class _add_personalState extends State {*/ ), ); else - return Container( - child: Text( - 'asdfsdfgsdf', - style: TextStyle(color: Colors.amber), - ), - ); + return Container(); }); if (part == false) return ListView.builder( @@ -343,154 +395,183 @@ class _add_personalState extends State {*/ left: size.width * 0.05, right: size.width * 0.05, bottom: size.height * 0.01), - child: Card( - elevation: 1, - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.all(Radius.circular(16))), - child: InkWell( - //카드 누르는 경우 - onTap: () { - if(snapshot.data!.docs[index]['part_user'].contains('1234@handong.ac.kr')){ - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => - todaycatchdetail3(query: x), - )); - } else { - Navigator.push( - context, - MaterialPageRoute( - builder: (BuildContext context) => - todaycatchdetail(query: x), - )); - } - - print('모든 프로젝트'); - print(snapshot.data!.docs[index]['id'] - .toString()); - }, - child: Column(children: [ - Padding( - padding: EdgeInsets.only( - top: size.height * 0.03, - right: size.width * 0.7), - child: Text( - "D-" + - snapshot.data!.docs[index]['final_day'] - .toString(), - style: labelLargeStyle( - color: Color(0xff9FA5B2)), + child: Container( + decoration: new BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.grey.withOpacity(.1), + blurRadius: 50.0, // soften the shadow + spreadRadius: 0.0, //extend the shadow + offset: Offset( + 10.0, // Move to right 10 horizontally + 10.0, // Move to bottom 10 Vertically ), - ), - ListTile( - title: Padding( + ) + ], + ), + child: Card( + elevation: 1, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.all(Radius.circular(16))), + child: InkWell( + //카드 누르는 경우 + onTap: () { + if (snapshot.data!.docs[index] + ['participate'] == + 1) { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + todaycatchdetail3(query: x), + )); + } else { + Navigator.push( + context, + MaterialPageRoute( + builder: (BuildContext context) => + todaycatchdetail(query: x), + )); + } + + print('모든 프로젝트'); + print(snapshot.data!.docs[index]['id'] + .toString()); + }, + child: Column(children: [ + Padding( padding: EdgeInsets.only( - top: size.height * 0.01), + top: size.height * 0.03, + right: size.width * 0.74), child: Text( - snapshot.data!.docs[index]['title'] - .toString(), - style: titleMediumStyle(), + "D-" + + snapshot + .data!.docs[index]['final_day'] + .toString(), + style: labelSmallStyle( + color: Color(0xff9FA5B2)), ), ), - subtitle: Row( - children: [ - Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.all( - Radius.circular(20)), - border: Border.all( - width: 1, - color: Color(0xffCFD2D9), + ListTile( + title: Padding( + padding: EdgeInsets.only( + top: size.height * 0.01), + child: Text( + snapshot.data!.docs[index]['title'] + .toString(), + style: titleMediumStyle(), + ), + ), + subtitle: Row( + children: [ + Container( + height: size.height * 0.025, + decoration: BoxDecoration( + borderRadius: BorderRadius.all( + Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, + ), + margin: EdgeInsets.only( + top: size.height * 0.01), + child: Padding( + padding: EdgeInsets.only( + top: size.height * 0.000, + bottom: size.height * 0.000, + left: size.width * 0.02, + right: size.width * 0.02), + child: Text( + snapshot.data!.docs[index]['type'] + .toString(), + style: labelMediumStyle( + color: Color(0xff9FA5B2)), + ), ), - color: Colors.white, ), - margin: EdgeInsets.only( - top: size.height * 0.01), - child: Padding( + Padding( padding: EdgeInsets.only( - top: size.height * 0.005, - bottom: size.height * 0.005, - left: size.width * 0.02, - right: size.width * 0.02), + top: size.height * 0.01, + left: size.width * 0.02), child: Text( - snapshot.data!.docs[index]['type'] + snapshot.data!.docs[index]['user'] .toString(), style: labelMediumStyle( color: Color(0xff9FA5B2)), ), ), - ), - Padding( - padding: EdgeInsets.only( - top: size.height * 0.01, - left: size.width * 0.02), - child: Text( - snapshot.data!.docs[index]['user'] - .toString(), - style: labelMediumStyle( - color: Color(0xff9FA5B2)), - ), - ), - ], + ], + ), ), - ), - Row( - children: [ - Container( - margin: EdgeInsets.only( - left: size.width * 0.05, - bottom: size.height * 0.03, - top: size.height * 0.01), - width: size.width * 0.60, - height: size.height * 0.01, - child: ClipRRect( - borderRadius: BorderRadius.all( - Radius.circular(16)), - child: LinearProgressIndicator( - value: snapshot.data! - .docs[index]['percentage'] - .toDouble() * - 0.01, - valueColor: !snapshot.data!.docs[index]['part_user'].contains('1234@handong.ac.kr') - ? AlwaysStoppedAnimation( - Color(0xff3A94EE)) - : AlwaysStoppedAnimation( - Color(0xff00D796)), - backgroundColor: Color(0xffE7E8EC), + Padding( + padding: EdgeInsets.only( + top: size.height * 0.015), + child: Row( + children: [ + Container( + margin: EdgeInsets.only( + left: size.width * 0.05, + bottom: size.height * 0.03, + top: size.height * 0.01), + width: size.width * 0.65, + height: size.height * 0.01, + child: ClipRRect( + borderRadius: BorderRadius.all( + Radius.circular(16)), + child: LinearProgressIndicator( + value: snapshot.data! + .docs[index]['percentage'] + .toDouble() * + 0.01, + valueColor: snapshot + .data!.docs[index] + ['participate'] == + 0 + ? AlwaysStoppedAnimation< + Color>(Color(0xff3A94EE)) + : AlwaysStoppedAnimation< + Color>(Color(0xff00D796)), + backgroundColor: + Color(0xffE7E8EC), + ), + ), ), - ), - ), - Padding( - padding: EdgeInsets.only( - bottom: size.height * 0.02, - left: size.width * 0.03), - child: !snapshot.data!.docs[index]['part_user'].contains('1234@handong.ac.kr') - ? Image.asset( - 'assets/coin.png', - width: 20, - ) - : Image.asset( - 'assets/coin2.png', - width: 20, - ), + Padding( + padding: EdgeInsets.only( + bottom: size.height * 0.02, + left: size.width * 0.03), + child: snapshot.data!.docs[index] + ['participate'] == + 0 + ? Image.asset( + 'assets/coin.png', + width: 20, + ) + : Image.asset( + 'assets/coin2.png', + width: 20, + ), + ), + Padding( + padding: EdgeInsets.only( + bottom: size.height * 0.02, + left: size.width * 0.01), + child: Text( + snapshot.data!.docs[index]['cash'] + .toString() + + "00", + style: labelMediumStyle( + color: Color(0xff1A1A1A)), + ), + ) + ], ), - Padding( - padding: EdgeInsets.only( - bottom: size.height * 0.02, - left: size.width * 0.01), - child: Text( - snapshot.data!.docs[index]['cash'] - .toString() + - "00", - style: labelMediumStyle( - color: Color(0xff1A1A1A)), - ), - ) - ], - ), - ]), + ), + ]), + ), ), ), ); @@ -506,11 +587,12 @@ class _add_personalState extends State {*/ animatedIcon: AnimatedIcons.menu_close, animatedIconTheme: IconThemeData(size: 22.0), */ - backgroundColor: Colors.blueAccent, + backgroundColor: Color(0xff3A94EE), + childrenButtonSize: Size(60, 70), child: Icon( - Icons.edit_outlined, + Icons.add, color: Colors.white, - size: 25, + size: 36, ), buttonSize: const Size(60, 60), useRotationAnimation: false, @@ -519,28 +601,29 @@ class _add_personalState extends State {*/ // height: 30.w, // fit : BoxFit.fitWidth), activeIcon: Icons.close, + activeForegroundColor: Colors.white, + animatedIconTheme: IconThemeData( - size: 25, - color: primary[0]?.withOpacity(0.4), + size: 36, + // color: primary[0]?.withOpacity(0.4), ), // this is ignored if animatedIcon is non null - curve: Curves.bounceIn, + // curve: Curves.bounceIn, overlayColor: Colors.black, - overlayOpacity: 0.8, - activeBackgroundColor: Colors.black.withOpacity(0.8), + overlayOpacity: 0.6, + activeBackgroundColor: Color.fromRGBO(97, 98, 98, 0.9), //childrenButtonSize: (const Size.round(100)), //activeForegroundColor: Colors.white, - + spacing: 10, foregroundColor: Colors.white, - elevation: 0.0, + elevation: 0.5, direction: SpeedDialDirection.up, - shape: const CircleBorder(), + // shape: const CircleBorder(), children: [ SpeedDialChild( child: Image.asset( 'assets/icons/Subtract.png', - height: 20, - width: 16, + height: 30, //fit : BoxFit.fitWidth ), shape: RoundedRectangleBorder( @@ -552,17 +635,9 @@ class _add_personalState extends State {*/ label: '기업, 공공기관 프로젝트 의뢰하기', // labelWidget, //labelShadow : Colors.black.withOpacity(0.6), - labelStyle: TextStyle( - fontFamily: 'NotoSansKR', - fontWeight: FontWeight.w700, - fontSize: 16, - height: 22 / 16, - letterSpacing: 0, - //fontWeight: FontWeight.w500, - color: Colors.white, - //color: primary[0]?.withOpacity(0.02), - ), - labelBackgroundColor: Colors.black.withOpacity(0.6), + labelStyle: titleMediumStyle(color: Colors.white), + // labelBackgroundColor: Colors.black.withOpacity(0.6), + labelBackgroundColor: Colors.grey.withOpacity(0), onTap: () { Navigator.push( context, @@ -572,9 +647,8 @@ class _add_personalState extends State {*/ }), SpeedDialChild( child: Image.asset( - 'assets/icons/Union.png', + 'assets/icons/personal.png', height: 24, - width: 21.61, //fit : BoxFit.fitWidth ), shape: RoundedRectangleBorder( diff --git a/lib/screen/projectPage/project_detail1.dart b/lib/screen/projectPage/project_detail1.dart index 0b40379..1b24d8e 100644 --- a/lib/screen/projectPage/project_detail1.dart +++ b/lib/screen/projectPage/project_detail1.dart @@ -50,13 +50,11 @@ class _todaycatchdetailState extends State { children: [ Row( children: [ - SizedBox( - width: 10, - ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text('Catcher', + // d- 몇인지 보여줘야 함. + Text('D-', style: labelLargeStyle(color: Color(0xff9FA5B2))), ], ), @@ -73,41 +71,85 @@ class _todaycatchdetailState extends State { // children: [Icon(Icons.more_vert)])) ], ), - SizedBox(height: 10), + SizedBox(height: size.height * 0.02), Row( children: [ - Chip( - label: Container( - height: 15, - child: Text('기업', - style: - labelMediumStyle(color: Color(0xff9FA5B2)))), - backgroundColor: Color(0xffF3F4F5)), - SizedBox(width: 5), - Text(query['cash'].toString(), - style: titleSmallStyle(color: Color(0xff9FA5B2))), - Text('캐시', style: titleSmallStyle(color: Color(0xff9FA5B2))), + Container( + width: size.width * 0.1, + height: size.height * 0.03, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, + ), + child: Center( + child: Text('기업', + style: labelMediumStyle(color: Color(0xff9FA5B2))), + )), + SizedBox(width: size.width * 0.016), + Text('Comapany Co',//query['cash'].toString(), + style: labelMediumStyle(color: Color(0xff9FA5B2))), + // Text('캐시', style: labelMediumStyle(color: Color(0xff9FA5B2))), ], ), - SizedBox(height: 20), + SizedBox(height: size.height * 0.04), Text(query['content'], style: bodyMediumStyle(color: Color(0xff1A1A1A))), SizedBox(height: 30), Row( children: [ + Image.asset( + 'assets/coin.png', + width: 20, + ), + Padding( + padding: EdgeInsets.only( + left: size.width * 0.01, right: size.width * 0.03), + child: Text( + //snapshot.data!.docs[index]['cash'] + // .toString() + + "100", + style: labelLargeStyle(color: Color(0xff1A1A1A))), + ), for (int i = 0; i < query['category'].length; i++) Padding( padding: EdgeInsets.only(right: 10), //height: 25.h, - child: Chip( - label: Text(query['category'][i], - style: labelMediumStyle(color: Color(0xff1A1A1A))), - backgroundColor: Color(0xFFF3F4F5), - deleteIcon: Icon( - Icons.close, - size: 8, - ), - ), + child: Container( + // width: size.width * 0.18, + height: size.height * 0.035, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, + ), + child: Padding( + padding: EdgeInsets.only( + left: size.width * 0.02, + right: size.width * 0.02), + child: Center( + child: Text(query['category'][i], + style: labelMediumStyle( + color: Color(0xff1A1A1A))), + // Text('기업', + // style: labelMediumStyle(color: Color(0xff9FA5B2))), + ), + )), + // Chip( + // label: Text(query['category'][i], + // style: labelMediumStyle(color: Color(0xff1A1A1A))), + // backgroundColor: Color(0xFFF3F4F5), + // deleteIcon: Icon( + // Icons.close, + // size: 8, + // ), + // ), ), ], ), @@ -116,7 +158,7 @@ class _todaycatchdetailState extends State { borderRadius: BorderRadius.all(Radius.circular(10)), child: LinearProgressIndicator( value: int.parse(query['percentage'].toString()) * 0.01, - minHeight: 8, + minHeight: size.height * 0.015, valueColor: AlwaysStoppedAnimation(primary[50]), backgroundColor: primary[0]!.withOpacity(0.05), ), @@ -124,16 +166,17 @@ class _todaycatchdetailState extends State { SizedBox(height: 10), Row( children: [ - Text(query['percentage'].toString(), - style: labelLargeStyle(color: Color(0xff9FA5B2))), - Text('% 달성', - style: labelLargeStyle(color: Color(0xff9FA5B2))), + // Text(query['percentage'].toString(), + // style: labelLargeStyle(color: Color(0xff9FA5B2))), + // Text('% 달성', + // style: labelLargeStyle(color: Color(0xff9FA5B2))), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Text('${query['final_day'].toString()}일 후 마감', - style: labelSmallStyle(color: Color(0xff9FA5B2))) + Text( + '100장 중 ${query['percentage'].toString()}장이 수집되었어요 !', + style: labelSmallStyle(color: Color(0xff1A1A1A))) ]), ) ], @@ -158,7 +201,7 @@ class _todaycatchdetailState extends State { return StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return Container( - height: size.height * 0.52, + height: size.height * 0.57, padding: EdgeInsets.fromLTRB(0, 20, 0, 0), child: Column( children: [ @@ -167,7 +210,7 @@ class _todaycatchdetailState extends State { ), InkWell( child: Container( - padding: EdgeInsets.fromLTRB(18, 20, 19, 20), + padding: EdgeInsets.fromLTRB(18, 17, 19, 20), decoration: BoxDecoration( border: onTap ? Border.all( @@ -175,7 +218,7 @@ class _todaycatchdetailState extends State { color: Color(0xFF3A94EE), ) : Border.all( - color: Colors.white, + color: Color(0xffCFD2D9), ), color: onTap ? Color(0xFFF2F8FE) : Colors.white, @@ -184,34 +227,40 @@ class _todaycatchdetailState extends State { topRight: Radius.circular(20), bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)), - boxShadow: [ - BoxShadow( - color: Color(0xFFCFD2D9), - spreadRadius: 1, - blurRadius: 50, - //offset: Offset(0, 3), // changes position of shadow - ), - ], + // boxShadow: [ + // BoxShadow( + // color: Color(0xFFCFD2D9), + // spreadRadius: 1, + // blurRadius: 50, + // //offset: Offset(0, 3), // changes position of shadow + // ), + // ], ), - width: 312, + width: size.width * 0.86, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - IconButton( - color: onTap - ? Colors.blueAccent - : Color(0xFFCFD2D9), - onPressed: () { - setState(() { - onTap = !onTap; - print(onTap); - }); - if (onTap == true && onTap2 == true) // - _onTap3 = true; - else - _onTap3 = false; - }, - icon: Icon(Icons.check), + Padding( + padding: EdgeInsets.only( + right: size.width * 0.02, + top: size.height * 0.022), + child: IconButton( + color: onTap + ? Colors.blueAccent + : Color(0xFFCFD2D9), + onPressed: () { + setState(() { + onTap = !onTap; + print(onTap); + }); + if (onTap == true && + onTap2 == true) // + _onTap3 = true; + else + _onTap3 = false; + }, + icon: Icon(Icons.check), + ), ), Column( crossAxisAlignment: @@ -219,7 +268,7 @@ class _todaycatchdetailState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ - Text('개인정보 및 데이터 수집 및 이용 동의', + Text('개인정보 및 데이터 수집 및 이용 동의\n', style: titleSmallStyle( color: Color(0xff1A1A1A))), //SizedBox(height: 16.h), @@ -282,7 +331,7 @@ class _todaycatchdetailState extends State { color: Color(0xFF3A94EE), ) : Border.all( - color: Colors.white, + color: Color(0xffCFD2D9), ), color: onTap2 ? Color(0xFFF2F8FE) : Colors.white, @@ -291,34 +340,40 @@ class _todaycatchdetailState extends State { topRight: Radius.circular(20), bottomLeft: Radius.circular(20), bottomRight: Radius.circular(20)), - boxShadow: [ - BoxShadow( - color: Color(0xFFCFD2D9), - spreadRadius: 1, - blurRadius: 50, - //offset: Offset(0, 3), // changes position of shadow - ), - ], + // boxShadow: [ + // BoxShadow( + // color: Color(0xFFCFD2D9), + // spreadRadius: 1, + // blurRadius: 50, + // //offset: Offset(0, 3), // changes position of shadow + // ), + // ], ), - width: 312, + width: size.width * 0.86, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ - IconButton( - color: onTap2 - ? Colors.blueAccent - : Color(0xFFCFD2D9), - onPressed: () { - setState(() { - onTap2 = !onTap2; - print(onTap); - }); - if (onTap == true && onTap2 == true) // - _onTap3 = true; - else - _onTap3 = false; - }, - icon: Icon(Icons.check), + Padding( + padding: EdgeInsets.only( + right: size.width * 0.02, + top: size.height * 0.022), + child: IconButton( + color: onTap2 + ? Colors.blueAccent + : Color(0xFFCFD2D9), + onPressed: () { + setState(() { + onTap2 = !onTap2; + print(onTap); + }); + if (onTap == true && + onTap2 == true) // + _onTap3 = true; + else + _onTap3 = false; + }, + icon: Icon(Icons.check), + ), ), Column( crossAxisAlignment: @@ -326,7 +381,7 @@ class _todaycatchdetailState extends State { mainAxisAlignment: MainAxisAlignment.start, children: [ - Text('개인정보 및 데이터 수집 및 이용 동의', + Text('개인정보 및 데이터 수집 및 이용 동의\n', style: titleSmallStyle( color: Color(0xff1A1A1A))), //SizedBox(height: 16.h), @@ -379,7 +434,7 @@ class _todaycatchdetailState extends State { }, ), SizedBox( - height: 20, + height: size.height * 0.04, ), ElevatedButton( // backgroundColor: _onTap3? primary[40] : Color(0xFFCFD2D9), @@ -388,7 +443,7 @@ class _todaycatchdetailState extends State { // ), style: ButtonStyle( fixedSize: - MaterialStateProperty.all(Size(307, 58)), + MaterialStateProperty.all(Size(size.width * 0.86, size.height * 0.075)), backgroundColor: MaterialStateProperty.all( _onTap3 ? primary[40] : Color(0xFFCFD2D9), //_onTap3? primary[40] : onSecondaryColor, @@ -410,23 +465,16 @@ class _todaycatchdetailState extends State { // .collection('project') // .doc( // 'cLxKtSGWwhUVJp972FCh').toString()); - - var userlist=query['part_user']; - if(!userlist.contains('1234@handong.ac.kr')) - userlist.add('1234@handong.ac.kr'); - print(query['id']); FirebaseFirestore.instance .collection('project') .doc(query['id']) - .update({ - 'participate':1, - 'part_user':userlist - }); - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return MainHomePage(); - })); + .update({'participate': 1}); + Navigator.pop(context); + // Navigator.push(context, + // MaterialPageRoute(builder: (context) { + // return MainHomePage(); + // })); } // if(_onTap3 == true) diff --git a/lib/screen/projectPage/project_detail2.dart b/lib/screen/projectPage/project_detail2.dart index e54d89b..e9b3f16 100644 --- a/lib/screen/projectPage/project_detail2.dart +++ b/lib/screen/projectPage/project_detail2.dart @@ -1,6 +1,7 @@ import 'package:camera/camera.dart'; import 'package:catch2_0_1/utils/app_text_styles.dart'; import 'package:cloud_firestore/cloud_firestore.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; @@ -12,7 +13,7 @@ import '../mainHome.dart'; // import 'camera/camera_page.dart'; // import 'catchbox2.dart'; - +List cameras = []; class todaycatchdetail3 extends StatefulWidget { final QueryDocumentSnapshot query; @@ -40,6 +41,7 @@ class _todaycatchdetail3State extends State { @override Widget build(BuildContext context) { + final Size size = MediaQuery.of(context).size; return Scaffold( appBar: AppBar( automaticallyImplyLeading: false, @@ -57,14 +59,10 @@ class _todaycatchdetail3State extends State { children: [ Row( children: [ - SizedBox( - width: 10, - ), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text('Catcher', - style: labelLargeStyle(color: Colors.black)), + Text('D-49', style: labelLargeStyle(color: Colors.black)), ], ), Expanded( @@ -74,33 +72,54 @@ class _todaycatchdetail3State extends State { IconButton( icon: Icon(Icons.more_vert), onPressed: () { + _showActionSheet(context); FirebaseFirestore.instance .collection('project') .doc(query['id']) .update({'participate': 0}); - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return MainHomePage(); - })); + // Navigator.push(context, + // MaterialPageRoute(builder: (context) { + // return MainHomePage(); + // })); }, ) ])) ], ), - SizedBox(height: 20), - Text(query['title'], style: titleLargeStyle(color: Colors.black)), - SizedBox(height: 10), + SizedBox(height: size.height * 0.015), + Row( + children: [ + Text(query['title'], + style: titleLargeStyle(color: Colors.black)), + SizedBox( + width: size.width * 0.02, + ), + Image.asset('assets/icons/greenCheck.png', + height: size.height * 0.03) + ], + ), + SizedBox(height: size.height * 0.015), Row( children: [ //if(query['participate'] == 1) - Chip( - label: Container( - height: 15, - child: Text('참여중', - style: labelMediumStyle(color: Colors.black))), - backgroundColor: Color(0xFF00D796)), - SizedBox(width: 5), + Container( + width: size.width * 0.1, + height: size.height * 0.03, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, + ), + child: Center( + child: Text('기업', + style: labelMediumStyle(color: Color(0xff9FA5B2))), + )), + SizedBox(width: size.width * 0.02), + // 텍스트 다름 Text(query['cash'].toString(), style: titleSmallStyle(color: Colors.black)), Text('캐시', style: titleSmallStyle(color: Colors.black)), @@ -112,13 +131,36 @@ class _todaycatchdetail3State extends State { SizedBox(height: 30), Row( children: [ + Image.asset( + 'assets/coin2.png', + width: 20, + ), + SizedBox(width: size.width * 0.01), + Text('${query['cash'].toString()}00', + style: labelLargeStyle(color: Colors.black)), + SizedBox(width: size.width * 0.03), for (int i = 0; i < query['category'].length; i++) Padding( padding: EdgeInsets.only(right: 10), - child: Chip( - label: Text(query['category'][i], - style: labelMediumStyle(color: Colors.black)), - backgroundColor: Color(0xFFF3F4F5)), + child: Container( + height: size.height * 0.03, + decoration: BoxDecoration( + borderRadius: BorderRadius.all(Radius.circular(20)), + border: Border.all( + width: 1, + color: Color(0xffCFD2D9), + ), + color: Colors.white, + ), + child: Padding( + padding: EdgeInsets.only( + left: size.width * 0.03, + right: size.width * 0.03), + child: Center( + child: Text(query['category'][i], + style: labelMediumStyle(color: Colors.black)), + ), + )), ), ], ), @@ -127,7 +169,7 @@ class _todaycatchdetail3State extends State { borderRadius: BorderRadius.all(Radius.circular(10)), child: LinearProgressIndicator( value: 0.04, - minHeight: 8, + minHeight: size.height * 0.015, valueColor: AlwaysStoppedAnimation(Color(0xff00D796)), backgroundColor: Color(0xFFF3F4F5), ), @@ -135,15 +177,13 @@ class _todaycatchdetail3State extends State { SizedBox(height: 10), Row( children: [ - Text(query['percentage'].toString(), - style: labelLargeStyle(color: Colors.black)), - Text('% 달성', style: labelLargeStyle(color: Colors.black)), Expanded( child: Row( mainAxisAlignment: MainAxisAlignment.end, children: [ - Text('${query['final_day'].toString()}일 후 마감', - style: labelSmallStyle(color: Colors.black)) + Text( + '100장 중 ${query['percentage'].toString()}장이 수집되었어요 !', + style: labelSmallStyle(color: Color(0xff1A1A1A))) ]), ) ], @@ -155,32 +195,42 @@ class _todaycatchdetail3State extends State { padding: EdgeInsetsDirectional.fromSTEB(24, 0, 24, 25), child: Row( children: [ - CircleAvatar( - radius: 30, - backgroundColor: Colors.blueAccent, - child: IconButton( + Container( + decoration: BoxDecoration( color: Colors.white, - onPressed: () async { - // Navigator.push(context, MaterialPageRoute(builder: (context) { - // return catchme(); - // })); + shape: BoxShape.circle, + boxShadow: [ + BoxShadow( + blurRadius: 10, color: Colors.grey, spreadRadius: 0) + ], + ), + child: CircleAvatar( + radius: 30, + backgroundColor: Color(0xff3A94EE), + child: IconButton( + color: Colors.white, + onPressed: () async { + // Navigator.push(context, MaterialPageRoute(builder: (context) { + // return catchme(); + // })); - Navigator.push(context, - MaterialPageRoute(builder: (context) { - return CamerLoad(cameras); - })); - // - // Navigator.push(context, MaterialPageRoute(builder: (context) { - // return CameraPage(cameras); - // })); - }, - icon: Icon(Icons.camera_alt_outlined), + Navigator.push(context, + MaterialPageRoute(builder: (context) { + return CamerLoad(cameras); + })); + // + // Navigator.push(context, MaterialPageRoute(builder: (context) { + // return CameraPage(cameras); + // })); + }, + icon: Icon(Icons.camera_alt_outlined), + ), ), ), SizedBox(width: 16), Expanded( child: FloatingActionButton( - backgroundColor: Colors.blueAccent, + backgroundColor: Color(0xff3A94EE), onPressed: () async { Navigator.push( context, @@ -198,6 +248,33 @@ class _todaycatchdetail3State extends State { ], ))); } + + void _showActionSheet(BuildContext context) { + showCupertinoModalPopup( + context: context, + builder: (BuildContext context) => CupertinoActionSheet( + actions: [ + CupertinoActionSheetAction( + isDestructiveAction: true, + // isDefaultAction: true, + onPressed: () { + Navigator.push(context, MaterialPageRoute(builder: (context) { + return MainHomePage(); + })); + }, + child: const Text('프로젝트 참여 취소하기'), + ), + ], + cancelButton: CupertinoActionSheetAction( + // isDestructiveAction: true, + onPressed: () { + Navigator.pop(context); + }, + child: const Text('취소'), + ), + ), + ); + } } class MyClipper extends CustomClipper { diff --git a/lib/utils/widget.dart b/lib/utils/widget.dart index 4677dd5..18ee126 100644 --- a/lib/utils/widget.dart +++ b/lib/utils/widget.dart @@ -3,16 +3,25 @@ import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:flutter/material.dart'; class MyWidget { + + Widget DivderLineMyCash() { + return Divider( + color: Color(0XFFE7E8EC), + height: 20, + thickness: 1, + indent: 15, + endIndent: 15); + } Widget logoImage() { - return Container( - height: 49, - width: 111, - alignment: Alignment.topCenter, - child: Image.asset('assets/LOGO.jpg'), - ); -} + return Container( + height: 49, + width: 111, + alignment: Alignment.topCenter, + child: Image.asset('assets/LOGO.jpg'), + ); + } - Widget IconImage(){ + Widget IconImage() { return Image.asset( '', height: 70, @@ -21,32 +30,31 @@ class MyWidget { Widget EnterRoomButton() { return IconButton( - onPressed: (){}, - icon: Image.asset('assets/Make_room_button.png', - height: 200, - width: 145, - ) - ); + onPressed: () {}, + icon: Image.asset( + 'assets/Make_room_button.png', + height: 200, + width: 145, + )); } - Widget MakeRoomButton() { + Widget MakeRoomButton() { return IconButton( - onPressed: (){}, - icon: Image.asset('assets/Go_room_button.png', - height: 200, - width: 145, - ) - ); + onPressed: () {}, + icon: Image.asset( + 'assets/Go_room_button.png', + height: 200, + width: 145, + )); } Widget DivderLine() { return Divider( - color: Color(0XFFE7E8EC), - height: 1, - thickness: 1, - indent: 15, - endIndent: 15 - ); + color: Color(0XFFE7E8EC), + height: 10, + thickness: 1, + indent: 3, + endIndent: 5); } } diff --git a/pubspec.yaml b/pubspec.yaml index 6f423d5..579479e 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -109,6 +109,9 @@ flutter: - assets/icons/chat_map.png - assets/icons/chat_photo.png - assets/icons/chaticon.png + - assets/icons/mypage/MYcoin.png + - assets/account/ + - assets/icons/bottombar/ # - images/a_dot_burr.jpeg # - images/a_dot_ham.jpeg