Flutter-geolocator: Absturz bei verweigerter Berechtigung

Erstellt am 13. Dez. 2018  ·  7Kommentare  ·  Quelle: Baseflow/flutter-geolocator

🐛 Fehlerbericht

Beim Zulassen der Standortberechtigung funktioniert es gut, aber während ich die Standortberechtigung verweigere, erhalte ich die folgende Fehlermeldung.

Dart Error: Nicht behandelte Ausnahme:
PlatformException(PERMISSION_DENIED, Zugriff auf Standortdaten verweigert, null)

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

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

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

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

4 _InkResponseState._handleTap (Paket:flatter/src/material/ink_well.dart:507:14)

5 _InkResponseState.build.(Paket: Flutter/src/material/ink_well.dart:562:30)

6 GestureRecognizer.invokeCallback (Paket:flatter/src/gestures/recognizer.dart:102:24)

7 TapGestureRecognizer._checkUp (Paket:flatter/src/gestures/tap.dart:242:9)

8 TapGestureRecognizer.handlePrimaryPointer ( package: flatter <…>

Erwartetes Verhalten

Erwartetes Verhalten sollte mir eine Null-Antwort geben, damit wir weitermachen können.

Reproduktionsschritte

Pub in pubspec.yaml importieren

Schreiben Sie den folgenden Code in ein beliebiges Schaltflächentipp-Ereignis
Versuchen {
Position positionieren = auf Geolocator() warten
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
} fangen (e) {
drucken (e);
}

Sie werden einen Fehler haben.

Aufbau

Version: 1.0.1

[✓] Flutter (Kanalmaster, v1.0.1-pre.2, unter Mac OS X 10.14 18A384a, Gebietsschema en-GB)
[✓] Android-Toolchain – Entwicklung für Android-Geräte (Android SDK 28.0.3)
[✓] iOS-Toolchain - für iOS-Geräte entwickeln (Xcode 10.1)
[✓] Android Studio (Version 3.2)
[✓] VS-Code (Version 1.29.1)
[✓] Verbundenes Gerät (1 verfügbar)

• Keine Probleme gefunden!

Plattform:

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

Hilfreichster Kommentar

@YogeshLegendkiller , @kaumudpa , die von @jaumard bereitgestellte

Ein anderer Ansatz wäre, die Methode checkGeolocationPermissionStatus verwenden und sicherzustellen, dass der Status auf PermissionStatus.granted bevor getCurrentPosition , getLastKnownPosition oder getPositionStream -Methoden. Dies würde jedoch bedeuten, dass Sie sich selbst um die Beantragung von Berechtigungen kümmern müssen. Zum Beispiel:

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

Alle 7 Kommentare

Hast du das gelöst, wie man damit umgeht?

Irgendein Workaround dafür?

@YogeshLegendkiller @kaumudpa Wenn Sie eine Problemumgehung wünschen, versuchen Sie einfach, den Anruf

@YogeshLegendkiller , @kaumudpa , die von @jaumard bereitgestellte

Ein anderer Ansatz wäre, die Methode checkGeolocationPermissionStatus verwenden und sicherzustellen, dass der Status auf PermissionStatus.granted bevor getCurrentPosition , getLastKnownPosition oder getPositionStream -Methoden. Dies würde jedoch bedeuten, dass Sie sich selbst um die Beantragung von Berechtigungen kümmern müssen. Zum Beispiel:

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

Wie bitte um Erlaubnis?

@abdullah4one Sie können permission_handler verwenden und wie folgt um Erlaubnis bitten:

import 'package:permission_handler/permission_handler.dart';

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

Es könnte zu spät sein, zu antworten, aber ich stand auch vor dem gleichen Problem, bei dem die App in iOS nicht um Erlaubnis bat und in Android einwandfrei funktionierte.

Da nicht um Erlaubnis gefragt wurde, funktionierte der Erlaubniscode für iOS nicht. Ich habe ein Paket namens "location_permissions" gefunden, mit dem Sie manuell um Erlaubnis bitten können.

Schritte zu tun sind wie folgt

  1. Fügen Sie "location_permissions: 3.0.0+1" diese Abhängigkeiten in "pubspec.yaml" hinzu. Bitte beachten Sie, dass ich dies für flatter 1.22.0 getan habe, daher könnte dies für flatter 2.0 ein Problem sein.
  2. Importieren Sie das Paket in die Datei

    import ' package:location_permissions/location_permissions.dart ';

  3. Fügen Sie den folgenden Code auf der Seite hinzu, auf der Sie um Erlaubnis bitten möchten. (Fügen Sie das besser auf der allerersten Seite Ihrer App hinzu.)

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

    }

  4. Fügen Sie die folgenden beiden Methoden in derselben Datei hinzu

    void location_permission() asynchron {
    endgültige PermissionStatus-Berechtigung = wait _getLocationPermission();
    if (permission == PermissionStatus.granted) {
    endgültige Position = warten geolocator.getCurrentPosition(
    gewünschteGenauigkeit: LocationAccuracy.best);

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

    }

    Zukunft_getLocationPermission() asynchron {
    endgültige PermissionStatus-Berechtigung = erwarten LocationPermissions()
    .checkPermissionStatus(level: LocationPermissionLevel.location);

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

    }

Das ist es, jetzt sollten Sie ein Popup in der iOS-App erhalten, das nach der Erlaubnis zum Standort fragt.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen