Flutter地图导航插件map_launcher的使用

发布于 1周前 作者 ionicwang 来自 Flutter

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

1 回复

更多关于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应用,其中包含一个按钮。点击按钮时,应用会尝试使用设备上已安装的地图应用打开并显示指定的地址。

注意事项

  1. 权限:在某些平台上(如Android),你可能需要在AndroidManifest.xml中添加必要的权限,比如访问网络的权限。
  2. 地图应用支持map_launcher支持多种地图应用,如Google Maps、Apple Maps等。你可以通过指定MapLauncherApplication枚举来选择特定的地图应用。如果未指定,插件将尝试使用默认地图应用。
  3. 地址格式:确保提供的地址格式正确,以便地图应用能够正确解析和显示。

通过上述代码,你应该能够在Flutter应用中实现基本的地图导航功能。如果需要更高级的功能(如显示路线、处理导航结果等),可能需要进一步探索其他Flutter插件或API。

回到顶部