Откройте приложение 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, но эй, мы хотим разрабатывать для всех сред.