При разрешении разрешения на местоположение он работает нормально, но при отказе в разрешении местоположения я получаю следующую ошибку.
Ошибка дротика: необработанное исключение:
PlatformException (PERMISSION_DENIED, доступ к данным о местоположении запрещен, null)
Ожидаемое поведение должно дать мне нулевой ответ, чтобы мы могли продолжить.
Импортировать паб в pubspec.yaml
Напишите следующий код для любого события нажатия кнопки
пытаться {
Позиция position = await Geolocator ()
.getCurrentPosition (желаемая точность: LocationAccuracy.high);
} catch (e) {
печать (е);
}
у вас будет ошибка.
Версия: 1.0.1
[✓] Flutter (мастер канала, v1.0.1-pre.2, в Mac OS X 10.14 18A384a, локаль en-GB)
[✓] Android toolchain - разработка для устройств Android (Android SDK 28.0.3)
[✓] Набор инструментов iOS - разработка для устройств iOS (Xcode 10.1)
[✓] Android Studio (версия 3.2)
[✓] VS Code (версия 1.29.1)
[✓] Подключенное устройство (доступно 1)
• Проблем не обнаружено!
Платформа:
Вы решили, как справиться с этим?
Есть ли способ обойти это?
@YogeshLegendkiller @kaumudpa, если вам нужна работа, просто попробуйте поймать вызов и вернуть null в PlatformException.
@YogeshLegendkiller , @kaumudpa , решение, предоставленное @jaumard, является предлагаемым способом решения этой проблемы.
Другой подход - использовать метод checkGeolocationPermissionStatus
и убедиться, что статус установлен на PermissionStatus.granted
перед вызовом getCurrentPosition
, getLastKnownPosition
или getPositionStream
методы. Однако это будет означать, что вам нужно позаботиться о том, чтобы запрашивать разрешения самостоятельно. Например:
Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
Position position = await geolocator.getCurrentPosition();
}
Как спросить разрешения?
@ abdullah4one Вы можете использовать permission_handler и запросить разрешение следующим образом:
import 'package:permission_handler/permission_handler.dart';
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
Возможно, было поздно отвечать, но я также столкнулся с той же проблемой, когда приложение не запрашивало разрешение в iOS и отлично работало в Android.
Поскольку у него не спрашивали разрешения, поэтому код разрешения не работал для iOS. Я нашел пакет с именем «location_permissions», который можно использовать для запроса разрешения вручную.
Шаги, которые нужно сделать, следующие
Импортируйте пакет в файл
import ' package: location_permissions / location_permissions.dart ';
Добавьте следующий код на страницу, где вы хотите запросить разрешение. (Лучше добавить это на самой первой странице вашего приложения.)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
Добавьте следующие два метода в один файл
void location_permission () async {
последнее разрешение PermissionStatus = ожидание _getLocationPermission ();
if (разрешение == PermissionStatus.granted) {
final position = await geolocator.getCurrentPosition (
желаемая точность: LocationAccuracy.best);
// Use the position to do whatever...
}
}
Будущее
последнее разрешение PermissionStatus = ожидание LocationPermissions ()
.checkPermissionStatus (уровень: LocationPermissionLevel.location);
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
Вот и все, теперь вы должны получить всплывающее окно в приложении iOS, которое будет запрашивать разрешение местоположения.
Самый полезный комментарий
@YogeshLegendkiller , @kaumudpa , решение, предоставленное @jaumard, является предлагаемым способом решения этой проблемы.
Другой подход - использовать метод
checkGeolocationPermissionStatus
и убедиться, что статус установлен наPermissionStatus.granted
перед вызовомgetCurrentPosition
,getLastKnownPosition
илиgetPositionStream
методы. Однако это будет означать, что вам нужно позаботиться о том, чтобы запрашивать разрешения самостоятельно. Например: