From f43c2cc9f6ee3ffcfde3585b909f466658011f88 Mon Sep 17 00:00:00 2001 From: "dinesh.patil" Date: Wed, 29 Oct 2025 19:59:11 +0530 Subject: [PATCH] routing magic itenary --- assets/images/booking_successful.png | Bin 0 -> 22897 bytes assets/images/profile_default_img.png | Bin 0 -> 2056 bytes assets/logo/melbourne_logo.png | Bin 0 -> 9505 bytes assets/logo/melbourne_white.png | Bin 0 -> 7028 bytes lib/common_packages/app_bar.dart | 8 +- lib/core/inside_bottom_navigator.dart | 93 ++++- lib/core/route_constants.dart | 1 + .../views/itinerary_creation_start_view.dart | 4 +- .../itinerary_completion_view.dart | 6 +- .../views/magic_itinerary_filled_view.dart | 29 +- lib/my_pass/views/booking_page_view.dart | 362 +++++++++--------- .../views/booking_successful_page_view.dart | 82 ++++ .../view/your_itinerary_view.dart | 3 +- pubspec.lock | 47 ++- pubspec.yaml | 1 + 15 files changed, 405 insertions(+), 231 deletions(-) create mode 100644 assets/images/booking_successful.png create mode 100644 assets/images/profile_default_img.png create mode 100644 assets/logo/melbourne_logo.png create mode 100644 assets/logo/melbourne_white.png create mode 100644 lib/my_pass/views/booking_successful_page_view.dart diff --git a/assets/images/booking_successful.png b/assets/images/booking_successful.png new file mode 100644 index 0000000000000000000000000000000000000000..43e2dcdba0a453814cb3e154a8107d7c78d6b5a3 GIT binary patch literal 22897 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%0DdbQX)Tr+LI_qXrYFDRVlC7e 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 ^t*W$&ABS9-XW_gcO;{%p&;dG z#7)gJX<}>n!B1N@+?vZ<0IA zYY7mlw)0*mekH!?=;@?9c$mNfX?szirAzODmu>2sSKlRPp-Yfw7Xu08wA6H%*V?U| zkKK0Bzc=gQTs{u7tu76oK)}FEF%zbCDqX>C2=Pt`@<|(C?OVhtzqr3lHu-s&Io!At zBEE0-UEN>7r7vn9Lda&en2A+hGh^}j;Y7En7~*`mfBfr# zSFn_F4I26Zx2%w*8@Fw*2!70~Y1I`m@Sw&9yIJ^U&2*3X4VhOL;hxVrJrXE{)KTFP zXdDxLBGnqN=z7BJw~O>}qGiRAM$J>X<;}QY?9D-#yUr@6SsWWFyX^jDMq$VWF3IDX zrBl%qm0osW?46_Ry?Pzzq3~}?w7q8f>8wf0*>&6f6ib%Ij2V_>35H}ZvxjA%`1nJg z_54YDtKx{Ucj1M;ZaKFKt&>_UydyqxgUZ?RDr4e|a5#GZE~#BKO(o|IN^%iD7t0D} zJ;h$WdcI|%G?qhT^N$CZL{1jgv$SaK_!o#+tXW= zYb7&6Wo~Ib4FWMeLDDn$c0;S4{7B6|w$y1gCQgcx!Xx=*nR3YbrmehLrTn4t?PT)ab?*NLLtNU+=L!zJ%x-pBN(aRMkzYhfFj}I9Txkbx z)5w5Xrw$>ghI8{s-w7q(r}uP(FLMi4hNro{y~=4TGLHmFrM&Z)BxP3Te=K8$Au)*d M5M1ml@BtV82RdLVO#lD@ literal 0 HcmV?d00001 diff --git a/assets/images/profile_default_img.png b/assets/images/profile_default_img.png new file mode 100644 index 0000000000000000000000000000000000000000..a41680664c70ba76037cce1dcafd393ba278da1c GIT binary patch literal 2056 zcmV+j2>17iP)@~0drDELIAGL9O(c600d`2O+f$vv5yP1U+jL*tLL%Gia%R=_kh!qg{? z3O>r#fQpc61S3DbkGl3`TTOa4`>5HqH_T%yO8(nL$Ql8cTzf9ERYLgT*vjYC{yxqrB ziA&_p&iUoE)gA-t!)@R1!v>HV2S{Ac!e7Iz@G;{$>gQFA>}*Mm18Ac5Az65VGd|UZ z4Iotkh_nk!s3AOq4PZ$mh$C2nCi)vTfb?`&X&*QsO8YUX{CR#{Edq%MwQ44_#E=`8MdtMt!eVV^c$O(;ap3uZ$b&b?3cBgy%XPaON29+fo66%X0Jy2#g zDBb`ywh{3e5q;$+-{&}B00xK~mBfg119{p-CO~7p@%{vL&-7l>C?_5M?Z{J{^+A~Q zlnSqm!33$3R}qCOAPStium-{BVL^Oe5gpqowGai!HsPh-olb-A3q^3e_4%x0`u>#_ zkPaIJvj zDCm(JdO}(~<>tx@w(vUz*p;P9uvWlo!qbqeOcxW-{l^ylLa{SkT=ZBeukr*@%!sqs zmr2p2l>+ka`KZFwSv6=8SQ(xQs?ON7`8{!y_1@WG!gVvG(ZNDk#{b02FDR`IpkTgv zN5|~)tQsvzJqaTPM8%OWU;zu>1ViSFs%0bA-Bbw_STj!V6hdVZ*0SqwQYz zIaGje2kae?8?c7Wo%E7eIPGCXxCg62L+KN)J`GG=Z>oqlts{B*P00R$!~o-=kZ1#> zq63DOUy2a$fJsyUm$Tl00rK=8dY>@O3+#gls88X6v!H+=^D=@)Rh|GfWpM>)wFd?e z!3Asp3vRH6#LbIr|0n$c$Vr%4YOCfdkveI7{=M)mw>TpNXjI&6tT5!n0ZQ98pO*m* zD1oFvXcsb}m3npj^iPqnMJbhJ46d6!h*gP#q{0?SRq_oXP2SX_yw)S^MH z@|ib+O)x-Zw9fOgZsCPolcHtJ1}qBC;e9(OhFU%`o1Z$!S!V5DBXc)RT4oX(C(p3>&m{C9!+!!bUn~;+#2`?%4)@GjL@XNEjBt3bl&Ee>$*!^i(%A^Cy%OWu+=FPK>m;189ulwp>L zyLW__>s|>4!VAH?gUk<1U(8g1XpAg6z@h|McI#4tG+7LU|H*t(Wj-fpu@xf594U6n ziWK8R-ke<7c%c4v?`&p_#<(Q570lllkE01Y94UTct9)JbYLKjw^Ob8m;UxjnALg%G zjml=6Ce1=-_)qh?%J>X3r^g*Ip>p`>PzhS~k9yYh1nnCCo9uwSvB2A)lQ!yO>J>!t%kyYG5+BnY%F(kEj|a zO>0IDcbW`t=3W8Q5|Olu*Fpq0O*u(G?G(k{>j{#zgo*?J&=8ODXod^`(6=Z^OK5u`9OXJ_ zzE$`&+@#3&1CO8~i{O)6NIxU#$KbOY>)1hxzB~d<(cpi8X!4Vb)mtQ}s_FEbYJvU_ zcn_fx1(l3V9m{AloO5+{)i0c2p|&}@)O!XHD~L52?e&iTzne3O%v$Ha^Q~KX)~om& zBMv@QwSW@fvk8Di?=%|V)YMygty6;eY6Txzpi}uyryPJHEhRd| zbQ01OQNd$V6YWds)LMK_ig4zWA}XNp_V}_aaDYtCHM&6Z7rt_e)MF5&&Qy zQ<|iwxt#tY=%pgEePBaafBF*p`d*fr`Uq%IVO405eO6gY%^ucQ+xa|2^dK_3D!3+& z%Y3iq!)p;udL_E}9}BZiDUmNkzvX}cfVw;-GR=U8q=@u_0zZFm zXL%8ELox88F=`nCpg?U_2T)AZy)Pq98f*dpFv$>L^oJu>4H7jgv98cpW-P5 ztOS3gVVfs%pST)Fgq#xL0;uXw;gBW53E3hCpedHEGQx-cl9^l-GlpwZLP~rEr_>R16jNk;orQ= z(BJxX5;m@7>cD1jAU<65<;ixD{Z5KBfNxBAV)a;@e*5&Ik z#oTd1+!~gbZ~SmD$2Y#?nY??!GIezRv3%0Ekmy&L3EhP>M9#@ zNab^bSZZY#3E~83w5Rp=1uSMLt6p3u@_j=rx;ekbLuOl`xhoSU(1q65r7lKKpE#dA z{>?KG%w~1#xLuruYn&Mp#eUhnCT~K(bL@KXJZ`til3D!c#(5q%m7PR+)DqgP80v1p z8oG)l-Yh2~$?-RKrVg5BY(Fy}V3daF4Y9h>`{uHCPP2)+HYo*0qEki%KS67j&OV|x zqS?zacNSHP+MVAFHYPojD6fV%ASyrb#{usyE!A8vpBtV|RSu-ODF)ujkp%8M) zA7?VwfFPWbs-8m1`%y5Ao(VAEYczRR29m(AZkdAuC z0x$M%Bo^Jakg7D~K1B-Oyp34t^oSUC`7?Vp`A)^-b|w08$zIW;nE){|kzh&t=7Rvl zAN{c-2}lv00eNCDj#gh>pb!I?tpEA(MY6Oq$@?9IUk1mTc=Ti^+xr)k+(m04nr@3y zaao)A^N6&8cpgT3oL>O_sqr-hsw*`QEr<@exOXr!q+~eJ5YBfz%x8(3f1&8IppV{{ zB*M8Q*Ac;shZ|>sF7a&ap-9QLpSbtIq)QD8ElFtPY^h^!NqkC*vcFf^4;1*x$I7v| z7@NG;m=FV<@f2K--V;AjOb0NLt3()&X?0HtLR*MJx5+Hndze{`W*@=caoyQSOQpOb z3~F>T|CT*`>Lc($7hiW@pc0;h0sj~=%gz7kOk|rt<;aQ_*#WJ;)U0(tExt%l5P?^T z#`}?f!{uEX%#c$wKmYdG_Q)@)uj>5N-|19@cA*-Nq=xd3;(~o&W9h$rfU6kax$yfN zIvA^vXeyb#14)90hhcL(+KJ%Mdb7?+^tIUyM2~Q!GFp$=t>w1de??`%Etn3+#~ysL zQeIz+uh(X5q_?B$QrC`;R*s-o>MZWXU5GxL>u>p?`awAA^kmnVB27aNMieA{919Bz z(FKNT2Q!^kp$EitCy1lLA`ScE4zRIueXU}RFba_>^^MmNjU{rKn1Zur@t)bW+Q<6m zULG4468~k;D6Vx+`~Q*0_0sB8HEf5V>i`F8`#a^<7MR>upeV617F2hHO5a_QY|jhN zBYW$AsoZqa@Vi17m>S*~ocZvIe>lx(2ziiKZYUdoYv_bGTp2LCch?@CYUsr>0Y*Dv zRK#9;LG`-noI(zrc}j+$ziulYEXY4`>N!*=Ex``Dn zIICg9#S<7s6Y~T1y89>Us!>oBiA>TYVP}eLCgvdT2{ykK_pd+LEml)|SDg|cPr2nb z$f_)@elEG)7$-c4d82F^t79n8Cw+O5UL=|QI77N_?_-VWXh`)pT4rqQgAt1=lrzdw z?h^BE6k9`224WXmgZKyYd(q`CV&d+%plcDkg6vxS-dZ!JS03d%`fOZfuf^Rw+E{3k@Fdc{BbZiuTGM+PH|!knj^ z8z)EbFMW3F&oSm|rvnOMP~MV0+MRkNVI`%QNVgcs#0y2z8wF)vG_d;6@pqNsQ10Nu zHB7KOa3zc@=M1*BqwfDXnm?M%IJ@7CMUS6$@E{GyQrvuq=5G}-5ehN$9}#Sgtwqe} ztS$&aa7p+vTzIuNy9w-N7d3V14c0izGrwB4&i<#s-1=q0(7dWGvS7Li&|29#ctYa2 z`r9*E<8is0$|s*R2}CZOs>ls(M-dH?OPT($XPIvO=6Oq{Ff747f}qQ<)^DZJ_4%$# z)ZX~^_gfc6Z({@R0MBk~pRpJ}j|+oV%d&;XRrayCe{+WMjekFBBaBGlt7Kk~5ekzA zWNF>Ex4gaex4i6`{|rHI%@VzClwj=Fyk ziDw2m?-vLo_B!l54yPF;w8q~GWRnlCln-nePGLm3xGQTZ{@Ho&0Z(UK+wqAIR_7%G zhn!?&Qn4Ig+dQB9D)V3?mg*4gK^G2)%SUTj@075qF^q5h8M&tL*JMj9^mH}01;AJym} zrv9ypuesN*&sK6#ZWQwSb+d2hWl}sVAz{@M-45&JhwbhpC@$&_f|a#4i~r9BrA6;(ea+ZB~+e~~+M z<180u!7zNb`P^UNezRbFz1*66PHd}!5Sf4Z%0V;Aj@m`l6Ex5Ni52l)&@ zQ{q>c<|_v*8bfY}&-v6ylvs1SQCj}!TfW<61Rh9J8wISg0&e;mSj%mC+k&)$`(XK< z=pT%(wQg^s_(Chr>;Gad2C=BS2>8=(&vd!Spiy!7W8apw=ji8$$w$1O6L%hI?pi0g z3<}QFB-$1%2q3`K!?^z>>{v>wm)rJjTVr&0jM$>N^5kJJ+u%#;gPsI~^J?FiLN?6v zm0SWbl)_j;e4YJQ+Gs8Uw8t5ShWr2f{6six~zikjP6+-w_)D+w(MzWXKh(I1>ZY(e;)lPUb*tjt)IufUpbV z^N#_7%yAkF@-I`?IJkmE+CM*9iTxmWQr}STkP74zK^`9FdA2TW#Q8>YLH=F0ETF?p zuY!al@<0ia9=AYuiyEp+d7Jz8zS}0h2fTY2(goDgA@w3wS+3{1>i83L6m26@mlb1l zJMWvn6En$pHTSoiy)v?!3`yo;H;dJzAHT&bwM%U;iDTCg;TAb``Q%(Dlsu!U(0{&Z z<%E44mQ#rjc^Se$D4AEDZ(eLdnW$IxY!LRVnpZq!pH4W_e*{~!ST!>@^ZZ`1D-g`i zYuvEo(Z6FWa6_gM_GcUr5&AH1`K`EeMCxFpHc69M1u{^Ze)PSPqTLfjwa{Yem+i1K zcmCDyVF;q>;@Lo1sZjkGQuuUhJQbUaiSol@Vh(EXm!T0R!1$BYyx6O~<82D1YYxk> z{#PI_Uy6UrEa-aKevZM4K==T={r#FdXE9pIFgUPlo90eR6X;eHw|?H5n((*1$ANeU z*^w$gX$gpNa>F~!hCcq?hqX3?T$hpkGvXb~sE`-mh;32zaL0xLGgy#%K9#aIikrG@ ztN~mKkXGuL4`Sxrf72sj&rG3vB^gzp-t%2y!&_h;Q41)={3&&AjS(X~w^8hQcjF$< zud+{;0oJV{>LkMI6M(bhEc_i8htsDKlA!`%#3r8-}~^r1KJ2v_!^o{ zlSV0|oh0p1|BvY_UjIM?5N=Vej37*?s7;-k{31i8NqxZG?ge_rMD4;k>AE?6C3T&x zx(}%NP|m$XX73U>a(jSZRkV~2m&X+ zF7!$|)11-APvmCmNEqLH6(h-~^c^EM{%omfqvmTcR3@Qw`RJk?1HwX2Upr>U*{-YMhdfg{seeWCnWu(3_Yr zm;VjO5$YYr4YPKTWUjqLWi1e#4%C=96KkcD{4zGY@T}eWVz+u%d%vvf(p`!Eg0xq{ zK3s4uU~nav?M}xhFPKj0#~B;Qv>S|ttR7e!|e_w_{$YV-lc|?p;l|2zSrEMOorMFMQ&oH^}Pv z?FnkCYR1j?2`s*B{7U)kffeSX7Ap?-;c4*awth&w@2M(d=aCVo_n(QTMwckzB~75K zBmbQt&5;{#+w6^Ja$@XCmV?okrda&&cZA|Hg%Pu#c$oo1f*Tgcj^W7*IR9u>9Bnq( z#(aJ+w*>lLER3r(z=Z{JKf$<^lzu41PVgDA4dogDSs7igGOZm(u(?#ng~djIl@gyy z;(Fp_BdV3;mJ}z`8Z#NM2lNF~4NoJol7=_1?OUl1%mn&VeY&4ua~^x$O*?uco&SQmbESwBPY}uXk1jp1+Q3Hdn^FVWS|_ zHXkZtE6d@WT{n}BFaLK5s;}cq_y^X3SA9jPP~_R|UR@{{0YJs44q)wbe{Q&c_d+(( zdq)@gwv5pN2nfQK(7Gimh)LRBkvMmHdxf$}3jplmG6fO!0Rz39HVjc;#UM%`ay@#p zNN=ly>C_tlKoE&5h!~f;x6Qj*^M$5rivRD^!{xImYQ)l#?s==m{zBP51$hAAC#^bw z-5C~m8b<8*cz79jMvwU_aRGdg48^esP~E-^In0;iAppdugMc;}2s1+V8GOyQx z)_``wb)3Vr7*9{TCf5T@4~Mp-s#^3VqGXDZQGqJrf zhpmXl1lPfiO(A@Z0pAA?c$+iNUpg09tUUp<20ueG%K}H&4R^6Tg3!2eP^v)5*s=xax{YBx+e!p^g$(i>o%a%{cOrn{cMDtnQ zqB>O9Xc3Tq(k9Uk9%m?I$ruL*841u%qsh8i4GVy6wzc)Qy3*T9(pq(0q(lgbQ$f); z->zP4Xtso#=iZfJ3KN0={s4$LWxwbRoEW2zH*5lJv#n{yM(E1lUd%GU!<2jB{m7ws zT<4>r7CIaegf06Tt!5ml$-H23(Rd1z~3#Q7fDGuLpOp$@lSi-}#4! zsfOcwy+#ft6cNK0C_M)w`#X?XIpQTbZM9R*cSI&)MzONKNaAY2KpQf==XI))$JM9M>!H@Y!nGaUETa@@(8wZXl_Q{CtWb+R680@7*eyzB3fto+dB4ZZ6CR)ka7`1Nk@3 zKKC7ev@{A9eRVj#$&34kF}DY4j*L;-)X*^Rk%5Dp)INhK!6&%bS zUZtN63vy&=bB2Z|v?h4?_ia@76K>wV(?YvMZVS@ydqb*{`8$C4c|(wcv|)FV_i{il zJIU6ZGv&Qrra=8E$rf30uYK7%UGjy2ta`NhU-fG;)YW*9N8+tyLCDF)pK9v%)A@%vPt z^SU3c@>9szPnui=7fYh#QKn%!C+V%zHTO?@oe!Yuk*j20(8K%3GHrs)RihpXoK(#^ z;`nJ0QeDq9{s=$xv?&Got6~Vf72fP;$33-Q+g-N&n&-K~VymwHZ1Pj@o+@B>Yz^^+ z7fEb+TCxsu`K`grs`~?a_eHT>U+%>bcqR=`il?g%wL^J$l^;#F(KQs@4F9Gv&@Y>- zdMNSdID7|MXLw8myE2d;pN;JLCpVzgG5^b_0R>k*abalRiSnjw>>vk`pkH@G5kpdk z9UuuqbL&ewC^Nkc_&sZ4)7xX(syiwVs$5!!t0zeVpVsFUdF?D+Hi9guTep;%o*#3$ zPKGS<8iCkO%?4Z|4E3%B0P^?aH%=+**#X=oM5an;qbFpy#UI~<&2meXXr)jyJzFR6a z=66wOaLuT%>6PM*B=EGnWnxv zbp)$35QX`e`ppzE#JVZFKaT3p4df)7>5svpNnQm0%T2cf9mT8&f`+-fYu#Gr;zjdO z)U5Y1sEKDmEh)+_n-wdm8U;S71w6YM^9M6MGC*N|@D3RJ{&P$Lx+9|k^QI5o@tX}e!662nv#er3ay~*H|((hd-soH8|dcwmT{T5^qPOm&U+9j=|C@~wyaMHn`R;QS7ck~m)sFxohFl`)^asV!*?%YTz{!z%$DCh zz82i0YQsEsDbL}#|B*Fqd<~#qU@y&oAol@=zK|!-%15)E3a`7uD_CPlj8q`ZKPcWZ zE32<%O4*_4SdQvS9XnZ6oP{M8P^beYldSrYQ@$YmIS=hU*e{6!eHHIDlgLVA@X)Xc zCZT~qqItg&qou8ikLy*rV#RvRC#7Ng8GD|sl=8_Tfzb)YztoHI&6QQZ>hEhs2x96a zkhI@;{fRC*m_=6;-s-As^dXSC`-w2*u5EOV^N&U(7D1l*JC)db0AoiHl0% z>p;q2wgMEFd2Rjh2v=4S5VBW}Zm&!MQ8STApgwT|yXHhJEl0*BzQ%qIx%k_j8%^%q ziP-zZ{e;xoEVIKD8T28S7-&SFVjpIK1QphV_mamDSZ_v~qB(-CQ7KRkxvGbwMLJxM zYJbKr>shut4BVP3f5Po#vtoq0-f#2@7kXpu6b~t!x@{lnH7a+c(>_oq%T#SKi$4k(ag&|A^Fg)* z>kT+9Ow`6^1p>nSiS;_Fl9Ly4*|x3t!&tFSUH#}YrDv_Vfejby0Ppv**&=ZNnilJd zWrd@`OpcoKj}~(c^Vb5rL37ZEC7O*6vOV7!K&4{>`798J0DgI& zTUOk-xz&qJuKQt}ezkCnd!#&q=Vyzn1F4au*JiO|3m--Tx%4O;;>ZLRUsjpG)RC!vBh|AVs>~T*Z#~M#08W(kyVE#u?93fW|-Twr}C?*5QlY*!u)K z_iE{_{M>FyOVXw#ub;pmVIFX1wN6|u_G6*DURXKDgJwhB?XAm_E&D`~cjeHr#ogD_ zWWE$O=kJ3Zv2H!Ttr5T~#g zMfad+%cCZ{M?;$RL$6;-W;iQsLQ?$4P+ek7Eb{mCV#g=*YXa8L*$di-scW3B*8n`O zEn9~HI`*7(_4jqT;#j$F?taJ3)M5eU#gh{+X~rl1GXv=~F_0ygLf7|-s9f&#akBAH z7VdN;wZ3NmO3}P8pez9B({s$Gw$F+l$KPv&nj|7Kg{XyecfFK#mD0HHkFi;R2s8A? zfBjHjy8lX-4S7mO^S8$1h*fFKPwMqHGy@aK+uCRB^x#*$9E`h^ix`kWX<2K$J<=+W zHe1iGybOjKQ|);=1O3CJC4X767T7>{_j;6iq6KZr@rPi)nwB>^8U`LVtGa5RchW^x zXWAsVc6okrYuqsEzN}bBiRq|{SMCkqwQPtYQau@zwBL>XJNF>2zDbKz?Cg#Goy@hh zR=USqeS~DcyD<48UBXr?TO<;-@~)k&!>&k<-}=t%qV^L8&#RWjeg zsG(rGGk&W}DFU|jUPz(W{!I(XXP!>Vg@HTZQLrX1`#YQuVt~%3k!hop7Sa_bmW{Ha zrqDpjO@vLzaDye8hSgzMfOH_kiw}Odwdn9A9-(Z7mP6HDZ+=g9jNTjdI2!lZafnS+ zpD2H=C!n+C^6_MM+?@s%YAEGd74kT~2^IOhX>y4E_M#1xUDyV9Tx6G3g|rQYHQ-Yu zedg1$&2ON9I}a;~KnYF{w`88%YzN1TpsvwpR9rzo_S`YFORTmaLGhFz`@i3om;za0 zn?w3`;9Ev{+74lUFx9y)f6A(Utq1e4<&9>IaTi;R>cKNq11P$I8_b5T#LUXk_SM&A zZT^k0rbK_)hND4iQzW;FhGAB@R`{`RI0SA6Qk3LZ`0Ao$Kbw2Y0198St^E&Pg3?ID z7zZ^uYtGC$+2V`V4r-})LLOBykN_ueGJytAhp6!Jxa^;$G}c;*1|dP)E32$pvHW~z zR|}f=NB;d@#q%=BUV+tS@(tZh&3mE zZ0pK>s@MmK5#}#$oer}gT4)f*+sku^t~yv;dT46phwZ?@Lb@6ivb51V65ReMNup#A z3s%c3zw(PGd5+p3?x8Ezib*k2S!v_I5<7wY!koFY_lrecD0|U^=#RXCCmNUCmu`s$ zqp}j~{Npzv^tc&Y8}H-hElDRT~mg%GjH!hBi0Yj z7>z;mK`}(xzayU4M$z?Z_5wuPTYS~tC+kzr8eS96#Btfhhc)tO;TYmx9~-L{D7bk; zHs?}YRWX6~m+|nZ65EHc)~C!gvRM*hEX2E3CKrt#irKw`UU*eKbrvSN1%SRUTXrwv zzZ6caz|0;ypPGMa38-3s26}5jp}5esU_@j9I0WstAdtsc<(^?{WJ*j05G09mX`!4{0L{8~kYOstN#b{#S!*aOkvX(v!}H7Nta=GG!7EhCz{RQ!8LSfFO4u z2hGnnwp&c*Q!(7V_bA01Nhs?Nz5KojholPK^nf4|XM|wYkx_TJQdGef5n*)YC#tSV zR+NPyJ3T-T;|D}Q?wSFi8gZ7wYHl%!Lo-z$iVQ4xsXPp+?*^L?up7gKT_8%lFwGp1 zLLd)DMFczs0|B|en(>29Q40js0j3Ool#~=;_ALt9E05Q8#}E6U*WXoe2myLz9J>dQ zm+iFTzi|QsiiUuF1Z03uFky(VbTwMcQk4D4M|x5=-iY6V!9@ YvUw|JtA3VC@SmlEjH-04q-n_i030J7wg3PC literal 0 HcmV?d00001 diff --git a/assets/logo/melbourne_white.png b/assets/logo/melbourne_white.png new file mode 100644 index 0000000000000000000000000000000000000000..64a7ddb9b721eb5d7789add5121a037c92508381 GIT binary patch literal 7028 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 child); - // πŸ”Ή Attractions Page + // πŸ”Ή Attractions Page case RouteConstants.attractionsPage: final args = settings.arguments as String; return MaterialPageRoute( - builder: (_) => AttractionsPage(source: args,), + builder: (_) => AttractionsPage(source: args), ); case RouteConstants.attractionDetails: - return MaterialPageRoute(builder: (_) { - return AttractionDetailsView(); - }); + return MaterialPageRoute( + builder: (_) { + return AttractionDetailsView(); + }, + ); - case RouteConstants.makeBooking: - return MaterialPageRoute(builder: (_) { - return MakeBookingView(title: 'asffdsf', description: 'afdsfadsfasdfads',); - }); + case RouteConstants.makeBooking: + return MaterialPageRoute( + builder: (_) { + return MakeBookingView( + title: 'Koh Rong Samloem', + description: + 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Convallis condimentum morbi non egestas enim amet sagittis.ß', + ); + }, + ); + + case RouteConstants.bookingSuccessful: + return MaterialPageRoute( + builder: (_) { + return BookingSuccessfulPageView(); + }, + ); case RouteConstants.searchOffer: return MaterialPageRoute( @@ -55,7 +76,7 @@ Widget buildOffstageNavigator( }, ); - // πŸ”Ή Upload Photo Page (start of postcard creation flow) + // πŸ”Ή Upload Photo Page (start of postcard creation flow) case RouteConstants.uploadPhotoPage: return MaterialPageRoute( builder: (_) => BlocProvider( @@ -64,11 +85,13 @@ Widget buildOffstageNavigator( ), ); - // πŸ”Ή Add Filter Page (uses same bloc instance) + // πŸ”Ή Add Filter Page (uses same bloc instance) case RouteConstants.addFilterPage: return MaterialPageRoute( builder: (context) { - final previousBloc = BlocProvider.of(context); + final previousBloc = BlocProvider.of( + context, + ); return BlocProvider.value( value: previousBloc, child: const AddFilterStepPageView(), @@ -76,7 +99,6 @@ Widget buildOffstageNavigator( }, ); - case RouteConstants.qrPage: return MaterialPageRoute( builder: (context) { @@ -88,11 +110,40 @@ Widget buildOffstageNavigator( }, ); + case RouteConstants.itineraryCreation: + return MaterialPageRoute( + builder: (_) { + return MultiBlocProvider( + providers: [ + BlocProvider( + create: (_) => ItineraryStepNavigationBloc(), + ), + + BlocProvider( + create: (_) => AddItineraryDetailBloc(), + ), + ], + child: const ItineraryCreationPage(), + ); + }, + ); + + case RouteConstants.yourItinerary: + return MaterialPageRoute( + builder: (_) { + return YourItineraryView(); + }, + ); + + case RouteConstants.magicItineraryFilledScreen: + return MaterialPageRoute(builder: (_){ + return MagicItineraryFilledView(); + }); + default: return MaterialPageRoute( - builder: (_) => const Scaffold( - body: Center(child: Text('Page not found')), - ), + builder: (_) => + const Scaffold(body: Center(child: Text('Page not found'))), ); } }, diff --git a/lib/core/route_constants.dart b/lib/core/route_constants.dart index 768c7ee..e235102 100644 --- a/lib/core/route_constants.dart +++ b/lib/core/route_constants.dart @@ -49,4 +49,5 @@ class RouteConstants { static const String qrPage = '/qrPage'; static const String makeBooking = '/makeBooking'; + static const String bookingSuccessful = '/bookingSuccessful'; } diff --git a/lib/itinerary_creation/views/itinerary_creation_start_view.dart b/lib/itinerary_creation/views/itinerary_creation_start_view.dart index bb6ada6..a9a412a 100644 --- a/lib/itinerary_creation/views/itinerary_creation_start_view.dart +++ b/lib/itinerary_creation/views/itinerary_creation_start_view.dart @@ -57,9 +57,7 @@ class ItineraryCreationStartPage extends StatelessWidget { onTap: () { Navigator.of( context, - rootNavigator: true, - ).pushNamed(RouteConstants.itineraryCreation); - // Navigator.pushNamed(context, RouteConstants.itineraryCreation); + ).pushReplacementNamed(RouteConstants.itineraryCreation); }, showArrow: true, label: "Let’s Get Started", diff --git a/lib/itinerary_creation/views/itinerary_creation_steps/itinerary_completion_view.dart b/lib/itinerary_creation/views/itinerary_creation_steps/itinerary_completion_view.dart index 6fb1f49..cbec5be 100644 --- a/lib/itinerary_creation/views/itinerary_creation_steps/itinerary_completion_view.dart +++ b/lib/itinerary_creation/views/itinerary_creation_steps/itinerary_completion_view.dart @@ -6,6 +6,8 @@ import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; import 'package:citycards_customer/common_packages/custom_filled_button.dart'; +import '../../../core/route_constants.dart'; + class ItineraryCompletionView extends StatelessWidget { const ItineraryCompletionView({super.key}); @@ -135,7 +137,9 @@ class ItineraryCompletionView extends StatelessWidget { label: "Get My Trip Plan", showArrow: true, onTap: () { - // Navigate to next step + Navigator.of( + context, + ).pushReplacementNamed((RouteConstants.yourItinerary)); }, ), ], diff --git a/lib/itinerary_creation/views/magic_itinerary_filled_view.dart b/lib/itinerary_creation/views/magic_itinerary_filled_view.dart index bc67260..f6be597 100644 --- a/lib/itinerary_creation/views/magic_itinerary_filled_view.dart +++ b/lib/itinerary_creation/views/magic_itinerary_filled_view.dart @@ -147,18 +147,23 @@ class ItineraryFilledCard extends StatelessWidget { SizedBox(height: 12.h), - Container( - height: 43.h, - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(8.r), - border: Border.all(color: Color(0xFFF95F62)), - ), - child: Center( - child: CustomText( - text: "View Itinerary", - size: 16.sp, - color: Color(0xFFF95F62), - weight: FontWeight.w500, + InkWell( + onTap: (){ + Navigator.of(context).pushReplacementNamed(RouteConstants.yourItinerary); + }, + child: Container( + height: 43.h, + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(8.r), + border: Border.all(color: Color(0xFFF95F62)), + ), + child: Center( + child: CustomText( + text: "View Itinerary", + size: 16.sp, + color: Color(0xFFF95F62), + weight: FontWeight.w500, + ), ), ), ), diff --git a/lib/my_pass/views/booking_page_view.dart b/lib/my_pass/views/booking_page_view.dart index 6e6a9aa..527c7b5 100644 --- a/lib/my_pass/views/booking_page_view.dart +++ b/lib/my_pass/views/booking_page_view.dart @@ -1,8 +1,11 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; +import 'package:citycards_customer/common_packages/back_widget.dart'; +import 'package:citycards_customer/core/route_constants.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:google_fonts/google_fonts.dart'; -import 'package:table_calendar/table_calendar.dart'; +import 'package:syncfusion_flutter_datepicker/datepicker.dart'; import '../blocs/make_booking_bloc.dart'; import '../blocs/make_booking_events.dart'; @@ -32,209 +35,180 @@ class MakeBookingView extends StatelessWidget { final now = DateTime.now(); return SafeArea( - child: SingleChildScrollView( - padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 20.h), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - // πŸ”™ Back + Title - GestureDetector( - onTap: () => Navigator.pop(context), - child: Row( - children: [ - const Icon(Icons.arrow_back, size: 20), - SizedBox(width: 6.w), - Text( - "Make Booking", - style: GoogleFonts.poppins( - fontSize: 14.sp, - fontWeight: FontWeight.w500, + child: Scaffold( + backgroundColor: Colors.white, + body: SingleChildScrollView( + padding: EdgeInsets.symmetric(horizontal: 20.w, vertical: 20.h), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + + CommonAppBar(isWhiteLogo: false, isProfilePage: false), + backWidget(context, "Make Booking", Colors.black), + SizedBox( + height: 20.h, + ), + + // 🏝 Title + Text( + title, + style: GoogleFonts.poppins( + fontSize: 18.sp, + fontWeight: FontWeight.w600, + color: Colors.black, + ), + ), + SizedBox(height: 4.h), + + // πŸ“„ Description + Text( + description, + style: GoogleFonts.poppins( + fontSize: 12.sp, + color: Colors.black54, + ), + ), + SizedBox(height: 24.h), + + // πŸ“… Calendar Container + Container( + width: double.infinity, + padding: EdgeInsets.symmetric(vertical: 12.h, horizontal: 10.w), + decoration: BoxDecoration( + color: Colors.white, + borderRadius: BorderRadius.circular(16.r), + boxShadow: [ + BoxShadow( + color: Colors.black12.withOpacity(0.06), + blurRadius: 12, + offset: const Offset(0, 4), + ), + ], + ), + child: Column( + children: [ + Text( + "When are you visiting?", + style: GoogleFonts.poppins( + fontSize: 14.sp, + fontWeight: FontWeight.w500, + color: Colors.black, + ), + ), + SizedBox(height: 8.h), + + // πŸ—“ SfDateRangePicker + SfDateRangePicker( + view: DateRangePickerView.month, + selectionMode: DateRangePickerSelectionMode.range, + minDate: now, + maxDate: now.add(const Duration(days: 365)), + enablePastDates: false, + backgroundColor: Colors.white, + showNavigationArrow: true, + + // βœ… Put the background color here + headerStyle: DateRangePickerHeaderStyle( + backgroundColor: Colors.white, // <-- removes the purple strip + textAlign: TextAlign.center, + textStyle: GoogleFonts.poppins( + fontSize: 13.sp, + fontWeight: FontWeight.w600, color: Colors.black, ), ), - ], - ), - ), - SizedBox(height: 20.h), - // 🏝 Attraction title - Text( - title, - style: GoogleFonts.poppins( - fontSize: 18.sp, - fontWeight: FontWeight.w600, - color: Colors.black, - ), - ), - SizedBox(height: 4.h), - - // Description - Text( - description, - style: GoogleFonts.poppins( - fontSize: 12.sp, - color: Colors.black54, - ), - ), - SizedBox(height: 24.h), - - // πŸ“… Calendar - Container( - padding: EdgeInsets.all(12.w), - decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20.r), - boxShadow: [ - BoxShadow( - color: Colors.black12.withOpacity(0.05), - blurRadius: 6, - offset: const Offset(0, 3), - ), - ], - ), - child: Column( - children: [ - Text( - "When are you visiting?", - style: GoogleFonts.poppins( - fontSize: 14.sp, - fontWeight: FontWeight.w500, + monthViewSettings: DateRangePickerMonthViewSettings( + firstDayOfWeek: 7, + viewHeaderStyle: DateRangePickerViewHeaderStyle( + textStyle: GoogleFonts.poppins( + color: Colors.grey.shade600, + fontSize: 11.sp, + fontWeight: FontWeight.w500, + ), ), + blackoutDates: _getUnavailableDates(state.availableDates, now), ), - SizedBox(height: 10.h), - TableCalendar( - focusedDay: now, - firstDay: now, - lastDay: now.add(const Duration(days: 365)), - calendarFormat: CalendarFormat.month, - availableCalendarFormats: const { - CalendarFormat.month: 'Month' - }, - rangeStartDay: state.startDate, - rangeEndDay: state.endDate, - rangeSelectionMode: RangeSelectionMode.toggledOn, - onRangeSelected: (start, end, focusedDay) { + monthCellStyle: DateRangePickerMonthCellStyle( + textStyle: GoogleFonts.poppins(fontSize: 12.sp, color: Colors.black87), + todayTextStyle: GoogleFonts.poppins( + fontSize: 12.sp, color: Colors.black, fontWeight: FontWeight.w500), + blackoutDateTextStyle: GoogleFonts.poppins( + fontSize: 12.sp, color: Colors.grey.shade400, + decoration: TextDecoration.lineThrough), + ), + + rangeTextStyle: GoogleFonts.poppins( + fontSize: 12.sp, color: Colors.white, fontWeight: FontWeight.w500), + startRangeSelectionColor: const Color(0xffFF5A5F), + endRangeSelectionColor: const Color(0xffFF5A5F), + rangeSelectionColor: const Color(0xffFF5A5F).withOpacity(0.15), + selectionTextStyle: GoogleFonts.poppins( + fontSize: 12.sp, color: Colors.white, fontWeight: FontWeight.w500), + + initialSelectedRange: state.startDate != null && state.endDate != null + ? PickerDateRange(state.startDate, state.endDate) + : null, + onSelectionChanged: (DateRangePickerSelectionChangedArgs args) { + if (args.value is PickerDateRange) { + final start = args.value.startDate; + final end = args.value.endDate; if (start != null && end != null) { bloc.add(SelectDate(start, end)); } - }, - headerStyle: HeaderStyle( - titleCentered: true, - formatButtonVisible: false, - titleTextStyle: GoogleFonts.poppins( + } + }, + ), + ], + ), + ), + + SizedBox(height: 40.h), + + // βœ… Confirm button + GestureDetector( + onTap: () { + if (state.startDate != null && state.endDate != null) { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: Text( + "Booking confirmed from " + "${state.startDate!.toLocal().toString().split(' ')[0]} " + "to ${state.endDate!.toLocal().toString().split(' ')[0]}", + ), + ), + ); + Navigator.of(context).pushNamed(RouteConstants.bookingSuccessful); + } else { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text("Please select a valid date range"), + ), + ); + } + }, + child: Container( + width: double.infinity, + padding: EdgeInsets.symmetric(vertical: 14.h), + decoration: BoxDecoration( + color: const Color(0xffFF5A5F), + borderRadius: BorderRadius.circular(30.r), + ), + child: Center( + child: Text( + "Confirm Booking", + style: GoogleFonts.poppins( + color: Colors.white, fontSize: 14.sp, fontWeight: FontWeight.w600, ), ), - calendarStyle: CalendarStyle( - rangeHighlightColor: - const Color(0xffFF5A5F).withOpacity(0.2), - rangeStartDecoration: const BoxDecoration( - color: Color(0xffFF5A5F), - shape: BoxShape.circle, - ), - rangeEndDecoration: const BoxDecoration( - color: Color(0xffFF5A5F), - shape: BoxShape.circle, - ), - todayDecoration: const BoxDecoration( - color: Color(0xffFFEAEA), - shape: BoxShape.circle, - ), - outsideDaysVisible: false, - ), - - // Custom day builder for unavailable days - calendarBuilders: CalendarBuilders( - defaultBuilder: (context, day, focusedDay) { - final isAvailable = state.availableDates - .any((d) => isSameDay(d, day)); - - if (!isAvailable) { - // ❌ Strike-through unavailable date - return Stack( - alignment: Alignment.center, - children: [ - Text( - '${day.day}', - style: GoogleFonts.poppins( - fontSize: 12.sp, - color: Colors.grey.shade400, - ), - ), - Positioned( - top: 12.h, - child: Container( - width: 14.w, - height: 1.2.h, - color: Colors.grey.shade400, - ), - ), - ], - ); - } - - // βœ… Normal available day - return Center( - child: Text( - '${day.day}', - style: GoogleFonts.poppins( - fontSize: 12.sp, - color: Colors.black87, - ), - ), - ); - }, - ), - ), - ], - ), - ), - - SizedBox(height: 40.h), - - // βœ… Confirm Booking button - GestureDetector( - onTap: () { - if (state.startDate != null && state.endDate != null) { - ScaffoldMessenger.of(context).showSnackBar( - SnackBar( - content: Text( - "Booking confirmed from " - "${state.startDate!.toLocal().toString().split(' ')[0]} " - "to ${state.endDate!.toLocal().toString().split(' ')[0]}", - ), - ), - ); - } else { - ScaffoldMessenger.of(context).showSnackBar( - const SnackBar( - content: Text("Please select a valid date range"), - ), - ); - } - }, - child: Container( - width: double.infinity, - padding: EdgeInsets.symmetric(vertical: 14.h), - decoration: BoxDecoration( - color: const Color(0xffFF5A5F), - borderRadius: BorderRadius.circular(30.r), - ), - child: Center( - child: Text( - "Confirm Booking", - style: GoogleFonts.poppins( - color: Colors.white, - fontSize: 14.sp, - fontWeight: FontWeight.w600, - ), ), ), ), - ), - ], + ], + ), ), ), ); @@ -242,4 +216,18 @@ class MakeBookingView extends StatelessWidget { ), ); } + + /// Marks unavailable days (those not in availableDates) as blackout + List _getUnavailableDates(List available, DateTime start) { + final end = start.add(const Duration(days: 365)); + final allDays = List.generate( + end.difference(start).inDays, + (i) => DateTime(start.year, start.month, start.day + i), + ); + + return allDays + .where((day) => !available.any((a) => + a.year == day.year && a.month == day.month && a.day == day.day)) + .toList(); + } } diff --git a/lib/my_pass/views/booking_successful_page_view.dart b/lib/my_pass/views/booking_successful_page_view.dart new file mode 100644 index 0000000..db3dae2 --- /dev/null +++ b/lib/my_pass/views/booking_successful_page_view.dart @@ -0,0 +1,82 @@ +import 'package:citycards_customer/common_packages/app_bar.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:google_fonts/google_fonts.dart'; + +import '../../common_packages/back_widget.dart'; + +class BookingSuccessfulPageView extends StatelessWidget { + const BookingSuccessfulPageView({super.key}); + + @override + Widget build(BuildContext context) { + return SafeArea( + child: Scaffold( + backgroundColor: Colors.white, + body: Padding( + padding: const EdgeInsets.all(16.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + CommonAppBar(isWhiteLogo: false, isProfilePage: false), + backWidget(context, "Make Booking", Colors.black), + SizedBox(height: 40.h), + + Image.asset("assets/images/booking_successful.png", scale: 4,), + + SizedBox(height: 20.h), + + Text( + "Booking Completed\nSuccessfully!", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 20.sp, + fontWeight: FontWeight.w600, + color: Color(0xff0A0D13), + ), + ), + + SizedBox(height: 20.h), + + Text( + "Your booking has been Confirmed on 08/01/2025", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.sp, + fontWeight: FontWeight.w400, + color: Color(0xff2D3134), + ), + ), + + SizedBox(height: 100.h), + + GestureDetector( + onTap: () { + + }, + child: Container( + width: double.infinity, + padding: EdgeInsets.symmetric(vertical: 14.h), + decoration: BoxDecoration( + color: const Color(0xffFF5A5F), + borderRadius: BorderRadius.circular(30.r), + ), + child: Center( + child: Text( + "Go Back", + style: GoogleFonts.poppins( + color: Colors.white, + fontSize: 14.sp, + fontWeight: FontWeight.w600, + ), + ), + ), + ), + ), + ], + ), + ), + ), + ); + } +} diff --git a/lib/your_itinerary/view/your_itinerary_view.dart b/lib/your_itinerary/view/your_itinerary_view.dart index fb74d60..d4830f9 100644 --- a/lib/your_itinerary/view/your_itinerary_view.dart +++ b/lib/your_itinerary/view/your_itinerary_view.dart @@ -1,5 +1,6 @@ import 'package:citycards_customer/common_packages/app_bar.dart'; import 'package:citycards_customer/common_packages/custom_text.dart'; +import 'package:citycards_customer/core/route_constants.dart'; import 'package:citycards_customer/your_itinerary/bloc/itinerary_days_tabs_bloc.dart'; import 'package:citycards_customer/your_itinerary/bloc/your_itinerary_tab_bloc.dart'; import 'package:citycards_customer/your_itinerary/widgets/itinerary_card_widget.dart'; @@ -54,7 +55,7 @@ class YourItineraryView extends StatelessWidget { children: [ GestureDetector( onTap: () { - Navigator.pop(context); + Navigator.of(context).pushReplacementNamed(RouteConstants.magicItineraryFilledScreen); }, child: Icon( Icons.arrow_back, diff --git a/pubspec.lock b/pubspec.lock index 92d85c5..7fc3f82 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -190,6 +190,11 @@ packages: url: "https://pub.dev" source: hosted version: "5.0.0" + flutter_localizations: + dependency: transitive + description: flutter + source: sdk + version: "0.0.0" flutter_otp_text_field: dependency: "direct main" description: @@ -709,6 +714,38 @@ packages: url: "https://pub.dev" source: hosted version: "1.4.1" + syncfusion_flutter_calendar: + dependency: "direct main" + description: + name: syncfusion_flutter_calendar + sha256: "632de42a4cc82dfb1fbc9b40e7097477069aab516a842ca50b187052ab091180" + url: "https://pub.dev" + source: hosted + version: "31.2.4" + syncfusion_flutter_core: + dependency: transitive + description: + name: syncfusion_flutter_core + sha256: a24e9ec04e03c2c14b7b41b1afe60e455adef09b244ab4c425ce6c5b8f58c9ce + url: "https://pub.dev" + source: hosted + version: "31.2.4" + syncfusion_flutter_datepicker: + dependency: transitive + description: + name: syncfusion_flutter_datepicker + sha256: "554544875e7fcff8c244aa9e9e77c7b72f75808ebaa30f9f7af3fc9700d6ba18" + url: "https://pub.dev" + source: hosted + version: "31.2.4" + syncfusion_localizations: + dependency: transitive + description: + name: syncfusion_localizations + sha256: "4df6e5e1404f8e9c8c1affc38d476158b889c5e1b529514976181e49a7ba3944" + url: "https://pub.dev" + source: hosted + version: "31.2.4" table_calendar: dependency: "direct main" description: @@ -733,6 +770,14 @@ packages: url: "https://pub.dev" source: hosted version: "0.7.6" + timezone: + dependency: transitive + description: + name: timezone + sha256: dd14a3b83cfd7cb19e7888f1cbc20f258b8d71b54c06f79ac585f14093a287d1 + url: "https://pub.dev" + source: hosted + version: "0.10.1" typed_data: dependency: transitive description: @@ -799,4 +844,4 @@ packages: version: "6.6.1" sdks: dart: ">=3.9.0 <4.0.0" - flutter: ">=3.35.0" + flutter: ">=3.35.1" diff --git a/pubspec.yaml b/pubspec.yaml index 461c3c3..befc6d6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -45,6 +45,7 @@ dependencies: geolocator: ^14.0.2 equatable: ^2.0.7 table_calendar: ^3.2.0 + syncfusion_flutter_calendar: ^31.2.4 dev_dependencies: flutter_test: