Flutter-geolocator: تم رفض تعطل الإذن

تم إنشاؤها على ١٣ ديسمبر ٢٠١٨  ·  7تعليقات  ·  مصدر: Baseflow/flutter-geolocator

🐛 تقرير الشوائب

أثناء السماح بإذن الموقع ، فإنه يعمل بشكل جيد ، ولكن أثناء رفض إذن الموقع ، أتلقى الخطأ التالي.

خطأ Dart: استثناء لم تتم معالجته:
PlatformException (PERMISSION_DENIED ، رفض الوصول إلى بيانات الموقع ، فارغ)

0 Geolocator._handleInvalidPermissions (الحزمة: geolocator / geolocator.dart: 197: 7)

1 Geolocator.getCurrentPosition (الحزمة: geolocator / geolocator.dart: 106: 7)

2 SignupScreenPageState._submitAction (الحزمة: locum_mate / Screens / signup.dart: 126: 10)

3 SignupScreenPageState.buildWidget..(الحزمة: locum_mate / Screens / signup.dart: 261: 31)

4 _InkResponseState._handleTap (الحزمة: flutter / src / material / ink_well.dart: 507: 14)

5 _InkResponseState.build.(الحزمة: flutter / src / material / ink_well.dart: 562: 30)

6 GestureRecognizer.invokeCallback (الحزمة: رفرفة / src / الإيماءات / أداة التعرف. الجزء: 102: 24)

7 TapGestureRecognizer._checkUp (الحزمة: flutter / src / gestures / tap.dart: 242: 9)

8 TapGestureRecognizer.handlePrimaryPointer ( الحزمة: رفرفة <…>

سلوك متوقع

توقع السلوك يجب أن يعطيني إجابة فارغة ، حتى نتمكن من المضي قدمًا.

خطوات الاستنساخ

استيراد حانة في pubspec.yaml

اكتب الرمز التالي إلى أي حدث اضغط على الزر
محاولة {
موقف الموقف = انتظار Geolocator ()
.getCurrentPosition (requiredAccuracy: LocationAccuracy.high) ؛
} catch (e) {
طباعة (هـ) ؛
}

سيكون لديك خطأ.

إعدادات

الإصدار: 1.0.1

[✓] Flutter (قناة رئيسية ، الإصدار 1.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 (الإصدار 1.29.1)
[✓] جهاز متصل (1 متوفر)

• لم يتم العثور على اى مشكلات!

برنامج:

  • [x]: iphone: iOS
  • []: الروبوت: Android

التعليق الأكثر فائدة

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

ال 7 كومينتر

هل حللت كيفية التعامل مع هذا

أي حل لهذا؟

YogeshLegendkillerkaumudpa إذا كنت تريد حلًا ما عليك سوى محاولة التقاط المكالمة والعودة فارغة على 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 يمكنك استخدام إذن_المعامل وطلب الإذن مثل هذا:

import 'package:permission_handler/permission_handler.dart';

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

قد يكون تأخر الرد ولكني كنت أواجه نفس المشكلة حيث لم يكن التطبيق يطلب الإذن في iOS وكان يعمل بشكل جيد في android.

نظرًا لأنه لم يُطلب الإذن ، فهذا هو سبب عدم عمل رمز الإذن لنظام iOS. لقد وجدت حزمة باسم "location_permissions" والتي يمكن استخدامها لطلب الإذن يدويًا.

الخطوات التي يجب القيام بها هي التالية

  1. أضف "location_permissions: 3.0.0 + 1" هذه التبعيات في "pubspec.yaml". يرجى ملاحظة أنني فعلت ذلك من أجل flutter 1.22.0 ، لذا فقد تكون هذه مشكلة بالنسبة إلى flutter 2.0.
  2. قم باستيراد الحزمة في الملف

    استيراد ' package: location_permissions / location_permissions.dart ' ؛

  3. أضف الكود التالي على الصفحة حيث تريد طلب الإذن. (من الأفضل إضافة ذلك في الصفحة الأولى من تطبيقك.)

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

    }

  4. أضف الطريقتين التاليتين في نفس الملف

    باطل location_permission () غير متزامن {
    إذن PermissionStatus النهائي = انتظار _getLocationPermission () ؛
    إذا (إذن == PermissionStatus.granted) {
    الموضع النهائي = انتظار geolocator.getCurrentPosition (
    wantAccuracy: LocationAccuracy.best) ؛

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

    }

    مستقبل_getLocationPermission () غير متزامن {
    إذن الحالة النهائية = انتظار LocationPermissions ()
    .checkPermissionStatus (المستوى: LocationPermissionLevel.location) ؛

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

    }

هذا كل شيء الآن يجب أن تحصل على نافذة منبثقة في تطبيق iOS والتي ستطلب إذن الموقع.

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات