Flutter-geolocator: Fallo por permiso denegado

Creado en 13 dic. 2018  ·  7Comentarios  ·  Fuente: Baseflow/flutter-geolocator

🐛 Informe de error

Al permitir el permiso de ubicación, funciona bien, pero al negar el permiso de ubicación, obtengo el siguiente error.

Error de dardo: excepción no controlada:
PlatformException (PERMISSION_DENIED, acceso a los datos de ubicación denegado, nulo)

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

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

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

3 SignupScreenPageState.buildWidget..(paquete: locum_mate / Screens / signup.dart: 261: 31)

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

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

6 GestureRecognizer.invokeCallback (paquete: flutter / src / gestures / Recognizer.dart: 102: 24)

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

8 TapGestureRecognizer.handlePrimaryPointer ( paquete: flutter <…>

Comportamiento esperado

El comportamiento esperado debería darme una respuesta nula, para que podamos continuar.

Pasos de reproducción

Importar pub en pubspec.yaml

Escriba el siguiente código en cualquier evento de toque de botón
tratar {
Posición posición = aguardar Geolocalizador ()
.getCurrentPosition (deseadoAccuracy: LocationAccuracy.high);
} captura (e) {
imprimir (e);
}

tendrá un error.

Configuración

Versión: 1.0.1

[✓] Flutter (maestro de canal, v1.0.1-pre.2, en Mac OS X 10.14 18A384a, configuración regional en-GB)
[✓] Cadena de herramientas de Android: desarrollo para dispositivos Android (SDK de Android 28.0.3)
[✓] Cadena de herramientas de iOS: desarrollo para dispositivos iOS (Xcode 10.1)
[✓] Android Studio (versión 3.2)
[✓] VS Code (versión 1.29.1)
[✓] Dispositivo conectado (1 disponible)

• ¡No se encontraron problemas!

Plataforma:

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

Comentario más útil

@YogeshLegendkiller , @kaumudpa , la solución proporcionada por @jaumard es la forma sugerida de resolver este problema.

Otro enfoque sería usar el método checkGeolocationPermissionStatus y asegurarse de que el estado esté establecido en PermissionStatus.granted antes de llamar al getCurrentPosition , getLastKnownPosition o getPositionStream métodos. Sin embargo, esto significaría que debe tener cuidado al solicitar los permisos usted mismo. Por ejemplo:

Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
    Position position = await geolocator.getCurrentPosition();
}

Todos 7 comentarios

¿Has resuelto esto cómo manejar esto?

¿Alguna solución a esto?

@YogeshLegendkiller @kaumudpa si desea una

@YogeshLegendkiller , @kaumudpa , la solución proporcionada por @jaumard es la forma sugerida de resolver este problema.

Otro enfoque sería usar el método checkGeolocationPermissionStatus y asegurarse de que el estado esté establecido en PermissionStatus.granted antes de llamar al getCurrentPosition , getLastKnownPosition o getPositionStream métodos. Sin embargo, esto significaría que debe tener cuidado al solicitar los permisos usted mismo. Por ejemplo:

Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
    Position position = await geolocator.getCurrentPosition();
}

¿Cómo pedir permiso?

@ abdullah4one Puede usar allow_handler y pedir permiso de esta manera:

import 'package:permission_handler/permission_handler.dart';

Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);

Puede que sea tarde para responder, pero también me enfrentaba al mismo problema en el que la aplicación no pedía permiso en iOS y funcionaba perfectamente bien en Android.

Debido a que no se solicitó permiso, es por eso que el código de permiso no funcionaba para iOS. Encontré un paquete llamado "location_permissions" que se puede usar para solicitar permiso manualmente.

Los pasos a seguir son los siguientes

  1. Agregue "location_permissions: 3.0.0 + 1" estas dependencias en "pubspec.yaml". Tenga en cuenta que hice eso para flutter 1.22.0, por lo que para flutter 2.0 esto podría ser un problema.
  2. Importar el paquete en el archivo

    importar ' paquete: location_permissions / location_permissions.dart ';

  3. Agregue el siguiente código en la página donde desea solicitar permiso. (Es mejor agregar eso en la primera página de su aplicación).

     <strong i="16">@override</strong>
      void initState() {
       ....
      if (Platform.isIOS) {
        location_permission();
      }
      ....
    

    }

  4. Agregue los siguientes dos métodos en el mismo archivo

    void location_permission () async {
    PermissionStatus final permiso = aguardar _getLocationPermission ();
    if (permiso == PermissionStatus.granted) {
    posición final = aguardar geolocator.getCurrentPosition (
    desireAccuracy: LocationAccuracy.best);

      // Use the position to do whatever...
    }
    

    }

    Futuro_getLocationPermission () async {
    PermissionStatus final permiso = aguardar LocationPermissions ()
    .checkPermissionStatus (nivel: LocationPermissionLevel.location);

    if (permission != PermissionStatus.granted) {
      final PermissionStatus permissionStatus = await LocationPermissions()
          .requestPermissions(
              permissionLevel: LocationPermissionLevel.location);
    
      return permissionStatus;
    } else {
      return permission;
    }
    

    }

Eso es todo, ahora debería aparecer una ventana emergente en la aplicación de iOS que solicitará el permiso de ubicación.

¿Fue útil esta página
0 / 5 - 0 calificaciones