Откройте приложение Google Maps, если оно доступно с флаттером

Я пытаюсь определить, установлено ли приложение Google Maps на iOS, и если да, запустите его, если нет, запустите Apple Maps. Вот что я до сих пор, но на моем телефоне с Google Maps установлен, он не обнаруживает его и не запускает надлежащим образом.

Есть идеи?

import 'package:url_launcher/url_launcher.dart';

_launchMaps() async {
  String googleUrl =
    'comgooglemaps://?center=${trip.origLocationObj.lat},${trip.origLocationObj.lon}';
  String appleUrl =
    'https://maps.apple.com/?sll=${trip.origLocationObj.lat},${trip.origLocationObj.lon}';
  if (await canLaunch("comgooglemaps://")) {
    print('launching com googleUrl');
    await launch(googleUrl);
  } else if (await canLaunch(appleUrl)) {
    print('launching apple url');
    await launch(appleUrl);
  } else {
    throw 'Could not launch url';
  }
}

Я вытащил схему url отсюда: как я смогу открыть карты Google, когда я нажму кнопку в своем приложении?

Ответы

Ответ 1

Я нашел свою проблему: это должно быть в файле plist. Код в вопросе выше в порядке. (В ответе SO, указанном в вопросе, упоминается только строка "comgooglemaps".)

<key>LSApplicationQueriesSchemes</key>
<array>
    <string>googlechromes</string>
    <string>comgooglemaps</string>
</array>

Документы: https://developers.google.com/maps/documentation/ios-sdk/start#step_7_declare_the_url_schemes_used_by_the_api

Ответ 2

Вы можете установить пакет url_launcher и использовать приведенный ниже код:

import 'package:url_launcher/url_launcher.dart';

class MapUtils {

  static 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.';
    }
  }
}

Теперь вы можете открыть Google Maps в своем приложении, просто позвонив по этому методу:

MapUtils.openMap(-3.823216,-38.481700);

Ответ 3

используя url launcher

в файле yaml: url_launcher: ^ 5.0.2 последний

Затем вы можете использовать этот метод, чтобы открыть карты Google с центром в предоставленном lat и long

more info to maps intent from docs [here][2]

launchMap({String lat = "47.6", String long = "-122.3"}) async{
  var mapSchema = 'geo:$lat,$long';
  if (await canLaunch(mapSchema)) {
    await launch(mapSchema);
  } else {
    throw 'Could not launch $mapSchema';
  }
}

Ответ 4

Если у вас нет действительного значения latlong, вы можете просто передать адрес в Карты Google.

void open(Event event) async {
  String query = Uri.encodeComponent(event.address);
  String googleUrl = "https://www.google.com/maps/search/?api=1&query=$query";

  if (await canLaunch(googleUrl)) {
    await launch(googleUrl);
  }
}

Конечно, чем больше информации у вас в адресе, тем точнее будет поиск. Точно так же, как поиск чего-либо на реальной странице или в приложении Карт Google.

Кстати, вам нужно URL-кодировать адрес перед добавлением его в URL, чтобы поддерживать специальные символы, такие как пробелы. Это нужно только для iOS, но эй, мы хотим разрабатывать для всех сред.