From 8e548f095ba37bd3c00d3e64f0bf391b53db472b Mon Sep 17 00:00:00 2001 From: Evan Richardson Date: Thu, 17 Apr 2025 19:03:55 -0700 Subject: [PATCH] Add title image Move GMS API KEY to .env file use better sign icon for pins --- android/app/build.gradle.kts | 11 +- android/app/src/main/AndroidManifest.xml | 5 + assets/app_title.png | Bin 0 -> 19908 bytes assets/icons/sign_marker.png | Bin 0 -> 2710 bytes lib/main.dart | 206 +++++++++++++---------- pubspec.lock | 8 + pubspec.yaml | 5 + test/widget_test.dart | 2 +- 8 files changed, 143 insertions(+), 94 deletions(-) create mode 100644 assets/app_title.png create mode 100644 assets/icons/sign_marker.png diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 955f0b4..3c87f2e 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -5,10 +5,18 @@ plugins { id("dev.flutter.flutter-gradle-plugin") } +import java.util.Properties +import java.io.FileInputStream + +val dotenv = Properties().apply { + load(FileInputStream(rootProject.file("../.env"))) +} + android { namespace = "com.example.wheres_my_sign" compileSdk = flutter.compileSdkVersion - ndkVersion = flutter.ndkVersion + ndkVersion = "27.0.12077973" + //ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility = JavaVersion.VERSION_11 @@ -20,6 +28,7 @@ android { } defaultConfig { + manifestPlaceholders["GMS_API_KEY"] = dotenv.getProperty("GMS_API_KEY") // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId = "com.example.wheres_my_sign" // You can update the following values to match your application needs. diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 74a3330..60d3f55 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,8 +1,13 @@ + + + @?QIc4OOaY+IAIv2EL!XyP=sF|qBLm~(qS+&|#1!|!{o z{hafA_S)gfic+XZ1W51Ry+f6e7FT`u?myXocmB_x{_R1%#q}%eXN-Z(~c`y-AD9N8u>eC82NYF(f5LXOx}yDh`&ds z{T_x8U-%zV8EuMIKQL*dNE-7qCs}@R+{Wo*`r+$t#`5y|`1qs)7aq@}zt9+9*)qpt z6XFiPsH}faSoi;*SGf|ih{A-^_>N7Uw-)J$3u~)SZzyofc(%OgSS3@;`GQaB@H2y3 zq*L7hhv}(osHE^SJlONeqE|Q8dxW{z5ApD%6=Re<)Q-@z5$YGhF&6QuW)$A(G!CaL z(vMZ56;`%p=sq1PoymafFmI|6M9z~s%X1D{wmy?g0=eh7xvh2ym2tbC-oMyl~Knh=agGNzYQC!T|rLP7*oC%*OhTbX6JK< z7t9G0!(w>2?-`oTzmxYs-hu4ip{EdbnnE&qV-n)fZ|Q=fv{aZ(<66~{ zLfG}!q>--hk}L1hnY8H{GkGD(w!+ez*@_5Irgo1o(pd= zlAlo?Y*E!KKn4U&3v3J zsfjx0;7HCv1o(LC(6!bn^r0g;Zoe00vyKt1&x&q937mD=xh)o$3V%&Td( zrQNgK-ZvnhV~R)=B-QU)ec>|Cd)MPz(Ggym*1E*cip`Al-{S0knKRn(rX}4tE*G7N z(%S_RMDJJa41p&PW~`pl&|&qTqz_l9h`W7!t6|;$L#sLqmvpjwR2s(1SAi<%#jy=NKH#X5~wkvzQ+2uEvaUOs9Krhz$Z5WOH4fqka_U4PxPq$G>eozNkHj$%`nQe*nb8`B{Llg_O4O;M;edbGGhFS#Neq?QS=hUc>d% zn4HZ9mCyXrEoC7$PllU6iu5B&?e+u}aekAN;vkzfQHFbUukO%-xcme6e!g;5J73u3 zv?O>UwTlbePL^)sF+%fz_pZThXGfJcl8A z@NiRIP8EWlG_M?mUHA<|1Um2BNN_eESQ%T)bTC@;$B)yE_fRU2zd*fdnT)h^9?QnL z@u8{-$T;lCnPo4vJ~!jp|NRA>=8N7Oi(|5cHPKLznpahtXSSK;XUo637{xO?*|%Vl z)2yTwqI+4tiFQh+o}MR%_Ii+ZCezQqw0eFio7u!1Hc@D1bcB~38@|b@Z)8j1{>yT4 zYZF-dfrQgE!_X%APBlLjo>t(lHr3(Hk6mzoZ^L!k0kld3@%2n`ckKGvUa< zD;>$jWp5L+5bQNYN2>ZHbo>|eO^Hpi30M$B!!iMX=1ni~yIi)%z|umEU`Jqw6Oo$! zk59)xk}%%d3plM=aX=Ni1s_q*#haPn*SV>=U?vOzxFCXp9dF4YdR_h~7W^rm7?%`x zaPemm6X72e%j#mzV};*I4OD2J8QNrvoFUt8lIC_#nNGP)di1VE8vBTYv^XjXg^h0~o(Ttd@#Vy5xLbUC$!hIU?+n8h4sFD{M{S3wXL zUgRrJ&X?ZVI)szVbm~gqb?`52ky0eWe()!6IC^1lCnXwVX3-p>ok;x$QWTnvi?;p` zHNxU%T7JJ6->eQdoeoCy>FU!{^t#!!eWI9WpAg8qFB$*5>8HD-9UhDM(ppiViGP0s|S}kgV8MU8>i;8*eR+i=)O_$rVGDy>j?^HwJzM;1rrYD}` zqy!RJJN)S}I}UWC%UAgc87+g03T zKrw)N2a)YtK}a+k*{`Kb+G!3sxXTmKy)1Pk+u2^h=t^$AaJJ(E?S4b-@;%1`nH2J- zJ;tWY&po+hpa5{meMaOpj8l-VE@opz9+8b^Z2!T1g7I2p<;cP*^2v6uOF`<||SxnP_$)08Ajf+@e6 z+NkJOY@W2yntNM7uYuE@V%f#GC>!OdxO>Tc{`%#mOcv`|=v`TTEU)H*8 zgJ5s-L&0{hin5cd^l&$6W8|pa^u4w6=O9Pr4aG*3>oii=iYFE8pVBinGmdC$nr;1gfGP&Y{mhM$M%ByR)|?uGz@m53Ew^ zGPYGt6MF(NWyh2BSv0bj=JV*g>*zuLE&E`7r(SVfh=MwVgtk76WB<}jc%ou?9LFOD z-(=T_QRSq(s>-%1^7%NLh?RSPi~&HQ%sP)laFp?XeLGA zzW0NCk(;-T+OUwu zzzq+-%dAzD+a|@7MshoRQ z>G_@oc7gVO{mamjs<(S~ZSKwW*AfX0BgY?Eu=j(cZqn zNbd)`J-Yj_5s8wJS1TxGiRKTz%96|RXA#!AdC`xTTT*;5twW8v;!Lf2e}C}>J1Y?~ zmjG)omUP+D??CW?ooys4CT{;-k#HVQ~N>(_E(*Z^|y!%g$o z6GE{f6Pco7a|b?i(6#X+xjYRJHOUlNU(OFQE^8~#d9Mk@&{XsD>i9-Q#!i7octtP~ z!w;8Bs#fjOD{PSr{)V|ezI>moBFjulE2W!YXmPQkTx&cLmDKaLWE3`?5Ew{WlmxP| z+&IcXE;V~`f?YtSZM=115+(vP5$P&5UKR;ocq==|_cyl(K?&GZ+xS&{;lf${RSb{X z6RNvxDE|C`7c>UnG^-)vGOI)Vm*xzQU}qDI$j9j*dst_e;ds3bHTVLrChreX3ZIk& z{w1C6QaknRK4Pg|;0jksDIj}7Y*oB++0P30u?w_SaGr})%Y5S_ybCS;X+c(TyiHRIH3?3tX+nqDT; z9L<4i>({vUDQmu28vt)>O3%LI%cbe9Ub=zB?`DcNN|I}h1`D5KW48Ywc{Y)X zTb!-ZIa_aIhsT=9%U^vGNqJg;;q#YeZMNvkLsW+m-7IlWO7W%*QtPxhp)$1+Uax-~ zE;_;4+4}h) z^=A}2hfLIWle(lA3qp~go>ruuVvxdE8vBg;vHM2UK>m;~wiLt7&80`Vg#b0j?a zt4G~7mUQ9;hFx)_F*|I~t`!++x}vPafRs8+G%OhF$7;#>+U8OO=aM8jT`wPe?pQR@ z#iDESjKS)R6gd1543i&a8tFxI^auKl1Gp4z{G!h9wgs|2r$;v(_AXSrXs)xV2y#T< zw?+^e9oF)@fOkyZ2G91?lI?lKShL(fKCJ8^UAo`D7KhEMf?{hDX#Eps25n-g0KsOw zVumjJ2pvEj@el6xOY<)6jPpwXcreYTrGGT<;HRJ%CjzuYm$ z_OVUzqS0Lf$H05u6NsZ7=kXL+a9T9n%C2ZP1`#^!g}C4C5oQoHn()_J~I!l%rqIhM%dIw;TU-8q=uwH(@YYz=-&f zQYR^P%)#MsGaK%~W9+WY*688Nw#IKVg`msy6Dl;!VpLhW)ZjF6ivkrfqnl*UeLsZO zjgYqzvas$UQ2P6V^}&lJMQemv`W(LkvtiT8rG{nvO0PZZF5jOsy`aUQ<3fFJ_DvSC zd+~B@x$^fP?qgI)bY{*|2K>E@f=!$E8i@aEi;dXNclmy={)Xph-Fj!~$ zH{p$fv)e#Zv$Lya;45tTj|Zd`f6y7VynYe(`++{>eq<`tpwuu`wXPIOq(}zF zZ2nBDzMiUYfHhg*Y#}@e+Qq8OoyWTz+jW6;w9_?@zkXaD^weE;_@u;KEF?BtP5?VS zXAr^Ed%pvSI))suORP%`y(1|^vXCwp9u%t({f$)tE@+5O{Q}Sv0{T%GSF!)FBCN07O zzWXcC+x?0Sr>dFmZy~SeuuylUyrpDcGB+QOSKzYHA-1Qh)VjK%&R0-ntxfRdara7` z>R2)x3bvaW{nZ#`?}xp7i92GjdYYv^200@ev@i48Bo=nGJR?4LnB}ZrU*TyAu|=7m z$`>`1J)Y+3_yKP}@48m!1{}^wxvpgUwT8f(DP(ZD)z{5@(T%FT(Sa})qw1+x**0oo z$MhldOqge5Bdkf6sV=!6WHNF7#0BFY&lrlrdu+L$)H#nN-3wtX(0#&?Af_~jCvBP& zL{*BSCAL}Gvzrt!=hn@q;jPCbXTcCLZd#F;WF@uv@o@SXbae3?J_U$QfK&LGAg5}`_Fdk=!MuL z&iCifoWf#4;|-zq;)4-*k6L@HPbE-0Od@)mQ6wQ%3W@L=vHk?u=Qpa|^MwtOZ`N7+ zmo})*NqJ7M?T@P2+C?5X#Nj0Q+gy&qKhwKA#&1_cBP6`7^sH;r{KsEqKfv z?*f56xXRv|9h8!J7=yFjVn6OAzahgE$(*o+R4$m*rcD8yMlr@>cgo`ODNU?TJp=*IP z4Sl7l?cOAo`Zy`Sd(n6m9yt}caNyN`!hJD#RMLkZjhWlTCQ6hZM_poC)323K?;j($ zV#>E~GIX0A$1ahc!!4+S482MO+pTULy`B+ymTDe-Yv(6_{@QsKV4YNhTecJPZRQ@j z9$E<{2TXeGcPma)a%dFabH%7Am1AG~J$%1wN}eU~OW1iX|8KMOF>{LGXAX?1=FN-$ zvJ3LQHyfl3h#IryQLO&{U=Y7!4J1zBHq?HmiR8>*^<3%AYI|YE1`(%AHV;=o>~Jg3 zOj_fvnw25e&=_48d4uunIjhW`8)UInEC4$Ko5l|=ct;}0OWC+pSmF^i(ZdAB1wzQB z=CW{E%X0c7CZ5|OE1_X~ZRtg5Xm)iwDBLotW@GLro%XS9XH`DKqIBx|_C5X(AIqCJ zDr;_ETI%bI4Dg0av0`Lt{JB4+RG(IYJb}I$N963jeEEe`F>}ratkBEGMLf1bo_fVR zQe)#w7CIss;IW5r-MRZ2*b<=KiR_ZL%CMGBgH$^yV#2@ZoH;|jaZkj0xx%(!=V55U zdVHM^L2{nqeTt!N`XVBbX;FMWkyM9E_~Pm1B@ZDjMt$9Sx~AA{RyU3r@5$N5OUXSC|=6d@rhes5KB(Kxx98qhH8I|=Hu zt8Vlg?-wPZZ>xcAb1&!|Q$x?Z+G;(xgy3`7<TtZCOH3z{lcKCR7Wv6m}}ON zny{NY2<#>rAQH-Dxm$S#=M{3n4)Drg<$USM zw^@`#V+WstHyI~=*(}>T3y*a~(DZ^huT{3KNMcsDZ&uUZe_4J5;Pt(L=bYYUn&Z#g zBb*+##Of31rS6*?nB5wC|5B%o7u9-DEXEEU4E7CCP!>~I{EH=%OizCvi1VFzYNr3( z=KQolJ<9RKlxQOC{IPHb5WWTS`bntb@l zKrs$o*huayh*`xo_^p%)TFuNFfF||{ld_y4-w!EZpVSO@){R#Wzt$%q37epDH>OMT z>+np}OKT@^RHxKAyDo_tTmz6()2KOQ$HCu7W-nmmij^68C`$KHy(;*1kPBNWB>^?v z(|13U24?dB6NrUz?+On=wA*p@{sc539j_c=gQ6gvGQMY9Bb?$Q!^9g|IQ5SACkA`- z$uEQuju3gay@x|$pkHC1<@Mim{ToPK97ja@Y*b2H&hhBoPGco`^G#qUxeS6``OnDO zFpE$7Z4`H=K?)XsayT(BA`Et(`I%iG2FEvoYwT|BxDWlzdMu4%~V7=kW< zvQKEaMF| zkz9LV*42iAQ#%iQ%adAo8v!I%33fc^<$y-0VJESW`AH;m_dE5=-22k2o*BP2GTFqU z%gA&MhLngEG-2Z0eXs230}5vXLIa1yP3WUmT7y5t6&!Z;u-YP=%%4&$Tu5!LoI|-z zmvSsBkx6CpDQb|4DrS?rt6@YQF(NHvf3X<(V*e$5Y=G`|h}w=ruFtu{prBF0Shcoh z^~&tK&AYYA2i5icN`yoU3{ZQaH$=XrygW7F5juiXLG>Wv{D{lwmrIP068?c z)T2Cn^^N+OYcq8FYQ{w|_d~Umr#X4B$s%FgJxd_6Snw7@E4WkUZG^XDlVv8W5v#;G zAo2!SznZw3IbQbCFpqO!l|7s60`9r!xYP;F9#oL}rht@q z*GIM)DvQw*GG+8Amh+2@ax8yR@!A0xLxUp@pW@X@J&jSWp}1WV9`134>EwXo&W@=k zg(QL{vb*dN!u7bV|Lz(n>;4%jIgvfKpl;flxXmeyj%I@BBL5sl<&KyEU&9f?{5ltuYBp zA3ooUp-gncEp4QF%}w&F{F<&3L)-Z$X|>m;9QaF@o70}UF9%d)s@Y+ z^V@FQEz#;ElE@{=X2Stt%Mb5JH6UUeVPA*ZF#=~K4oTj5fi~VDl4wSRL0 z`uI1MW4@!Pd6!ZS>Z;2W&1zKK5@_I=_NS2kMUZqln+`XZV_}8oQ-kpKvfSfgSi3xn z$m7EHkC$xbrWN1seGCIM>-e7PPVEyj4JY#m90ADR&=9lqde?Cpf zxAZ}cb{57S*O8vIU^{LD&S$3V3!FFEeXp*fB-hp2d-nY7gw7|RA_-V}_oG`M#FjpoJS{&!3mvYhu+Au;*z z-@IaXda9tfzXUu9JzwZ&WBeq-^p%4^GU7gsg`I|y#R%?W9wuO!H_N=8nr@n5PFLH1 zQC7#CURU(-EO%O)gF1gnCO1d=3MVMDT{a{n8%lk<3C+C2;zXP{CX)_te z>ZN52HoJW0fxv6=<1vn`p)UNp5jPcwFYeg6rYs?I^-DiM-ON}Q3^!lwzG+Uk{<$il z|8`Ovxo<&d5!W$Vqh@Ez=faWj{B2At;TebF`ga`z!i=w?b79%eP< z3Wk&Qxa?hn?^SLbgXRB)zIgE-JEjk7GW(!$%=`HEVh7Gg!5epey?wu42r?i^4GV7H zs*pG4{siP}lfNN8aI#c<`n*h_n}}xn_s|NjzAAz)d2lUL!K2+9JLd9x=m^Tluofz> zO9Zqe@nA24QQo4nsg~ClM1iZ^p!*W?`vQb)fiNWtBs;=W7w|_)7s(IN>R` zithNP)pGEA$07;3eC_Xfd;mzsEKPOFKn;pA#ff@Sp9Q5auA>I- zH#>N)tODhA*A~Un-ejFGs=B#-B9pYOwQXqxcExiu+`ejb*%0$l3rMpfTlpxdMQQv` zbj|W%4qyv;$Jo>(yj=BV)HpGQ$AgFl3E301UXwYaWN~XHf(l~DiivgfEK+HN^LnSt zeggSZqT_cy+aChwM-g&5WMbygpHI=G>$o{7Ig@h=2|bJB&+1zQEz4DgAtx``^(OKe z@%G!buQ}I18d_ncl}dZMlt=Ao85A$wgRv=sl5}*HXTh9K*4|SijP~(#AMmhNtmtj( zKW4}#>Vd-`h)C`H&p7m*NNyya5*vGjZ1EEvz1yGS_`PTR4O=^cb8p>YbD}*SLFFXb z*Qje2rqyzZA>?9NiH!cx4jnP*T?XcLeUW7fMTxPTzejzhADZ|%U?}+DL+q|GG|AC4 zwrlro3HnF7(UpbkY~Nol$qCn9>mywz)#hg$p^+f6}q-dJ|=0jDwZuxsIbMOTS`0=xqs5yLSx6*%mW>-Pv~Ky6|U`urms}8 z-hDo*KVux7SUiOQExG{Qkjv+OIVI(8Tls&$wm3-pjNY88vy#RV5ZF;5m|*M~5?!#R zZe4vV)(ih0g>7O;Cqy?SEcT9XkVa!8 zeJ{E;y#U!*aV_86=ew}uO-olH!TzV$WqO=~fiY2$GXoV=?45M3a;I^pWQHxR$Y?Li z@v$D~(u|M9ml+0`fGy9=iF=^ZtbLWf6vtldrqp;8&CqbY>YT9In5Nz-z9eEUbeO#(Qb-hE4EeNU-v)%6@OExDL(SZ zv_H3LZZd}2;M(7=}*-HF;=>WcWOP8a3vRGM@7GNXK1_u23eN zh^%D(fU&s5m7kk~=}(Nj&P1f)cQ$=pk zMA0^Ee2$r5dck!d*wFcGe6l%q9tn{|)8i5Lsl%c7V8(QHZLa$+NEJog(9fDJs=R1a zz(L4+faUSsG4GU7tZ7XCef7@3lqyFa#EuYIX=|*Pnyq$Ty1@`&JxfpP z>L@Ss%rR>;sFUak`Bc2??k0tM^%%X<;MrQ}t+I}3zi%Fbnv#H)Np9_Ur-!6Rmkng$ z73vzQaI7I#u;LGD*JN|vvcGGLg|S=znPnK3?HIR**5Dx9&i-fX7|+mOtl*bYOlolw zx_n!C7H|bHjm(&o$|S0u}RY7<6sttbxw98G^N;+_cX_Ff#CR zq5ahp^pYi9RgZJV3Dd0d?yZM8KH6=)Us(Jxj-cWbLIqAF@lLdV`iDlPs1P^odW#k$ zFGorbvE(>zw9&4&F|UKnPpHnl(@VZ!q&S+?A7s?MVH8_KojEIk{nOlhr`5Q_;Uk*b z@`=AYH7XW@w`+)DNwm1#3&{Jrg`PTstwhY07D;v{%HsJVHpS}jQg6J6a*R09L70U*_Z=V-r~cqeua@k2$}E@)3>i4C2Bf4tK3udWYq-o-S%1 zI-CNlX4V>O>%R6GPULp3_3|lNx3Pu?7cqjuY9~xG3Y?L&&N;_W4V8hW4d7XV3;ey| z%MHllIW?-@jD(jS*&7>fw6*POnSF6havLuPdV#|a#RK25>WC0B${CB&y$){(;B|0n zVal_jC4QnjR*_C4HQYdd$puimv*ky8RWg}bugGV)#TOATxAUS9@j8=2eoUaJjYDVu zc*jBm?VhT3>Mhx9@HQIRPGdNG8A@gnWKk`Y9WhocoQ-xlwkl@`QWBs?!DoO8E6^X^ z-KNqiIOMW`Iy!!f(@CYS>~xA=s)eN<3DLVIOP^mb!aN}ub0B4;I`DAy0eYYXPxtDt z3o(Wlf9w(%TvP<`4auYC;y?F)tnfevdgsn`{RY;62yR|>3 zX7SrOt4dQ@`Fk9-*o&|K!)>lXhUQx8SSrh*$S*G0UG< z{$R!AWqn2RtnqxpD5IqjZotJLmo#b}9o`|zCybM~+&kOF>7oC5S7)n_q|2yU{Ubp?)PZMCGCtEp^*zkf*nv&F#q38?8774^lSti8S^ny$&U zy*yeduHK;=GChcyy_;B}w&softlF{4C9%Iy=-Cujh12Bt&xc8k12$!3J9ghOkp9|#1)&0@ysO1e!8`zC5Wn+H<^dNTSZ7ty7mS5GPilv{c z*|d&Z6YYke8I_c>-k}x>Q~H_5!f7rqi5|DWWUaN1L|Xn$NaQ#%^nh zcG{#uUIqc73$-lXmXpG?tJ+=&?>6w(I4jvDX-pzR#wEJ)*lObfO6Js%a zh`jwp!Pe|zKS9`k1pgJHL$WVXy+$BjYAgmOBq z21Z1wj>MC`GYuahL*~PEp7-SC9rb8@o!@IwcXEtUg`N8db7%llhJ~-WN?S-VsfoN% z^eN+6fH*$xm;u0-GY8~bpzc zK{>|J*Q5Z_?tUhcB%Z3?_(zRbWHK=3O-cGo08$eQC2zKZ@YoP{cmWa)yBjq!#tBz? z@diLM?vBRVGE*?FFGS0(s*$MKQ1swcekmi6z)D(%26RRv-$ngj(_#1{iyC^kZ|>J( zF{_r}ou0*;cSNjlDKW3>2{|R~LPV7+UBmNhh^_FWftcfMdn#g}Pmoc=&Z%9JKm~n) z8*kwdn=!hi+7jG`j`{W_i#0ociB`}_NI)j9u>-TwDm-c zUg5Z+*f=-|qSJ<+F})tFb^zTZABiN4dQ6?R!^98`_L^sPJV^V)Uw+KKvFKBkDZCWT z)r0x~nn=}ZFQwqBI8oDMMRB@5qiT-`Tn)7GskxR;omVs3vZ0UL)-E?>5_QlH2_ zv5;A9Qb%NO`Ks}N$T3`EK~^u7A@2MTeiMv)?9;%BUL&aad37EIKKv(7(nSXhi(AAmSV zb3LsX;9h5t>@X*yt;JLUE9(4`V3=BF{BA^PiK(Hf==-zn+Ck-uMfjPewqS^cRKi8w zk98n2%G&+r31WOXWvCdrd;lu1oyiz*Ey2zjGt^WqfqH~ViO}Qrb>l6b%N_GUM9r=Z z=ZMVt60@LD_``kdbk{{k-MT3bHSD|~)9io+<62|jse3f3xg;JkM-9SbTYVs zX(hRb`Q4W%u#QkVEN;E6d?=5FBl~loXMO#cEE#2Wfjox@CSe z-~5{jY)Dqm!EzAXh5hs0b0;QR9FbaG`>qqNQeo;GJnV>B=Fv((lR(ScK=G+GPCm zJZzR_f&FJ2xBY<=W@}RIP~dnkgBX5=1|VsFMeQ#WCF_hV1BiZXgJ!R0KRC8&Nubr> zcraVs`u-x~;8r=CdavtmVXo!so+E~(2G7vdorb-rOr?P;*}}uZ!-FPIACh|tgqobe zU?MuOL~EOzA-L4^;nK*JCgXf6nQoIyYbt!!t?^2AMpeV#4}+K(U`sfjozq8Q+2DWR z$o7w%%ns&%38gF|{zK2c5Ou1+5m0U^Uam=-b5X=0aY_zkIpIC@mGG`SWueT099qvL^7=Sd3w0`}a1-eUuZ3WZo+DC zhiBta@A70wjggEYnhy(BwF6!JFL@T^8`y13e~B!T$vpp;q1{Dp)Uu<9O@&^{$|o#n zZFd})Fm&I#*|kyb#v%P1awnJ(Fj=dZy@!QPw<+$fH#5~$EV84o9?W< zPxlG_b+O-@x|v8D3CP)RAE?TPAe=JyV~bz8d8RuS$2qb*R!%}?%uNjze~@BOaTraZ zTFSfFaPI1=IjCG%=xZhXd+)(F@NIRIkf_M%$@nuaxm{FWqX+qntc$fHKa^P~(59BD z$6QT_P(<#aA%84iBT}God0o}wAEtr$L=sIL z?#eE=o-oJ#5giUm&EVhK?E#g_+)FK1k+h5f4*yui{~FChlFD~h`* zyG#Ci3U`g^v$xuwDy^2fyn9y|n~^eL-MB=JMaBGL_Qz|Ff6>VKTI@%>G-OiBwVA;` zqy61iEUAR8!Ou_i{)hsiM`E9Qu!y;2+pln^tF`;|LHDG>9Ubf1(?>K(wW=$YnUr(t z@*xvT`>#u@LfnvXS?8Rx0>+>E|}FI^U|qD8!bWZ8;}F0W)cJ{jC2Z;2H5p=06i*8 zXI0Uw)xVl2S}Y_^0t0KniLS}9*E+aq5znoF+!4sMYk_!2J{81estM4_b$F9V0*w)g zJ+j1{ss5>#kKPvI1Hi=c@^$nJjj&OfBN5zuFrYScONII~hJq7(1s5w7U6w>=yW8et`#cPU zpX*o$|D3PkpJ@z+Lw1iMi43;~P5fs41R4FbqBhQu3zGUqVMpS1e;?W0;arY+!uvZX$Epx64gvW zMtE>YtIRRq45<==Fg zhNJ0~sk&SIKHX?HShd@_BqJjRSbWw8bzWULWb7hsgD zGa6Gr0uQoLZ}P@Ngsh;*tRl58^FjUyFY`??QSk;}6 z60HTvS?Q3!%ATzu(;ci2w3&f!p0ie4)>O5QUJoo-fg!#v8O_h4%$)$Yxfh2E(`smT zT~TR?o9h-b6uM5H4)|DphZF9Xe1|5CzjxrGMds8&nG^HAMX*L#>L^)}cnN~Rn0h__ zC5y|yn6BnqTgOwh<5XN<_JdGtbpi>ot21@ZdJFCt-2JRRs4&&F|1=7YYYG&(md*)C z3%DGyFZ4R{D>3Mr?HD`MdC3k=@o!j$tybDo)C0eV7KdJ+w~lqL;ku-?hsI9x@xGa( z@(M(xx&WAl#bjP0X@)0`i{F5|29A|bp0{vb0htRqj&(x%=D6+aJg-h-Pk3~@6Kt2! zf#4OheU(@WNzI(DDJOz>*}yBLIq81-rHLy&(2+jZYgN|A8L$)#G#uOLqj{S@OD(Kv zPJ|YCTXO>Uv0L=MHZHz&YHoV)g)Ts#OYVMdKAE=79V0O$*v`c5Cpia9xQq`N9Uk5$jc6qZiZ2_E27~~*cIIC2gygV z5l|WAo20Ke_kFh{lx;1Tf$FJb2>bO& zQSPeKgO+9UHQ^f_O!`kRZ<*;ut^X8J(1GdNTk`c+ZFsI?+SGt)%Za@}4hB}4E$cWI z<|8!20j$~-=@Ut$xi;E81P%U22c)R^U2e<*qx;AT@@?GXz4uv_h8F_0|2hr>qp+9L z%42uqL4tN}Z{1m5cA=LjIL0A}ZbAUT*lr+yjUh8q=VIaAvz@P*QWo@dbW!JZA@lI+ zL@3LD6)E-NPR#dC6V1}1I5%(qA`YJ5!V`Ta00fOxPl8G(YsRoV<6dcuA|G2-S?7yR zdVBtrJuxh@nMi=Hm+2qH13)YXEy8?{T(4v#UNK$|G|-^g2#`IW>!8!%CJ%hcvXjPJ z)1)y?G&91wNjAtvp|{ryGj+zr7yv@PFq`~JkQxec5r5Mo{ve@;RSjUMdlE4unK*`L zKAo_}^7DD?t2-}An$4nWoFy$%=Nw^!c5U~S%(yAm;g&YHT2-;COSRY-_0C!#I-_mW zn!!Dg-<^pfpKk^_TBl?n8M(g~y9m)qKX)pUac;i<=A7)4f$l}|ahJ9Q?%w5<3@fza zZown)JBQrI_39F!{l>Y6MwdlO!D{tfK}$kt2xjx(jK;=NgaOPIqGG3UlDsKU0}t( zTMhF{c>l-^mW}E?CGTd~EIs0?kDZ21;5`?ckaYYC4R$D_7Nd$Z7vAs5g|%*$3I+7; zZe$BEfvAG{AiJK<%}s!?n7%`_QL1RKtmi9Ym|$B7=zAk8V-;kDhYZ)7TV;R znac$PoTvu=4WsRmnv}DK;m@oP zi%92*JP*r_O5FkuM0Oo{2RvTh{pVbFFB=N_7hrb?wMG)HLFa<%-dET0r^ZSrk%iLkP`BaEQFNCzO=!feH{ILB z{{%}7wDO7>e3I5X;$LP8hiZ?qF-sDq9Is{Wv{khysRk(?pzR@AZlmd6Ma4c{?2n%p z3h{Ntg|g$o6#{Z!ejne(Kd<8bd(5}pf%A<{x?JlfTA!rl`*E&|&n!EbrcFxgE}U+_qi2#1~S;en@j8*5!a#1o~L8rWi=UQjdO zG$E#~hgUMtnS5@1IV}&^_kA>eqkuV1zylYwa$nF|XdvVu_`Hm509i-3LU!;6Xt)%9 z(46D)Q>R#vJjJZ9!|d~*LK`~?x&5}>zAD49eSHu%JqT}p2X0>8&*k6T%d*Odea%4d zYeOGFBI_c)BMg%fk( zx}OJZ`1mnC+;EI}1@DpoyCAa*MvuVglQv*m_etMkI%Ix#Q+i7Fm@>TsesKrv+z7WX zYh&pRZOl(Ztm`(&?1#~9FucdA&MrhaHzKF}W+uTW8Q5R>5-Y=fgDl_<7}+6vnF7)c z@H|p${6^?5?{i#ZImX^E9BqS42V@@; zdK^IHe=AaNT!S;ZKM9ZShYd4dWi3!$Aw^in^nm`}EQg469}F(8V17}_bw2d=vJmmP zG$H!uG>}+TysT?J{sx^nf?q;v6&(G3min5F%nFLE#|a4jZ0L@V-tC8tb&WhoBZ*>d z1i<4m-w~`C+6x@GA2#0)Z`}jy*R*ljHEqnl2&!tKq6!it5@!_bfXqS2{1t{y%6LlU z!`wD_uK~XOvs3(N#THiAL2VCWaQzBK-WA?DiZ}+E5Lr_)FGo$h0yzV&MlJ(ZAkM6b z#@j1B>O+4j-2a0R;W6{mfsJG@Hi0VSys!vKR=onTQ5PY`k9vsoow#nq7(0q6k>iLp zI@8Qc{T^yjXR(=JnrQu5A_} zjMow0NxPYcrdMlK(o0SMA2st<`&@lhqh{P{AiakbU>)YOJ`Af*d6dgxTZOF4jlc#o z#xs?28$!;&FCq~;?Gzd`No4MyMwG{uoVhrIDw4N=?Z}$;kWXI;WG_}Bm#UvY_Ol|? zMiX+8`vxLFbIx}^1~edhG8Zwv)qSq1?OkSWFCff5!qo0-22rjJ!1c%}IL^nHA)oGA z8NWB6!pwCZQrF~i^Romwkjyq~qW;q~ww6gR!l#`Ge|94B;Uw008&7OO0^!#=2(Mj% z?9oS%HPNxC;h}O#sWn)6lSTHm9e5SX19K2h!j*{k zI~+2gKDrhpuBjDKRu>?~m0sq?mdt$^=KT=n^BW4Ut)78kCjddBf&_OG{no%w;OQPR zcZnQ-9tnd#KslZkk4MssxDMIVB?#YKg6#PP2=7!AUH?k;k|t?r+PQo9IF8Jz1)&KI z$w(q*9+$tbbY<>&78%b@3e_sW=*TKPyVK50n4cuN0 zck?L4E8QIh9)Y{%3cdyS2jU645HY%!5-kI=h%DKSJY}tWmq2LeYT#C+a$tSLS}IN> za&kLD$K9rl>EOdkgvYK%3a_j*eI&8*W&4mzy(S97JBlLegsGmJW?-io=y^=cP*Me) z#nvIwr&D{d*CFabDJ7#w@4<(V%{>BRmUunZLp1F4(}`@Fp4jx7K?&RK(>3f|1409W z)lql|*@z3V3Qad%Jq812j4Jp?5aQ5rDnqHUlrw8_98tzf5b7}QH}mR6_GcktsMRCN zRz;m&c=lr*%O}m}0ng!!e}A}LC*BwZN{QkXA2P?nd7WQ*8E#F_)eO!_95$(LU?7O!Sl+0C$Vzk zuo;V9me0Z}jS;NDrnRS7il)C?i&3HA#XCESiXHuvp)#E(i z%vEXri0SJX@$x&kP@er=$7u=;rOO~O1k{t@TB7R{9RYe^PyV%=W+Y7|^gyc@(;Zlu zyZ}*}t|E4gC08%$MclAyZxEruUh;X%J-}y8pN;0b3&>A~P`xq=bkx9V+F3`6__r== z;d-dKUW~6b<6aGu9kvgGKgxLDMfmTa`P^^D8C6w2W9D-Rk#lLM)e%G=?Lqdnj%agD z<#-!H!}gH?EO z>!SV7z$#-EqzSC|ZrJ%5#S+?7hx=6_bTb#BqhgspESiK=xB*at(|{ zgt`Y(DAY@?!IVa5(WS>Ien^@=YOx0Z?Zb^cO??YyJqC@5FOrCT2IhUvT%Bnl@f^Gt z*aSDj@QY#)yZ~%P4whgKDp9gHhc!6+$gh1>VZJvP@t)5hnif@t3?i~NEXSvV4^{4* zXU1A%#+t^4PL%49DQGwjE`v^{%vIq0)}Ng7xg2l_RLAP}HB}6&hE4_fj2P8_5c*y* zl)5f%|KYj2Yh2E?E*0aUpRgCNT{q=UEASgZK+tMJw=>MBv^inY3NV)y&_KIF~NUAIN<+BY71p+6y~t>RHP7C_Qtx z7}^*!OSeMqHh4df>$4XTqqPa~qD=Q8`2&Z^Jc8=s;o;$Nb|csf-OHeTMK_;gA98V_ zB~KK6NLcV+fajodfZ$db-YHjZ2atHyH^`51@el;>L8c!XR}Zmn=4;GmHWJ=EURT8+ zl5+7ZuoYT+2)+jCpUMt3BkA+Iu(gJ!^ZN4x3-3|#@bK_Bw^0QwxF7EPDtvdbWL(-% z=t0KHSiS?f&5(XXVm`W&VBvov9;Ktm-@S4!L?tk95nQ_s9#{!0$8yoGL{>cP$+49CuO<(9lmXsQ^6>ERIJc2Nf@>E8*IWndzYN!< zp)Lb6bC4VYewSb0rW3j5*@r0RHp=i`goFa^8Y1Wum1CJmQf+jHP~W*CNWi9*I`cI%p%GvYZPhWMXe&P>mDwOsh|HBweikbctgpt65q$^j0s+a<*QR zApBd1CXNmL;Z%6wTD-qPh2WV)GC>T(6#Nn!2BB9W4kl88xEqCyo-A~Tsx5=SpasZt|V$njQlc0UH0ONJ?QDuYK|Lid{B{+(mdMwCb;EIQrKpUd@P zko|ZxGMNYaQhBhS7fdEIVG5JRV@z=Qay?QsO9NVue>T5G z_;Y*^xn*Wlmf;BW+WX8hSjM%hLjr#MXyJ{U?e}@h?^CG5EiLVy#Ez`Y@$vEIOU-u- zg-xFD-aUJt5s0^>v1g*9bhDwJs_Lpmoi2u(5^(p0C0B~h|u5XC;=iXfVlp@x&jD;?R?&XVe zLtSiehqnlwJ0cJDj*o{e-2rS{@5*(86hUq1_9?q{)T)JQ#|R_GTa`|`346ZqSt{F~ zRdn2N#~{ zC_^xTmUr2Q8rOWU>m0VT8r!)N3|{lvGkZhhHqLNr)UR_|H%{H*W?+Vr^Rp*~jJcuD z-BD>EH|NgoS0{^C>?|RyI50oziO?MXNKvtQXTZSWGbLC?Hs?yc`;t9kkCRV1A>fHS z;FRAz2~6zCIe8sduREPje*t)^JF(BU_#5{HczsmXeB~sVi*Z%gCT$-uaj*|kmFc?b zd7w{34YSEY0|rET2tAc+TS8iQZ2P7{XB+(IDboY&KYLC@=~%-ky}`#ATde=sr}snf z3V*CWaT3l)D=ryX1aJq#GcVaRuA;Vt!6Gs*HR}vM`#ApaRXdy4Gk~V9GQ4JLUYT)a zb=$%Qmm_V^;_y$hw>HH+t(`16Q<7;Ctj;NIxs#?lQ^Uqw?oY&+_%?dPd72hVxGwss zlzmyqUQg26e+rkjZ#WWKQJwZ1XTCGK@%@}tb``j9SADPd=sghLNMpq2x7#PHe2ON` zTT|akdK|y$Krpa%m4F9R@sm^Y@&)L1?l+*u%O@xLco8bx4;k&Ue)qyWz~&qV-e5;w z<}W&?0e$YU9#haA*ftlm2H~DZV45~j3Y%kNPk+}~{a({)M_d!-3rx=n5(b}nh`D}n z@||26j@P@t?{vCp`R)QFzdS=v)&=WGU<@0mAH>gj({xA_JjHN%+1Za$r**DHsjk4M zWYNgM01x7lIjZ&;7iHBn;X}~vE==?n^v-V|{f>p3 zsIKj{PTTZ#qqtx%rT{hfpoKU)@MPyHX0HD?`V*cyJ?gC&jj(N}JMY}W;Cj6L_0!%0 zU~B*M#5U*1BcCMHeg7u?7VzUNJ^IG6Y@zLf`Jhn{pJ2}O-99hxVTuiha7}M6YCZ(L ze@!oGZIJ{qHqA0Y*<|0`k=tRQPi@?BOTJ@^_tAsw3}HjX9U9P{QnYq#V0@x9z2>Ydf2`7ru<-- zCnt9C^NoSt^s@=#Zwt(r&dD1K&jQyyWZTGL@Rc}%X7+e4O-T*z`cKObH&%#O548I) z+-z73lzYeKh1nEq81Bm*Ue8&R7*c|KRdJ918H%3$z}6W51SqcC3!GpBTKA(ZZ+te| z1`8E8+$(CG3NW{qJtnGhk36d!DQ88v;n3j+54!qCaljMXlOL1wxVkKOLt)~ZninZO zpJ4YD+{|%~`20vj!(*&+($}8F3!-5dibxzyS=8-NU0d7OO+A*ia>J<0FZMExiv$zO9KW|2QN}y5{zI!B_3D#6hFoKr^pWwaF6;4)BX#-;FO;L literal 0 HcmV?d00001 diff --git a/lib/main.dart b/lib/main.dart index 7b7f5b6..c48e65e 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -1,122 +1,144 @@ import 'package:flutter/material.dart'; +import 'package:flutter_dotenv/flutter_dotenv.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; +import 'package:geolocator/geolocator.dart'; +import 'package:permission_handler/permission_handler.dart'; -void main() { - runApp(const MyApp()); +Future main() async { + await dotenv.load(fileName: ".env"); + runApp(SignLocatorApp()); } -class MyApp extends StatelessWidget { - const MyApp({super.key}); +class SignLocatorApp extends StatelessWidget { + const SignLocatorApp({super.key}); - // This widget is the root of your application. @override Widget build(BuildContext context) { return MaterialApp( - title: 'Flutter Demo', - theme: ThemeData( - // This is the theme of your application. - // - // TRY THIS: Try running your application with "flutter run". You'll see - // the application has a purple toolbar. Then, without quitting the app, - // try changing the seedColor in the colorScheme below to Colors.green - // and then invoke "hot reload" (save your changes or press the "hot - // reload" button in a Flutter-supported IDE, or press "r" if you used - // the command line to start the app). - // - // Notice that the counter didn't reset back to zero; the application - // state is not lost during the reload. To reset the state, use hot - // restart instead. - // - // This works for code too, not just values: Most code changes can be - // tested with just a hot reload. - colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), - ), - home: const MyHomePage(title: 'Flutter Demo Home Page'), + title: 'Sign Locator', + theme: ThemeData(primarySwatch: Colors.blue), + home: SignMapScreen(), ); } } -class MyHomePage extends StatefulWidget { - const MyHomePage({super.key, required this.title}); - - // This widget is the home page of your application. It is stateful, meaning - // that it has a State object (defined below) that contains fields that affect - // how it looks. - - // This class is the configuration for the state. It holds the values (in this - // case the title) provided by the parent (in this case the App widget) and - // used by the build method of the State. Fields in a Widget subclass are - // always marked "final". - - final String title; +class SignMapScreen extends StatefulWidget { + const SignMapScreen({super.key}); @override - State createState() => _MyHomePageState(); + SignMapScreenState createState() => SignMapScreenState(); } -class _MyHomePageState extends State { - int _counter = 0; +class SignMapScreenState extends State { + GoogleMapController? mapController; + Set markers = {}; + LatLng _initialPosition = const LatLng(37.7749, -122.4194); // Default: SF + BitmapDescriptor customIcon = BitmapDescriptor.defaultMarker; - void _incrementCounter() { + void customMarker() { + BitmapDescriptor.asset( + ImageConfiguration(), + 'assets/icons/sign_marker.png', + ).then((icon) { + setState(() { + customIcon = icon; + }); + }); + } + + @override + void initState() { + super.initState(); + _requestPermissions(); + customMarker(); + } + + Future _requestPermissions() async { + await Permission.locationWhenInUse.request(); + _goToUserLocation(); + } + + Future _goToUserLocation() async { + bool serviceEnabled = await Geolocator.isLocationServiceEnabled(); + if (!serviceEnabled) return; + + LocationPermission permission = await Geolocator.checkPermission(); + if (permission == LocationPermission.denied || + permission == LocationPermission.deniedForever) { + permission = await Geolocator.requestPermission(); + } + + Position position = await Geolocator.getCurrentPosition(); + _initialPosition = LatLng(position.latitude, position.longitude); + + mapController?.animateCamera(CameraUpdate.newLatLng(_initialPosition)); + } + + void _addMarker() async { + Position position = await Geolocator.getCurrentPosition(); + final markerId = MarkerId(DateTime.now().toString()); + final newMarker = Marker( + markerId: markerId, + position: LatLng(position.latitude, position.longitude), + infoWindow: InfoWindow(title: 'Sign Location'), + icon: customIcon, + ); setState(() { - // This call to setState tells the Flutter framework that something has - // changed in this State, which causes it to rerun the build method below - // so that the display can reflect the updated values. If we changed - // _counter without calling setState(), then the build method would not be - // called again, and so nothing would appear to happen. - _counter++; + markers.add(newMarker); + }); + } + + void _clearMarkers() { + setState(() { + markers.clear(); }); } @override Widget build(BuildContext context) { - // This method is rerun every time setState is called, for instance as done - // by the _incrementCounter method above. - // - // The Flutter framework has been optimized to make rerunning build methods - // fast, so that you can just rebuild anything that needs updating rather - // than having to individually change instances of widgets. return Scaffold( appBar: AppBar( - // TRY THIS: Try changing the color here to a specific color (to - // Colors.amber, perhaps?) and trigger a hot reload to see the AppBar - // change color while the other colors stay the same. - backgroundColor: Theme.of(context).colorScheme.inversePrimary, - // Here we take the value from the MyHomePage object that was created by - // the App.build method, and use it to set our appbar title. - title: Text(widget.title), - ), - body: Center( - // Center is a layout widget. It takes a single child and positions it - // in the middle of the parent. - child: Column( - // Column is also a layout widget. It takes a list of children and - // arranges them vertically. By default, it sizes itself to fit its - // children horizontally, and tries to be as tall as its parent. - // - // Column has various properties to control how it sizes itself and - // how it positions its children. Here we use mainAxisAlignment to - // center the children vertically; the main axis here is the vertical - // axis because Columns are vertical (the cross axis would be - // horizontal). - // - // TRY THIS: Invoke "debug painting" (choose the "Toggle Debug Paint" - // action in the IDE, or press "p" in the console), to see the - // wireframe for each widget. - mainAxisAlignment: MainAxisAlignment.center, - children: [ - const Text('You have pushed the button this many times:'), - Text( - '$_counter', - style: Theme.of(context).textTheme.headlineMedium, - ), - ], + title: SizedBox( + width: MediaQuery.of(context).size.width, + child: Image.asset( + 'assets/app_title.png', // Replace with your image path + fit: BoxFit.contain, // Adjust the height as needed + ), ), ), - floatingActionButton: FloatingActionButton( - onPressed: _incrementCounter, - tooltip: 'Increment', - child: const Icon(Icons.add), - ), // This trailing comma makes auto-formatting nicer for build methods. + body: GoogleMap( + zoomGesturesEnabled: true, + scrollGesturesEnabled: true, + tiltGesturesEnabled: true, + rotateGesturesEnabled: true, + mapType: MapType.normal, + onMapCreated: (controller) { + mapController = controller; + }, + initialCameraPosition: CameraPosition( + target: _initialPosition, + zoom: 14, + ), + myLocationEnabled: true, + markers: markers, + ), + floatingActionButton: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + FloatingActionButton( + onPressed: _addMarker, + tooltip: 'Drop Pin', + child: Icon(Icons.add_location), + ), + SizedBox(height: 12), + FloatingActionButton( + onPressed: _clearMarkers, + backgroundColor: Colors.red, + tooltip: 'Clear Pins', + child: Icon(Icons.clear), + ), + ], + ), ); } } diff --git a/pubspec.lock b/pubspec.lock index 6be6db9..3cfa83f 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -86,6 +86,14 @@ packages: description: flutter source: sdk version: "0.0.0" + flutter_dotenv: + dependency: "direct main" + description: + name: flutter_dotenv + sha256: b7c7be5cd9f6ef7a78429cabd2774d3c4af50e79cb2b7593e3d5d763ef95c61b + url: "https://pub.dev" + source: hosted + version: "5.2.1" flutter_lints: dependency: "direct dev" description: diff --git a/pubspec.yaml b/pubspec.yaml index 27b0861..70b79cf 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -37,6 +37,7 @@ dependencies: google_maps_flutter: ^2.12.1 geolocator: ^14.0.0 permission_handler: ^12.0.0+1 + flutter_dotenv: ^5.2.1 dev_dependencies: flutter_test: @@ -90,3 +91,7 @@ flutter: # # For details regarding fonts from package dependencies, # see https://flutter.dev/to/font-from-package + assets: + - .env + - assets/app_title.png + - assets/icons/sign_marker.png \ No newline at end of file diff --git a/test/widget_test.dart b/test/widget_test.dart index b33908f..6f8cb19 100644 --- a/test/widget_test.dart +++ b/test/widget_test.dart @@ -13,7 +13,7 @@ import 'package:wheres_my_sign/main.dart'; void main() { testWidgets('Counter increments smoke test', (WidgetTester tester) async { // Build our app and trigger a frame. - await tester.pumpWidget(const MyApp()); + await tester.pumpWidget(const SignLocatorApp()); // Verify that our counter starts at 0. expect(find.text('0'), findsOneWidget);