From a2950f699796ca619cc1d247c65c502c9dd00763 Mon Sep 17 00:00:00 2001 From: Carlos Lopez-Rosario Date: Fri, 1 May 2020 02:45:54 -0400 Subject: [PATCH] logic for game card --- assets/school_logos/UNC-Charlotte (1).png | Bin 0 -> 9154 bytes lib/models/game_cards.dart | 257 ++++++++++------------ lib/route_generator.dart | 3 + lib/screens/sport_schedule.dart | 114 ++++++++++ 4 files changed, 228 insertions(+), 146 deletions(-) create mode 100644 assets/school_logos/UNC-Charlotte (1).png diff --git a/assets/school_logos/UNC-Charlotte (1).png b/assets/school_logos/UNC-Charlotte (1).png new file mode 100644 index 0000000000000000000000000000000000000000..bd01193eb3bb39468132962e092f44b489599135 GIT binary patch literal 9154 zcmV;zBR$-SP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>DBUed8K~#8N?OX?V zRMobggwUlcO*%q=BtS@=mXJmW5PApcC6I*l9#TkVGBfGD_YO#}N>dcU2qGd?MWjdv zDT)IAZ>=*Eir)L~#mm+E?#ueV{UtfG_c>?(dzF8!y(gjuX^;kKkiSp>kti>9&XoMr znZtCK8sudqCw^2|UZTw}WyvlX8%w+g=`J_OKP!dVO9!VbrHE6Bk*~J7Ta!F8cJJQG z4!VyUDuMIl9Jp{2y%g{4&5=6_) z(3618PmrN9ZDNpaNP|2t2M-=>Riv{0+L9u%$ln&CiG$!ZdkA)XT#a^tBMC$cSOkhu ztd{>=nLA&q8`dE8GGRikeu>KVGrKSX(2oF|Wd;+I7C5lpA2oHmptsB%A`c1XMTt?F z==4SI#@yz*p$$?miFgSKLL`#RkKG+&%@xw2du2Z(x z4Q&vX+9c;q(;{>L5`_`9Y>I_bdLt{&3_smGhdrl1hsbRh8n2*iMI}XflBWFp<7DQwN(K!#!{DspEE0PZ^RDQTe@+7rRfRLfDDJKsh(yg{lH?YB>6 z09gY$rEA^0z=~F2p|S4Wu%2pQM%y`Ql_@s?@}Ly*@Ou| z!=A4pQ)z|xaASOR>U}{AS8dLxh-?Dal@e4YIKD3uL3fA$$0Ca3<$7BPOR+u>J0x*y4(E!m1D>Dw=Gl+KW`R9 z08%O^a;Kk78>3g}7D$iP0=RESf&k#1`}fc>bS#>Cm?K#!M@{xjiS{o40a95R*EU@_ ztzV92PM-q@zH6qt{CDNRfdkEI(q<1XOBgq9Oa7F_>$4{=s7##bQkAi2(9WGZTj;v| zL)lv$*)v-yztfL%VLt+Ji4{b8`sme_G>`z)gbu)t^^pRAEb=5b;)JG9#>r8lah;{R z&0ixscb2tSmowR|GSP8oL7eURv>54wj9A&d61Cll>Vy$xYqKUUE{LCMbo@9P>xPI* z(&kvaljfRSk>K!UYK-J(r9z5TaWbK)Vx=@`$xp@V;b$u29d@iuaY)I5@&k`s-ni?U2ai9d<{3Ph*FM%{zjD@SDh>4SeKzdlJ9)7$w zc~oAd#&LDFQu<3^tOT|p5_F|Wa~)65OWR)ak)k_Yv!wCk>7MQ}Qbbb3)DW=Q3h8ya z&lk1H&a2m@kBwblFk>9yVNjDab&N_WMH3n?3M2rh4-o(~8PE>dYB8DcKx}yqK(EzF z1fU6g>7F%7qyL&nyrF8jWkr(hjfIiclw;D1d&(*LaWQi^(FD?f#e;<^h-ifv-3e4% za`4LujAg4N=tF-CeOK@pU1RFu_1xdT`K+~%42A(x;Xbp8Fb9zKB&p;m(+odM3$x2> zC7CVXGnk(5I#2*mLOd`xUIJB!A$Dwt(!mD=txp#su~&=)Rf!{GwKMt?C3m%|byG=en$diGP!68tLh?VAuR5&4VOD<*&`SbkEqJb;CcYCh`*`hzstIeLItM@Buz+k_8Q90BimV0IO5R25HnX$}4GN1cp<96^dgmkR4-z zWQurSepD*F=>4C5#KEtQA!S!JrsM_V%`jJ?z$x;U!=3<7h_Xa}j3siThoLHUGq_Y6v z+f(`?pENKom}!jmoml3UtP(85Um-(n^5{tIto|e^E-r3bN&&(tlr)Q8zB9diYP2OX z2#AzbmV&u#s`b~s>Wgyq&P~YU7Yh;4kpL_t&{K6|c5aLo`h0b2pYV5nk_)b0`VuFP zY(Osgx13exs7W7-BBcaL5vH)=h+7Y$pw-mK%!Mf2wT%Fv-!fxltE{08Gs2k@yM_C+ zIHq}0q#lZubl=*Pi7T`-`;%mC!4i2Y@uv=~1!OW)$aD&0wcv3}h!}$6^a=R#=w{r! z{xzOFex!YCoz#7M3XMG_Fz~cSRHP*`33zt$8>+m8&o7=og4lrGs3}|^{LNC3G6sne zLviEU*SLQ5EXtEdLJ>X$&Ff8@LFC5ZEvJQTYJk=)3=kJ;hO`)Sq|h^XEX$7%AEHm> z6zXRN75UI&)#z!usr@-plj!0bPIQA;T%TS#G{TBZ_ZfgGtE`Y1X)1t{8e@ghtf|X;qZfQ}gAP8E1_Q;$EqAEh);3 z@=y~p$pL~{rjr@wr%ph}Kt~!cL7)!&q{v|?OdX4Ll`AOqvLvlB#m1_oIP!4`Y6@nP zM)rE@!*1O;kK}0bw;Bh0v|U9(zzMU17(@av#149LZ2%eL)Exzh9DxTAg$WVHvJ`x{ zQ3z;*h;k7vx>o#Wr*a#z#?{PTNzs=8Y)Sl0MS*|;WWcgjVnq55g@Pg~1IZDPTMltC z&PnshoE8R`8d%_zCbnA);?*Zf|P4VIG zbX>W70_(}tBUg07?yV{TkRu;gAT^{vx_S&FEhN9#tqt@DKz}##fAm}xY4@?i>x8~6 zlk-9Z09{r}QLeV%rJL5DCzTq9EH~nEg72YKpBrk8O46Dlq7qA{y@eJ{8le^WAH%+F zU@Pv7SrhxhZ>bS9K|{%$EYQuD#u4}&L^uMck(ozPbPe(_!JMgm(UtO7dJOFB>|tq1 z^oM?*=Gv8_skyKaoR$@(j>C@+ZVP~Hs_{cw_#n*7azj_IQ9}RL%|zrghmb{>(ZWe_ z=hg+G@AtQFpnbpyVZYdiEN6X^!@>3W^IW!VOMRW^_NPdB!sz(|g<%IyCd^vs5-fpu zmJ#&dr0CbgK$ygDTe~i=p~HOA5dEHPzF(2Mp6F3gIoCYKpCZJMo5bl<19tlbKjlC)@|>hsv;Y!i|0TQ z*ca<6JOuDqvi7be?K2VH+a^E^p9pItQy?jgAAYec*)@=!{qL78TjJVMo_cD0m{{v~ z*m<)yav6!Epc|R@%%RY8HiXFRO^60{f{6XnLL$+=HWYm+8wn-gbdfuQG*?YL@AdZ0 zo&soZZ?BuOR(`m958ggO!e>io6SqqcBTH>Z5q~I>qbSO*vOr3-8A{V!@!p0Y96wTv z&puf#MDF89HVXH6^!PD`#m%MQWlHZjlo~B2k$fiOHk3AIC(2QoIwqdy_-~c6va%M{ zi6cHz$6DjHdH{onyn2vXb0bGCiliVB?F7+E2a1gJSrA<#@Vb$Y@(yG2OcN&XI7(-c zudK+BBii2-ZQC>zKx*E+Iri<_Crtc#$;vK(`Ox;r(UA5k&1pRGNYY}yS8}wu0H`{2 zkdS$>W)>umrl@~U82irQ-NgOa|5{^gmOrdD3(=U%|H~=u^s<4WpBM!iIVv(|4%g1~ z-ylSy+f*ev?N%tn=;B3S`4D~J$Tz_lqW0vwT9X#_=>U;McZeL`Li5RkF@y-OE&00z zp;i=?DeEB369NoH$aIA@!n}r%pX>t%c^9;A_e={rckYZ$n>OM8{rds{_2TB{4x|3B zA%cQcS}f5Z4f#?ERO||}h_-OB;)P-J-M=eM7{l6UrkV%Qd_#zn-Gyr`$1i>(0Lh$? zt!R0y6qWIgWx`}%wVXL~rb%_O%NDg-f_4lZ7cN=zWW9x`M_pcM{ky-0FvR2z9tzikc}zRah(X;;j+5tRGB` znxj>#rs&qa4;&pwV&1$3aCdjd;>C+Ge*AbC85yB*=xug?!^)oA#!9#4M98y9?F9^=Fh^Sl=<3%2LWgq zBt}`H)7eXxF1^~LA61#tXB8*NC}F1uvE~KXK(GHBzkB)49b3SEnF$J$xF~9cWG2?6 zfr_93aJG2^wl)$(MJrKPcldX})XPIkwT>P=3bk5|t5>h;u4?5mnWDLdOwpSHQvD*z zdkfDVK$(ZVyer<2`?nynr8&%{=*!fL zKO^v*Lab4uvAtf9?%svw^lD^v{-R+8YS|+W@d6#0P3qoA|99YVB;<6A3kh6}VG6Nl zTRc&SyTWAtp4_;58)vVa$Dwb&#GaF%V%LdJaNw(BI6=|zI3@ktzc_%E8*^aDg;~MT z>%e2pTSR6o(#Nc^y(tAGK1ej?{Mr4&eKU8}YI&X~fyU;^TE?!2iw#^aUt2t2@OT58vx1Xf><}jM zTe)!K3MxO|4!3dz(T4@-7CHtkeP~jiv_S3z$Z`wqPY)vF{BtR3%p#&l?xZaYTzz9V z(z^p3Xz|ixjF1y=k6V|IgJZRCO`=fiW4_1WwWh3RNFe3jzEU*e?1@36#uoLa4{r~M zQItR=I&I3UJ<(s5zr1grO7`PGe*%z*u-=$KFM!vsZBwYi%!C4h7CaLIQihA?4{OnS zP7a*?9CHgJ@OmKSq4Ng_<#f?9&IAY~Hn9~n*`-8s`8omD%FkZt+nm8=P2$X<9=s3& zZ^Qr$Gi-&V@c!6b>4ql{ZsM~G-@rz*i0)xT0BIM!4S^T2iU3kd@5IMQpRA(y3yhV) zFGfoKPKH#4En6MuT*N1U4wZ?jca~_x_2hp@Em}PXZ1%xqEzsCoB{C9 zi{HKo-W8${3rkkPfRcC7LRx?Y17WV33)i^mS`A?$&Lw_ocFD_;{lP{Yy>uRz@BV<> zKmCmJw{K#@XCGjEemM0fQ2gmV$anQOZiy159A6!-!dF+mL%=(kXvUxOBJlf?PwP(F z6&oWafSk)qOH13ADyQ`;R=A8SRyZvvinN(uq8K?TkFN1tU%5=Eg?@$F?$CHXuoyrq zK2=*4sc!@OwH5pxGk&hksY3?h3ti4xFNeQ93B!nq!pTrUgO(11$C@;JvNsQw{;YLm zP83lGMoz}oFAfT09$fhnr}yXJ(B^0y-kpj|UmpN|d4Lm#YGCSX1wD5$BvVYVwa^25 z4{t{B#(Z>Qj>l%MGudVYpd*=V4&}!+YU#tO1gDBhrB!03Qk+<&l&Y)aq$+O0?{uv) zPMSq6w?Zk+d%hJa#d+xpo6;1`BooHurDR>6d%rA&^e18ak$1UJrr;q#C1!}(7T6KR1)9;A`v-{h1=-F)yPez|uQ zTg%;`AYL|pg&`b02g2Q_FV>eV!Y3aVBV*+tc#*s4=qbm%g!ypF^g>f#%CniG)CUTk ziFfsp!8KTdQ6UmI28%H!LWc3tHh;5?d#*iyeQcBs78B9VR7fA^rYz~sn7ou!C5)OL zN9Nm@H)+V>>T#Z{1CQ%P=Mc5_q@9a0ZARrtnA}!==3!iJer7C0^G*$>8^pmxpDNcPKj_@3`>if__ zIj)qUTxGXL0OVz*Ceb<3lZ&Q&OkxiCD1E)B06N)p6-woT_Js_<=GB2Z=(G~PAseD; zUGYYM6DsQV;`ZeeIQ`iM9DF|y3B(P1Q#9lk&e*d?=)b0TA>xAGLNC6~6A*kD0kO;y z$1Z&>M%DlY(oO<*~t`yl4sDro3EmeeL=P%JHaJ!d3gq*YKDH5w zDo0$pdTYYL`EI2hn+6^lq%FGIS=_m8O*6-I(Xs zi}83VIez?jeCZJ=0 zvk+92J1fAs%W2}1B}xe<1`w!ZYRjv&N7Tx)r(yV_&XBmj1t;>EoeA8=6nW2FyMo*2 z55di=7Y5Ahiqwiw{BY-ctW9%)z4u@=^RmU!i|6qDi5=uJ`arU*FUETfz*66VXtA7g zVy(*>N#IA~E1;(SKf_4P^N+A6|=`J_mHO^j@F9|v8YCSyyLxEUj*c?fSwo4kA0*r zf@{r}xFRXWx|H#MY{R`c*{f%Ito(NG0P;!9_>Hy4B)GL}(*&AuGZe*9%0~3X+RqaD zq)`FuvT^;!cR0K&30cWwF+nv4gB1%fDQ_jXCbGG7F`^WXu#R5_n-nh$i!#r`Q@@*m0_~ztpd~uXa^x`Re z`RO_g4|k@88i?YLwvjdbh_#hoh+LD1>bl*yd+jW?7R?p3Pqb(V<;UxA_2j!axHn5U zFa6!^TSz5~=@3j*NB~iWj=mBi*s_OfGM4|be;-hh;nyRB0PMp@Cz!$vdq!bew=_UX zh$(`itkKES5`*Iw;N7Ep@hj1g3#WGB?6Ix5e&r0VUOk7KSH8m4izjg9(sArqzY>?u z)!`=j!o$0>F-<}IkZ4R>x`&m&H4GQ`!qmu7ICE3~LjH9l?hv(_5yd-o1Rw=5hj0nXG!6&D!?{lU2c$MXvRz)B%>@%S zVFpn4%m?z8rIeh!fwu&5#Z0VTr$lMaEW}1xAx>cnwbBkMN|oX$RZ`I8K6p17hxQjB zoj8?>K8vTc%F&B+TM8B&5jirFZ<|~gg=;@QCIB`fD{?5DeTaD1Qwoa6&FJ@Yw{GC} zw+AuRjTV#w2B&O|Iftf*KD$_Zbgd|30@Q`x`1Q#ntj(SZvtfM6r^4RytRiqw}*??G6wu@+=XCDre(M#U$4U=sT_xr6!m@WOfA`uan} z5qW=u`6mJR22rV0h4h!2^m(RQH2$DeCpuNmjiy!eB_6ntB4_g^(Bo{xt}l8{9EeF_ zVz`k1bM~`9K$Q}!wiF?TnpaIS^w?a8q*fl-iW{fiMbRo#82f6?qaGAJ0@6HoI^M6_ zf?L#Qd(j*O5S8i9+Xc_{<1bI^Q}B4_;5J-4v0XU+cKF?RoZ6L$9VH9VZuw9cE9c_z zz3Vu#Aq1}8lr}Cl)ux6&-Nf2>TgW_&Fg4AC-eos__^u9jZ=A;uNUo6AJ?EV%d#!Ej$QG!m*KOq97vgrmF;aWgR?W)v(u2Em%B(Q85$Qr}0{ zh}bsrwZjtg;MdnDF)jxU?ro_6!!P5vG_-Kc_1!>s~Ojb>T zL!c#w_*tWepA9DZ7{NE#1PXE`f#e%Ut{8}R9;6)g3r5ciC-bdMasAiJT16@I-pW== zf9%VpEcS!-W~^)Tr}q=G5lxs0N;0QBJvDXx?rn4<6B5eqOb?clIZ~7s>U_U#yhpo) zXbm3&{(F6dM)%-Ui;oR+zo(5pW532J89&QScMrbC{rOt`efj&sJl>78jcbhj(~A_t z&k_3UP6)(4eq!V*Wj~c?x%FoZ{$;67aN4qv&6rn+%UQe&rUS5R=axvNTsT8vC8Tpl z4)OnV0CGQAFJuvM+e@+k>*Lse?j-hqbK*aueL(GfYWt||JaGu`?4vX=a{W-cQhbmJ>VMbw^RMOgKJ~rLra3at4y5W#|^YMR7yLs*)zM-^jU$r|b)pFSQkycW`;=`iZ@p7!qnLS3B{3{WF ze4*nG&lm!bqaq*Ku+g5qajXl`y4OsbNc_X+cUl~PvVW>l=Uc_8DjP;qo+O&szp zwQJVQ04o+7p(aHNxeu4LFVTemEyD`Iu8GT5A=W6?$nTe?E*NTIVbN;Dh!O3C z$-gS8Oq;N*AYO{zys6GLw*Xt{nLf)-nl&}R!s-3tPf>eLqy&=#P2rI^0|oD|N6C@* zQAoLR;h`PS?5c)yh7URhk0PMyUP}pZ!P)ETaldQ2>)g*%iYAn9^@*E?VKLKSxMC#q zxo*hOlfmHV{SwW9B5qe73B9ivg=*R3g7~q*IcYO9v&j;PBzoe+iN21Gj$T$)R(<*U zzbs`5&Ka4BHuO*(h`cR0oXlDO*%qg>vu!ItRkG1It-dqUf&NAe@Uxn)Zr6{RUAS`Gm z?5E4nZUOT}@?E4&?$KhXR8qvo{c|mb`l`vdXVK4!MEg(j6DL3YCuQy1w>LC4HXc8F z_U!5@Q>LtUb#;CDa@OCH$UU5$j4aJel%Wr6BC9`dvQuEudoDWj8NX@c`yf8T9NDU2 zNQoMV%s7f}h4Uz_OTmfHw@|P-g-7>qP?X_A-&|^-_V^+2@CPEqS8)H@aa{Xm7diWK z?B5WM^zd<*;nWYkjN3uv&{IoIeC3dmTS<@SFHPI;DTuN4%Zrlu=SIo`{&ABBmBf$q zE>D?ezc{Dvg+oLHUJDx=n+^=z>OJ=S{3Rw_=$fm>98ZP_u zZhxC+N7LH1ZUTE*SFBh#h*G7YNR1vW{O^K{SQF%`Em4?ci_-KFsK^?PitN!S&m4(@ zBs(NWTOril5VOa0gw;R;S`fNl_mNThLZiH5gYPT z=DhrF*?)>;t7ceKCpqp**T^v@RE(B|jLAS6zPoH*H&szm$k<;jy>$zkfA{$C`yxw)+?QpPQ)P!Hde9xHhiL3CzPgalkq zY)3#aFBJZt6>rdUVS;~hW78x}LJBMqUTFma_AAv8XXfGbnmo~nu;kx-O6TdaH3 zf4>x{r<+y9j|!{M4Bwd>C;vWCAp@UB35eC6Kb{*S!`rK5SV+w?Mv7pC6iT8NN%UEM zoXzD5wcVZy&4}2VteFn+@$vukSN{JiB_qSXQ+4Vjab^72c{TB4!ir*KNmUxh{CCn^ zD=Jj>Ii*TlRdu3kV7bP1R%P0Fi~N+3j=G@@(jX1eAPw>#FCx+Z001)uGuUhlkpKVy M07*qoM6N<$f?=_U%m4rY literal 0 HcmV?d00001 diff --git a/lib/models/game_cards.dart b/lib/models/game_cards.dart index 1cde687..cee780a 100644 --- a/lib/models/game_cards.dart +++ b/lib/models/game_cards.dart @@ -1,49 +1,27 @@ import 'package:flutter/material.dart'; import 'package:http/http.dart' as http; +import 'package:table_calendar/table_calendar.dart'; + import '../screens/sport_schedule.dart'; import 'dart:convert'; -class GameCard extends StatefulWidget { - final int sportID; - - GameCard(this.sportID); - - @override - _SportsCard createState() => _SportsCard(sportID); -} - -//List _selectedEvents; //original that makes events work -List - _selectedEvents; //Removing the allows it to still work. Proceed with caution -DateTime selectedDay; -Map> _events; - -class _SportsCard extends State with TickerProviderStateMixin { - int sportID; - - _SportsCard(this.sportID); - - AnimationController _animationController; +class GameCardFeed{ static final sportUrl = 'https://charlotte49ers.com/services/adaptive_components.ashx?type=scoreboard&start=0&count=80'; - - Future> getEvents() async { + Future> getEvents(int sportID) async { var url = '$sportUrl&sport_id=$sportID&name=&extra=%7B%7D'; - http.Response response = await http.get(url); Iterable games = json.decode(response.body); - return games .map((json) => sport_schedule.fromJson(json)) .toList(); //return games.map((e) => sport_schedule.fromJson(e)).toList(); } - - Future>> getGames() async { + Future> getGames(int sportID) async { Map> mapGrab = {}; - List eventInfo = await getEvents(); + List eventInfo = await getEvents(sportID); for (int i = 0; i < eventInfo.length; i++) { var sportEvent = DateTime(eventInfo[i].date.year, eventInfo[i].date.month, @@ -55,127 +33,114 @@ class _SportsCard extends State with TickerProviderStateMixin { mapGrab[sportEvent] = [eventInfo[i]]; } else { //print(eventInfo[i].date); - mapGrab[sportEvent] = List.from(original)..addAll([eventInfo[i]]); + mapGrab[sportEvent] = List.from(original) + ..addAll([eventInfo[i]]); } } - return mapGrab; - } - - @override - void initState() { - //final _selectedDay = DateTime.now(); - - //_selectedEvents = _events[_selectedDay] ?? []; - _selectedEvents = []; - _animationController = AnimationController( - vsync: this, - duration: const Duration(milliseconds: 400), - ); - - _animationController.forward(); - - WidgetsBinding.instance.addPostFrameCallback((_) { - getGames().then((val) => setState(() { - _events = val; - })); - }); - - super.initState(); - } - - @override - void dispose() { - _animationController.dispose(); - super.dispose(); - } - - //----- Builds event Lister ----- - @override - Widget build(BuildContext context) { - return Center( - child: Container( - child: Expanded(child: _eventLister()), - ), - ); - } - - //----- Creates event display ----- - - Text _pastGameScore( - String homeAway, String winLoss, String uncc, String opponent) { - if (homeAway == "H" || homeAway == "T") { - return (Text('$uncc - $opponent')); - } else { - return (Text('$opponent - $uncc')); - } - } - - Image _homeAwayImageOrder(String h, String opposingTeam, bool l) { - if ((h == "H") == l) { - return (Image( - image: AssetImage('assets/school_logos/uncc.png'), - width: 50, - )); - } else { - return (Image.network( - 'https://charlotte49ers.com' + opposingTeam, - width: 50.0, - )); - } - } - - Widget _eventLister() { - var _months = {1:'JAN', 2:'FEB', 3:'MAR', 4:'APR', 5:'MAY', 6:'JUN', - 7:'JUL', 8:'AUG', 9:'SEP', 10:'OCT', 11:'NOV', 12:'DEC'}; - return SizedBox( - height: 62, - child: Column( - children: _selectedEvents - .map((event) => Container( - decoration: BoxDecoration( - border: Border.all( - color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green - width: 0.8, - ), - borderRadius: BorderRadius.circular(12.0), - ), - height: 70.0, - margin: - const EdgeInsets.symmetric(horizontal: 8.0, vertical: 4.0), - child: ListTile( - leading: _homeAwayImageOrder( - event.location_indicator.toString(), - event.image.toString(), true), - title: Wrap( - children: [ - if (event.status.toString() == "null") // no game yet - Text( - '${_months[event.date.month]} ${event.date.day.toString()}') - else - _pastGameScore( - event.location_indicator.toString(), - event.status.toString(), - event.team_score.toString(), - event.opponent_score.toString()), - ], - ), - - //Type of sport - Location - subtitle: Wrap(children: [ - //Should be either live time or time game will be, nothing for past games - ]), - - trailing: _homeAwayImageOrder( - event.location_indicator.toString(), - event.image.toString(), false), - onTap: () => - print('${event.date}'), //When event display is clicked - ), - )) - .toList(), - ), - ); + List list = []; + mapGrab.forEach((k, v) => list.add(ScheduleObject(k, v))); + return list; } } +class HorizontalGameCards extends StatelessWidget { + final GameCardFeed gameCard; + final double numCards; + final int sportID; + const HorizontalGameCards({ + Key key, + @required this.gameCard, + this.numCards = 8, + this.sportID, + }) : super(key: key); + + double heightIn(BuildContext context) { + return MediaQuery.of(context).size.height / numCards; + } + + @override + Widget build(BuildContext context) { + var card = gameCard.getGames(sportID); + var events = []; + return SizedBox( + height: heightIn(context),//heightIn(context), + child: FutureBuilder( + future: card, + // ignore: missing_return + builder: (ctx, snapshot) { + print(snapshot); + if (!snapshot.hasData) { + return Center(child: CircularProgressIndicator()); + } else { + events = snapshot.data; + + return ListView.builder( + scrollDirection: Axis.horizontal, + itemCount: events.length, + itemBuilder: (context, index) { + return GameCard( + gameCard: events[index].sportSched[0], + ); + }, + ); + } + }, + ), + ); + } + } + +class ScheduleObject { + DateTime d; + List sportSched; + ScheduleObject(this.d, this.sportSched); +} + + + + + + +class GameCardTest extends StatelessWidget{ + final int sportID; + GameCardTest(this.sportID); + + @override + Widget build(BuildContext context) { + final feed = GameCardFeed(); + return StatefulBuilder( + builder: (context, StateSetter setState) => Scaffold( + appBar: AppBar( + centerTitle: false, + title: Text("49ers"), + backgroundColor: Colors.green, + ), + body: HorizontalGameCards(gameCard: feed, sportID: sportID,), + drawer: Drawer( + child: ListView( + children: [ + DrawerHeader( + child: Text( + 'Drawer Header', + style: TextStyle( + color: Colors.white, + fontSize: 24, + ), + ), + decoration: BoxDecoration( + color: Colors.green, + ), + ), + ListTile( + title: IconButton( + icon: Icon(Icons.home), + onPressed: () => Navigator.pushNamed(context, '/'), + ), + ), + ], + ), + ) + )); + } +} \ No newline at end of file diff --git a/lib/route_generator.dart b/lib/route_generator.dart index 3af16f5..d0d2c0b 100644 --- a/lib/route_generator.dart +++ b/lib/route_generator.dart @@ -1,3 +1,4 @@ +import 'package:capstone_hungry_hippos/models/game_cards.dart'; import 'package:capstone_hungry_hippos/screens/chat.dart'; import 'package:capstone_hungry_hippos/screens/schedule.dart'; import 'package:capstone_hungry_hippos/screens/standing.dart'; @@ -31,6 +32,8 @@ class RouteGenerator { return MaterialPageRoute(builder: (_) => FavoritesManager()); case '/Twitter': return MaterialPageRoute(builder: (_) => TwitterFeed()); + case '/gamecardtest': + return MaterialPageRoute(builder: (_) => GameCardTest(args)); default: return _errorRoute(); } diff --git a/lib/screens/sport_schedule.dart b/lib/screens/sport_schedule.dart index 5dcb470..a7684b4 100644 --- a/lib/screens/sport_schedule.dart +++ b/lib/screens/sport_schedule.dart @@ -62,3 +62,117 @@ class sport_schedule { ); } } + +class GameCard extends StatelessWidget { + const GameCard({ + Key key, + @required this.gameCard, + this.numCards = 1.75, + }) : super(key: key); + + final sport_schedule gameCard; + final double numCards; + + double widthIn(BuildContext context) { + return MediaQuery.of(context).size.width / numCards; + } + + Text _pastGameScore( + String homeAway, String winLoss, String uncc, String opponent) { + if (homeAway == "H" || homeAway == "T") { + return (Text('$uncc - $opponent')); + } else { + return (Text('$opponent - $uncc')); + } + } + + Image _homeAwayImageOrder(String h, String opposingTeam, bool l, BuildContext ctx) { + if ((h == "H") == l) { + return (Image.network( + 'https://fiusports.com/images/logos/UNC-Charlotte.png?width=80&height=80&mode=max' + )); + } else { + return (Image.network( + 'https://charlotte49ers.com' + opposingTeam, + )); + } + } + + @override + Widget build(BuildContext ctx) { + var _months = { + 1: 'JAN', + 2: 'FEB', + 3: 'MAR', + 4: 'APR', + 5: 'MAY', + 6: 'JUN', + 7: 'JUL', + 8: 'AUG', + 9: 'SEP', + 10: 'OCT', + 11: 'NOV', + 12: 'DEC' + }; + var decoration = BoxDecoration( + border: Border.all( + color: Color.fromRGBO(0, 112, 60, 1), //UNCC Green + width: .5, + ), + borderRadius: BorderRadius.circular(12.0), + ); + + var body = Column( + verticalDirection: VerticalDirection.up, + children: [ + Container( + color: Colors.white, + child: ListTile( + leading: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: _homeAwayImageOrder( + gameCard.location_indicator, + gameCard.image, + true, ctx))), + title: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: Wrap( + children: [ + if (gameCard.status == "null") // no game yet + Text( + '${_months[gameCard.date.month]} ${gameCard.date.day}') + else + _pastGameScore( + gameCard.location_indicator, + gameCard.status, + gameCard.team_score, + gameCard.opponent_score,), + ], + )) + ), + trailing: SizedBox( + //width: widthIn(ctx)/3 - 5, + child: Container(decoration: decoration,child: _homeAwayImageOrder( + gameCard.location_indicator, + gameCard.image, + false, ctx))), + onTap: () => print('${gameCard.date}'), + ), + ), + ], + ); + + + return SizedBox( + width: widthIn(ctx), + child: Card( + semanticContainer: true, + clipBehavior: Clip.antiAliasWithSaveLayer, + child: Container( + decoration: decoration, + child: body, + ), + ), + ); + } +}