أثناء السماح بإذن الموقع ، فإنه يعمل بشكل جيد ، ولكن أثناء رفض إذن الموقع ، أتلقى الخطأ التالي.
خطأ Dart: استثناء لم تتم معالجته:
PlatformException (PERMISSION_DENIED ، رفض الوصول إلى بيانات الموقع ، فارغ)
توقع السلوك يجب أن يعطيني إجابة فارغة ، حتى نتمكن من المضي قدمًا.
استيراد حانة في 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 متوفر)
• لم يتم العثور على اى مشكلات!
برنامج:
هل حللت كيفية التعامل مع هذا
أي حل لهذا؟
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" والتي يمكن استخدامها لطلب الإذن يدويًا.
الخطوات التي يجب القيام بها هي التالية
قم باستيراد الحزمة في الملف
استيراد ' package: location_permissions / location_permissions.dart ' ؛
أضف الكود التالي على الصفحة حيث تريد طلب الإذن. (من الأفضل إضافة ذلك في الصفحة الأولى من تطبيقك.)
<strong i="16">@override</strong>
void initState() {
....
if (Platform.isIOS) {
location_permission();
}
....
}
أضف الطريقتين التاليتين في نفس الملف
باطل location_permission () غير متزامن {
إذن PermissionStatus النهائي = انتظار _getLocationPermission () ؛
إذا (إذن == PermissionStatus.granted) {
الموضع النهائي = انتظار geolocator.getCurrentPosition (
wantAccuracy: LocationAccuracy.best) ؛
// Use the position to do whatever...
}
}
مستقبل
إذن الحالة النهائية = انتظار LocationPermissions ()
.checkPermissionStatus (المستوى: LocationPermissionLevel.location) ؛
if (permission != PermissionStatus.granted) {
final PermissionStatus permissionStatus = await LocationPermissions()
.requestPermissions(
permissionLevel: LocationPermissionLevel.location);
return permissionStatus;
} else {
return permission;
}
}
هذا كل شيء الآن يجب أن تحصل على نافذة منبثقة في تطبيق iOS والتي ستطلب إذن الموقع.
التعليق الأكثر فائدة
YogeshLegendkiller ، kaumudpa ، الحل المقدم من jaumard هو الطريقة المقترحة لحل هذه المشكلة.
هناك طريقة أخرى تتمثل في استخدام طريقة
checkGeolocationPermissionStatus
والتأكد من ضبط الحالة علىPermissionStatus.granted
قبل استدعاءgetCurrentPosition
أوgetLastKnownPosition
أوgetPositionStream
طرق