Ответ 1
Я предлагаю вам использовать пакет url_launcher dart.
Таким образом, вы можете использовать все схемы URL для открытия (phone
, sms
и даже maps
, как в вашем случае).
Чтобы открыть Google Карты в Android и iOS, вы можете использовать общую схему URI для Android Maps, как это предложил Хемант Радж.
_openMap() async {
const url = 'https://www.google.com/maps/search/?api=1&query=52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Если вы хотите предоставить Android выбор, вы можете использовать общую geo:
схему URI.
Если вы хотите специально открыть iOS Maps API, вы можете использовать схему URI Cupertino Maps.
Если вы решите провести различие между Android и iOS (не используя схему Google Maps Api для всех платформ), вы должны сделать это также в вызове открытой карты следующим образом:
_openMap() async {
// Android
const url = 'geo:52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
// iOS
const url = 'http://maps.apple.com/?ll=52.32,4.917';
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
}
Или вы можете проверить ОС во время выполнения с помощью библиотеки dart.io
, библиотеки Platform
:
import 'dart:io';
_openMap() async {
// Android
var url = 'geo:52.32,4.917';
if (Platform.isIOS) {
// iOS
url = 'http://maps.apple.com/?ll=52.32,4.917';
}
if (await canLaunch(url)) {
await launch(url);
} else {
throw 'Could not launch $url';
}
}
Теперь, когда я закончил работу со шлангом (реальный... не рефакторинг кода... ^^ '), я могу закончить свой ответ.
Как я уже говорил вам вначале с помощью url_launcher, вы можете использовать все схемы URI для вызова, отправки смс, отправки электронной почты и т.д.
Вот некоторый код для этого:
_sendMail() async {
// Android and iOS
const uri = 'mailto:[email protected]?subject=Greetings&body=Hello%20World';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
_callMe() async {
// Android
const uri = 'tel:+1 222 060 888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
// iOS
const uri = 'tel:001-22-060-888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
}
_textMe() async {
// Android
const uri = 'sms:+39 349 060 888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
// iOS
const uri = 'sms:0039-222-060-888';
if (await canLaunch(uri)) {
await launch(uri);
} else {
throw 'Could not launch $uri';
}
}
}
Даже если схема URI должна быть стандартом (RFC), иногда их части authority
и path
могут различаться в разных платформах (Android или iOS).
Так что здесь я управляю различными ОС за исключением, но вы можете сделать это лучше с dart.io
библиотекой Platform
классом:
import 'dart:io'
а затем в коде:
if (Platform.isAndroid) {
} else if (Platform.isIOS) {
}
Я предлагаю вам всегда тестировать их в обеих средах.
Вы можете проверить документацию схемы Android и iOS здесь:
Если вы хотите что-то похожее на startActivity в Android (но это работает только для платформы Android), вы можете использовать пакет dart android_intent.