كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام proximity sensor لمحاكاة قفل الشاشة
يُعد مستشعر القرب من الميزات الأساسية في معظم الهواتف الذكية، حيث يعمل على إيقاف عمل شاشة اللمس عند وضع الهاتف قرب الأذن أثناء المكالمات. هذه الخاصية تمنع الضغطات غير المقصودة أثناء التحدث.
في تطبيقات Flutter لا تتوفر هذه الميزة افتراضيًا، ولكن يمكن تنفيذها بسهولة باستخدام حزمة proximity_sensor. في هذا الدليل العملي سنتعرف خطوة بخطوة على كيفية الاستماع لمستشعر القرب، وكيفية إظهار شاشة سوداء (قفل وهمي) عند اكتشاف جسم قريب من الهاتف.
ما هو مستشعر القرب (Proximity Sensor)؟
في الهواتف الذكية يُستخدم المستشعر غالبًا:
– لإطفاء الشاشة أثناء المكالمات – لمنع اللمسات غير المقصودة – لتوفير استهلاك البطارية
دعم مستشعر القرب في Flutter
أشهر الحزم المتوفرة:
– proximity_sensor – proximity_screen_lock
في هذا المقال سنستخدم proximity_sensor لأنها تتيح الاستماع لأحداث المستشعر والتحكم الكامل في منطق التطبيق.
خطوات استخدام حزمة proximity_sensor
1️⃣ إضافة الحزمة
dependencies:
proximity_sensor: ^1.3.8
flutter pub get
2️⃣ ضبط minSdkVersion (Android فقط)
3️⃣ الاستماع لأحداث المستشعر
import 'package:proximity_sensor/proximity_sensor.dart';
import 'dart:async';
bool _isNear = false;
StreamSubscription? _streamSubscription;
void listenSensor() {
_streamSubscription = ProximitySensor.events.listen((int event) {
setState(() {
_isNear = (event > 0);
});
});
}
في الكود أعلاه:
– ننشئ متغير _isNear لتخزين حالة القرب – نستمع إلى أحداث المستشعر – إذا كانت قيمة الحدث أكبر من صفر فهذا يعني وجود جسم قريب
4️⃣ إلغاء الاشتراك عند dispose
@override
void dispose() {
_streamSubscription?.cancel();
super.dispose();
}
تنفيذ قفل شاشة وهمي باستخدام Overlay
مثال داخل Stack:
Stack(
children: [
YourMainScreen(),
if (_isNear)
Positioned.fill(
child: Container(
color: Colors.black,
),
),
],
)
عند اقتراب الهاتف من الأذن ستظهر طبقة سوداء تغطي الشاشة بالكامل، وعند إبعاده تختفي تلقائيًا.
إطفاء الشاشة فعليًا في Android (اختياري)
ProximitySensor.setProximityScreenOff(true);
لكن يتطلب ذلك:
– إضافة إذن android.permission.WAKE_LOCK داخل AndroidManifest.xml – التعامل مع صلاحيات النظام
الحل باستخدام Overlay أبسط وأكثر توافقًا بين المنصات.
الخلاصة
الفكرة الأساسية تعتمد على:
– الاستماع لحالة مستشعر القرب – تحديث واجهة المستخدم – عرض طبقة سوداء عند الاقتراب
بهذه الطريقة تحسن تجربة المستخدم وتمنع اللمسات غير المقصودة داخل تطبيقك، مع الحفاظ على تصميم UI نظيف ومتوافق مع جميع المنصات.
يمكنك ايضا مشاهده المقاله التاليه : كيف تتخلص من مشاكل التخزين عند حذف التطبيق؟ الحل النهائي على Android وiOS لمطوري Flutter



