flutter - 如何在 Flutter 中打开 ios 中的谷歌地图应用
问题描述
我正在为 Flutter https://pub.dev/packages/maps_launcher使用 maps_launcher 包,它在通过直接进入应用程序而不是简单地显示 web 视图页面来打开 ios 的苹果地图时完成它的工作。我的函数 openMap() 也在 Android 中为 Google Maps 使用,但我似乎无法直接进入我的真实 iOS 设备上的 Google Maps 应用程序,该设备已安装并运行 Google Maps。它只打开谷歌地图的网络视图。任何想法如何让它自动进入谷歌地图应用程序?
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:maps_launcher/maps_launcher.dart';
import 'package:url_launcher/url_launcher.dart';
import 'dart:io' show Platform;
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MediaQuery(
data: MediaQueryData(),
child: MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: HomePage(),
),
);
}
}
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
final myActionSheet = CupertinoActionSheet(
actions: [
CupertinoActionSheetAction(
child: Text('Open in Maps'),
onPressed: (){
MapsLauncher.launchCoordinates(
37.3608503, -122.0581159, '1600 Amphitheatre Pkwy, Mountain View, CA 94043, USA');
},
),
CupertinoActionSheetAction(
child: Text('Open in Google Maps'),
onPressed: (){
openMap(37.4220041, -122.0862462);
},
),
],
);
static Future<void> openMap(double latitude, double longitude) async {
String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude';
if (await canLaunch(googleUrl)) {
await launch(googleUrl);
} else {
throw 'Could not open the map.';
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text(
'Maps Launcher Demo',
),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
crossAxisAlignment: CrossAxisAlignment.center,
children: <Widget>[
FloatingActionButton(
onPressed: Platform.isIOS ?
() {
showCupertinoModalPopup(context: context, builder: (context) => myActionSheet);
} :
(){
openMap(37.4220041, -122.0862462);
},
child: Icon(Icons.directions),
),
],
),
),
);
}
}
解决方案
我使用url_launcher包和以下 URL 方案:
comgooglemaps://和comgooglemaps-x-callback:// - 这些方案允许您启动 iOS 版 Google 地图应用并执行以下操作之一:
在指定位置和缩放级别显示地图。
搜索位置或地点,并将它们显示在地图上。
请求从一个位置到另一个位置的路线。可以返回四种交通方式的路线:驾车、步行、骑自行车和公共交通。
为您的应用添加导航。
通过 iOS 8,在应用程序完成时使用 comgooglemaps-x-callback:// 发出回调。回调通常用于将用户返回到最初打开 iOS 版 Google 地图的应用。请注意,在 iOS 9 上,系统会自动在状态栏的左上角提供一个“返回”链接。
例子:comgooglemaps://?center=$latitude,$longitude&zoom=14
更多信息:ios-urlscheme
推荐阅读
- css - 在 CSS 文件中预加载字体
- android - Android Retrofit 无法解析 RequestBody
- c# - 为什么将 while(true) 与 .take 与阻塞集合一起使用?
- kubernetes - 权限被拒绝将工件写入 NFS 安装的 PVC
- python - Flask-SQLAlchemy 不会一致地增加列
- javascript - 无法使用 Angular 日期管道将 UTC 转换为 UTC+03:30
- r - 如何获得R中两列的乘积
- java - DJI onProductChange 和 onProductConnect 的区别
- python - 无法在python中导入texthero
- git - Azure DevOps 中的分支策略