From 99cce09b19beebc685548539933ebfd786e579af Mon Sep 17 00:00:00 2001 From: WinUser01 Date: Sat, 23 Dec 2023 11:26:20 +0800 Subject: [PATCH] =?UTF-8?q?hyzp=5Fybqx-Commit186=EF=BC=9A=E5=B7=B2?= =?UTF-8?q?=E7=BB=8F=E5=9F=BA=E6=9C=AC=E5=AE=9E=E7=8E=B0=E5=9C=A8=E2=80=9C?= =?UTF-8?q?=E7=82=B9=E4=BD=8D=E5=9C=B0=E5=9B=BE=E2=80=9D=E4=B8=AD=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E2=80=9C=E5=AF=BC=E8=88=AA=E2=80=9D=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=8C=E8=83=BD=E5=A4=9F=E4=BF=9D=E5=AD=98=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=9A=84=E9=BB=98=E8=AE=A4=E5=AF=BC=E8=88=AA?= =?UTF-8?q?=E5=9C=B0=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- android/app/src/main/AndroidManifest.xml | 3 + android/build.gradle | 2 +- assets/images/地图选中.png | Bin 0 -> 4075 bytes assets/images/导航 (1).png | Bin 0 -> 3043 bytes assets/images/用户选择.png | Bin 0 -> 4476 bytes assets/images/默认地图3.png | Bin 0 -> 4756 bytes lib/components/commonFun.dart | 53 ++++- lib/main.dart | 2 +- lib/pages/Works/DWDT/basic_map.dart | 29 ++- lib/pages/Works/DWDT/dwInfoDialog.dart | 121 +++++++++- lib/pages/Works/DWDT/maps_sheet.dart | 49 ++++ lib/pages/tabs/page4_myMsics_new.dart | 57 +++-- lib/pages/tabs/page8_defaultMap.dart | 284 +++++++++++++++++++++++ pubspec.lock | 35 +++ pubspec.yaml | 5 + 15 files changed, 602 insertions(+), 38 deletions(-) create mode 100644 assets/images/地图选中.png create mode 100644 assets/images/导航 (1).png create mode 100644 assets/images/用户选择.png create mode 100644 assets/images/默认地图3.png create mode 100644 lib/pages/Works/DWDT/maps_sheet.dart create mode 100644 lib/pages/tabs/page8_defaultMap.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index c132438..3004b3f 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -36,6 +36,9 @@ + + + WmEB3;+NyYHFw$Qe*dj2Xc;jmz!5) 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 G82&#N=6O{B literal 0 HcmV?d00001 diff --git a/assets/images/导航 (1).png b/assets/images/导航 (1).png new file mode 100644 index 0000000000000000000000000000000000000000..2368de6d39928170375ce8e274f06e69da744945 GIT binary patch literal 3043 zcmds3_ghoh7CniS5JeEdhXNr&P(z)7f};c@B1MW)g-AppM5+{diBcnsD7_34qX-Iy zYIG<;NCal+D2POm7DSYh9z=yWMBrU!zWFEK5BHvX_u6Ogz4rO;zANdBgOx0D4-x<% zYh!KU1g)K$7eWfUv)!NMLksMRla)Dm@=A3EfUWm!ERMTeJ-=|Dlr3mguw<=BAreJL zjpq|CY9*39_uT?k@`%XblN-hD_LuHzZQEsERGbGZ zS3vvm5Fqnh9$2X;60W~N0>r>|_$5Uk|6+?I_+<|P#)KcfWoKe3=?Dn%n7h6&Ac%Q6 z6~2|(4*K6 z2C`<_OVLPRooP{R$AkloH))Q?6+tFCiNZ9L1Qx|AMezp!`nW=mp)V5rzb3w+Shu>m zBEC4iZsgE39CUu8dOarinhx+T)32;nRK7SQrOXZCJ>ku8g{#%{7*UIOqaphCp+4px zz?-ETc1h(;Bh@t}O-&oXoji=LvZICP}-XPWi>{?{h~=8%jhgZ2B_ z@gEUJ+wKJ_p|=ak(_F9hjg>!B9;=w*lnJ^nT9p043=F@|+s4HwwE`Znz!&gPi9FF_ ztoX9i?uWSBQJJmEPTB{ren#l;!bd4^Nuj{lYRY<^CvZ>G=3m zuZhBBEmaQKSU2+xu&?#;ru}m~lb9x=oJe%6_u8kWJ95$@kjXl`k+rPk$2gz%lVChV zSSJ(jrjgs%g$EXS506Oa1~Im) zeaJCCdphoibH9^4JhEPz-tRHhMOz-y#|MS0#|~W*)B4mL>^It$5 z(6w!kPz~)=tZ!DmIBiBXA2MNw^&;%IE;uD09EMDoSDU8YRBkbgigi^;TeGx*%I&vP z@f-}`Y)~;{$Vt^jVz`xZ?+&i-u13 zW+*uu#!cMSdS;9LQmQtQf2UhK84#%gvYlYR25N9@v3z%qi@08Ie3zYvIvrEj@}0?S zynZtbD>L|r(MMYRnb>#=wJEBzSr*YCV~Uq496Lfo1I_9|}WU z`~@dxNB;(0NbJ{u@5I7xA| z&XwO4p@b#wqna%P0TLL|=^wsnf+WVl#{L~boNVCto`Es}m*bA4rv|@C>0dO^E4#xP zbUI->5Fb@D>Mh$c_F6Pb?|SnadCR$G&eyJ0v#1bHQw-4%Ef(0beG53>#S663mgfl2@OBgVD${&Ssw?p zayP!$^K7kU%4qr31dZ)JDIL#QFd>F#6mAbk-svb{1|?3B#xs8NgBh(`>Cv)?l_M)E z?0T!)bk+D1I{QXr`s>F1dhmAvS$oz;$9S8`u$RonWI^>!=Sr;_Z~Z2>Oq}>|`KKw= zP1_1@IgP$3-cocGcjnu<$_2}&xG$3@153OQEt(J`GCrwJ@-5?rf|~P_2cD1ng)LS# zO;OY)6?8|PaV>6-chSn05h9n^fFEtbdLj{nwlZ0j^HLc!RnmEv%;7sNeC^}E^Xc0j z-bH#$#Pt?5U5y?%Q)OamQhZ3{-jA}#?oM#V;b~0M2Q_|e0mqv0xhcEGG)>WLjyHS3 zq7o|JC-ASkS9o+YCek>+8l6thC8rUb;B3;IY?-x1mMNbH}5N4&w zf&{-c^`&8*G>Anu$(Rb$j;i?S5fqyQ#eO1_S-M%FZ_s}pXb_qqT0;Xg>Ll?zFAXA* zO=^eSVVIhKy(c)M)Bn1|3C+;&;BR+6{XI$!J6W>tZ>FCEpVf8fv;S#neJeBn|C^ScBtp34KMOFtoM5rO&R7=n2D2egElE9_$ai!=oL9pxJX;<%649XCh#?PGLtS!r&63!@rt= z%Cg|wr6>dY3DlIcBw8CfhgO)p;G_90bPlzyg~ToKQJxMv>7H*(hm_i(q%us&Oo^;h zB=5hVJXyJ}z~)U^r)wgFB<+^Ww0L;Rld|l#SD2M=4{Qcstew(?YTM0}$lUFH%_{(g z5aJ9{fZ=I_!3x>)yf!?AB2S5Zs? zqwB0Fi2&nFn49={v$uZ@!!n~~?KR0DKI#BjilAswvu$sTKT`C%3rU}z_Su!4Q0~U^UDQB*DLB&T@12i|X-0GeTv?C7&9Cx`K z734ibhRFpl|K)XgS;;m1@D?b5hZv{2-5Xs_>2x84%GnPbYlq9LkOm6(H9|Z~vFrY5 zfKzbO2|_{%az_d}VDd+UT{ZSU-$W0@m?G%P$rU?R6(BV6MTrl%#cmw#Gk6ZQf~*s5 z2I$IL^HkPVA)ZgTjE*gxzG=x`VIM^9bvI8?KJdq6z=7t&Zz@Ed={N#l1)7`ph+5nxlFMV_clDE+jlw3eB#qMk zFj}xIepr$PR#YDMv^5|l1Bf*U1TLqG!y5ZqZs85c4%!@QD+d;Rww(VCz=Uv_t)66x zbp?7t?{i%T!c#*no29v=GkS@`YJMgT6sGou)s`lR) z5lL%JB~_Q9Xj-cuLS8!!v!(ujW|h2litB4F16`#0`jihmn(zN8dgHOq&ZdTe!1{0@ zFPH!bbtN2vl~fAB&`={`FE0b&3vCES6)G7z+RpTj6$^ptb`0LFW|k8Bky5;N>b-0m(C1Yvoc{B6=|i=Oxln(>_!m$ zp?Sk09c-S}>0qw;j6TnQ z$!b01xvRzKmJz}`^GyV7STMERxVox&S5L4$J}k>N2d^1Jf_-_cq?LctQW(4g4C#tY zvFGcFQD~r%4#u^E-!i#1Bq&{}sS#d9nG_LG1}S{M)0qb`XsVv*ZNdy)qdy7RTJ9~- z|Eq(0AMQ8d&bnlzcEGs06!W#TpVtUO3At1qo&S1FZchF*%AIGaoJG+nb@6>VZh-G} z=*f4aPLb>3`wCss_ITlh=Zb#}l0Q2k&7j8gwH4!V*2*mm@D1W)6gWP)u^+2G;QVEPl<$a z!-oXvVpE;vg{EYKSl~*%C?EK4;hw^ASGkMB(!OL;2-4t|-M5}}CPlbv-qvfLR-A0b ziEQ7;DvEe!5|z4Rfaug855;UFxwoQrUN=a{J7e3WWxH-Vx72O&wX`IB(wuODEv~9= zJt?j#XHr{3e#6x_1-g&hxZ^{xz!#_W2D0~$@)i}_=h<0h7qri(RRF&V)J-$&4hyEZk@mj z*QGpK-5OlHHl49oJM%bAw-4LeIbGDt;uG=OzZXeXc5M15dp5OJ(E~wa{iMz-g$eQI zysR3(a%u^nepuf=V9kzmSL=brOZ;}OtgEUqs=w~|;W}<-#vC8iahWgTabkGzZ8wz4 zhKyibZ|@uf$!Tm*Eq3Fc&)0>9Qw@r;Rg<@6s#Q5LQS-phIdDM&^?UW>Uv{b3s*{uT zJubZD&OJ`38%}-Hdc>39eE!FQRnbbUH$ZrF&B!m^(L>~GRUb80R>CLER$xVBRhQ!$_eUN_j%Raq}T z8T`@oWyR%3mRA)I&+Q+yh>Fr9$-ST2MP_M=HO6YNT-if!b9?nftcPbb(*o0lEvAc( z0^0B!zl0@26>R5Hcl`8-SxT78~OyP24Hdcj}xw z$0KyF%dL-cA&AR6G}tIv+3zk!)9iEyfdxYMGt~4_Bxo+(w*AICd z=07gn24_r`c4cw*+d27Z)pax%az9;tAxQE*w)tMHmLw?aIg_+?tT-OCwtm>NH{vbc zkh1zkq{*Lqe)Gk=f|rclbCE@1;c!Dj65-LoR*wc!$F!?ZV4#TiFSKHS~Z)HhGCX4d?&3ID!F4_$j=UprAU37AHt^m5W|J+o?D(G!>R zw=g-G3q2Or%TK~{nz{Ao%~$@Ysh0|!0M<{A^hzyH(*SiB-J^vAT+t(Q6L|I64bBT~ zXKx^H1zP4+`YF%8Y5mEENmRa`!N@scEB-L?)o!nAm~Jr^n1;pt^p}a2+%NrTh~VB) zTJe!G-;G5)?diWy>{O;@3Me1on+U~89^b^vw#=j3v6Y|?E_>l|fm*pm{cX=7f+^e`ztMdvHd{?4aSoLHnymK$3l??(p7 zn=Z(p!Lg4VSDpbV*?GQc89i}Z>4c#g;>7_~DXovKdVSZ~j8c&ECjHIeaN0#-Tem4W(EQmeXO;|Uc^enRd?~&(iHEGZD+oETY&cFFl%XzF=(>F8<1GL!XB~1}j zjRtKE`zxMExH3MBo>e#IfXy>Z@{L-cYY}t1PID_~vk8Onj{XMKhL>|d$JzRcaaDhP z!>1K|?ZrExgfLFk#)P0x7UGS{_e>3~mY!n)6H0~z6tNL2##(Jm4DL3WvH1bdNs7v~ z=CW7o@;%enS4WsHVF2-aY<1jp?g*oGl^#W!WW_Bdte|`)Rd8uZ`w;xkoenIZJz*!( zC2J(|H#Qn&YniXq)}bjNJ=@(Pqk%5DHE##Nqz2GsZN^p}yKpAlaySe|4ka3Uw0_ z*0>snE*4Ysdb408sOay?aM!y}%0;BgfALv^;=C~YicIe>WQ=7^sxMmq;-~&!&ikyi zrmJ9-#_woa#6nvGp`l)Eyd}nY56QhWr zfv)+oR}Y<`+UGX}-Fy5yO8g_VPYiJRMLa`A<^9)?Fc z<@`#H`FmuGes6=+Il9zYcR9(PSjyHN$V_)7b9&d<`ju$Um0uZB01b3kmOj9Q;QzcB z+u%1^vdMqYvq(@P2I5_Dn{#f0}_big3%0O770y zsPXyP%GL5^lkuo+g%KI@0{9>5bw z)W84E?Dh5OYoETqIW8Hqq5AQ^4SF~3kI*kEh93EzxsIc#u+&V?i8ATq>G>Ny?YC1e z8k^h?Nj0%I7TueqpSOpjmboX6M%?7k7=TxUs%5-+%(FlbE=;(tdePx`=w~3fiC<4W zL+W6tC(@;NvNrhIx>eaMc=kuizsOzPG^pZP-G8^RQ*W+BLe?1ZuAaWDjy;Mr4r1O% z_IK7kNa1H3tscv8n``x16{W(O%eVN4iv)y)XN^D+^h+*`xAfwiJ@?9Zl9-b@dW%(_ zW@Ry|+8vURig)W*8fUbvdWEN$%RF|yI{uoExaCXotSaU{-cn~i(aavNHBI4vHkp_F z{eXlN6D=LvRF3+^RJpPm;qrEi>O(MxUSCF3d_<-e2GAzdrhUgP?4+i=@B3iw9eI;M zHJXIH%8HZmPu=cszwaoQy6<~~r&$7*Jk++_k7MSZfRQH9K8vR{jsV;3M0krQs()as zDYEO^e_%_*`6WAbjerkInd&p{Y~W^oVgWS+vtzUGm}@Byzyu|>BuL@Ic-<$z9&_@W z+A~+~A6?&pp-V{e0>vp5nPl7_`Km_7%OY)#6TG`XT)P;ax|Mdt$FV%W@|9ljA2cCDYp47Hh%`Fs&J&hX$ zdeHz1iIwfW&RIv9>i&*qTixzFW>TlZYOvaGO+CKs;*R(s`PwwX%?Mq2tK%$R;tdSO zN=7D)6!n_)+xU4YD>nc^RTU$7C@Z4RsQ2YE7OTmP;by!Xw@)v%=J7?F@c&Edxc0H#7=#Y6~c4q&@ zi}TK>A;iw6aPrX=TG|bl0`u429W#CN1ubtbaO8XrAqGm|4cbGioez<|J zv}@?Iqx=G5t{R=euf#rTaQ`trB{)^$tP}X#unN=MCNgE;a>1k$z2zxDH9DX8@PU|w*|9d$;gx0^W9mZ9gH+8 zm)89DtL|$1r$2m$R>Lal@_w0*9Uli;!$?qWUObO{$dk78)pc!JD4n$}kf+#%)bU{S zx3~lwo{{w?9Zz=J&^kX;CNLq%9D+pnTbqO!S*c|E-a{t z24uGW=A>M?ngJ{};A9!vlhh;G7Eyg`vkcv?b&#rAmfjk$* zy_f{@rf$#7-7yZ3DmkROM8hGl#8-9MAFqP|c-@v_NdLl~&NfFgsY3Quad<0cQ5tUA z{H8GQ_qFuPJH)g-QL3BOHTy0fFT}=mgh5 z`8E{63=_$y> z8zA)7*F-GSLooo24xr0L1)%WLnjYYF0+|{`&Wi?TT(Xs2M@=P)Px{PDw;TRCr$PU0ZG(w-RNyw1A82{9oD0J}j?9)-LW90yqK!CA+Y-5|8(h$dmub z$O5e91$!PE&Ge(HSbX-;j{y%^O`fX5dXUX-4E}%s5Ew)?$4{QUf)>$%af_btM}KdT|f{K{#kJ+B!nCZF|)lv@yRhx>B1u@~j+bKo}}y{B|G+ zAG6UOJ5mH9#N0@G!ZdAr5AQMu75#S*gpSo<%L7upp9qyapTh3Gw#Izwy6ztN3>&)_ z9Y7Eveu=#Wb<`jV6{(SSAP5t{LWnVx?601>?iL<}r*II2f!Dv^+!+@JhumZsS`cIamsdaDyf@akkV^Zn&jEVZ z-I%}J2H*GZ-`7LNxjS~^cHgb-HiWU}t+DpPG|i>*z>u4uibXT2S8r|{G2EVp&Y!g_ z+cYc9#JKlvXYFNA7|pR7gOKY;>+m24fV_JBzt0M*bH5rp5ApctUGFVI{skb*`tjlJ zb;vQ7BpU=V#`H$kG#`D*VU77k(^GH_NpX(`dC3-h5X2bc>p4;rMH0kgcf4pr@gYfWc~-0iYH@2Ij%yz%jZJ&ll|~QLY!MwYU+*FsNaURy)qd zSB%w9ff&coM7f28gJZ1)jyeg#xS1rh_Yj=_;;a)v&x$e2zEu`EY9$CYIS-~(rg3pd zapFxvUi`-JepMbnsg59=upm_BiW$HAkYm?3*nR|OE;WW()e(fT;+at4Rp78{j8MVC zE$Vz?IkQbc_kDk;=kT*B9{3F0S4V>_fYVm@0 z>UkC8U78>S6=0y&r7D7O3^YV|^@>W)Q}w;L)Y|isYV~|%$$7|938KErlEaV#a?Hi- z;#)`pggWHVF@R@Qa|Z%JbrFQR{}DimOz**3@f5CjddBRn9oMjt?1+ZHPgTVEao9yH;zO4MAoSQc}!LC5UDP ziyV3wqhdH5Lp92|RtkL8EL|ulIYAhenpxLPRN$-}4wj7kL#=W~tte^dA=Fn0v^_LO zAKGn`5rjdE{hX&1PF`7+lSnc_6jyUbn59Narvxf7K@bm`N{I2yknv9skO`uEpA*$s zHI0TG)@d&W#BVri&eg-zRJum{>b0~FWKzr7AP9jV+>I@QNHetxlL?}|s{VNM-dN+ltv>munJ`lgH5EZL ztAum7hW=eW#M;Kk&R{N72Tw?HNmVRmf~3d?sMRD*QgV{?*aX>Ko#e)-eNB=YL4py( zn6+ulEoHMX1wqK3%WZrrd`^K($jwfx>Q}Ky#8h5@#unLqvB%oWqwm|RUTC305SG&D zZiPKjk^+^FU~pDejpHArMPQ4u_DW8CwrXj4Xh*+o+bhDIVk+ZMAqWvTDmB=|*a=QW z5JuAMhALJZbsu7jhxj>TiX!S+{kaEQ1MfMZyN1X1CJ4FYI8P69C^f1;TAf~XC*6&O z6K1*glH7nvLiO;95hbV*#Jd8j5bpUCgjgG&;Dr5S24g$Ma#X?yfuOe3>-2 zQxC5qRqMPql247ydofH$5NlUY)?RB~7)>?O5OsR47uoC5+LdVdg@m0|Ig3Q zFZ#QCPZQ92KO7)A@AE7oL8OI&-a|^~JB~_u1aaX-*LC-r#5l-7TzT2Wsgr*ivFXqQ zs05uGpXcx1Mlm=yVx+*qR@qw&4ci-wXdWaaF?PsM<8(<5Krvd$tFaWhoHiT-<;bOO zPEx${R!^*in={sfw&f6n0-O+peK&FLnWCaEZ%yK7GlNlAbm3V=7#iMx^|W4 zSgF)-Pste6N~?qU2Q@*T*yBmDXlQKA)<+OxsW()terRCikk5xD%Ew8DhC(L$#8{{~ z3=sAl%Q1M+n=%^?&^ae$C{@dvO=qu; zPM}h3H##xgpr{MZ+!-^5UN%^`4b--|A3Mbjf>2CmqzyGukCBIrO=C|MYu;`R;=(k| z#=BU%cDw7=9rZWHe0#XN^?<{xD>b>Mcw~Ys@*)6&c&L>c?^2ZNF^np@Qu7b$5tD(O zO!Vbm5X8g081b%mjOsDWBDzw&F}IBGh~jhH2n6vkA5OfRGR*RrVwA3gkZ3=S(ECa! zMGxAySiBd&>h?i)KqAcY=MXu(@^}eMI!bsDDRSF>L0Xdw7Kqi(vTF zCY;p}USxwRadkE+iyOo-BE*^_3Mb5(J8(DmtQvkVr92LTC|Vmi%ra*E)OGKCjzB05 zJBcWw;i+Ft$DJ&3obVtNU>QfYow%T{uTsXFstqR`O&MM>!axv&YD^q2^7wG~nku)Z zcGR77_pZj{*WccyoI5;-GWskp66tkZ}5~W`1L? z7s(|t<M$DB?X)G? z`hy3dprqVJus4$ZJM7FVU9yYdxT*v}xQHpWXNMyhuejX2BiB6-gjh<(ttE!L>gH-# z%&JvUdpz(UTGlR*BM7xjZY1H7ytL9a2qG|S%`WUv%b0AAqHsg2k}7gL9fKg6)-IIA zu4-klKO!M^F0avY)C7WX&*x{uO&D(Q%u$BSj8YnK%?h~mgFO;LKbFHUMxAB z{y-3p6$frBS(#%e?Obw{vLQI8S`Z|#(R0NM65nV^J39=_c<+X)7Z8MsRK#{{LyVBL z3y7QayB=EV0ztHpRFoskM}lp@2`W}a=N*Tt1VI!HTT_%I9|=*}l8hsEUZjaTs#qb> zRF*ASxwR`>OH0Z@5M?6{El#kB=!T^74hfqa6}(Fif`qo{0P+P%yZ4zb0XeG4JCK6} zFyhc6W0C~qc-AJ8^w5^AB;VyDZQEWo#{9w&$xWC+j+f|yARKE;+*VlrC5KxQa@2aC z@J`hrNMfVsK3-CGb>&}c%%^V;cei8DlaPb!ow#$&p*;wagBF-$kdmZn+v~so_;qzs zso`9<@Z4FYQpTKm^yVN)bjWocDBL4CIk&~Ur)x9#3eH$jwE%)pk;<^0FG(a})so2J zR1Sh z++k0Wq<~MMap$Ym9t6=svH&@QBmp@lH3xzeVAz^NJUrl7+P6A1aiGcqL8wSo)XtIQ z{QUf4=-rTtrl~R&5JUw=2&okT5TsVkVqPi;fFLR`LP)I$fFQMM7V}a;00dEi5khK3 z00fDs*@Mg9Hm|xi=F8)scb_5-0gqxL0D>?9lQiFM(7iRrydUWA-Va}aED~hH_F-I# z;r-rB<2x1V^)ydi_xhjp@4HJ0d>KlL+{n`KyPj_qh4wOf>2T4 zt~wt^yaiQ^YuDd~*tYE#kc9&qzpaoIhYtclreIe9cuuRcSBK6C!0#^+P}Ug;GGt)F zFv`bPk*|25r%Z~&k$Ara;<(nS-P&f&!L*9HK{o{u}QHTj|MrMtfB~#3hX%}VE(=~)~-$4+}FAp z`NK~?Uv^#hmiyH$CXU0+tz9)|XSZ4v#v%x!SfZWMLBGQHtA@3grfDu!6gDlSntUZS zDQwfMranX@)n&E>iRdlXrZKn2t9iud?{rrbS&ok944p)f+9ai4kCioM9fA~x1IUgb zF}(#PALz$()?ONG#*U;=6v}OrWxkS{6wbppjrl8PXqp8^qHum;p>Fiac5X=#4 z(8F;VCvCsiO}w!4aHze$Vv`~p4-zYkaUZp$cngjZB`}<5n~@3Tc0!6=j`Ae&AdyP6 zUfx1Pmd&YP>OnfrBaYju=PMw^usWg<#MPxEmHs}ZI(56dmBe=4mBOJ&DuKkCks!r9 z#L);cKNPPP(Yyt9l&SKSx$mxn6jTjv+Lca_qzNn)>I6plB43GE1Q~)v?BS^RhHO_N zL9#4?Qk9h0SgFJGZCA98l2oyL5#PP26nbMwVVoopiSiZF*o2L$Aw@|9sS@;K15A{! z2zl_LTlMDI6&ii`yL3T0S_ZK@|lwjLzJh8|b@IknFyUs)6>R0-nsQOeCo z7V9lIWOS!xQ|zzQlJjw}Rwc+*ai0YPD569wm{-s)f%6qCR!7?N&Ov&GHO)uj;l0JW z>JY3^A`3_{p&W05IN94H>R%_G10{rD$bn2|z5;y^^`SzL9ZA}@y=tBh?7>?Qm7v}1 zC|}v!W@+s@)LVDjnREYox zQl(lkDJ=v*5G^Djr%D7skSf)RNogSff@mQLIaMM6f>fziOiBv@5JU?}$f*(m5Tr`A zVp3WNfFN2(LQa(kfFM<>6_e6J00hxO5^}0U00gO0t(cS+0w9PMl8{p+0w740YQ?0q i5CB26kc6Bn5%@pn+MBAO+dCfs0000 -1) { + if (mapKey.length == 0 || key.length < mapKey.length) { + mapKey = key; + } + } + } + + _mapChsName = mapChsName[mapKey]; + + if (_mapChsName == null) { + _mapChsName = mapName + (mapName.length > 0 ? '地图' : ''); + } + return _mapChsName; +} + +// key 全部小写 +Map mapChsName = { + 'apple': '苹果地图', + 'google': '谷歌地图', + 'googlego': '谷歌地图轻量版', + 'amap': '高德地图', + 'baidu': '百度地图', + 'waze': '位智地图', + 'yandexmaps': 'Yandex地图', + 'yandexnavi': 'Yandex导航地图', + 'citymapper': '城市地图', + 'mapswithme': '离线地图', + 'osmand': 'OsmAnd地图', + 'doubleGis': 'doubleGis地图', + 'tencent': '腾讯地图', +}; + // Timer g_remindTimer; //定时提醒变量 // // // 设置定时提醒 diff --git a/lib/main.dart b/lib/main.dart index 61fbf21..29c2fec 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -119,7 +119,7 @@ class _MyAppState extends State { // g_bVoiceRemind = (null == g_bVoiceRemind) ? false : g_bVoiceRemind; // 默认关闭 g_bVoiceRemind = (null == g_bVoiceRemind) ? true : g_bVoiceRemind; // 默认开启 // print('g_bVoiceRemind = $g_bVoiceRemind'); - g_remindGap = await Storage.getInt('nRemindGap'); + g_remindGap = await Storage.getInt('nRemindGap'); g_remindGap = (null == g_remindGap) ? 60 : g_remindGap; // 提醒间隔默认为60S eventBus.fire(VoiceRemindUpdate('g_bVoiceRemind 数据已更新')); diff --git a/lib/pages/Works/DWDT/basic_map.dart b/lib/pages/Works/DWDT/basic_map.dart index a23d116..84bf989 100644 --- a/lib/pages/Works/DWDT/basic_map.dart +++ b/lib/pages/Works/DWDT/basic_map.dart @@ -4,8 +4,10 @@ import 'package:flutter_bmfmap/BaiduMap/bmfmap_map.dart'; import 'package:flutter_screenutil/screen_util.dart'; import 'package:hyzp_ybqx/components/commonFun.dart'; import 'package:hyzp_ybqx/components/hyxx_data_handle.dart'; +import 'package:map_launcher/map_launcher.dart'; import '../../../components/dioFun.dart'; +import '../../../services/Storage.dart'; import 'dwInfoDialog.dart'; import 'dwInfo_data.dart'; @@ -20,6 +22,11 @@ class BasicMap extends StatefulWidget { } class _BasicMapState extends State { + // 导航相关代码 + double destinationLatitude = 28.45382237207785; + double destinationLongitude = 104.7506958256658; + String destinationTitle = '珙县大坪上'; + Size screenSize; BMFMapOptions mapOptions; BMFMapController myMapController; @@ -32,9 +39,18 @@ class _BasicMapState extends State { } } + List availableMaps; + + void init() async { + // 获取用户选择的默认地图 + availableMaps = await MapLauncher.installedMaps; + } + @override void initState() { super.initState(); + init(); + mapOptions = BMFMapOptions( //center: BMFCoordinate(39.965, 116.404),//北京市 //30 116.395645038,39.9299857781 北京-北京市 @@ -291,8 +307,17 @@ class _BasicMapState extends State { .push( PageRouteBuilder( opaque: false, - pageBuilder: (context, animation, secondaryAnimation) => - dwInfoDialog(id: id, dwIndex: dwIndex, title: title, content: content), + pageBuilder: (context, animation, secondaryAnimation) => dwInfoDialog( + id: id, + dwIndex: dwIndex, + title: title, + content: content, + parentContext: context, + destinationLatitude: double.parse(listCoordinate[1]), + destinationLongitude: double.parse(listCoordinate[0]), + destinationTitle: listDwinfoGetList2[dwIndex]["dwmc"], + availableMaps: availableMaps, + ), ), ) .then((value) async { diff --git a/lib/pages/Works/DWDT/dwInfoDialog.dart b/lib/pages/Works/DWDT/dwInfoDialog.dart index 7437318..6594dd5 100644 --- a/lib/pages/Works/DWDT/dwInfoDialog.dart +++ b/lib/pages/Works/DWDT/dwInfoDialog.dart @@ -1,21 +1,38 @@ import 'package:flutter/material.dart'; +import 'package:geolocator/geolocator.dart'; import 'package:hyzp_ybqx/components/dioFun.dart'; +import 'package:map_launcher/map_launcher.dart'; //import 'package:hyzp_ybqx/widget/player_pro.dart'; import '../../../components/commonFun.dart'; +import '../../../services/Storage.dart'; +import 'maps_sheet.dart'; //确认对话框 class dwInfoDialog extends Dialog { - dwInfoDialog({@required this.id, this.title = "", @required this.dwIndex, this.content}); + dwInfoDialog({ + @required this.id, + this.title = "", + @required this.dwIndex, + this.content, + // 导航相关参数 + this.parentContext, + this.destinationLatitude, + this.destinationLongitude, + this.destinationTitle, + this.availableMaps, + }); int dwIndex; String id; String title; String content; bool ret = false; + BuildContext parentContext; @override Widget build(BuildContext context) { + getCurrentPosition(); Size mediaSize = MediaQuery.of(context).size; return WillPopScope( child: Material( @@ -90,9 +107,9 @@ class dwInfoDialog extends Dialog { onPressed: () async { ret = true; getingDwVideo = false; - Navigator.pop(context, ret); //关闭弹框,返回sRet + navigationMap(context); }, - child: Text("确认"), + child: Text("导航"), ), RaisedButton( child: Text("取消"), @@ -115,4 +132,102 @@ class dwInfoDialog extends Dialog { }, ); } + + // 导航相关代码 + double destinationLatitude = 28.45382237207785; + double destinationLongitude = 104.7506958256658; + String destinationTitle = '珙县大坪上'; + + double originLatitude; + double originLongitude; + String originTitle = '我的位置'; + + List waypoints = [ + // Coords(37.7705112, -122.4108267), + // Coords(37.6988984, -122.4830961), + // Coords(37.7935754, -122.483654), + ]; + + DirectionsMode directionsMode = DirectionsMode.driving; + + List availableMaps; + + // String defaultMapName = 'Amap'; + String defaultMapName = g_defaultMapName; + AvailableMap defalutMap; + + void getCurrentPosition() async { + print('getCurrentPosition begin'); + + // 是否保存默认地图 + g_bSaveDefaultMap = await Storage.getBool('bSaveDefaultMap'); + g_bSaveDefaultMap = (null == g_bSaveDefaultMap) ? false : g_bSaveDefaultMap; // 默认不保存 + // 用户选择的默认地图名称 + g_defaultMapName = await Storage.getString('defaultMapName'); + g_defaultMapName = (null == g_defaultMapName) ? '' : g_defaultMapName; // 默认为空字符串 + defaultMapName = g_defaultMapName; + + // 获取用户选择的默认地图 + // availableMaps = await MapLauncher.installedMaps; // 为避免延迟错乱,该变量由父组件传入 + if (defaultMapName != null && defaultMapName.length > 0) { + for (var map in availableMaps) { + if (defaultMapName.toLowerCase() == map.mapName.toLowerCase()) { + defalutMap = map; + break; + } + } + } + + await Geolocator.getCurrentPosition().then((Position value) { + originLatitude = value.latitude; + originLongitude = value.longitude; + print('value = ${value.toString()}'); + // value = Latitude: 28.796201, Longitude: 104.607751 + print('getCurrentPosition end'); + }); + } + + navigationMap(BuildContext context) { + print('this.defalutMap = ${defalutMap}'); + if (defalutMap != null) { + defalutMap.showDirections( + destination: Coords( + destinationLatitude, + destinationLongitude, + ), + destinationTitle: destinationTitle, + origin: originLatitude == null || originLongitude == null + ? null + : Coords(originLatitude, originLongitude), + originTitle: originTitle, + waypoints: waypoints, + directionsMode: directionsMode, + ); + } else { + MapsSheet.show( + context: parentContext, + onMapTap: (map) { + if (g_bSaveDefaultMap) { + g_defaultMapName = map.mapName; + Storage.setString('defaultMapName', g_defaultMapName); + } + + map.showDirections( + destination: Coords( + destinationLatitude, + destinationLongitude, + ), + destinationTitle: destinationTitle, + origin: originLatitude == null || originLongitude == null + ? null + : Coords(originLatitude, originLongitude), + originTitle: originTitle, + waypoints: waypoints, + directionsMode: directionsMode, + ); + }, + ); + } + Navigator.pop(context, ret); //关闭弹框,返回sRet + } } diff --git a/lib/pages/Works/DWDT/maps_sheet.dart b/lib/pages/Works/DWDT/maps_sheet.dart new file mode 100644 index 0000000..a2bda47 --- /dev/null +++ b/lib/pages/Works/DWDT/maps_sheet.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; +import 'package:flutter_svg/flutter_svg.dart'; +import 'package:map_launcher/map_launcher.dart'; + +class MapsSheet { + static show({ + @required BuildContext context, + @required Function(AvailableMap map) onMapTap, + }) async { + final availableMaps = await MapLauncher.installedMaps; + + showModalBottomSheet( + context: context, + builder: (BuildContext context) { + return SafeArea( + child: Column( + children: [ + Expanded( + child: SingleChildScrollView( + child: Container( + child: Wrap( + children: [ + for (var map in availableMaps) + ListTile( + onTap: () { + print('map.mapName = ${map.mapName}'); + // map.mapName = Amap + Navigator.pop(context); + onMapTap(map); + }, + title: Text(map.mapName), + leading: SvgPicture.asset( + map.icon, + height: 30.0, + width: 30.0, + ), + ), + ], + ), + ), + ), + ), + ], + ), + ); + }, + ); + } +} diff --git a/lib/pages/tabs/page4_myMsics_new.dart b/lib/pages/tabs/page4_myMsics_new.dart index fcfc8bb..fe8c3e5 100644 --- a/lib/pages/tabs/page4_myMsics_new.dart +++ b/lib/pages/tabs/page4_myMsics_new.dart @@ -16,6 +16,7 @@ import 'package:hyzp_ybqx/pages/Works/TJXX/tj_data.dart'; import 'package:hyzp_ybqx/pages/tabs/page5_userManager.dart'; import 'package:hyzp_ybqx/pages/tabs/page6_download.dart'; import 'package:hyzp_ybqx/pages/tabs/page7_setRemind.dart'; +import 'package:hyzp_ybqx/pages/tabs/page8_defaultMap.dart'; import 'package:hyzp_ybqx/services/EventBus.dart'; import 'package:hyzp_ybqx/widget/JdButton.dart'; import 'package:package_info/package_info.dart'; @@ -111,35 +112,35 @@ class _Page4_MyMsicsNewState extends State static onNullFun() {} Widget _getListTile( - title, { - String leadPath = '', - Color leadColor, - Color textColor, - onTapFun = onNullFun, - onLongPressFun = onNullFun, - size = 16.0, - bool bBadge = false, - Widget trailWidget = const Icon(Icons.arrow_forward_ios), - }) { + title, { + String leadPath = '', + Color leadColor, + Color textColor, + onTapFun = onNullFun, + onLongPressFun = onNullFun, + size = 16.0, + bool bBadge = false, + Widget trailWidget = const Icon(Icons.arrow_forward_ios), + }) { // print("_getListTile bVoiceRemind = $bVoiceRemind"); // _getListTile bVoiceRemind = false return Column( children: [ ListTile( leading: bBadge ? Badge( - position: BadgePosition.topEnd(top: -7, end: -12), - badgeContent: null, - child: Image.asset( - leadPath, - height: ScreenUtil().setHeight(78), - fit: BoxFit.fitHeight, - ), - ) + position: BadgePosition.topEnd(top: -7, end: -12), + badgeContent: null, + child: Image.asset( + leadPath, + height: ScreenUtil().setHeight(78), + fit: BoxFit.fitHeight, + ), + ) : Image.asset( - leadPath, - height: ScreenUtil().setHeight(78), - fit: BoxFit.fitHeight, - ), + leadPath, + height: ScreenUtil().setHeight(78), + fit: BoxFit.fitHeight, + ), title: Text(title, style: TextStyle(fontSize: size, color: textColor)), trailing: trailWidget, contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0), @@ -202,6 +203,10 @@ class _Page4_MyMsicsNewState extends State leadPath: 'assets/images/账户管理.png', leadColor: _deepBlueColor, onTapFun: OnTap_user_manager), + _getListTile('默认导航', + leadPath: 'assets/images/默认地图3.png', + leadColor: _deepBlueColor, + onTapFun: OnTap_DefaultMap), //bNewVer:是否发现新版本 _getListTile('版本更新', leadPath: 'assets/images/版本更新.png', @@ -213,9 +218,7 @@ class _Page4_MyMsicsNewState extends State leadColor: _deepBlueColor, onTapFun: OnTap_download), _getListTile('提醒设置', - leadPath: 'assets/images/语音提醒.png', - leadColor: _deepGreyColor, - onTapFun: OnTap_Remind), + leadPath: 'assets/images/语音提醒.png', leadColor: _deepGreyColor, onTapFun: OnTap_Remind), _getListTile('关于', leadPath: 'assets/images/关于.png', leadColor: _deepBlueColor, onTapFun: OnTap_MyAbout) @@ -511,6 +514,10 @@ class _Page4_MyMsicsNewState extends State Navigator.of(context).push(MaterialPageRoute(builder: (context) => page5_userManager())); } + OnTap_DefaultMap() async { + Navigator.of(context).push(MaterialPageRoute(builder: (context) => page8_defaultMap())); + } + OnTap_download() { Navigator.of(context).push(MaterialPageRoute(builder: (context) => page6_download())); } diff --git a/lib/pages/tabs/page8_defaultMap.dart b/lib/pages/tabs/page8_defaultMap.dart new file mode 100644 index 0000000..7f8723c --- /dev/null +++ b/lib/pages/tabs/page8_defaultMap.dart @@ -0,0 +1,284 @@ +import 'package:badges/badges.dart'; +import 'package:flutter/material.dart'; +import 'package:flutter_screenutil/flutter_screenutil.dart'; +import 'package:hyzp_ybqx/pages/Login/FaceReg.dart'; +import 'package:hyzp_ybqx/pages/Login/ModifyPassword.dart'; +import 'package:hyzp_ybqx/services/Storage.dart'; + +import '../../components/commonFun.dart'; +import '../../widget/JdButton.dart'; + +class page8_defaultMap extends StatefulWidget { + page8_defaultMap({Key key}) : super(key: key); + + _LoginPageState createState() => _LoginPageState(); +} + +class _LoginPageState extends State { + bool bSaveDefaultMap = false; + String defaultMapName = ''; + + dispose() { + super.dispose(); + } + + @override + void initState() { + super.initState(); + init(); + } + + void init() async { + // 从磁盘读取变量 + // 是否保存默认地图 + g_bSaveDefaultMap = await Storage.getBool('bSaveDefaultMap'); + g_bSaveDefaultMap = (null == g_bSaveDefaultMap) ? false : g_bSaveDefaultMap; // 默认不保存 + // 用户选择的默认地图名称 + g_defaultMapName = await Storage.getString('defaultMapName'); + g_defaultMapName = (null == g_defaultMapName) ? '' : g_defaultMapName; // 默认为空字符串 + + bSaveDefaultMap = g_bSaveDefaultMap; + // bSaveDefaultMap = false; + // defaultMapName = g_defaultMapName; + // defaultMapName = '高德地图'; + // defaultMapName = getMapChsName('amap'); + defaultMapName = getMapChsName(g_defaultMapName); + setState(() {}); + } + + //////// + static onNullFun() {} + + Widget _getListTile( + title, { + String leadPath = '', + Color leadColor, + Color textColor, + onTapFun = onNullFun, + onLongPressFun = onNullFun, + size = 16.0, + bool bBadge = false, + Widget trailWidget = const Icon(Icons.arrow_forward_ios), + }) { + // print("_getListTile bSaveDefaultMap = $bSaveDefaultMap "); // _getListTile bSaveDefaultMap = false + return Column( + children: [ + ListTile( + leading: bBadge + ? Badge( + position: BadgePosition.topEnd(top: -7, end: -12), + badgeContent: null, + child: Image.asset( + leadPath, + height: ScreenUtil().setHeight(78), + fit: BoxFit.fitHeight, + // color: leadColor, // 无效 + ), + ) + : Image.asset( + leadPath, + height: ScreenUtil().setHeight(78), + fit: BoxFit.fitHeight, + ), + title: Text(title, style: TextStyle(fontSize: size, color: textColor)), + trailing: trailWidget, + contentPadding: EdgeInsets.symmetric(horizontal: 20.0, vertical: 0), + enabled: true, + onTap: onTapFun, + onLongPress: onLongPressFun, + ), + Divider( + height: 1.0, + ), + ], + ); + } + + List _listViewUser = []; + + Color _greenColor = Color.fromRGBO(36, 206, 192, 1); //绿色 + Color _deepBlueColor = Color.fromRGBO(79, 118, 230, 1); //深蓝 + Color _deepGreyColor = Color.fromRGBO(116, 139, 161, 1); //深灰 + Color _ligthBlueColor = Color.fromRGBO(80, 159, 245, 1); //亮蓝 + + OnTap_FaceReg() async { + Navigator.of(context).push(MaterialPageRoute(builder: (context) => FaceReg())); + } + + OnTap_modify_password() { + Navigator.of(context).push(MaterialPageRoute(builder: (context) => ModifyPassword())); + } + + OnTap_Remind() { + setState(() { + bSaveDefaultMap = !bSaveDefaultMap; + print("bSaveDefaultMap = $bSaveDefaultMap"); + }); + } + + Widget getTextField() { + return Container( + width: ScreenUtil().setWidth(400), + child: TextField( + readOnly: !bSaveDefaultMap, + focusNode: FocusNode(), + textAlignVertical: TextAlignVertical(y: 1.0), + controller: TextEditingController.fromValue(TextEditingValue( + text: defaultMapName.toString(), + // 保持光标在最后 + selection: TextSelection.fromPosition(TextPosition( + affinity: TextAffinity.downstream, offset: defaultMapName.toString().length)))), + maxLines: 1, + keyboardType: TextInputType.text, + decoration: InputDecoration( + //contentPadding: EdgeInsets.only(bottom: 16), + // hintText: widget.text, + // border: OutlineInputBorder( + // borderRadius: BorderRadius.circular(30), borderSide: BorderSide.none), + border: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)), + focusedBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)), + enabledBorder: UnderlineInputBorder(borderSide: BorderSide(color: Colors.lightBlue)), + ), + onChanged: (v) { + defaultMapName = v; + }, + ), + ); + } + + Widget getText(String text) { + return Container( + child: Text(text, + style: TextStyle( + fontSize: 16, + color: Colors.blueAccent, + fontWeight: FontWeight.bold, + decoration: TextDecoration.underline, + )), + ); + } + + //////// + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: PreferredSize( + preferredSize: Size.fromHeight(ScreenUtil().setHeight(173)), // 设置appBar高度 + // 设置appBar高度 + child: AppBar( + automaticallyImplyLeading: false, + centerTitle: true, + titleSpacing: 0.0, + //设置title的左边距 + flexibleSpace: Container( + //SizedBox(height: ScreenUtil().statusBarHeight), //显示顶部状态栏 + // SizedBox(height: ScreenUtil().setHeight(10)), //显示顶部状态栏 + padding: EdgeInsets.only(top: ScreenUtil().statusBarHeight), //留出顶部状态栏高度 + child: Container( + //height: ScreenUtil().setHeight(173), + decoration: BoxDecoration( + gradient: LinearGradient( + begin: Alignment.centerLeft, + end: Alignment.centerRight, + colors: [ + Color.fromRGBO(12, 186, 156, 1), + Color.fromRGBO(39, 127, 235, 1), + ], + ), + ), + // decoration: BoxDecoration( + // gradient: LinearGradient(colors: [ + // Color(0xFF0018EB), + // Color(0xFF01C1D9), + // ], begin: Alignment.bottomCenter, end: Alignment.topCenter), + // ), + ), + ), + title: Padding( + padding: EdgeInsets.only(left: 0, right: 0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + getIconAndTextButton( + iconColor: Colors.white, + iconData: Icons.chevron_left_outlined, + onPress: () { + Navigator.pop(context); + }, + ), + Expanded( + child: Text("默认导航设置", + style: TextStyle(color: Colors.white, fontSize: 20), + textAlign: TextAlign.center, + overflow: TextOverflow.ellipsis), + ), + SizedBox(width: 50), + ], + ), + ), + ), + ), + body: Container( + padding: EdgeInsets.only(top: 30, bottom: 20, left: 20, right: 20), + child: ListView( + children: [ + Center( + child: Container( + margin: EdgeInsets.only(top: 30), + height: ScreenUtil().setWidth(160), + width: ScreenUtil().setWidth(160), + //child: Image.asset('assets/images/user.png', fit: BoxFit.cover), + child: Image.asset('assets/images/ybsthbj.png', fit: BoxFit.fitHeight), + ), + ), + SizedBox(height: 50), + _getListTile('保存默认导航地图', + leadPath: 'assets/images/地图选中.png', + leadColor: _deepGreyColor, + // textColor: bSaveDefaultMap ? Colors.blue : null, + onTapFun: OnTap_Remind, + trailWidget: bSaveDefaultMap + ? Icon(Icons.check_box, color: Colors.blue) + : Icon(Icons.check_box_outline_blank, color: Colors.blueAccent)), + _getListTile('已选默认导航地图:', + leadPath: 'assets/images/用户选择.png', + leadColor: _deepBlueColor, + trailWidget: getText(defaultMapName)), + SizedBox(height: 60), + Row( + mainAxisAlignment: MainAxisAlignment.spaceAround, + children: [ + JdButton( + height: 128, + width: 282, + //height: 126, + text: "确认", + color: Colors.blueAccent, + onTop: () async { + g_bSaveDefaultMap = bSaveDefaultMap; + await Storage.setBool('bSaveDefaultMap', g_bSaveDefaultMap); + if (!g_bSaveDefaultMap) { + await Storage.setString('defaultMapName', ''); + } + Navigator.pop(context); + }, + ), + JdButton( + height: 128, + width: 282, + //height: 126, + text: "取消", + color: Colors.blueAccent, + onTop: () { + Navigator.pop(context); + }, + ) + ], + ), + ], + ), + ), + ); + } +} diff --git a/pubspec.lock b/pubspec.lock index c7dd44f..7762155 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -377,6 +377,13 @@ packages: relative: true source: path version: "0.0.3" + flutter_svg: + dependency: "direct main" + description: + name: flutter_svg + url: "https://pub.flutter-io.cn" + source: hosted + version: "0.19.1" flutter_swiper: dependency: "direct main" description: @@ -408,6 +415,27 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "4.0.1" + geolocator: + dependency: "direct main" + description: + name: geolocator + url: "https://pub.flutter-io.cn" + source: hosted + version: "6.2.1" + geolocator_platform_interface: + dependency: transitive + description: + name: geolocator_platform_interface + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.9" + geolocator_web: + dependency: transitive + description: + name: geolocator_web + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.0.1" get_it: dependency: "direct main" description: @@ -485,6 +513,13 @@ packages: url: "https://pub.flutter-io.cn" source: hosted version: "1.1.1" + map_launcher: + dependency: "direct main" + description: + name: map_launcher + url: "https://pub.flutter-io.cn" + source: hosted + version: "1.1.3+1" matcher: dependency: transitive description: diff --git a/pubspec.yaml b/pubspec.yaml index a944aa0..d866097 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -210,6 +210,11 @@ dependencies: # 添加水印插件 disable_screenshots: ^0.1.0 + # 导航相关插件 + map_launcher: ^1.1.3+1 + flutter_svg: ^0.19.1 + geolocator: ^6.2.1 + dev_dependencies: flutter_test: sdk: flutter