Flutter地图导航插件map_launcher的使用
Flutter地图导航插件map_launcher的使用
Map Launcher 是一个Flutter插件,用于查找设备上已安装的地图应用程序,并启动它们以显示标记或导航路线。它支持多种地图应用,如Google Maps、Apple Maps(仅iOS)、Waze等。
开始使用
添加依赖项
在pubspec.yaml
文件中添加以下内容:
dependencies:
map_launcher: ^3.5.0
flutter_svg: # 如果您想使用图标作为SVG,则需要此依赖项
iOS配置
对于iOS,在Info.plist
文件中添加URL方案:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>comgooglemaps</string>
<string>baidumap</string>
<string>iosamap</string>
<string>waze</string>
<string>yandexmaps</string>
<string>yandexnavi</string>
<string>citymapper</string>
<string>mapswithme</string>
<string>osmandmaps</string>
<string>dgis</string>
<string>qqmap</string>
<string>here-location</string>
<string>tomtomgo</string>
<string>copilot</string>
<string>com.sygic.aura</string>
<string>nmap</string>
<string>kakaomap</string>
<string>tmap</string>
<string>szn-mapy</string>
<string>mappls</string>
</array>
使用方法
获取已安装的地图列表并启动第一个
import 'package:map_launcher/map_launcher.dart';
final availableMaps = await MapLauncher.installedMaps;
print(availableMaps); // [AvailableMap { mapName: Google Maps, mapType: google }, ...]
await availableMaps.first.showMarker(
coords: Coords(37.759392, -122.5107336),
title: "Ocean Beach",
);
检查特定地图是否已安装并启动它
import 'package:map_launcher/map_launcher.dart';
if (await MapLauncher.isMapAvailable(MapType.google)) {
await MapLauncher.showMarker(
mapType: MapType.google,
coords: coords,
title: title,
description: description,
);
}
API
显示标记
参数 | 类型 | 是否必填 | 默认值 |
---|---|---|---|
mapType |
MapType |
是 | - |
coords |
Coords(lat, long) |
是 | - |
title |
String |
否 | '' |
description |
String |
否 | '' |
zoom |
Int |
否 | 16 |
extraParams |
Map<String, String> |
否 | {} |
显示导航
参数 | 类型 | 是否必填 | 默认值 |
---|---|---|---|
mapType |
MapType |
是 | - |
destination |
Coords(lat, long) |
是 | - |
destinationTitle |
String |
否 | 'Destination' |
origin |
Coords(lat, long) |
否 | 当前位置 |
originTitle |
String |
否 | 'Origin' |
directionsMode |
DirectionsMode |
否 | .driving |
waypoints |
List<Waypoint(lat, long, String?)> |
否 | null |
extraParams |
Map<String, String> |
否 | {} |
示例代码
下面是一个完整的示例代码,展示了如何使用Map Launcher插件:
import 'package:flutter/material.dart';
import 'package:map_launcher/map_launcher.dart';
import 'package:flutter_svg/flutter_svg.dart';
void main() => runApp(MapLauncherDemo());
class MapLauncherDemo extends StatelessWidget {
openMapsSheet(context) async {
try {
final coords = Coords(37.759392, -122.5107336);
final title = "Ocean Beach";
final availableMaps = await MapLauncher.installedMaps;
showModalBottomSheet(
context: context,
builder: (BuildContext context) {
return SafeArea(
child: SingleChildScrollView(
child: Container(
child: Wrap(
children: <Widget>[
for (var map in availableMaps)
ListTile(
onTap: () => map.showMarker(
coords: coords,
title: title,
),
title: Text(map.mapName),
leading: SvgPicture.asset(
map.icon,
height: 30.0,
width: 30.0,
),
),
],
),
),
),
);
},
);
} catch (e) {
print(e);
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Map Launcher Demo'),
),
body: Center(child: Builder(
builder: (context) {
return MaterialButton(
onPressed: () => openMapsSheet(context),
child: Text('Show Maps'),
);
},
)),
),
);
}
}
这个示例展示了如何通过底部弹出菜单选择已安装的地图应用,并在选定的地图应用中显示指定位置的标记。您可以根据需要修改和扩展此代码,以适应您的应用需求。
已知问题
- Google Maps for Android:设置标记标签的功能存在Bug,已在Google Maps 11.12版本中修复。详情请参阅Google Issue Tracker。
- iOS上的Apple Maps:用户可以“删除”Apple Maps,但实际上只是从主屏幕移除,而不会真正卸载。因此,Apple Maps在iOS上始终会被视为可用。更多详情请参阅Stack Overflow。
希望这些信息对您有所帮助!如果您有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter地图导航插件map_launcher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地图导航插件map_launcher的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用map_launcher
插件来实现地图导航功能的示例代码。map_launcher
插件允许你启动设备上已安装的地图应用,并显示特定的位置或导航路线。
首先,确保你已经在pubspec.yaml
文件中添加了map_launcher
依赖:
dependencies:
flutter:
sdk: flutter
map_launcher: ^2.1.1 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,你可以在你的Dart文件中使用map_launcher
插件。以下是一个简单的示例,展示了如何打开地图应用并显示一个特定的位置:
import 'package:flutter/material.dart';
import 'package:map_launcher/map_launcher.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Map Launcher Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MapLauncherScreen(),
);
}
}
class MapLauncherScreen extends StatelessWidget {
final String destinationAddress = "1600 Amphitheatre Parkway, Mountain View, CA";
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Map Launcher Demo'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 使用 mapLauncher 打开地图应用并显示目的地
try {
bool launched = await MapLauncher.launchPlace(
destinationAddress,
// 可选参数:指定地图应用
// application: MapLauncherApplication.googleMaps, // 使用Google Maps
);
if (!launched) {
// 如果未能打开地图应用,则提示用户
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('无法打开地图应用')),
);
}
} catch (e) {
// 处理异常
print('打开地图应用时出错: $e');
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('打开地图应用时出错')),
);
}
},
child: Text('打开地图导航到 $destinationAddress'),
),
),
);
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个按钮。点击按钮时,应用会尝试使用设备上已安装的地图应用打开并显示指定的地址。
注意事项
- 权限:在某些平台上(如Android),你可能需要在
AndroidManifest.xml
中添加必要的权限,比如访问网络的权限。 - 地图应用支持:
map_launcher
支持多种地图应用,如Google Maps、Apple Maps等。你可以通过指定MapLauncherApplication
枚举来选择特定的地图应用。如果未指定,插件将尝试使用默认地图应用。 - 地址格式:确保提供的地址格式正确,以便地图应用能够正确解析和显示。
通过上述代码,你应该能够在Flutter应用中实现基本的地图导航功能。如果需要更高级的功能(如显示路线、处理导航结果等),可能需要进一步探索其他Flutter插件或API。