给出纬度和经度。 是否有任何快速/智能方式在Flutter中打开Google / Apple地图并前往路线?
我正在使用url_launcher拨打电话,我可以使用该插件打开可打开地图的链接吗?
_launchURL() async {
const url = 'https://www.google.com/maps/place/Al+Duqqi,+Ad+Doqi,+Giza+Governorate/@30.0523046,31.2009323,17z/data=!3m1!4b1!4m5!3m4!1s0x1458413a996ec217:0x2411f6b62d93ccc!8m2!3d30.05237!4d31.2031598';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
答案 0 :(得分:4)
是的,您可以使用url_launcher
插件来做到这一点。在手机上安装该应用程序后,以下代码将打开Google地图(否则它将打开浏览器):
void _launchMapsUrl(double lat, double lon) async {
final url = 'https://www.google.com/maps/search/?api=1&query=$lat,$lon';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
答案 1 :(得分:1)
我为此创建了一个插件Map Launcher。
要在设备上查找已安装的地图,可以使用:
import 'package:map_launcher/map_launcher.dart';
final availableMaps = await MapLauncher.installedMaps;
然后通过在其上调用showMarker启动
await availableMaps.first.showMarker(
coords: Coords(31.233568, 121.505504),
title: "Shanghai Tower",
description: "Asia's tallest building",
);
或者只是检查地图是否可用并启动地图
if (await MapLauncher.isMapAvailable(MapType.google)) {
await MapLauncher.launchMap(
mapType: MapType.google,
coords: coords,
title: title,
description: description,
);
}
答案 2 :(得分:1)
如果要使用地址而不是经纬度长,可以使用以下内容。
参考https://developers.google.com/maps/documentation/urls/ios-urlscheme,daddr
设置路线搜索的终点
final url = 'comgooglemaps://?daddr=${Uri.encodeFull(address)}&directionsmode=driving';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
别忘了添加到Info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
</array>
答案 3 :(得分:0)
我曾经使用过这种本地方法
try {
await platform.invokeMethod('showLocation', [event.location[0], event.location[1], event.title]);
} on Exception catch (ex) {
print('${ex.toString()}');
ex.toString();
}
并且在android程序包中
class MainActivity : FlutterActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
GeneratedPluginRegistrant.registerWith(this)
MethodChannel(flutterView, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "showLocation") {
val args = (call.arguments) as List<Any>
startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("geo:${args[0]}, ${args[1]}?z=23&q=${args[0]},${args[1]}(${args[2]})")))
result.success(null)
} else {
result.notImplemented()
}
}
}
}