Flutter-在地图中打开位置

时间:2018-09-30 12:16:23

标签: android ios flutter

给出纬度和经度。 是否有任何快速/智能方式在Flutter中打开Goog​​le / 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';
  }
}

4 个答案:

答案 0 :(得分:4)

是的,您可以使用url_launcher插件来做到这一点。在手机上安装该应用程序后,以下代码将打开Goog​​le地图(否则它将打开浏览器):

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-urlschemedaddr设置路线搜索的终点

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()
        }
    }
}

}