Flutter-geolocator: Crash sur autorisation refusée

Créé le 13 déc. 2018  ·  7Commentaires  ·  Source: Baseflow/flutter-geolocator

Rapport de bogue

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)

0 Geolocator._handleInvalidPermissions (package:geolocator/geolocator.dart:197:7)

1 Geolocator.getCurrentPosition (package:geolocator/geolocator.dart:106:7)

2 SignupScreenPageState._submitAction (package:locum_mate/Screens/signup.dart:126:10)

3 InscriptionScreenPageState.buildWidget..(package:locum_mate/Screens/signup.dart:261:31)

4 _InkResponseState._handleTap (package:flutter/src/material/ink_well.dart:507:14)

5 _InkResponseState.build.(paquet:flutter/src/material/ink_well.dart:562:30)

6 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)

7 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)

8 TapGestureRecognizer.handlePrimaryPointer ( package:flutter <…>

Comportement prévisible

Attendez-vous à ce que le comportement me donne une réponse nulle, afin que nous puissions aller plus loin.

Étapes de reproduction

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.

Configuration

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:

  • [x] :iphone : iOS
  • [ ] :robot : Android

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 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();
}

Tous les 7 commentaires

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

  1. Ajoutez "location_permissions: 3.0.0+1" ces dépendances dans "pubspec.yaml". Veuillez noter que je l'ai fait pour flutter 1.22.0, donc pour flutter 2.0, cela pourrait être un problème.
  2. Importer le package dans le fichier

    import ' package:location_permissions/location_permissions.dart ';

  3. 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();
      }
      ....
    

    }

  4. 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_getLocationPermission() async {
    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.

Cette page vous a été utile?
0 / 5 - 0 notes