From e0e926562b43b782fecacfad4d6cba2fbdd24ab0 Mon Sep 17 00:00:00 2001 From: zontreck Date: Sun, 23 Mar 2025 18:14:32 -0700 Subject: [PATCH] Refactor in support for branching evolutions --- assets/sprites/flareon.png | Bin 0 -> 13533 bytes assets/sprites/jolteon.png | Bin 0 -> 13009 bytes lib/Consts.dart | 2 +- lib/MainApp.dart | 21 +++- lib/pokemon.dart | 225 +++++++++++++++++++++++++------------ pubspec.yaml | 4 +- 6 files changed, 176 insertions(+), 76 deletions(-) create mode 100644 assets/sprites/flareon.png create mode 100644 assets/sprites/jolteon.png diff --git a/assets/sprites/flareon.png b/assets/sprites/flareon.png new file mode 100644 index 0000000000000000000000000000000000000000..b930c093286153662cb3fcd172bf1306649bd77a GIT binary patch literal 13533 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 z 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 Xt}*%U(lL)i00000NkvXXu0mjfl_=I1 literal 0 HcmV?d00001 diff --git a/assets/sprites/jolteon.png b/assets/sprites/jolteon.png new file mode 100644 index 0000000000000000000000000000000000000000..8c479d9024b944adcf32725e1331e725aa8dc65a GIT binary patch literal 13009 zcmV;?GA_-DP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw001&v zNkl_ViBZ9YMf4`q^d>yN--)MjaI^j)RVk8DzjRjEth< z*ccg6)UhjA0TBWi0t7UM9!Mah-J4rZ-({`!-Q;YtZ_abC37BXS@_U~5S?BEB2JgH7 ztL(M+VL$uX&wlo^pZ)A-Kl|Cwe)hAU{p@Ey``OQa_OqY;>}Nmw+0TCVZN9bK$?unZ zR@l$J%l&uXp+|0e(X`=ZPdaLJ>5(t2-@NF(&0FXGXLH%C|K9xDBi?t{^&cp(pM8rB z%U{zoy6or^>&xbyku0BnS$u2vt;wy0_33iIWo}c>EEm_fLA#-A=bXWQ_I~cKI5l|7 zbLNiSe8{QeXZQK>t-aSJw**7xR^{yPaQ63^ZfD$lTE&DZo?fB)6bp3Z*uPS!p2 zkRH3`$p_Y!EqYab+4Qe8Zt4C*e2dpK%cX7lid^P*ZR69Mam^cWLs$CEwO1bWD)zJY zF?{o1&#B*X$Sa!52EH0CE3Qgz)=7FR&fK0E{s)}dq7_??Wyarviz4WKCA?C*jTfVn z9zt*$NGF=VeV=c(Grz4Q*&>}9rkw@+C;LIO7m%81#|HM{FQB4%&L=2h*TysX?nX*w*OpPrlXS;me>eb>3 ziSg^P@kd;$D@k278_A*@fd|-w+2aFHa?9TYl^0m$ww?Jd0c>{m8?b3!?oFrC>^R}W zCOqH+m%e=28pwIi%FhPAy|G-jOI%sj1*p9|?+DViDBWI(W8SW^&Z zy}*h90uGD=2g*Sx3WHF0J-<|L=Jo91?9l;;lHQX-cmF?IWwaH*wB;UY(=E#T`A+jE zhQcYo>Ze1mI{oLzykPpgu3JKXZJ+j%!zD}?iyb%FMl(d&ew-Vk4#?eJ1}{cyiL5__Ial}k&+4lH2XCOg~yc~K0FCR7_xsl#wZ*fa_o zH^aJ3@X!XwrV(Lq#4%QfQ=aBH`*biysMgENTe9fwz&-2*Nae-_?4g_?>AFujZ9Lim z$ou?9N`5kNl%E-I!J4+Gy#vCu*^WXPlp>!VX5Z6n!DtmW4a53Dcxa=rW&`7LtQ&-( z(RKi84QNFWr{Ek+HN0< zd;FlU6OY=S71#p2!P&}-jpuL{Nb&$AkId;a)6)d3Z5!{ba$e}i^B2cq|8$2I?mOWKP(5yY{Ons8mAf6kSQk13A!PjlE9?pq`L%V&g7T(axTKk^{>(z)=K zmxIK@=vevgv1sAxd#m|-)+|7s*iCE6SyrNjo)6YR+yWPYb3#yd^!Ebdc<6p;HUPXD zUhfa4FPgn%!Gg7K)3!1zjo{Wh;X@ZWuDOL>#$P{8_{5oT!l90+CRA(XTdVQhcLO)F z7o*ry7+d}(XDTlWiw;jg(g5Y4+$+pj;F!4(bO3AagOSa;mC}2)^d9k#hdk-g#qy#>L3-DDo-`IH zE%?4el|Vd)6Cj({w^}eTTin9_v=jvEpKA29hGOM2JySce)pT5X1)TMH7#ibGMl0c2 zPZIw1?UrYr;2;s|)o`#D^?htr_09jiFI`BI<%5ntBWli?*Y=jZHPfA`%nD`naAn6% zccyld=UJ2ocoTQ`%A}$-&UU1tUJE?V>suFyT<$lvlXYG25)(#V^+Vz zM$l-4Q8iw0QP4H(o4!BRYQ&3cw&ykL_k|$Hd#`ZpX5_3{CoT5X(9=9yeYRHVQA(mY zqHM2_mIbR2KtHl26d#OL;kS+S$R8!$Z}|<-VlPLAmpz5u$l{_} z^=?nQ=Z|;QY0)l`DexT{^ zQ5s;1aGUox6$$_#k_%NJ(5&X{&AxU8( z0wDRfi3myw#iC;VY&h<4c+#(cjsaoqfq@f>)7pGj|3?v^8$&0Epn@=DP* z-@wBU!iO(_Z~P3b1puXFTneoZ9Sm5doKqsUCb`#wMG5V|9C+f5_A|pS^w{7(@_bW-F~8a$4bTf z&vX3Z21i#(A*x86DwH^8^jVHQ%<})9lJbm`Er&0(ltUnaG!mk5H6z_fwwCtr=9u1V zt(v{m6rZtrcMs(L5Pw3waA59xJXJX}^{4-s(BE`V^Q!Xz3pu^%d3|1SUJBF-!IeGQ zspmB0Yy z6+S=urHq&Ngcm(09Ur|L4m|+MMF%mY4XABauGJ_EB`&-pO2g|T({-JA3s$(puHFb( z{!E-Qbiir88#){D#4nD#BKGFIyYu%Sz>5w8b!s!|xwv=c(iw`?XQ!>gjl0`?0B=`T zn3B8mACzn<{opjnMDtD7YPLt1XnJnE%idZj1n`DeT8t5{xLQ;69T)w3i>IGt80d3g z!8V{dB*ZOToOtz!nO8MA^nB|rSP4}53ov`=h-Zg-(|;e%mHKm*SJ$2VbctWFf?1y0YBf~cx$1dWivby_nKWHr`%t!h{Zgd>M>W77U z*LaLp6k5ad0b$-O!`yLocUhFs#$}Dm->=&s)M{|R0!LT?OuoY>u0gdTq}F%FpLMxa z2YjXFpL8QI%%6#_U}!-a96SUxi?#0_TU4vRQ3z_sNZCQ35Uc5z{o%fEy#Ywu|HIz) zydd20IW(=7chHB!?)yKi{P@VoE_^xg8vyp?rQrSpy!rKqtH)UvgaJdRX%#PaA;`E8 zz~=q=@9zv*zUoO7r=7}O4_5f{m%l=zULy!KJ!OxB7b-sSzKG+GiNNHh3%SX2dK^(G z#8n}xILIo5F~w19ink?rgQE19P2A>|9hn_RYZj6PKrK8^mCNOBt@SJsIVeq22VA|Y zR`YsCPd(IA$xE8{gikj%Up7Ao)?65PJ!>)92=zrpIf=&;wAi<@GiZA$B1`CUwH4uFMeL*#NK`c=RCwh2+jv_ zAO@1AaOrmg{_n~I`Q&Fl&vC~c&9&G5hKn!$ADZ=2t(|UF_QU@5V3QURm?|a<5)>L7-~S(vO($z*N2UackhWsnPn3+4Ii` zWz*RzNc!=``K95fi#EPZOZO$Md7lRi0DEc$_@{F(@V}Oi~%it8a zls3|SZ>@02_lx}7g&JfN7k}jo2*R(fypo64ZOpuLc%H|rPPHtam*fGMhy|gI?*V|z zuNi@(~o(2>|ge`K;5y$aOVHlQu-+ztPI#5b^ zX`1@ZIS-KWwg`kusSqe=twRyg@$b2+QmOm`NXb}n;}PnGC*Jr^Lhbpj+MLU}xcscp z8$Hc0+qU@{TvgDm!qR%{sNo~M)6Na`$eCU-El?0BIT0`QU8HT?>i!&XHyL|u0M;%2 z%8X~9*nH~KjLuz=G}i8`l) zIhHnARdE(11vH>CX)DT(Jh$6j^xS6TNJ@W)^1Bc$BEm#^dU~D+{4byZvDTus7BZZ3 z0NVnSrpan!l22=`ZvaxrdCn0Byx3R6|B^=GU@}&FZXp{B%XFl zm$~vkLvQ5oy`s^S1?Gzp=xoISF26rOOj}q` zZj{hmgO{!X|4{JeAOam3P-Nzli%!xcZj5tTb!_Y%z)w5Z4EhI8JG!g1?u(v|=0|m< z#a2!zmC~~A16KxTfF_ul-*RbkVCaoKHz->rJwR49X@aYG^{6@P{lIem%*b6={wLOwI2BaP;7cM<7H9!zk6ns`5s1tF7w zxXidn7#bAP1ZGdS2xR7WXtLvg6F~AAhP7Z^H_5=ikoLV6Xd$QJSVTYi&(bP%%SSJjHKa`Ucy&Mxx;g#Sp?CpbuOC zwgu59pb23J-d6L$l>oB6jx{i~!iHvg$V+#0Kfz}H*_(a9XO0o)PN+AJy>eIWNRqpM zbt;dMUR}TGlb(#eUc>}J0L6k(C^-B8R6u?mptIPzOdZ$yahA>5)s@B)YOK>R5#1i4PL^Vc26GCBf~g0*C{Ut3qi z&3GSb-oGGT3BfVZRCY25onf%nP_MVBkKC6AV_)*h@pnmEBPa#MGN^G8W`9EkY!h?< zx(svy1wggUw~clHY_oJ=}Mncenj%uQM$?-446*$(OsE zpdDx*RCeY|F*85O&ip2rmUgk3b^-8XGP(=%W(K{3&+nag-G>X^8~@ewDlgWJ*1TlM zi<@IJKlt7Y*IvBGZ3-RhKIa!*BOm;D6m2{^2$FJG6in)9M$n4D^T7AOdqf&MACv~k zj1-x~eDZKO@>U!OfDaOY_Mjk8b*B=SpO01!wME*;wTAI@4_V(oaeBAI(%)*ewi-XK zxY2B0E6Ly&7sqdTVbR|(-%9r1;ejafFbhaP8xJI_3Qpy#nJ#Kqhd3$UT=Sm(Rln<) zLZSNYV+)0$7wPUbr%I`HlxP#ubWnk)=0&w;|HmG5=Y9!r>|*53rC(qd;OUL$zedc4 zbCin~2caVhEnjUOEyC5oa}5Cq?uJ$KR9W!?EF*^$f73Edw8Pbcla zU4zU1c67(3Z!Zgjm+x<|b+DrlRkTUf!V3f6tWiPj`F>bCS$C(?2rVQ)O|Ugb+|p?y z890AU^qO;lnB9Qf`_p6Dg`7b2;MvYpU#P_BAcU~kPJXQl)`Cb|x*dRat3l~32(rCY z$Jax)5TwWlnj$#q1{AjYouvI|B3sY=PLuOWV6DX%v-NdW?zd`UIL2jwv3etN&EXZ@ z;qduEG5!f!8I;bAcN%130458B0apcE1D7Zx%CCx-^h&Q2Rd(P68V>4U8W1vZUC&NPkyi&9`M+q2EwyfSFjeywy~8I-i&`yTjy z`J$<;qPbn+j5`Rv8`{Bdz|PS@D0- z%?;cBHdJPMCcI24S3c;?A8JLKz4n0;h{}#PfjT4&h+B#z?Z0G1Kl7h~F@W6{fXh#2 zH*uhsKKMGZl~+3(9fmW)6o`-oA`gR?1wyxtZ!4=90LFlG?f1%uG&q`g?iHwT20DEZ zQ~~^Xh{)stn0hv_)%bPm)={gD(Uo4$Ts}`pKLBc?`E9w55VTFtC7n~>i5p#0pe5sS z*jC&8C{o0x_dBsV?j68p$mu)gExUY2vE1{sli1BHa>>RQiy3>3nCgknS&u2nD}YvQ z!vi0@w)uItq1xuBwt&+I;kmmI&k#-j6wEjS!J(8O!bH=zX-8OVX|*C6qxVxDIS;S( z3t$YAU9vpxzL=ieMD`!7LY(1L#?ieP2Z22;gioSE)Hq|>t-ugnWt@Y zu`>f>y6f+Mu&cMQ$;ux+kv|jtp&EL>jn@B*bFmgCM^tw9XYzD@_KW1R3Z=j}kEH)2 zi1zVDK85w?V-ENUDws)U>F=E8?KGx}YplRlFUQq?ftWiH6}3aqvC@go+x&RPW$h$0 zJ_`U@C2Q27=?YDM?zAg)p{0~c7K@2yC}aD@mi`did2a=7-t|uiS-Xip6UW=M@!@ps z=U$$!`>cY5PK12Gr#+CY)OVHJ^KC&ebW`vv_d<8mbW4Y-FuIdZczb-uUckFl}DEavS@KNEo=Smp( z9E8sUnFda6zr1b8U&r8@ZIQLkw7a9M81YhCr`U>V!g}&?VXOnZ)a{m0K{iJF(GPyskqi&3pzyX*RWc zK1y0!!L%n|iQlyd(|CyFfphWdKY#=zbc4nQZPq#oE6R z4=*Jd`U%1)A_+nQ5~FA!ZUiLGerAdgBUBKH5wWmMDbUPXK*(DK&gFf-O~BdqF=HSV zusXl>O{^fU{D&x=_a^;&UrU(Fl0{r%C7lTc*pOJ}eAq%SFGm21j;EOmPF&?0?qS}SXK?|(&Y9{FU zeyrzQMB${{fs{vytXQ#v-AJ*ktLpBv!l-QHkPNFM%2J?(R*MfA{rl5RL3Ee%9>nx6}mwG+jZVaTh14}_Cf3=wiVFNvo> z1hm@WF^Sj2bX^&HGd}l_I^$X(;V~ksR;^+;(e0c&M=5m%;FFP=nVsd{wzYYsRA&Ho zcIwu7{IO5@Y(lc`BFw|*AX3SyK)y;zM+hc0UZy_oR2Be#`${2n%pOvK)Mc;p&qXlC zi&MI;iPF9=#pKf$XfxJA`mdq*jzD?cF2G=+N8GY*3?Zux6TvJ0hR*M9=#5r zl=7^#tI{<6iilj&Xf(cY*IjpgXU?2ChdJk-G4b+ir%@9_Ffkm!RD1L$RR`J6g67D* z46eA4cwMkv~^4QJ% zkA^+`-+(1Rlih&aci(-m`;1re9*}cax6YNWAHXRal60J(aY&92-51BQuPSHGxd9 z0F7H%81kvuaQNk8Jg?4zN!Iz*_q%5qZHx(o764-ns&p{u8JKbN6%nEgVurDeJ4i=s`z^`P54TnbQ@aNh9)ye5 zfgM9szJrO0l1Zc{sRTBY0`bB3qD5P79djxf9ZF8Q3ox(`1VC$j@VMUZoa@=y0Oap? zeu~$r?D$sW>-9QuoRFlB)Yz@E7F_8l96qXX3rbRu{3OMJ+bWAqMoAlYV(T{pHNbA$ zxuoFqX6v9PYc&tp8(9x%-?EA`*kj0;`@n% zwm+uKAV;Sr;`=^IYg!{KX+HcDn(Kc>wDDS^!5c_NZ^M+Hh%G-0YiY}5vTd2Rvey=C zQkBI^j4|1JPq1l z0qpkc{hjFCc$5NT+pSD|_@(Q3FxEueoN?}bzjPwFQWefiXYTiJd6=uQ6z*uAa- z%$PA_CUCNIjwDGi#;jIKT{Ygi%-pG}LC2ZyCMr9gGQ9HhGzOP}C?*L|PcE4zR+O^rMnE(i3KGlS6g3Ci;juPYzC>1`wUyuZ)O{`Tglx#>xgsU3j)N}tZ; zb#w>p=y7;?5CkVe8bqf5M&LWZa$pm%cLu;Y_e^6<*SPt=an8LKxW*V$9#?9u9U=cZ zGP5Vn9x%pC*|$4qa5g3yyMuL0-$r9-ImqN8@H|aenu+++5I`goZJcY%P7FeaOlE$Z zWNqA*O*4C>BM1s$$`Eua!=c^i6H0RLWvKW=b$f94UONbkqNwDYdvcnl-#5nm1Ms`- zjBIGF&mPxzCYl<@F-ekaGp^BS&}y}&s1l4T!Pz>ZAR7JMcnID>bMuOAA($wo6k%xq z70v<&jvVK5v3(G7^V`STvUxR#Vu+gHA|T0)M77mf_H!n?9X^*Lo*uYO=k>|87i+ia zh`llZz+7wXmNWmY6Bjo;&->bg53c?XrPQj9?qcE~u|0jORWZg)(FK@sB?zE2M5DLz z@X~kE+`JM*bqok0EOz6S7T{oF$~jgD8qflaZ2v$^UnajMAQROQ z5Fu-f_8C2`?BDyt!wRST-P5MOCfut6;GA0*MbU-8X0~S|;6!8)aG9YPW3~h!?+y?e z>#m`(aXHX76v!(X=X&hS5P`bThl=7p(NPeTwgK@Lm-FpaDcoy*#{u?B6G@5sa%Hf@qZF!Alvv=YL6)=Js6x zU~K{}L3P|f5{=%#x|`lcYvc|fuLN7i0X>UBX&e9o;zgp0tJAbFQmeq`K^WQq!-Ho0tz>v__%M#uWTR;vn01kUAmC2O6}7Mz9ZsG&BN1;A!j zzI^~3)d#O3syv7r{3%+ch^j@b~*d)I4q|5INA{2OpNu-f?p-&I~PB$Ami^(x-h07Naxst_2{mUG}~2m>e; zp}VUcih>rrmZQ7m5C@gbuxYI@v_WW8m9^HdA(H*xq%UB@`F-~0my)s9&H{Esk|bjy zvN`MX0l`KijNNl7BP%b))o(|8pnZrpUqf?n84i_I0B|-!Nzyi5ZGUI6ANE}3dj9IU zn>XI^>}Iq1I%CXTIENRO3+02~KGwOpqU*R1FH=GHcM(CD9OnSQrcfVsIGfK3jLp^v z(spZ1UKzr`Q3%_i=MUOx_{@yON4l)?>2l|n%Df* zJ{^E!vDk3Vjgk!j5kH;DyzSTb4|3zRw-&U)_ffk*U2kDic)r5(aLasDl zH8eK=IU?j$OHjijtN_j#GbcX3&cZh&s{cnKrax2<{&%nX*75sn05)vc&=QgL<7$uk zO+>We>ij7R7W^Q4oJ;_A^cteU>+&jKW0bP!yaFIwq)WG%@X)K-o+VMM`3{_W(DS@Q zn4DFre879e@47R;ESQ_0ClBn_@c`J&*fh;#@=B0bgFGZQA2+lS>uGJeX|o>q=3w%= zS2sEIR72NQipJZIS@`_}_Q?PMMnpC_=dcb;Z57GrZQIJY!{Pf71X&PtgZSY~F>wVD zoQ=`SFmY3ch{6ks-<#r-Hhvw)@w=?Gvda9EFge%h;)2)vLEmps+QP&Ip!_w`9`!eB z`8t9zTa#LxVmU3&i8Slr`%k&rv=;y{BvXv_;@M# z-t?!xQWfWYK)k|Q5rKSV5a)7LM<7im2|-FeCNSCY{I2IV4wN{hXw6}2Rs(DHaK#cP3xT|{rOKEG5*%Gv{@t~-J0Lmrk?{)O`WRI%}+JQts z``tI1!ciZ!!9k}ZJ--H(Kk=kvLrFUX9aBpi%?f1GLMCCK4?vox6>IIcfb|Xu1oXt! zILPMr6D1(7fkevygM)0DIJ^p|vJ2=bJn%$MjlDVWEy@Scpz=r8k=?WmDi~I!S?2+p zfO}&9$T#8je^bzgiIiT-N!aHDP%IXQ3WdTC0h~=e5tQWSqqPuZ z{eS0EM1lMgt@uOuGk(r4V8+4EDf!8U_jxLs@A>2ph6Id*^pWz8LI=HHoPFBeSCO;Y z^grWm=-K~@1Vf!4Y>{s;%?FZLr<`e>z~t=P0RR%91|Z^maEjbyg217@yi4%%d-gN3 zHF(u^lk0lkN_GXCFMowF`cmI_$RpderDKDL1r>B%7fwIovw&rLsvmyY+VgF2z#Bys zRy)8=3_%_Q@@^nqu)g+J9-TZ60+8ckUj!xOw_F9GpcHgUBsbroak}@HyW-}_nKOdL zz8id>@1+IpXTJ;JkusjiO1Q}@&N+vv@7;6270RFfX|0vb9(%WKVJq0uW>+so9AJ7v zyU}L~_S$XXj|OL23ak>D7yvTE^Rp1>*whiOj~TdzKN0WH4|?8)cm1=cn#X$WS_BRx z>$j6fM)Ou#6%Jeo?C^IMy23cHBEBzZ&!L1iZu`X|@J3v4R0^FujshSyRyZeQXdisv zO>$|rb1oj-5*40wAAcg#2H$^*C&T~X2Nuy_$?x1X`FtMnx_(xgar_t90m1CohK1&5 zo?9we@yiZE@&`jl5H-jKg^JX5{TfK<;PDjzmk1yT`3j&1O7i`c(6NCN<(w-20%-9V zsXXr*HSNkLAMV@1b3C2&Y9FiuvEWiLDa4uiP8HYq<$34q%q?5R){hSHRO6{SaNyGx zAPz{fiUv4}YZ5j0*G$6WDgf4|N|WC)5d@%h$J4euLqM>>dNZ!&G2qR7eyKaT{zd&) z4ZK8bd^};}@NFLe0bszHy!5A5Cj$q&+{I2`488>vENHpe$r?3wW5=P^TB$6 zYMU-GI7@ybh!LFM`x9^a6aSZ;;FH(Buusu?neSVq9f15}^9-15&p>K|!Prf|46sbb z<0$}27d#9C*{+_Tw3zwg@2@nI8e7BF&MuNWo0&Zs~Xz7>u1-0bWL6DXt3jhi* zAZdQ~o7Afr+x>MQVG15s0SHv%aPghi8p1H||3#*F$cBV>NB%)~@fdIvRwb!w*{UrB z#dhGV1!;jDR~kW_fU$yj-B(N3F_*EE%#jO@QL6e}6*%w!osTJaq)Tb{{l9Mc&s@SE z<#7;zc;u3x@X-IgA@GJz$G12QK`}RfBKbBg!MNZCV1&m&su$kUj5jUERG!-FIaCeO z1d<5iIKTJL*y36V=bQ(OvXg{tcy-{#vn0qW%f!K7k_Eu%Rw{j$?C`^&_Voa$2i`s{ z7+di{F~jfDL0T}neKwYh6BmFcTl`Uxp>!ROox#Y>JJY4=<8G|_3{Rz=bL|kssbGw5 z87cii1vAbCu4gA1=xrS7tHvvJ;K&DmdEcMLWEG%v-Kafchf}|OIskK8=k=KCZ5MiO z^mQt*SPu$5^pv1j%x3^Ra5jQhkLux}DL3DgNEo zFJI@v1xtZVJPJyB!{7UUYf;|!=jOYty2PnYVpskuP+>>x%KJqE#2JWkgM1U_UQoFsCg(DKky+eKvxM0MW6uqfToQBai9!{ z00>aH6R5N6Xz&>5*1zrw??3-FMZf+E=S4?rFPgi}d~f^D35vItew`Znz6xw+C)lS0 z5W8@-Zoc@;8C%UUJiD8=8cx(eMt(&f&gOM!nGwS5QBMSRGxx$x|T}!3jV^B z?CnpMbmYxA4;0p;m`xBRh+da3pavJ_U^O7pB=N-W|pM zNRmL@fVc`oKwWSZM_hqMeOyh5W4~e5vX05fML%d z8Ih;|N7K#tSiKdF*6NDkVHg{MY7H7qq1g&X5;yY#7ao1ypS0$`H$N+QCvm{Rx^FxCN TbjEdu00000NkvXXu0mjfyrh?d literal 0 HcmV?d00001 diff --git a/lib/Consts.dart b/lib/Consts.dart index 7ff11b3..d7b706f 100644 --- a/lib/Consts.dart +++ b/lib/Consts.dart @@ -1,7 +1,7 @@ import 'dart:io'; class Constants { - static const VERSION = "1.0.032325+1552"; + static const VERSION = "1.0.032325+1814"; static bool get isMobile => Platform.isAndroid || Platform.isIOS; } diff --git a/lib/MainApp.dart b/lib/MainApp.dart index 74ac0a2..14fd5b8 100644 --- a/lib/MainApp.dart +++ b/lib/MainApp.dart @@ -5,6 +5,8 @@ import 'package:pokedex/Session.dart'; import 'package:pokedex/pokemon.dart'; class MainApp extends StatefulWidget { + const MainApp({super.key}); + @override _MainAppState createState() => _MainAppState(); } @@ -32,7 +34,7 @@ class _MainAppState extends State { class Home extends StatefulWidget { final VoidCallback toggleTheme; - Home({required this.toggleTheme}); + const Home({super.key, required this.toggleTheme}); @override _HomeState createState() => _HomeState(); @@ -128,6 +130,8 @@ class _HomeState extends State { } class DexEntry extends StatefulWidget { + const DexEntry({super.key}); + @override _DexEntryState createState() => _DexEntryState(); } @@ -184,11 +188,18 @@ class _DexEntryState extends State { SizedBox(height: 32), if (_pkmn.hasEvolutions) if (Constants.isMobile) - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: _pkmn.getEvolutions(0), + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: _pkmn.getEvolutions(0), + ), ), - if (!Constants.isMobile) Row(children: _pkmn.getEvolutions(0)), + if (!Constants.isMobile) + SingleChildScrollView( + scrollDirection: Axis.horizontal, + child: Row(children: _pkmn.getEvolutions(0)), + ), ], ), ), diff --git a/lib/pokemon.dart b/lib/pokemon.dart index 19714c5..898ea92 100644 --- a/lib/pokemon.dart +++ b/lib/pokemon.dart @@ -1,5 +1,4 @@ import 'package:flutter/material.dart'; -import 'package:flutter/widgets.dart'; import 'package:pokedex/Consts.dart'; enum Generation { @@ -84,6 +83,8 @@ enum EvolutionCondition { abstract class Evolution { const Evolution(); String printEvolution(); + + Widget getEvolution(); } class SingleEvolution extends Evolution { @@ -91,7 +92,7 @@ class SingleEvolution extends Evolution { final int level; final List? condition; - const SingleEvolution(this.to, this.level, {this.condition = null}); + const SingleEvolution(this.to, this.level, {this.condition}); @override String printEvolution() { @@ -110,12 +111,47 @@ class SingleEvolution extends Evolution { } return sRet; } + + @override + Widget getEvolution() { + Pokemon pkmn = Pokemon.values.where((x) => x.id == to).first; + + var arrow = Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon( + Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward, + size: 48, + ), + Text(printEvolution(), style: TextStyle(fontSize: 24)), + ], + ); + + Column col = Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + pkmn.toDexPath(), + width: Constants.isMobile ? 64 : 128, + height: Constants.isMobile ? 64 : 128, + ), + pkmn.getTypeWidgets(), + ], + ); + + Column rw = Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [arrow, col], + ); + + return rw; + } } class BranchedEvolution extends Evolution { final List alternates; final List levels; - final Map?> conditions; + final List> conditions; const BranchedEvolution(this.alternates, this.levels, this.conditions); @@ -123,6 +159,78 @@ class BranchedEvolution extends Evolution { String printEvolution() { return ""; } + + String _prntEV(List conds, int level) { + String sRet = ""; + if (level != -1) { + sRet += "Level ${level}"; + } + for (var condition in conds) { + sRet += condition.name; + } + return sRet; + } + + @override + Widget getEvolution() { + // This is a branched evolution. So first, we print the arrows, and conditions. + Row arrowRow; + List arrows = []; + + List pkmnRow = []; + Row rowPkmn; + + for (var pkmn in alternates) { + int index = alternates.indexOf(pkmn); + Pokemon _pkmn = Pokemon.values.where((x) => x.id == pkmn).first; + + arrows.add( + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Icon( + Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward, + size: 48, + ), + Text( + _prntEV(conditions[index], levels[index]), + style: TextStyle(fontSize: 24), + ), + //Text(printEvolution(), style: TextStyle(fontSize: 24)), + ], + ), + ); + + pkmnRow.add( + Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Image.asset( + _pkmn.toDexPath(), + width: Constants.isMobile ? 64 : 128, + height: Constants.isMobile ? 64 : 128, + ), + _pkmn.getTypeWidgets(), + ], + ), + ); + } + + arrowRow = Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: arrows, + ); + + rowPkmn = Row( + crossAxisAlignment: CrossAxisAlignment.start, + children: pkmnRow, + ); + + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [arrowRow, rowPkmn], + ); + } } enum LearnType { TM, HM } @@ -487,11 +595,15 @@ enum Pokemon { "Eevee", Generation.One, [Type.Normal], - BranchedEvolution([134], [-1], { - 134: [EvolutionCondition.WaterStone], - }), + BranchedEvolution([134, 135, 136], [-1, -1, -1], [ + [EvolutionCondition.WaterStone], + [EvolutionCondition.ThunderStone], + [EvolutionCondition.FireStone], + ]), ), - Vaporeon(134, "Vaporeon", Generation.One, [Type.Water], null); + Vaporeon(134, "Vaporeon", Generation.One, [Type.Water], null), + Jolteon(135, "Jolteon", Generation.One, [Type.Electric], null), + Flareon(136, "Flareon", Generation.One, [Type.Fire], null); final int id; final String properName; @@ -539,29 +651,39 @@ enum Pokemon { String printName({var proper = false}) { String sRet; - if (!proper) + if (!proper) { sRet = name.replaceAll("_", " "); - else + } else { sRet = properName; + } - if (sRet.endsWith("F")) sRet = sRet.substring(0, sRet.length - 1) + "♀"; - if (sRet.endsWith("M")) sRet = sRet.substring(0, sRet.length - 1) + "♂"; + if (sRet.endsWith("F")) sRet = "${sRet.substring(0, sRet.length - 1)}♀"; + if (sRet.endsWith("M")) sRet = "${sRet.substring(0, sRet.length - 1)}♂"; return sRet; } List getEvolutions(int subID) { + print("SUBID ${subID}"); if (!hasEvolutions) return []; - Pokemon ev = Pokemon.Abra; + List Evs = []; - if (evolution is SingleEvolution) - ev = - Pokemon.values - .where((x) => x.id == (evolution! as SingleEvolution).to) - .first; - else { + print("Processing evolutions for ${properName}"); + + if (evolution is SingleEvolution) { + print("Single Evolution identified"); + Evs.add( + Pokemon.values + .where((x) => x.id == (evolution! as SingleEvolution).to) + .first, + ); + } else { + print("Branching Evolution identified"); // Handle branched evolutions. Refactor below to accomodate a list of pokemon. + for (var ev in (evolution! as BranchedEvolution).alternates) { + Evs.add(Pokemon.values.where((x) => x.id == ev).first); + } } List sprites = []; @@ -569,64 +691,29 @@ enum Pokemon { if (subID == 0) { sprites.add(Text("Evolutions: ", style: TextStyle(fontSize: 24))); sprites.add( - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Image.asset( - toDexPath(), - width: Constants.isMobile ? 64 : 128, - height: Constants.isMobile ? 64 : 128, - ), - getTypeWidgets(), - ], - ), - ); - sprites.add( - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Icon( - Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward, - size: 48, - ), - Text(evolution!.printEvolution(), style: TextStyle(fontSize: 24)), - ], + Image.asset( + toDexPath(), + width: Constants.isMobile ? 64 : 128, + height: Constants.isMobile ? 64 : 128, ), ); + sprites.add(getTypeWidgets()); + sprites.add(evolution!.getEvolution()); + print("Main page EV."); + } else { + sprites.add(evolution!.getEvolution()); + } + + List afterEvs = []; + for (var ev in Evs) { + afterEvs.addAll(ev.getEvolutions(subID + 1)); + print("Processing evolution: ${ev.properName}"); } sprites.add( - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Constants.isMobile - ? Image.asset(ev.toDexPath(), width: 64, height: 64) - : Image.asset(ev.toDexPath(), width: 128, height: 128), - ev.getTypeWidgets(), - ], - ), + Row(crossAxisAlignment: CrossAxisAlignment.start, children: afterEvs), ); - if (ev.hasEvolutions) { - sprites.add( - Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - Icon( - Constants.isMobile ? Icons.arrow_downward : Icons.arrow_forward, - size: 48, - ), - Text( - ev.evolution!.printEvolution(), - style: TextStyle(fontSize: 24), - ), - ], - ), - ); - //sprites.add(Icon(Icons.arrow_forward, size: 48)); - sprites.addAll(ev.getEvolutions(subID + 1)); - } - return sprites; } } diff --git a/pubspec.yaml b/pubspec.yaml index e56d457..be64121 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -16,7 +16,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev # https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html # In Windows, build-name is used as the major, minor, and patch parts # of the product and file versions while build-number is used as the build suffix. -version: 1.0.032325+1552 +version: 1.0.032325+1814 environment: sdk: ^3.7.0 @@ -199,6 +199,8 @@ flutter: - assets/sprites/ditto.png - assets/sprites/eevee.png - assets/sprites/vaporeon.png + - assets/sprites/jolteon.png + - assets/sprites/flareon.png # An image asset can refer to one or more resolution-specific "variants", see # https://flutter.dev/to/resolution-aware-images