From 2ae32ac276ba8323aa1821c831de6cdd96163c82 Mon Sep 17 00:00:00 2001 From: Jonasz Bigda Date: Fri, 30 Oct 2020 19:40:17 +0100 Subject: [PATCH] icons | restaurant view | services --- img/i_alcohol.png | Bin 304 -> 335 bytes img/i_card.png | Bin 297 -> 295 bytes img/i_delivery.png | Bin 605 -> 507 bytes img/i_eggs.png | Bin 426 -> 320 bytes img/i_gluten.png | Bin 670 -> 467 bytes img/i_glutenFree.png | Bin 746 -> 515 bytes img/i_lactose.png | Bin 249 -> 235 bytes img/i_lactoseFree.png | Bin 442 -> 346 bytes img/i_peanuts.png | Bin 560 -> 533 bytes img/i_pets.png | Bin 522 -> 496 bytes img/i_seaFood.png | Bin 511 -> 453 bytes img/i_sesame.png | Bin 585 -> 567 bytes img/i_soy.png | Bin 561 -> 399 bytes img/i_vegan.png | Bin 392 -> 382 bytes img/i_vegetarian.png | Bin 594 -> 569 bytes img/logo_mint.png | Bin 15825 -> 0 bytes img/logo_orange.png | Bin 0 -> 2664 bytes img/logo_white.png | Bin 15424 -> 0 bytes lib/components/homeScreen.dart | 4 +- lib/components/lineOfIcons.dart | 43 ++-- lib/components/lineOfIconsSmall.dart | 123 ++++++++++ lib/components/restaurantCard.dart | 93 ++++++-- lib/components/restaurantView.dart | 324 +++++++++++++++++++++------ lib/components/searchBar.dart | 18 +- lib/components/searchResults.dart | 2 +- lib/services.dart | 101 ++++++++- 26 files changed, 586 insertions(+), 122 deletions(-) delete mode 100644 img/logo_mint.png create mode 100644 img/logo_orange.png delete mode 100644 img/logo_white.png create mode 100644 lib/components/lineOfIconsSmall.dart diff --git a/img/i_alcohol.png b/img/i_alcohol.png index 7b11a727a5ad64c261ad113a4f93f479bf64748c..818fdb04a79f91e3d92d92a2443dfe007c13e0dd 100644 GIT binary patch literal 335 zcmV-V0kHmwP)MUZ;PHB@rb|gWTSO_pgQE3AcO+0*MmG zuXWd#mgrI6s8YmLigIY((2l4^Mz2CZLHdJ!8q|0D*#Rkjv$eRFxa{6J+q1i3QzyWR hkAvGfuC3D!;10Jeh4%z`rVIc8002ovPDHLkV1kyeiNgQ@ literal 304 zcmV-00nh%4P)xNz2EZ@PhwfE$=5&!i!=`~nwAzl0Ny z_x15NP(&h=W9Azut%^H<^}vB2M(L#O#v<@g2EfV>M(OewTUr%602k@eig)5hgTyHP zBBe`a!9lS!Isw=Npu_;IxHL*1Lq(lpkzWC9NU=9pmpR$YW>ph)wr0yTq{K$)IOe1FsYup>{yamEnWExu*JX~w? z(f?P$OV#-IRpo0x-Fv*|7PIICX6r*QIj`LM5ybH-Q0ak~1xt%w>E&bbEP8_R<}ChJ zY7SzII;SRkJaE(uI8g9DdbRv2+i8!M-Hn`j)T`QxZ+bAxj^0_{_P3TFsNA+|sk4+o zT*l+uCkw((+Uz_p>*TiY&4TrPT#}V<*Q`n_`^bHdJ8H4!!GHmSFty&UpcYL qW6Q_&A0umXRpmMv|>)k#tgC*k#aT) z1%twM8*p*xBRonLgwzGVjY;~>R9BcD!E;zSoBrUk2$6Yh_U~eoJ0BTfTRO=kfei9fvgHh2RIcF zD!}O=`5>O=#}g_LbLPwlVabY<$QbyP&kMhbWaX15hRGBhn2Yg81e}i>BsfqJu6ZPcu$? z$sP4X0?%9lTnN8q%6vYfMN|WRyLg!OoPY1$A^*q|G#~~ZtO3KCiitN|%X^+wF@dg_ zxV6!2vyMg{7!dDL*>NNjT{uW(Cyq@O&`>z?OCVTtqs79ROeG8G0l>3VHV@bod^5H- x)ApUlslWf?f=ec6hZHeI8f_cTroYtyd;=p{vhOZtSC{|*002ovPDHLkV1jBQ;Clc7 literal 605 zcmV-j0;2tiP)P(eZkfeKEkARreI^6(q-^N%axO1KUZ8Lg3Z@)?^m zN`!8t6VlzX_IP(^*XYrsM~|DvT?#p-9un;b07hLG4fyViBtn{t zeQH$CfhoBJ@RrNpea_AO2b_)273!wcTr52A3#Me9VDCjt%3ZT=Tnt;@kC>7J&BZ*% zNem&QJmZVD=tnaOYXJKeTbms-rsNZVspi5L#S^j?co#4wcb>n00jL0cP^KIYH$*C$ z5L0pn;3*dY&Be0e|EI;&MDQKJ&LK5#>scwX{hYa$mJv1vGa@nt@JVTC$UXXuQwVJU zd?(oF#Dt<`YWWaq!qJ2@7wbPF5DQVQ47mAQib-G{` zsv8=sIwM3Vb%BA?97|8X2}S1wnoNwZ`jY88OCKUhFPvhn={gWycV-$O6?0R4OA=i> zc1L;FTzL21c{rsGUJ!{nJ)qev>}*fa%^uu&PONP4at>y%EhqGv_# rqM^BP#Q;_ua`mSkJ$m%G0RZ>~>H?;H2tYb(00000NkvXXu0mjfBZdOv diff --git a/img/i_eggs.png b/img/i_eggs.png index 7dfa8c7689d99e73f9647a483a8fe6b75121ea4e..843147564f1bb31bc2f7d588bdf3c7021bfed921 100644 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^{6H+u!3HF+1dHwgQk(@Ik;M!QI$j{mSYB1)3l#k1 z>Eak-(R*~tS-~a)f!6qp2B8P1dii`fOBliqEn&7YP|aWsYMNIxm2XRvh4ySo)y_W^ zA7m&0{Zy9z%{3xha8jTX(}bF(-Pi6dOLe@Vv5@h~*ZjcxZJ&7+G(TS}?)}GIZ5g{l@!sm)3!UUl_b?e_{4l4vWv(0w_IW{@CjHUM@Tn$bWSiC|2poj7N^Uq$Va%Q#tSJ zccoE+y#LNW_8J#0b_IM!ioI!Ev={@NwXRNI8iz0_jlxHy*te@Q_|`uLF0oeYRt!_u zzWKzQH$n%Cp<>TKt~JX`QX6rVYg{MJ;+fRuNl%v)$KK7?S|-J{ZPKh5;tZ>_>~!T_ zLQ@qI9$b@op9Q+=r549h-yq_0qI;CptGcAxa>vbhx74rTV895< zB?7O6BPaSBg*&S#TLa)CEKA_ti+F&H#S`C;~W}Ioqve z_|rrnAKj0cRUNVHlF&`^Z8OZbQDHgQmc)x;&@u~t8l2`tj5$!EQOy0z=~~|t1-nb zfHGZ>tk_Jj8rYIF4=3`pv_Z0BIpTyMN}$PsbMP>o(nXbK-VSZJbBnX;zzq!bOTRAQ z=GO5YlG9JkV{rVcd^48phO_kT9E9hYN>y!T-fz*e0iz(fExBv%-J@1CET7K8KI8B#^r^wrFU(1rP#=>-q>zdn9uPU?Ufw zKZ!(HBJmdh5+4Hyn#Spk5P%tgg4c{>LK4XVjGVDCJ~Fs%8l)G=n2}cimt6f?2rzc% zj9szc6u`YR_OfZLA3YE$Whm&2BFd7TOw8CyeIg!uZX5GUgqR7DMI`v8;v&&hPtNQ} z-y3 zb(AGz`eyBnJz;D^IY#u;n%x%w-uaw5WAlCEcgj$dC3DuAIi)J`n}wkm55A*2?p)>1gHD(wel=$3w2aK*aXUMMmmOURmxs7hUYxNbzKbl9`fGOCG<>>cCPQ8Y3uU9ZeI*OI@)Cb}U#pn3KXKAC z?zE|rIrcGimpY_9lXLX}uc~JRX_O^*%-+Nq``|N)uZMPAZHb9CusqZBpP*;vHQ8;2 zcO8-~OG&mo!RwGK!w1Z2+;+NG(M7VD=`VLkL2r~&hUy0_?MkFXr%KI=JZ6?|>dqy# z1JC!JTXpcRL!2mNR)o~7@@E(-GOI(#phF#6($sQ5<}~n97eYQu<{l4`%9~J?Or>o~ zBI2X`(5!e9Y9n(jGX1^@s6D=Y3@00009a7bBm001mX z001mX0e55(?Fc4fZ`9lZsSFbM3?pkT?%C=L2|ZPvVT%i9+Snr^ z(Bx_i;6)poxzMGd|Pd-8gS=$LnI5QKjimRuv^p5IReK!F%r)Cic|C95uKcrxL9gq zi$4M(ktSF4KJ6j%vD3zqQyBO&Lb_5WMm$%@OyQ;I+v+x~sI3(k=M$q&Gv77tXUhnfHY002ovPDHLk FV1j#=+#LV_ literal 746 zcmVDB>CT;B3eKbvrlBY+P89tEsxo>nlz zMT8UQ~Qe8_k=^+2bFBb-~dQ$jW)oR_5_9C$;`)SknthObKa1CE_=e5VFGX5r|Zt~{G5FyyZ*kq&~ZF=pVe z>TRS+&S2CxuB^4ml$PtBP_Y411$2AScY_O8B9p0#P4dEA`_7jYOD6yC_z)oICjyFl zk;&pOa>^K;&`fO^?7Ci9&Z?zs2_4(h)yBNJmQtRyu$j`bnDQ)4S)Xm$xC5*SRMO2x zIhE4OQhCa!+z%7Hl};d+?C$DdRoik(zMrt2>~xMcIhB$(-kA3V9XcA2#57Nvsft@t zXa7>Ug3U~jRhlVq+o|t?lBqcz-45wtI3Z&NpI*0?IiU(Vvf={yDK^%aV+J3eTr;-j zQ(tpcHLXgRlf#_AQG=76a&nA;Etx5WlFVJQpIy-vb+h2>dZX>tDGhePynv^M-;Uob z=aDUC${ix=TZvY#rPL5_coGfx`t=yi>nnmJdff4{G3}&DX`WwKU7__VC2xMl8#ho&(@+QsIaP4nJ=y-uJV|i7HFHmr< zr;B5VMQ`$-|NrfoIb!ltd=e58JQ5DDaGSjTug}ogBpRQe5&{(4(eJ9rqmgy(fBgZL zM-37@JUp!yB4SQYC1*@vVJ*-wYcNbW$Dqmb^4al4Ka@R~Pm~Y1I literal 249 zcmVFeknOh1X{FeyE(i z15IjhoDuIs>(A7I{VrC{wu7bDW*5PSmMLdrEZcYu%wxc7(*(9nweD*C7;-1Ko!D8iX(T9=wnkwL|oK4MF>E3@I$t%DUnZ_to&GPb700000NkvXXu0mjfcN1$R diff --git a/img/i_lactoseFree.png b/img/i_lactoseFree.png index cd9418cdb00552f65e310c875c18fc0dffa0d431..bbed65722667f19dac7be99b96c8ba2eacbe97e7 100644 GIT binary patch literal 346 zcmV-g0j2(lP)X1^@s6D=Y3@00009a7bBm001mX z001mX0e5KmN8BPF%U(cHxv{|$q~}J;|6d8IKmzwH*kCd8X79N zNw@)2ZaD%-=^agEMJr=_BH?XNzO;=!GjDd+nr{U_Wb?d)vkyrFR!j$^gQNnI3QV*Ogu|Ybqi-=4(1J^dMjE5dit*z0 zTKKR}LYCMOJZ8q`Bauj4i5ux_mC;+eR$2biQL_NBICIogSzd?!q+8GVMj2fSLQ4Qg z0N-a`zsl&R=u+IF9e_d*YdoLrI~Nhh*TO;t307IYcFr~cXv`1R+tk7PuCe==`3gux z84d0j9I;21{jo%A9%nGVojQrRqf|z}a#!A*S{mD4+Qm!oj?cy#C3R*6U|nVTuA}x) zW%+wwsf#+*Vs(s!YDtKpotpO*>Mdo7ebMMVBU*+C1xYanzDkdaL4-kk8SB@gZd~&Ahy<=la z5g#GTKeklRT{*fG0>r$@Q=s9L(3LRfyjLeNPOv2>STXkW3VAll=#{U=j>#=nP!t2= kRiG#xJ6R+WiNOH)1Kw+=Oa7WOzyJUM07*qoM6N<$f)=2_ng9R* diff --git a/img/i_peanuts.png b/img/i_peanuts.png index f12c6b8d178a20526769fc4c98cfd3b34a023221..a54d520e4da0d5dae44f45ac554d8c8a54388a42 100644 GIT binary patch literal 533 zcmV+w0_y#VP)#UGPZEWQZFmJMFM3Izr9`=&AzhJQl z=CV(H&)Vd^C#;@oW9L1+@5F$8lfqk5s{Fsm#IvyWH<2ExISE$2kfF_3=BrdlkCBao z{Q20iw?L9`l9bxmWTXb106r?tzEBP-AMuHeEYp-~5|Qu8iipCBxvWzMk09xpD}5<~ zx5)Y{=bp>WFj(I*tOsLB8>^CJ`0I=3gi+zJbr{l!ktf?}V?(13$w-*9I8MDnd@QuF z(RMi)S8U+y%v=d10$~m8k-TDfBTKTSy1G1d*NXIF80v1afLOd0a(Vk`|8I0Pa|-}J XR54=k%1e*Oci{h>6 zA9v?MGQ6q;>VrT-0@>gv3hb-o>7^jm5a+z+4*P)MC2faQKWGC|t8m*(2>jD za(QyERo{yDnPtg=8wuE!)U}cx>nw^FO(0#K)WaxnKemQTs2Lly?mYpYGlg1(T+#!o zHmt^};hm4>w$yN`ss&95rfbK(HdKydx(a%JptZ2)s#A|H=fshLAEpTmpd$iG=)WW% z^*$G-$>|*VR0qf;uTzkrS)ZeOSK~IxYb<6_EaB~2Mp_*?CyPzB&y(zXbDz_T0nj?1 yTZKG{Ij0s*Pn+EZ`=%7nu89Xbb?S800`Lcs2%fn}SojYB0000LRnbubF%W%W{D%_w&6iSvlz%qS6gq$k;=FUiWRA^o;+tWB&E@6o%kG|uF`|Uv%>uv}z}mXF$R7*djAgB|F77mn zBDoN|EacMx!J7)eRN_YfL+j$9$EPj+{CjgdW z6Jz6EA*H!>am7na#Il*F;M?*rXL)DHeU{YE*Q!e&&wIpF=UEFq2UR2V8_Sy1J za&<0gz484djKrLB_I0Pq6=OqVF;#{?Px0000igP)50005eNkl}&60xxjfC+#-iT^2?f%iPYk76TdJSk&;NybN-6?qaMX(3YPrYgV#_N@N_z@t(6 zR59Jo?FYt1o~a~5Z>0R)r5Abt)&QQJc}Ju4F)Q*n&U5j~@~s%N$@Hp>9V?SBdzWS% zI~kw&43cz}TUer0w9bT;p`pFn^vsn0xCby}_G22@_l>XKH)3VldgUlH z0}mN_u?dx#8Kn;#OL2}$AH|fJd9qvV*h_pOF4;MiitQUjv;)&4D;~1uMxU`Y4mu?5 z_L{X(df13efLu%!A7i8RA}jI{lQ}r$3nJ#35JHWu3J>;1SweLe)K(@da%;wSA^A?E zQJz6^wO@opAXHLBMzk^Uba66Sk$0UQBSB?@YfR?9P?tBM&PzOi8xkbt}{dZum`CZ`iz?O3-CDEcqi;Dul7e&H?|7Dl51poj5 M07*qoM6N<$f(qN@mH+?% diff --git a/img/i_seaFood.png b/img/i_seaFood.png index 751d9488a762e0726645ef2ce36e3d7d77ff79c1..28ca38a8f2163762ee07ed4cba44b19af5734ef9 100644 GIT binary patch literal 453 zcmV;$0XqJPP)LRLfDrFc5w6aF08PuR6sY;0nMTIpLhSxC2KO03C!5 zLIorpz)4r!L0o~D)vPodjXdMPo5{rb?AzbdD(4&|tWh0+9>7Lyj{x=nUiIM4@_r<+ zMwI}LiD3#NYW3j0E(jJH2TTBJJ-8oQ7reP!XiQj9Dq#@_x`oC8_tvP&6Ii1fX1x}T zjNmV*{!0*Ra9(gP2j9wqdpcfeJaOA&3Vm|;2;f`ny#sg_>!?VnM3U+gfCujL9g~dQ z=8n@X_26RLFW!PRiVRx-q_R?o>%{*xOZgaVZj#){!uE~kYi{E|z^?%aH{!_LgH(@uY0d!YeFS=<0_fx3BCz#Mo1#!ARlh@T)}l*Nz0 zox?=KT1v?2kAYDZPk=^9U_jFc-S@!yTfnrED2pqlfx!J1Fs+Iw^~FGQNu1FZ=%N&G z%Txxx=S%6Y%LSa5ge_g0E}*xj%Dh(yG@WB?E$I_Cfq}I)Fl%-;o=O3Yx>kx>Ko3X_ zU~U5HnLVwMuka6Co3GEw$LY=0OjikTYyO2+H-*5UaA3!$84a4 z?E8F$mPI|l<|M>XDDW)6Ca6(_ObgxK-h#q{ni8^f9p>s-ztau-Ho)8LedDRR=47$K zEHwjIs}p6h^Z)jpFtH}asKBPO)(j>tsB1h8t=qXYPVLc?r?R1h99dmS2Qb_kXu(#d zlT@s=sns*9dUh%y+g26|8-L*~HEGcWpDH2eYadc=6G+|+rb@`BBX~b>Ljd{5)KUpq zd;tWBeTXm$g)0C6002ovPDHLkV1jm> B>iz%# diff --git a/img/i_sesame.png b/img/i_sesame.png index e230b6a3c085434c0afe5dc8a9c8110592ec366e..72ea29def564f7acb8ff52d6f30a4c85a4a5e54a 100644 GIT binary patch literal 567 zcmV-70?7S|P)`hW%upkQcCDzF}SIOFDsum*3nL&F}NXs4_ST# zm{vY5%eY=An!rf??gMy?!HvqGy`W?lgB!?lXoO5UfyUr!d2W8dy=vg{53N;rt{ML%Gb+###C20Lb zvOH0)zEmHoDgF`Yi6j=qhMqna8(suS!?W^V6R#(mtZYz%)(otd=zXSY1>j6NZhQ2} z)OppjQWTL}mKP7XpLJQz)r04$0=~>MROZ8#Fs-vH_JWFRZlvco#S3(UAYa(l`&!t! z^0m=b{bEgRFL%w;c_F3NA*1XVdxrFQ4=WUMLRL?g|EMp+Hz|OdR^A25ifYS)=GR!X z$|n}^LK>)<7p>J7y*>#;{uNs@);5B+eVkys_RTLP`~WUO3BL?xVe$X~002ovPDHLk FV1hLc{Gg`GxFknClZu$~NXmtRP16XCT-205}g@n**3Sh^Y)>$m)O~>E%K?1s3mT7^QZprXrT)4A?iEN&M505Aiv1dswa`p(1Qr34W;5CMaQY0F}{1z;Cr zV`9GB@eW{QwT0#`P~Ykm2pZ~ zHEC&K(*7p^wplE>#0l%R$Bg;qOOfJai~DT`%VVbu-G zkC8>bF$wN-o`{jzcSDGh(zs>EC8z&(fR*NkPfeIFo?4QA6z|NJGexRGtP_a~2(4z8 zTe#$|0(Q04l33O7a8>+Saw=qQ(IX|R9|-fhI>e?emO? zty%ksijwbt#6yZ4Rl0a%5;X)va!o*)k>amjUMN@Abws)p=7?-KF=s|WfbdN3ikxYe zm=%i$G?H0+f{txYWJ|XxSKmF|w#G!L6y7-@v@%Y30PxAfYrud3y#v4x XBHX^2PK;gP00000NkvXXu0mjftX%{~ diff --git a/img/i_soy.png b/img/i_soy.png index 2274fa000200ceb8d75decd83847494b0646d2ea..effa1477a015069b8b127148884dfb8317576642 100644 GIT binary patch literal 399 zcmV;A0dW3_P)Tl)-TVF$_h&Gu%lk2-iJ92ibJ69fS^`1LF=T0Xj$r z+3f&Mz9t=z3Y-xm4;o>6y-akJ?dLCjjZ6pu{}JAqX8DRB7dq<%4P3WdfV7QA8l3sG74o=dZnfm zeQ~6`Go)^lIX(jTX7@it{v`|L9)4A-i!o43l13$ZIB*LnYzFun`+KL9fx3sTv0=yO zsnP~E?gTkf45No@0Q1UnNnIOZF|JB8>T2S>v7y)Z;z;ct03K67i1Is;lcucIvXFQ5 z(BGh3x_sCRQ(ARKJ?wG{rP5XDf&$)|l7lW(&U$B3v$(GTf{oJ9oJze=iqIM$l}&4| tDsubuhxQ^*!C?w8LJx6-#$2rm0DrsPbD-3gZqEP!002ovPDHLkV1kx*p|Jn} literal 561 zcmV-10?z%3P) zw{6S5Z-fLBcmT#m=}igAL-D5#kO-3am2y8DrT0M+3z-psjjXxNuOe}OD+vHYn=nXX z@xnKN8Gv1o#3SwzVp&;$+DbSTOOaQDHZd%F2q%Hf&oQ=sZn|vB(b#Qgr<{cS#E!aos$`*drc`Z zVZbGa(%N|^1bYryOHhans)Albg03G@W^2NJZd-`c#N1Myl@LA`zmf#yd}qQ<&Ib`& z5zZQ{J~c{LR_~(H6G0O1D6@3HKVwm$kdj9n+44=#8C3O2P*xi-y}*P%Rofe-$Cnbo zncor8gefat=iZN<Tl)+KMFc3wbJh{gmz*Q&G0dx?kAfW?Ofp7j080i6La!0mgY(bKN%`02Zy!!Q&tma2NspfoH)uqq*LQq1ssI58rS#Hi=`K z%txO(oE*IYu_WNr2w>3OI$w3*)_JM>D%x}yZXMT>3!C2-;ca cCE#fRUky8DK?=)~_5c6?07*qoM6N<$f`o~lmjD0& literal 392 zcmV;30eAk1P)6UCdEYo~D&My^7Zi8`@JN9^a{%LHIAP(m z*^QJ~Q6xlgzF20qBBL5B?`r^G@^so9JQ4+fXNn9Fl(|lfK=%9{z^`g-#l`y~ZK8;< znJUv!aM7)5?1E#Ttbp*I5=%SrpVNu?A#?}%*SA0Q5o*<@g%E&&^|KNo`Ib%L!pX&rb7yL3E-hOwvL?= z0A;LjJCg4v9_1xv3PwBQv*Z!?Q9EtQlr<(@l+pm1m6n2iBvUU=n^?yFG4-OX*_pcr mDO>Twev*8rWipww0^koOQ(z!nP}iye0000=G`P)X1^@s6%>pGE00009a7bBm001mX z001mX0e5q$gGR7i=nma%TzFc5}61>I|858_o*{RZ_LSQ#@V9Xr);py&G(wX z&;}R-(__GGl}!P0d?d~TtGqNTf1VGO$xD4q0=HErPTm0p@U>^kD=>HA@1Tc*+bXMp zUxDE@AZxz^TeY?7g{FXYyitR`1W@FqSvrxh$2JyQXMHXzWU7x#h4>Ej0Y$eKsJ1p5 zdeK~ddZ7{U0{9kKw$4k_Sm!hwELh&(4nhOqM_@LvWa<1D=N68$0=JU@uNr|SWH1#hP$|Oq0nk=KwavMhQoy_LwpG@7H}%7fJ47+Ctw?UUdY4njXs92% zP!~|2;%jgSyo2h5AHY>!8u`dNiF~j%I#_#8CEev@SC4^zwb2xICZJs}00000NkvXX Hu0mjfEt3H| literal 594 zcmV-Y01k^lnB*jHcvrG^X~s$3oM*&S~H4#I(c!0FWrXkkgznxQHbA!7<3%v@kp}Y1o4WqYd5FV=^Ab-Q?^j|Yj$)u8 zak~rN#Pc0%=7o}@D@#vqyXRT2)3#IBuz9w9gOU-4d4iE=ZfTNv;0*uQpa0W0FZl4X zrv9e06CV%yzrG)^KB)Rn;q^s{6!nv^JXhWu{@RE{hEzZrzt{I2Db1nYzGS1B?5*`u zCZw3g6mLg&tFl;4T2QZ9KK$7(AD?D_J90`4P$rJ z0z&t+?*FtpUg=w0`&5Jv0J;zQSv{DMyrXAPxkESsTFoV zrjP-^f{MlKL)oSW38?~!-o&SndrnMB)3VJ+-*}fJW>TBIMaAh|4*?*Mw>o(-II@Z; zqEKdq9}oIM`A<+6Ck{A3IpvnMp=~RLL2Sbv2;rx6_UjC`|MMy?d|v!wv>PZe;?e7?(p+M3ktGNKT;&)=g|)wTY;@ZH64S~UABa1=Dt#gsh^vt?w?>^% zs0{$-YHNRDZf)C+Ip5A>lU#X<2mSCyAh~|_=L{sK^_)e5%m^O`0J0I_Gu%ZoiHjGr z;{PUf!YLty!Rx~bnNMC3i%)KW`eX*@)(-1Dw=GDCPSN~%ON9J)pk}_1-YWIPUnVL5 zc+qDqglz~ zGeb_0K(74t#><%!05AnONg~7S+w7zj+94EpbaZ#!z~P`A9%OY+V=NNi;yJzY2!sbC z?YXjbAixmf!2y-Q$~b80%q_C2PDq(sy7jNqh}IMvVIlxHh}0-3eReTh+dE^0NNObhJ;kH%9xsE?z@qXV^hW>x<_a+*dV zUkMQ60Ze9_4i`n^yo3-!k4%&LSfd|#;khB%3>?erLOaBvDkVvTzLKD;-MITdg2c!v zGP=PGjU3`8Vz}pYinE9_hvLIQ(fTSTPJ{F3ghO(_N~#$E!0$7X6FwfMDka?>G@#{q z#@e2)yYLTMg+=$9oHl&lyN8cUHe>+6W1FRL|4`Zx zJ{(ee)iue90<82;JD7ApiiM?iF=7uOB5-DS-q$8(M|)cyuiI^xA~ePa+wp0l*$Bh|n$)qG4W; zwga8|mx$wTsbk0UpAExbqc2qnD*!;6Z_{b4NVVwEf;87OE0Padk_Q^AsMVi#`(@Y$ zMW+A5*0;ruBmfZ1w2*&{oC|okAZ>sy{AO-eN*`>jxn>-3yqnqy#?Qw=*d?EAtqd64 zyqtU32YfrP=_(ts56y-{fIwq#e7b}JEuD3{r;n)$%mg0b08EckEEEXwpw#K=JsaFb;%e8 z2{EtklW7MXR09qxV_s<22j%?j6buUx6~Fw_@hjly!pl)Y3beAdqqUV<$is#9CtAUW z6Hex#-;@uZz>D|v{350?03gpFAD;A-+{u)_PphyAqMc*=r%HZ1bzmHfz}cbkoYh$& zJ=&CUR8(OF6vsdJ`x=d*=-gX>249LtRr+CO6 z9eVcC7h!ZXs;IbxKQP8zx_I@HPy&G_B()1sgf*@VIHX!ebfxK1%OW4$*AQ7#KUU;Q zRoyk67CrKexzbmC7OwSUbXL16hIso0se%tPzn9!v{?7K2gexxSKj)C70RIZN&U()OE97n?StzA=H!2>qxd_gd5Oi{+gI z#5Up^2ep@YV-=SGCmwJoO8Me5?^Rk9OcD?JRbw#9pwsgeC#50Zxsla70HFEw$~Q@h zd*<6X%fhcj3(j$R2|E8bH4$Uf=u+aO-V+>P2w6Dv%P^09d**^1q8R$Ts^|5TK}TTU zVpES_q{_6?cd79j!y&Wr4SXPQNME&<@OMtaT#YvpoNXBIq+`b@jjQhNwJH4Cst$Cr zIO#jUkf$* zy|g)a4rX<+?%_{3A?LQVFHQ{sX-Aukn!_JR>C)OB>xUo}$U8}amR&{XYsXj1t~OLe zz-kp;$;rxhi)#DvhBe8y&MdPrtz@H-pk~fgv4zr+$_`#PD*< zJtuSNesn1bhND1hqeW#`fhGKgz(BdAcTv1sDKU}?Ct6(hXtsW8Y(Nt6GQCc22m-8@ zfQvr{7c1>QUo%Jx>26 zgcuUG*6#QYqrt-@KKs(ipBlo_b##a5UQ9rV-Cw3SCYu7g2+~p@aDMn=!&|zg{wCSM zat0}!?o5KIl<(z615#AHrPnVKJ^b}6HqIn8xw?t?URn*sIOmpX+1%EL7I^!8F2K3$ zni4e#av+eN-q{Db3nE?X;o8*dTtm+W9c#$O145tVdZwk(+U50icEL@#>^WMU%T1B* z`#3=PGkp3w3CU6KRux(}C8Qfz!@0Jde0}i){m#Ss(Y8Y*57~|mXUh9ln|UWSB4Ef0 zv~ZSljXEYFX~SD3d1dH?&xn?Q&OjL1^KzB0SF1^NC1L#gEP^XwAHF~gMX$$_0n$%w z7B_V%PRCSHBb$ejyf7$kR?n19mZyTTUr2isol41-qD_5%e9MefxGUT_d}3~{#Fw3jX!!4{bjluR9UkE@joNnSH#x4| zy$O8DI^~^DnUdn?Xj_;`cZ7x(*SmpNg4#Tr<~UMY9^$k*)o(mW06zA0nETr=1Z^MJ zP6s)0qJz}M26Z}>FkE8cWz^{yC5|bLA3?p>TZV*CAaKljar=?F!mk{hsPou;F_0RJ zGJ~P?KMU@UnF=J&uBW%MIOePs;}MGy`9gq@Z0u`lx8{AQ@5M|qm-ZqfPBes1ZDq0D z0e8utE$44Y6z3A}#!W7(OcxD3U#S@>o#tNUahLqTGvKGG?0c~P2oEYj&6Kh->1k8_ z5DYjbQ91`@Zx~3i-@Woesz8p43m&blH#^3;5VSkqY9`qHH^Dbq&per*_gr$qipq!5 z{(j;2r%9^OQNhs?D2mOwdazQJBZg7UWO6&i*c9~_ChYU8_lz2kJiNT!iI&`QU61u( z8i-1Q>P5oZO^hO35mmy`0&7pXJ_88+~jj>q0_XL^ixW!Xt2bC_Q(R@iOb{B#Z1zy2fdAW$L+4)Xl|Z+{HbIk3*?&nIGzjzC#8A=oSE6cOGb00^ z;KCag|5hx08TM+4iNHdF4G;QJgW96VEfqRQT1{nYwI;dWtE`0r%L!&Y=vt)%e|L6S z>hi#d_~%qQFm+3jJ3W4ZiX)9Q{tAORp*JA>=FL@F>cKQ%oeeVb)Rx~$bdd#B_!azw zer^^5NIMXTj3D$LtcBiklvqm1!DsmZK8z+3xyPTRI!`CW?@D2;QDFOSQZEzlDFFN$ zcJy7hNnd&HmM}NVA#?GpF+_MsG_$2wRM=pf$yb0-xQj3 z%edRFi%0n~=X&dGnS1Ik;lgc*q8K+@Ga@9^E+iv`r7xB4Tk>7}i4#ZeXaObPqFZm! z>((0@kbs6<#i||+iv9+iPaKpRX9|$DxFlnS%~*ozgJb{AqiD;|vgqDSmzEu)%A8&+ z?UrjE!Bjl=xWldeVVut4By5CtZ$xqyp0V7~nECdUHFWk#KbN);dNdnbWcFZ|t1$So zdqKZ#P37xiZ{m-cq$d%&3HrlVnR6mIvF}zJy-gY%G>E2)(6=f6(dz$hoF|`Eb!TLb zy=^a${B3RDrjdH^P=eudzaZN`P4MDNQyQk|g{sEBBu?}%oR?m&UaS-dC#gD&dv*pJ z(2J_=yj9E!Ijv(zlUfUu(lg<_Q)9z$$}v-#TCsF{&9_Ul&<1Is`W~v%AH#GGR|IQzbkv z=p*({*(XXUpYmXTx16tW=-B)K zDFjiJ@1igsAQj-7*HivSEzUv(IqF-q8ADD6vPGySB)y!kN*^}r^WA*->tAGWH*%KC zzwToH%Q*SwJ{T@B5}WaCcYln8G2dHab#)Dn@c1Ld)x=j4A>fWQ8so}}4llz}_NA(eZj7&FW#UTuTk&e-lPk5~ zl?h~Z{TnD$wfXN#z9vq;RfUZ3RgV5G0hce_4ld6ZhEu7MTIr|?U+8(4_(Gk$?M;sH ziukvt3ctneJsexv9~fQQ%!yrBX}=q`{O&lkGvzR{so}}3qlx``4b8)!`%B}!PH-QC zW%IoRW3D!r0wLv$n$5Z~YKMxgq7egv&i(T#O&_X@UD4DGNyap^*1^WdKxV$BTV;J5 zk5Prs10A+?vNgu{YBV${&Dl8i;cIVE1=^9Q)#fkD-Yt^TW!ZYm41wcjh8KG+3zUEM zcTbZrKEB0jL?SrEe2dGQ($D(F6?B5V><=bev_*BdMrY6TJ-HH!l|BD-^=`TO_IsnW z*E~&nx*gqe=SYK}>M}1su;TO z2eE#hLY<6Vh8jhA9J!~&782c|fhaP8R<0XCqGprTB9;dU?D?vf^=2deEizvy z$4a3^w>;QWHoqEGlt|<=;RZq;Ef9ri6~3tcZd;Smn69MB9AVV*Ucn5{h;7imC7In5 zMnM0|=DTllyUJS8GyFU}yY}{rE<)QuukRZJq+g1UNFgjAmY#|=y*`i!V_}gZJUYDMEAWg0SGL{km)CdL%BHl0pVHS{jf%OpROi!`SCS0x49_3eZ~U!T z8UN^TOX%edamNEv=5O>L1}c+bE0#${v?+S}o6{TF_wF28SooFB2^_CrP}fFQZTv@$ zhp^bQcav~7A8=naU8Ia8*4Mm~klU!%x`v@Xvr1V%+||EM)hBcs0Ed-sH|qxXXDJG( z)C|6tD;y%iqrXpnkEk`#NxTU7YFBxp3i~qe-+kBswbt;CU!XArqiN<7nK0s@Y;t>U zw|?KL#iUb$=^(WH8o<0r&RkTRz)j9Xe zzK;ZSDym1b=DR&EhuRdw0c=^QD|W|2D`E~V-qn*&XWJRu*r!clgOt9nN~luZVhrLt zKH!iaw@S%h(7Uj>UOz(7tg_*d4uauR6gKpmGbL|`_|1wEc4+PQr*ZSYtsCxXrsazx z-zB@h>DqC3pRE{vUM0Jgoz!qpXj6DBvUUHbt(x!zR%U1JEk4usyl39Rk}OO-19#lc zh*66W&nHxF>B@+1{#{!A@WeB<6^_Y)GAm!pg8l91vK?Kr=t0JtQ>lWIKTYU;7cZYb z#%Uhvh^;?cEXKwYd-juJ7J|)tjUQ8$H-gD>T3a~7|0tI|%~m9h!@cYz4O0|@nT{(Z zR^cY=9nUVzzLe;Drjp_zeD9V}u5#zbPuZZZshnb8t;75cq7<~$<|j!j3xVW!r7xB} z1WGmLwuU!cU%{MAyv?|B8%$s{N46Q6E&mRXRB6!=kZC)#7(7u!*-x`7v5~;-;z{r@K@t`mb zhJx{<>u*U*hwspwmB)YiY}OH1Go!d$UY}_>MBwCdUENY`Eh)=u@DL*Kyj->K z{z%$pP}xidDmM^82+?lSHFC7nld)1BjPg-7;D=?my-hdjsUm~(x@N%FHmUHmT6$eR zCCZm)(2Ms~J+>%+x~f3pc`_%mI=KRf#)8RyPB)c4{f=D-uqK{D%C*8YEDba787T;k z+Vq#Ii7;=;yy!XEovCc@sv;6nh6G33`M3f$%nPf(8t=1P=n7Zf2w!A1hcz#vbhzXV z6?-hHO$_%a@E{gQi}H-4;?Vm0Y<}(+=OjDFYWZ}_^ljZ*8fowxi5`#r^JK)?Mul$P ze)gmrH>Gl3MbZbJI+AMKL~aRmHV2G$r5oU|E7;^t(x(4?a^?SKa&$S^h?L0)4?3rt zfa6E2QF9Md-Rom^avu*VhyxwL@*iaky!~c1e|zPrbnmn(G0XcXPvHUAd5Ljs9sGTj zL}xKB0DH7B`Du3w(p&CeDcS+0*c7aUo|hmUXz~QLE$Hp@KW4f!w>rxb?nu!{Y=23W zyiWLCGu=aMbdOG21rIt?^%4Ur3s;qoXVhDS-B>Qjga1+uCs$*c!QPNSgz=dw3tSbJ zPlfgDxLlSh1gtCStI{+QeSqtS3zNYEr0Su9!2rc?uHcqKoXE=w3E{|5T9pPux`}1S z+w|#b1s~JlPCqY~b+l!2EqZwZ!9rGFL-d7@!w-aBuve0|{}pRuXwZ@GjI=?~&;+H; zHb0q=Y<$~g++f(}@8aZ8K%Y$|s z9t5`#5Lfe@r?`E!*1h8WH_x0wq;++~IqW7Fkx3-rG-q#L-shZ-bpSpxElmF2+iagO zLb=M8Q@;wV!1%mjH1%Zu2|qT)NoZ3o6$vfn!5n*g20FW*Su zBNHgnXZH{6@YfrLEjB+ZV`;-9`!H83Yay+JCA!%}By(06?5hYi;GT4QMX0uB$@+z6 zsCyM*aEmoJ?v`3VkKn`V>A7FEin8f@bqcm1gXQ(L_1*SLZDFlt6eER!^5jm%iGPS4 zsqSy;8*P$X8+eco@Sl+BUL7?P67HHH{hLL@e!}+Y^YwHLafj|fx`~(g zi&M0{T<@}{gng85(MmSZr?(tv2v`5GS0^kX`T>g!3+enb=eK*|H33Hh)$;AH^y}#=4}J9anB8wq1VgFn5b{eM0@}MG+3chd{Xl1^b$N zvWgr1+#xM6R!G#RP0!5xu%dnOsl!?b~TKEQK zgqLc?BL$Vj(zuCjTQh2z*dBIR0gV5o_3;95FV?U9Zh8@a(SN+K1-Cp;xK#64cQpH= zCfIM|8M0SL=gp(haoI(ehW>O|Lze!&7&jWQ(A6_?BxjmjO81HaKze#)kwDq3a)QQH z?bpG;kU5foW?o|T0^$!(j_FDJN_*X^9mttd!U!S+eMYc9I8!*2F-pA{q0t7aw0g`* zryh-|X(fqBWE1D;uuqj8E%)=$Fn=~Gisd}RVD(;1?H^=CkLPIPw^KEwc^K{o?iG4c zF@42MltPhd8E7XoNG$f({w}$nkk{|O>Q}XbF6W~^kJK*#3wo!8paNb zkq##`$fEII9eJ9suROR87G5M`14E3V(&kh6P>8k{C{?=Y;5zw6FhRs&yd^^Dh=HrJ z<>){JKALg!36-2#>_gLsf8-?#JBMN`|mq5MI}8qlmx^XPD5%x6P%Z1?X^|Vu=<4Aw8@ML>1rd zP9|IOQt7li7~mbW2L+gqG6f@yq0mTBtfp2el;td2M0K|T&A zP-KMCf+-tsd>g+0!+N|&ePGdD{(WPkd{bRdNcY=_X+_-O1orP4=}um{`*R+D82LA{|x^Jm-ZJN|qtG(Gg0#r}A6PvQ%u&wnFWufm{y zhKuy?0C)${k?leABk(w;|G#fjItZX$T+LKr7GYidsPID5ewy>}jBhgO7d$|E8Nmam z@Y(n=Nn>XWnWf?7T!sIN(Z}KTVy?>u*Z>`l z8@8G{@S*y*stt|UP=!+=i$U6j!GcxL^VTESn!8isUR}a%cKl^W2rxlF>16#LeNfJA z(tB7f`*zASPOFv{(v_-}EW&^*&UHhR8(Q0G*6tOF-e3W46ed5s z5eVLo_zD;JGov-r=)f3Z0!nJ@v z^8?NWA}8I1@pghPcn4Ls|5%^(<~6_9Zwv{;Gn$k(k@-h7t`V$dB4Gr;3k64aIhh|udSkLH1xI7gJ^;8hR7Izxv;B&r70%n4QGrT>Psc zH;rRd(WeAdB(Vm?zs{FkC6(a)q@V7HRDZWiQvNBk?2}#jGfN{cvZbHo^7q11Nc!Jr zcEN$TA)nSs!S>BL!W;DC?ZZS~2x0r|5Z(A3HLA+j^hwyXUlKJVn6a zcaWFA{hsX|q+yK4qd!E$rd5?;&;#EO?^?-r@o3MDb1NR?!nf9n?*U#}$dbYHEe67F zPXwPo9vwXkn9lbfih)UCbnIMG-s9~TWx;n9b;?DR;!kjyOj_BpwG|9qWZoCb%ae($ zo|5YXwvvIzM0{$@+ypLL1}RO`XjwwwM67r(;y+5v8+;>t!Kf*tiFD;tP zF6i`P{IH{w@tLNSZiea=#DP|=x7~(d`OI?|zZgcpS+Q_hr+h3R!T9JF-_`%dHoU_f zHN;tB8#BfUqVK9x4Mq&Urz@RKJ^q~ScQ>OE-}Wq(=L*C&%4x(?Ck@wjF@9n+60Fl_LSb^({IHW zR7?FMo=m)5QVb|WjWWW3R4{5ta0}YcsvRXmW*AO4zWIGb4TGd#FILN)b(o;0t;y_` zq`QwN%B>7$h1 z5K~B)GbTusP%?R~FKIVsX@oE8ZK@e<#-YOij}_s?F1dYtsgk$cplF6BA$po0g6sB@N=#%E9Mu=UoLyo`d}brrEBNp{Uy6KuV`naWWSj`T%8Q|5GoFSt3fx!rB72S zh8ugS_pBuVoNvIv%be;z11zPoMF!w@jwb|HTz_@Rmdj2+$q;gdlSGc>7lP0iMbGC= zP^73ZcZs>PZgaq~cSX};9C)$}uATz%{#EaL5VXHnkVa9s@`|0ZbeR+S61;x0h1!dl zL^3k&40t6XOd=kN641wl+9VwNqR%X9z#!yR@0etU2`a%`_5OZ>u2MrFHqo%B`Z9*y z@DDv6aA%YTZ7YG8i3}~w}~bDIV-n2&tGG##@L~=$}?@ z<)YvMQEac=wi~Wb>JNnP)|2|9nPHLlYE8}@+8EcVts%dE$c0kO3b%(TQ!(xe?p7;l zp%1E3IF)2YgoR2d((AT}+fzfDR&Cy3f&=l7;N*Y55sJwh!?!)eSAA%p!a>99nHCNE z?p?(qZ`i9T>{{40=3}@ueM4R^cayLD*k%`X>|O!WNFq6PhvkGHqe!vdpjcFtUBGSP z$QWFPM`dE8>wmg4vIXk_WzkU+++yBRmtzJThdce=f#;*CXKvz0?sv04HJ;L##vzob z!g!v5p2|r^-9ezdT;6Mwjg`YKy%bO&6+5b4I&2vXQe+uAVMw3d5_8>_pm{WxCTlcf z5fovZv;6$UocP0t&WQntVxU&4D{rvRjWX?|-u9lxP`cgc3Q}~`D2W%Nd^W^>-yZ6E ziO9#v(MBC{TJ?W&FkUxKL#7023imuFS`a3CW#;`lwzq1EMdDRvMe|Xf;dzs*Ot-a= z=!99PE{p`3RNwSuq(K=WnIrI3d*{M&J0or04pO_} zTKCAQXo>iq^K+5F6dcl=J>9pSJfiILFX8OmWL(d#1aS<{vp;!#dNK4`Og(+Q^}tB_ zRIkHg=TkT8$*E@$mzv3cgZBx0p{7{qZ$}?z^gv^P8x#SX^qdz`}(7^qj8}P zH_j^52~T-B11tS(qm?W^!!X3IE#Tg5F=cGu$5s!?*@P?Vl6vp!3)ILmPHLT)XT1K@ z%U}|7#p7JAC2TzF^7clh3mLynWr4y-R<8v6QOn6Y?6i}|)MEMU*&~z{E~+W3BmkOV zWA9q(M~6yZdiuTgl9ljmMe%`(-|67tAm(iJGN3Q_V_S}L7DAY*-;SZL0_TXDP|Y)4l*0! zu)0NIjOK(-tUb=&6Q~j|7H3^|G@o+~vBT)*nDd71Ex8`k^}fcro=u(&rl2r0*iIcS zy4N9B;ohF1KcLMOa+~*^rI`6onMMtf+cMU1>w3~GdwUfGs3h~Xt{Zzi(bw*hbBK=G?nuF;NVN<~^YkH@ASPmQ& z#8N=gA4#@8dYmB>C?M1&$*)7Z3m!s$IgkCCtb@P>StJ5m)cw>vB4_00p z-Y?jue(#m={(HKV8g~i5ada><*~zpF={B<4ZY8q4$GNseY90o!!V>yFPX6sye7QJ1{<*|V zy6%}!J(w2XMB9yP_+#JOWY@cGBU@-;Xq%uw+}T-O3diXDAi3koEab-xk`#~OniDrl zM?(DD+B5jT%3qr6ozqiahCg3y7uVrk60mJ8OJsfoTC!|r^|p*E3~CiRi0m{=wd4%3 zt7-Znb7^UnU6IkFyb!mvBD&?Az8j(~=Qm48t@VBPRa#68rsQXA8y1vRys8~hER9(0 z4^I={GL6!lytE+}nWvRl3APj}(FO0Yn#ML$hL=8d3Goq&N24?)2AEpRil5QSaR_@a zFFsrHx9#qpwA?*iZJvt7jj>=E5*b{)lO0@O^z6~6ubu+t6wgzm!>Ato0W$q2E_uZt$clX4Z70p}XS3~kuSj_P< z)>An32V`|@C5lham`^S&?S(hS*tR$Nb52og7PiAu) z6;%FYQ$b~P)B|;)O8>h@m2H66Vv^e z;KqEiZPQGpZ)W9L@SfBlQS}8vj_WK1gHF6M&T;DY4+FgPL>2#BT^N|`sCbA%#tO84 zxdmM5H5|L?-RJP+>_rY4!aM5;E%G@QoJ_o~_xT=Ye|G!(v}EfGPw!E+&(7-F;tNEG zXV#SYVJn}N3`Clp_+{aW4At-bA<(ngFH)G9QnHye56rGbWZqVz9VobWU_}yp-i_BiZS)e=2_M}%Zyw2Hy006&q5QwRtvU2 z?@RruEt4vDzI?UP+)A(@`A*AwoF*7)J3MJrI(Dt8ieKk z(uOFG+oJBXHkiSct*_coW{SqRF*y((X*6rO^RVWYi{>Ssx+voyTMVDE&VS4#zm@3_olKaw-DY8*HQALjLtMF(LB zjzM^o^qv5u30_{Y-pC#k*Ff0v zU3|L1q`)Y_wezLroiWueV@d_*@7n}7H}GKRgz59Dk18oXWBc@FxnI~>K2$TAN)v&A zU+EWCy(w+If@$}3+cGr<2IGP>2DM!#0%Cib}Hg}ZnM)H+d53dZZrk04+2o8g$; zbZ1YK?-K6)hmMw=LSzSB+`IrA2ISg702j~>wqe}-eHQ-{Yy)9^UZphUnstzO)SuhjdNAVSP)JcqZEiU+7?#zpiAA5Hkv%96j41C zAHe#QsvLs{NZupo)1vJ*r_-~#QmcMcs2&HKSCGyrYp}ti26cTIa#c(sa*$d!<9kI1 zU2_)lBT$@?#3Vg+LVq{PS)aDMtaC?{3mTD;p_mZ*-mQDnT;0BfmPz~cT?79qwA`hp zQZ^vHrzzRXztDSN`qpRd4#qvd+E(_zm@tDAm;~zokIj&bs zW=bz?YmW6Gzq`i$a;n8S=zrpKkZqsNs9kY(bQuo9VIM~~PDDTza&j#!|8+zRWhfyY z*bAu9a19=2x9u-^PdDe$$IGN9AEefKy`4XT>cb&IOLXc zJ*jkq>EuLrChKx|x{C;qf-MW$N)}V2*>#88K{&~XlKWEZfK7IMNmcK=vhnZ=r0RB! z4dF`qJ$ZYL*1FF;sT+z+*#U3Q#SKRP9$RacSL{tw(e9rri|IdscP*5@Z7;N2G=#~L zz3oo_^jr{JzCLt>W3^s!C%@dSsi&0>oGUx%>ndd>1l9av0| z2g9^)EAOPyrpuO1qW$ZFY!n_2sPfoKAr^Suu98f9WBg~APue;%b_UDqS4~N6I+Bv}lhO3FSHrI!*WAn1P^&#}hE){Vc1qYu1rN%Xy-ykb zuNS27+re4t&baFO(H+*wW!J4T@A*rHm#eO%BE9s%-bmB1ORsfj7~4Q5jmMiZ*l6c_|Jx$? zxPZ>w82M-U&EP#R5*nia*cQWxt_85}`D>Djd@68ycXiYH0Tfgw#R}u|wT8sy8WV9~ zXR~z+g~OAG5mW?pfA8MJUo8~nCtqPcSpF?bDuO}y(X_74mW|DhukpCRi{A>TU*8jn zd}^ce`2TxX)J`T2f3M2VB_7-QAnW0mxPx5N4&Phz3yuy-G87fEww2jfy4HddEH+p4z#^Sl+Ot-H%m(o zkEKeGP}NH6Cbe~mmI?SW-pQ}drMk;=SF#TDIsNrjAsc>k?h2P1&u=+#ojd=jUJslL zq1sy}vFT!Hw}))omaaQ80RUW!Ay6a8x?z;F#v`Dq8 zk_(~&BUoY$f=M4hn|aGn1Bl|m+J0msdgJ)YyX*P?mU9mJc=FKQ_8zhTNay|8(@=yb zlHzh)BWu(;QA8r;pJ#;HAd%8JHry68b~|n2nO#*Z_0)B5oBLzcH)yd@{ivl?4KXPX zGvnQ9oHV^PczklQ+I; zRib6`c5;qAZBTV{uv)fl%T+=jg)Vtndt7%1+KWCe@6Xup-A{3!T=trDGPb0)Sg7fv zsrEBkX;iCgJv#7psM|!^z9;%GfioI%bkC_iZ>vpF2Wt!!d|<%2e<~`i8Jemlxa%qt zf-H^UN$bPEV}gXQI?@)yh_`Wi}w7pA%5s zzC(1AX;w7V86 zni(bxSCCu?{{p)|@Z@%}?AOXqz*6c?BI|}jrY{Ieo3=%p(n}1uM}*Wnj2zl@uW*v> z8dvLzGHkTCr*4*bJG$aaj30|loF{2t&G(fqH7>fNtR5ET5jn0<>Z)GN7ahxrLJTzcIsLSc+)21SyqiN;^o0MtPsPsgE`cElI7q!M5>F8N(m51NA^-cLPjw?uh8aZNBr}1Sgc)0}ronKQwj3X8NtbuxZ6Al2c zoL*&%taiHR!j3nh0Quv!MMx#7>tdG*&kB{(N0MhZgP8K*lVQdQ|7vOug0Vs`M=8_h z*zo}DO#|Oe=#T0(RX5tb7Ha3x!a=)V|4SF~|1XQQKS#+e1ZW3Ga8g_QvJQc?|JPr+ c%`SY&lwt3IPFvXN41 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 Wc_gr(WHQMB0000wrL55D*B%9Pa@DA;NpA00Pm2 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 { mainAxisAlignment: MainAxisAlignment.center, children: [ Image.asset( - "img/logo_mint.png", + "img/logo_orange.png", width: 160, ), MenuiSearchBar(), @@ -47,7 +47,7 @@ class _HomePageState extends State { style: TextStyle(color: Colors.grey[400]), ), shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(12)), + borderRadius: BorderRadius.circular(50)), ) ], ), diff --git a/lib/components/lineOfIcons.dart b/lib/components/lineOfIcons.dart index fae692c..bee2b58 100644 --- a/lib/components/lineOfIcons.dart +++ b/lib/components/lineOfIcons.dart @@ -3,6 +3,7 @@ import '../services.dart'; class LineOfIcons extends StatelessWidget { final MenuiTags tags; + final double edgeInsets = 6; LineOfIcons({@required this.tags}); @@ -14,16 +15,16 @@ class LineOfIcons extends StatelessWidget { children: [ if (tags.alcohol == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_alcohol.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Alkohol', @@ -33,16 +34,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.cardPayments == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_card.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Płatność', @@ -56,16 +57,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.delivery == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_delivery.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Dowozimy', @@ -75,16 +76,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.glutenFree == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_glutenFree.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Bezglutenowe', @@ -94,16 +95,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.petFriendly == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_pets.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Lubimy', @@ -117,16 +118,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.vegan == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_vegan.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Wegańskie', @@ -136,16 +137,16 @@ class LineOfIcons extends StatelessWidget { )), if (tags.vegetarian == true) Container( - margin: EdgeInsets.all(8), + margin: EdgeInsets.all(edgeInsets), child: Column( children: [ Container( alignment: Alignment.center, child: Image.asset( 'img/i_vegetarian.png', - width: 20, + width: 18, ), - height: 30, + height: 26, ), Text( 'Wegetariańskie', diff --git a/lib/components/lineOfIconsSmall.dart b/lib/components/lineOfIconsSmall.dart new file mode 100644 index 0000000..76881e3 --- /dev/null +++ b/lib/components/lineOfIconsSmall.dart @@ -0,0 +1,123 @@ +import 'package:flutter/material.dart'; +import '../services.dart'; + +class LineOfIconsSmall extends StatelessWidget { + final MenuiTags tags; + + LineOfIconsSmall({@required this.tags}); + + @override + Widget build(BuildContext context) { + return Row( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (tags.alcohol == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_alcohol.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.cardPayments == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_card.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.delivery == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_delivery.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.glutenFree == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_glutenFree.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.petFriendly == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_pets.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.vegan == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_vegan.png', + width: 14, + ), + height: 14, + ), + ], + )), + if (tags.vegetarian == true) + Container( + margin: EdgeInsets.only(top: 4, bottom: 4, right: 9), + child: Column( + children: [ + Container( + alignment: Alignment.center, + child: Image.asset( + 'img/i_vegetarian.png', + width: 14, + ), + height: 14, + ), + ], + )), + ], + ); + } +} diff --git a/lib/components/restaurantCard.dart b/lib/components/restaurantCard.dart index 4ad5950..e9dc681 100644 --- a/lib/components/restaurantCard.dart +++ b/lib/components/restaurantCard.dart @@ -1,62 +1,110 @@ import 'package:flutter/material.dart'; import 'restaurantView.dart'; import 'package:menui_mobile/services.dart'; +import 'lineOfIconsSmall.dart'; class RestaurantCard extends StatelessWidget { RestaurantCard({@required this.restaurant}); - + final _services = new MenuiServices(); final Restaurant restaurant; @override Widget build(BuildContext context) { + String _openHours = _services.getTodayHours(restaurant.workingHours); return Card( child: InkWell( onTap: () => Navigator.push( context, MaterialPageRoute( - builder: (context) => RestaurantView(restaurant: restaurant))), + builder: (context) => RestaurantView(id: restaurant.id))), child: Row( - crossAxisAlignment: CrossAxisAlignment.baseline, + crossAxisAlignment: CrossAxisAlignment.center, children: [ Container( child: ClipRRect( child: Image.network( restaurant.imgUrl, - width: 80, - height: 80, + width: 100, + height: 100, fit: BoxFit.cover, ), - borderRadius: BorderRadius.all(Radius.circular(8)), + borderRadius: BorderRadius.only( + bottomLeft: Radius.circular(12), + topLeft: Radius.circular(12)), ), - padding: EdgeInsets.all(8), + padding: EdgeInsets.only(right: 8), ), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( restaurant.name, overflow: TextOverflow.ellipsis, - style: TextStyle( - color: Colors.orange[600], fontSize: 16, height: 1.6), + maxLines: 1, + style: TextStyle(color: Colors.orange[600], fontSize: 16), ), Container( child: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - 'Miasto: ${restaurant.city}', - overflow: TextOverflow.ellipsis, - style: TextStyle(color: Colors.grey, fontSize: 14), - ), - Text( - restaurant.description, - overflow: TextOverflow.ellipsis, - maxLines: 2, - style: TextStyle(color: Colors.grey, fontSize: 14), - ), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Icon( + Icons.location_city, + size: 14, + color: Colors.white, + ), + Padding( + padding: EdgeInsets.only(left: 4), + child: Text( + '${restaurant.city}, ${restaurant.adress}', + style: + TextStyle(color: Colors.grey, fontSize: 12), + ), + ), + ]), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Icon( + Icons.restaurant, + size: 14, + color: Colors.white, + ), + Padding( + padding: EdgeInsets.only(left: 4), + child: Text( + '${restaurant.type}', + style: + TextStyle(color: Colors.grey, fontSize: 12), + ), + ), + ]), + Row( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Icon( + Icons.timer, + size: 14, + color: Colors.white, + ), + Padding( + padding: EdgeInsets.only(left: 4), + child: Text( + '$_openHours', + style: + TextStyle(color: Colors.grey, fontSize: 12), + ), + ), + ]), + Padding( + child: LineOfIconsSmall(tags: restaurant.tags), + padding: EdgeInsets.only(top: 4), + ) ], )), ], @@ -64,7 +112,8 @@ class RestaurantCard extends StatelessWidget { Container( child: Icon( Icons.arrow_right, - color: Colors.orange, + color: Colors.white, + size: 28, ), ) ], diff --git a/lib/components/restaurantView.dart b/lib/components/restaurantView.dart index 94730b9..bc47ac0 100644 --- a/lib/components/restaurantView.dart +++ b/lib/components/restaurantView.dart @@ -3,91 +3,287 @@ import '../services.dart'; import 'lineOfIcons.dart'; class RestaurantView extends StatelessWidget { - final Restaurant restaurant; + final String id; + final MenuiServices services = new MenuiServices(); - RestaurantView({@required this.restaurant}); + RestaurantView({@required this.id}); @override Widget build(BuildContext context) { return Scaffold( - body: Container( - decoration: BoxDecoration( - image: DecorationImage( - image: AssetImage("img/bg_tile.jpg"), fit: BoxFit.cover)), - child: Column( - mainAxisAlignment: MainAxisAlignment.start, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Container( - decoration: BoxDecoration( - image: DecorationImage( - image: NetworkImage( - restaurant.imgUrl, - ), - fit: BoxFit.cover)), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - SizedBox( - height: 160, - ), - Row( + body: Container( + decoration: BoxDecoration(color: Colors.grey[850]), + child: FutureBuilder( + future: services.fetchRestaurant(id), + builder: + (BuildContext context, AsyncSnapshot snapshot) { + if (snapshot.hasData) { + final Restaurant restaurant = snapshot.data; + return Column( + mainAxisAlignment: MainAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container( - padding: EdgeInsets.all(12), decoration: BoxDecoration( - color: Colors.grey[850], - borderRadius: BorderRadius.all(Radius.circular(8))), + image: DecorationImage( + image: NetworkImage( + restaurant.imgUrl, + ), + fit: BoxFit.cover)), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text( - restaurant.name, - style: TextStyle( - fontSize: 24, - color: Colors.orange, - fontWeight: FontWeight.w300), + SizedBox( + height: 160, ), - Text( - restaurant.city, - style: TextStyle(color: Colors.grey), + Row( + children: [ + Container( + padding: EdgeInsets.all(12), + decoration: BoxDecoration( + color: Colors.grey[850], + borderRadius: + BorderRadius.all(Radius.circular(8))), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + restaurant.name, + style: TextStyle( + fontSize: 24, + color: Colors.orange, + fontWeight: FontWeight.w300), + ), + Text( + restaurant.city, + style: TextStyle(color: Colors.grey), + ) + ], + ), + margin: EdgeInsets.all(12), + ), + Container( + margin: EdgeInsets.only(right: 12), + decoration: BoxDecoration( + color: Colors.grey[850], + borderRadius: BorderRadius.circular(30)), + child: IconButton( + icon: Icon( + Icons.map, + color: Colors.orange, + ), + onPressed: () {}), + ) + ], + mainAxisAlignment: MainAxisAlignment.spaceBetween, ) ], ), - margin: EdgeInsets.all(12), ), Container( - margin: EdgeInsets.only(right: 12), - decoration: BoxDecoration( - color: Colors.grey[850], - borderRadius: BorderRadius.circular(30)), - child: IconButton( - icon: Icon( - Icons.map, - color: Colors.orange, + decoration: BoxDecoration(color: Colors.grey[850]), + child: Column( + children: [ + LineOfIcons( + tags: restaurant.tags, ), - onPressed: () {}), + Divider( + height: 14, + thickness: 4, + ), + Padding( + padding: EdgeInsets.symmetric( + vertical: 4, horizontal: 12), + child: Text( + restaurant.description, + style: TextStyle( + fontSize: 12, color: Colors.grey[300]), + textAlign: TextAlign.center, + ), + ), + Divider( + height: 14, + thickness: 4, + ), + Text( + 'Informacje', + style: + TextStyle(color: Colors.orange, fontSize: 14), + ), + SizedBox( + height: 12, + ), + MenuiDoubleColorText( + leading: 'Adres: ', + following: + '${restaurant.city}, ${restaurant.adress}', + ), + MenuiDoubleColorText( + leading: 'Kontakt: ', + following: '${restaurant.phone}', + ), + SizedBox( + height: 12, + ), + Text( + 'Godziny otwarcia', + style: + TextStyle(color: Colors.orange, fontSize: 14), + ), + SizedBox( + height: 12, + ), + WorkingHoursList( + workingHours: restaurant.workingHours), + SizedBox( + height: 12, + ), + ], + ), ) ], - mainAxisAlignment: MainAxisAlignment.spaceBetween, - ) - ], - ), - ), - Container( - decoration: BoxDecoration(color: Colors.grey[850]), - child: Column( - children: [ - LineOfIcons( - tags: restaurant.tags, - ), - Text('1234') - ], - ), - ) - ], - ), + ); + } else { + return Center( + child: CircularProgressIndicator(), + ); + } + }, + )), + floatingActionButtonLocation: FloatingActionButtonLocation.centerFloat, + floatingActionButton: FloatingActionButton.extended( + onPressed: () { + showMenu(context); + }, + label: Text( + 'Pokaż menu', + style: TextStyle(color: Colors.white), + ), + icon: Icon( + Icons.arrow_upward_rounded, + color: Colors.orange, + ), + backgroundColor: Colors.grey[900], + )); + } + + showMenu(BuildContext context) { + showModalBottomSheet( + context: context, + builder: (BuildContext context) { + return Container( + decoration: BoxDecoration( + image: DecorationImage( + image: AssetImage("img/bg_tile.jpg"), fit: BoxFit.cover)), + child: Text('qweqweqweqweqweqw'), + ); + }); + } +} + +class MenuiDoubleColorText extends StatelessWidget { + final String leading; + final String following; + + MenuiDoubleColorText({@required this.leading, @required this.following}); + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(2), + child: RichText( + text: TextSpan(children: [ + TextSpan( + text: leading, + style: TextStyle(color: Colors.grey, fontSize: 12)), + TextSpan( + text: following, + style: TextStyle(color: Colors.grey[300], fontSize: 12)) + ]), ), ); } } + +class WorkingHoursDay extends StatelessWidget { + final String day; + final String workingHours; + final int index; + + WorkingHoursDay(this.day, this.workingHours, this.index); + + String formatTodayHours(String hours) { + if (hours == "") { + return 'nieczynne'; + } else { + return hours; + } + } + + background() { + final DateTime now = DateTime.now(); + if (now.weekday == this.index) { + return Colors.orange; + } else { + return Colors.grey[700]; + } + } + + @override + Widget build(BuildContext context) { + return Padding( + padding: EdgeInsets.all(6), + child: Container( + padding: EdgeInsets.all(6), + decoration: BoxDecoration( + color: background(), + borderRadius: BorderRadius.all(Radius.circular(8))), + child: Column( + children: [ + Text( + day, + style: TextStyle(fontWeight: FontWeight.w300), + ), + Divider( + height: 4, + thickness: 2, + color: Colors.white, + ), + Text( + formatTodayHours(workingHours), + style: TextStyle(color: Colors.white, fontSize: 11), + ) + ], + ), + )); + } +} + +class WorkingHoursList extends StatelessWidget { + final MenuiWorkingHours workingHours; + WorkingHoursList({@required this.workingHours}); + + @override + Widget build(BuildContext context) { + return Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Row( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + WorkingHoursDay('Pn', workingHours.pn, 1), + WorkingHoursDay('Wt', workingHours.wt, 2), + WorkingHoursDay('Śr', workingHours.sr, 3), + WorkingHoursDay('Cz', workingHours.cz, 4), + ], + ), + Row(mainAxisAlignment: MainAxisAlignment.center, children: [ + WorkingHoursDay('Pt', workingHours.pt, 5), + WorkingHoursDay('So', workingHours.sb, 6), + WorkingHoursDay('Nd', workingHours.nd, 7), + ]) + ], + ); + } +} diff --git a/lib/components/searchBar.dart b/lib/components/searchBar.dart index 40a902b..ba68988 100644 --- a/lib/components/searchBar.dart +++ b/lib/components/searchBar.dart @@ -83,13 +83,14 @@ class MenuiSearchBarState extends State { child: Stack( children: [ Positioned( - width: size.width, + width: size.width * 0.94, child: CompositedTransformFollower( - offset: Offset(0.0, size.height + 5.0), + offset: Offset(size.width * 0.03, size.height), link: layerLink, showWhenUnlinked: false, child: Material( - color: Colors.grey[800], + color: Colors.grey[850], + borderRadius: BorderRadius.circular(20), elevation: 4.0, child: ConstrainedBox( constraints: new BoxConstraints(maxHeight: 200), @@ -103,9 +104,13 @@ class MenuiSearchBarState extends State { _controller.text = suggestions[index]; searchRestaurantsByString(); }, + leading: Icon( + Icons.search_rounded, + color: Colors.grey, + ), title: Text( suggestions[index], - style: TextStyle(color: Colors.orange), + style: TextStyle(color: Colors.grey), ), ); }), @@ -135,18 +140,17 @@ class MenuiSearchBarState extends State { padding: const EdgeInsets.all(12), child: TextFormField( controller: _controller, - //onChanged: (text) => fetchAutocomplete(text), style: TextStyle(color: Colors.orange), decoration: InputDecoration( hintStyle: TextStyle(color: Colors.grey), enabledBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.grey, width: 1.0), - borderRadius: BorderRadius.circular(12)), + borderRadius: BorderRadius.circular(16)), focusedBorder: OutlineInputBorder( borderSide: BorderSide(color: Colors.orange, width: 2.0), - borderRadius: BorderRadius.circular(12)), + borderRadius: BorderRadius.circular(20)), hintText: 'Wyszukaj miasto lub nazwę restauracji.', suffixIcon: Icon( Icons.search, diff --git a/lib/components/searchResults.dart b/lib/components/searchResults.dart index c9a4fa5..528294e 100644 --- a/lib/components/searchResults.dart +++ b/lib/components/searchResults.dart @@ -23,7 +23,7 @@ class SearchResults extends StatelessWidget { height: 30, ), Image.asset( - "img/logo_mint.png", + "img/logo_orange.png", width: 60, ), MenuiSearchBar(), diff --git a/lib/services.dart b/lib/services.dart index 829b98f..90dd37a 100644 --- a/lib/services.dart +++ b/lib/services.dart @@ -38,6 +38,62 @@ class MenuiServices { } } + Future fetchRestaurant(String id) async { + final response = await http.get('${backendURL}restaurant?restaurantId=$id'); + if (response.statusCode == 200 || response.statusCode == 304) { + final decoded = jsonDecode(response.body); + final workingHours = decoded['workingHours']; + final tags = decoded['tags']; + final links = decoded['links']; + final List responseLunchMenu = decoded['lunchMenu']; + List lunchMenu = []; + if (responseLunchMenu != null) { + for (var lunchSet in responseLunchMenu) { + final MenuiLunchMenuSet thisSet = new MenuiLunchMenuSet( + lunchSet['lunchSetName'], + lunchSet['lunchSetPrice'], + lunchSet['lunchSetDishes']); + lunchMenu.add(thisSet); + } + } + final result = new Restaurant( + id: decoded['_id'], + name: decoded['name'], + city: decoded['city'], + adress: decoded['adress'], + type: decoded['type'], + coordinates: decoded['coordinates'], + phone: decoded['phone'], + imgUrl: decoded['imgUrl'], + placesId: decoded['placesId'], + workingHours: new MenuiWorkingHours( + workingHours['pn'], + workingHours['wt'], + workingHours['sr'], + workingHours['cz'], + workingHours['pt'], + workingHours['sb'], + workingHours['nd']), + description: decoded['description'], + links: new MenuiLinks( + links['facebook'], links['instagram'], links['www']), + categories: decoded['categories'], + tags: new MenuiTags( + tags['cardPayments'], + tags['petFriendly'], + tags['glutenFree'], + tags['vegan'], + tags['vegetarian'], + tags['alcohol'], + tags['delivery']), + lunchHours: decoded['lunchHours'], + lunchMenu: lunchMenu, + dishes: decoded['dishes']); + + return result; + } + } + Future> fetchSearchByString(String text) async { final response = await http.get('${backendURL}search?string=$text'); if (response.statusCode == 200 || response.statusCode == 304) { @@ -46,7 +102,6 @@ class MenuiServices { for (var restaurant in decoded) { final workingHours = restaurant['workingHours']; final tags = restaurant['tags']; - final links = restaurant['links']; final List responseLunchMenu = restaurant['lunchMenu']; List lunchMenu = []; if (responseLunchMenu != null) { @@ -63,6 +118,7 @@ class MenuiServices { name: restaurant['name'], city: restaurant['city'], adress: restaurant['adress'], + type: restaurant['type'], coordinates: restaurant['coordinates'], imgUrl: restaurant['imgUrl'], placesId: restaurant['placesId'], @@ -83,10 +139,6 @@ class MenuiServices { tags['vegetarian'], tags['alcohol'], tags['delivery']), - links: new MenuiLinks( - links['facebook'], links['instagram'], links['www']), - phone: restaurant['phone'], - categories: restaurant['categories'], lunchHours: restaurant['lunchHours'], lunchMenu: lunchMenu, dishes: restaurant['dishes']); @@ -97,6 +149,43 @@ class MenuiServices { return []; } } + + String getTodayHours(MenuiWorkingHours workingHours) { + final DateTime now = DateTime.now(); + String todayHours; + switch (now.weekday) { + case 1: + todayHours = formatTodayHours(workingHours.pn); + break; + case 2: + todayHours = formatTodayHours(workingHours.wt); + break; + case 3: + todayHours = formatTodayHours(workingHours.sr); + break; + case 4: + todayHours = formatTodayHours(workingHours.cz); + break; + case 5: + todayHours = formatTodayHours(workingHours.pt); + break; + case 6: + todayHours = formatTodayHours(workingHours.sb); + break; + case 7: + todayHours = formatTodayHours(workingHours.nd); + break; + } + return todayHours; + } + + String formatTodayHours(String hours) { + if (hours == "") { + return 'nieczynne'; + } else { + return hours; + } + } } // DATA TYPES @@ -106,6 +195,7 @@ class Restaurant { String name; String city; String adress; + String type; List coordinates; String placesId; String imgUrl; @@ -124,6 +214,7 @@ class Restaurant { @required this.name, @required this.city, @required this.adress, + @required this.type, @required this.coordinates, this.placesId, @required this.imgUrl,