您可以在Flutter中使用android_intent库来启动Google Maps并在Android上获取方向。
库: https://pub.dartlang.org/packages/android_intent
在iOS中,您可以同时使用Google API(如comgooglemaps)或Google地图URL(我选择这个)和maps.apple.com。
String origin="somestartLocationStringAddress or lat,long"; // lat,long like 123.34,68.56
String destination="someEndLocationStringAddress or lat,long";
if (new LocalPlatform().isAndroid) {
final AndroidIntent intent = new AndroidIntent(
action: 'action_view',
data: Uri.encodeFull(
"https://www.google.com/maps/dir/?api=1&origin=" +
origin + "&destination=" + destination + "&travelmode=driving&dir_action=navigate"),
package: 'com.google.android.apps.maps');
intent.launch();
}
else {
String url = "https://www.google.com/maps/dir/?api=1&origin=" + origin + "&destination=" + destination + "&travelmode=driving&dir_action=navigate";
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
希望它有所帮助。
https://medium.com/@matthew.smith_66715/maps-in-flutter-a1ac49ab554b
如果您只想获取用户位置: 如果您想关注新的更新,我在这里找到了一些有趣的讨论:有点晚了,但可能对某些人有帮助。
据我所知,谷歌目前没有为Flutter提供公开的API或包,可以轻松创建此导航。最好的方法是从Google的DirectionsAPI获取方向数据。使用这些数据,您可以创建折线,并且还可以获得持续时间、步骤或距离的数据。您需要根据当前用户位置重新绘制自定义标记,并像导航一样操作。
更简单的方法可能是通过MapBox及其Navigation SDK。请查看此软件包https://pub.dev/packages/flutter_mapbox_navigation和官方文档https://docs.mapbox.com/android/navigation/guides/。
使用依赖 - url_launcher: ^6.1.4
static Future<void> openMap(double latitude, double longitude) async {
String iosUrl = 'https://maps.apple.com/?q=$latitude,$longitude';
if (GetPlatform.isAndroid) {
String googleUrl ='https://www.google.com/maps/search/?api=1&query=$latitude,$longitude';
if (await canLaunch(googleUrl)) {
await launch(googleUrl);
} else {
throw 'Could not launch $googleUrl';
}
}else{
if (await canLaunch(iosUrl)) {
await launch(iosUrl);
} else {
throw 'Could not open the map.';
}
}
}
这段代码在安卓和IOS上运行良好
对于IOS,请将此代码放入Info.plist中
<key>LSApplicationQueriesSchemes</key>
<array>
<string>googlechromes</string>
<string>comgooglemaps</string>
<string>iosamap</string>
</array>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<queries>
<package android:name="com.google.android.apps.maps" />
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:mimeType="text/plain" />
</intent>
</queries>
我能够仅使用url_launcher(无需其他软件包或本地端更改)打开谷歌地图
使用mode属性,您可以选择如何处理URL,使用externalApplication
或externalNonBrowserApplication
将会在设备上打开谷歌地图
Position currentPosition = await Geolocator.getCurrentPosition();
String origin = '${currentPosition.latitude},${currentPosition.longitude}';
String destination = '${currentPosition.latitude + 0.002},${currentPosition.longitude - 0.002}';
final Uri _url = Uri.parse('https://www.google.com/maps/dir/?api=1&origin=$origin&destination=$destination&travelmode=driving&dir_action=navigate');
await launchUrl(
_url,
mode: LaunchMode.externalApplication,
);