Blog スタッフブログ

Flutter システム開発 ひとくちコードスニペット

[Flutter]Googleマップを開くコードスニペット

こんにちは、株式会社MIXシステム開発担当のBloomです。

今回はFlutterで利用できるコードスニペットを紹介します。まずはパッケージのインストールから行いましょう。

flutter pub add url_launcher

次にGoogleマップを開くための権限について記述しましょう。AndroidManifest.xmlおよびinfo.plistへ追記します。

        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="geo" />
        </intent>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <data android:scheme="https" android:host="maps.google.com" />
        </intent>
	<key>LSApplicationQueriesSchemes</key>
	<array>
		<string>comgooglemaps</string>
	</array>

では、いよいよコードを実装しましょう。

import 'dart:io';
import 'package:url_launcher/url_launcher.dart';

/* 中略 */

// マップアプリで開く 引数は住所など
  void openInMapApp(String address) async {
    Uri googleMapsUrl;
    if (Platform.isAndroid) {
      googleMapsUrl = Uri.parse(
        "google.navigation:q=$address",
      );
    } else {
      googleMapsUrl = Uri.parse("comgooglemaps://?q=$address");
    }
    final appleMapsUrl = Uri.parse("http://maps.apple.com/?q=$address");

    try {
      if (await canLaunchUrl(googleMapsUrl)) {
        await launchUrl(googleMapsUrl);
      } else if (Platform.isIOS && (await canLaunchUrl(appleMapsUrl))) {
        await launchUrl(appleMapsUrl);
      } else {} // 開けない時
    } catch (e) {
      debugPrint(e.toString());
    }
  }
// マップアプリで現在地からの経路を表示する 引数は住所など
  void openInMapAppWithRoute(String address) async {
    var origin = "現在地";
    Uri googleMapsUrl;

    if (Platform.isAndroid) {
      googleMapsUrl = Uri.parse(
        "google.navigation:q=$address&mode=d",
      );
    } else {
      googleMapsUrl = Uri.parse(
        "comgooglemaps://?saddr=$origin&daddr=$address&directionsmode=driving",
      );
    }
    final appleMapsUrl = Uri.parse(
      "http://maps.apple.com/?saddr=$origin&daddr=$address",
    );
    try {
      if (await canLaunchUrl(googleMapsUrl)) {
        await launchUrl(googleMapsUrl);
      } else if (Platform.isIOS && (await canLaunchUrl(appleMapsUrl))) {
        await launchUrl(appleMapsUrl);
      } else {} // 開けない時
    } catch (e) {
      debugPrint(e.toString());
    }
  }

これでGoogleマップを開けるようになりました。良かったですね。