Tout en autorisant l'autorisation de localisation, cela fonctionne bien, mais en refusant l'autorisation de localisation, j'obtiens l'erreur suivante.
Erreur Dart : Exception non gérée :
PlatformException(PERMISSION_DENIED, Accès aux données de localisation refusé, null)
Attendez-vous à ce que le comportement me donne une réponse nulle, afin que nous puissions aller plus loin.
Importer la pub dans pubspec.yaml
Écrivez le code suivant pour n'importe quel événement d'appui sur un bouton
essayer {
Position position = attendre Geolocator()
.getCurrentPosition(précision souhaitée : Précision de l'emplacement.haut );
} capture (e) {
imprimer(e) ;
}
vous aurez une erreur.
Version : 1.0.1
[✓] Flutter (Channel master, v1.0.1-pre.2, sur Mac OS X 10.14 18A384a, locale en-GB)
[✓] Chaîne d'outils Android - développer pour les appareils Android (Android SDK 28.0.3)
[✓] Chaîne d'outils iOS - développer pour les appareils iOS (Xcode 10.1)
[✓] Android Studio (version 3.2)
[✓] Code VS (version 1.29.1)
[✓] Appareil connecté (1 disponible)
• Aucun problème n'a été trouvé!
Plate-forme:
Avez-vous résolu ceci comment gérer cela
Une solution de contournement à cela?
@YogeshLegendkiller @kaumudpa si vous voulez une
@YogeshLegendkiller , @kaumudpa , la solution fournie par @jaumard est la manière suggérée de résoudre ce problème.
Une autre approche serait d'utiliser la méthode checkGeolocationPermissionStatus
et de s'assurer que le statut est défini sur PermissionStatus.granted
avant d'appeler le getCurrentPosition
, getLastKnownPosition
ou getPositionStream
méthodes. Cela signifierait cependant que vous devez prendre soin de demander vous-même les autorisations. Par exemple:
Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
Position position = await geolocator.getCurrentPosition();
}
Comment demander l'autorisation ?
@abdullah4one Vous pouvez utiliser permission_handler et demander la permission comme ceci :
import 'package:permission_handler/permission_handler.dart';
Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);
Il est peut-être tard pour répondre, mais j'étais également confronté au même problème où l'application ne demandait pas d'autorisation dans iOS et fonctionnait parfaitement dans Android.
Parce qu'il n'a pas été demandé d'autorisation, c'est pourquoi le code d'autorisation ne fonctionnait pas pour iOS. J'ai trouvé un package nommé "location_permissions" qui peut être utilisé pour demander une autorisation manuellement.
Les étapes à suivre sont les suivantes
Importer le package dans le fichier
import ' package:location_permissions/location_permissions.dart ';
Ajoutez le code suivant sur la page où vous souhaitez demander l'autorisation. (Mieux vaut l'ajouter sur la toute première page de votre application.)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
Ajoutez les deux méthodes suivantes dans le même fichier
void location_permission() async {
autorisation PermissionStatus finale = wait _getLocationPermission();
if (permission == PermissionStatus.granted) {
position finale = wait geolocator.getCurrentPosition(
Précision souhaitée : LocationAccuracy.best);
// Use the position to do whatever...
}
}
Futur
autorisation PermissionStatus finale = wait LocationPermissions()
.checkPermissionStatus(niveau : LocationPermissionLevel.location);
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
C'est tout maintenant, vous devriez obtenir une fenêtre contextuelle dans l'application iOS qui vous demandera l'autorisation de localisation.
Commentaire le plus utile
@YogeshLegendkiller , @kaumudpa , la solution fournie par @jaumard est la manière suggérée de résoudre ce problème.
Une autre approche serait d'utiliser la méthode
checkGeolocationPermissionStatus
et de s'assurer que le statut est défini surPermissionStatus.granted
avant d'appeler legetCurrentPosition
,getLastKnownPosition
ougetPositionStream
méthodes. Cela signifierait cependant que vous devez prendre soin de demander vous-même les autorisations. Par exemple: