شارك المقالة
كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام مستشعر القرب (مثل تطبيق الاتصال تمامًا!)

كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام proximity sensor (مثل تطبيق الاتصال تمامًا!)

كيف تضيف ميزة قفل الشاشة التلقائي في Flutter باستخدام proximity sensor لمحاكاة قفل الشاشة


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

في تطبيقات Flutter لا تتوفر هذه الميزة افتراضيًا، ولكن يمكن تنفيذها بسهولة باستخدام حزمة proximity_sensor. في هذا الدليل العملي سنتعرف خطوة بخطوة على كيفية الاستماع لمستشعر القرب، وكيفية إظهار شاشة سوداء (قفل وهمي) عند اكتشاف جسم قريب من الهاتف.

ما هو مستشعر القرب (Proximity Sensor)؟

مستشعر القرب هو مكوّن مادي في الهاتف قادر على اكتشاف الأجسام القريبة دون لمس مباشر. غالبًا يعتمد على الأشعة تحت الحمراء، حيث يصدر شعاعًا وينتظر انعكاسه ليحدد وجود جسم قريب.

في الهواتف الذكية يُستخدم المستشعر غالبًا:
– لإطفاء الشاشة أثناء المكالمات – لمنع اللمسات غير المقصودة – لتوفير استهلاك البطارية

دعم مستشعر القرب في Flutter

Flutter لا يوفر دعمًا مباشرًا لمستشعر القرب، لذلك نلجأ إلى الحزم الخارجية.

أشهر الحزم المتوفرة:
proximity_sensor – proximity_screen_lock

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

خطوات استخدام حزمة proximity_sensor

1️⃣ إضافة الحزمة

أضف التالي إلى ملف pubspec.yaml:

dependencies:
  proximity_sensor: ^1.3.8
ثم نفذ:

flutter pub get

2️⃣ ضبط minSdkVersion (Android فقط)

تأكد أن minSdkVersion داخل android/app/build.gradle لا يقل عن 23.

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

بما أن Flutter لا يسمح بإطفاء الشاشة مباشرة عبر الواجهة البرمجية، يمكننا عرض طبقة سوداء تغطي الشاشة بالكامل عندما تكون _isNear == true.

مثال داخل Stack:

Stack(
  children: [
    YourMainScreen(),
    if (_isNear)
      Positioned.fill(
        child: Container(
          color: Colors.black,
        ),
      ),
  ],
)

عند اقتراب الهاتف من الأذن ستظهر طبقة سوداء تغطي الشاشة بالكامل، وعند إبعاده تختفي تلقائيًا.

إطفاء الشاشة فعليًا في Android (اختياري)

تدعم الحزمة إطفاء الشاشة فعليًا على أجهزة Android عبر:

ProximitySensor.setProximityScreenOff(true);

لكن يتطلب ذلك:
– إضافة إذن android.permission.WAKE_LOCK داخل AndroidManifest.xml – التعامل مع صلاحيات النظام

الحل باستخدام Overlay أبسط وأكثر توافقًا بين المنصات.

الخلاصة

باستخدام proximity_sensor يمكنك بسهولة محاكاة قفل الشاشة أثناء المكالمات داخل تطبيق Flutter.

الفكرة الأساسية تعتمد على:
– الاستماع لحالة مستشعر القرب – تحديث واجهة المستخدم – عرض طبقة سوداء عند الاقتراب

بهذه الطريقة تحسن تجربة المستخدم وتمنع اللمسات غير المقصودة داخل تطبيقك، مع الحفاظ على تصميم UI نظيف ومتوافق مع جميع المنصات.

يمكنك ايضا مشاهده المقاله التاليه : كيف تتخلص من مشاكل التخزين عند حذف التطبيق؟ الحل النهائي على Android وiOS لمطوري Flutter
شاهد أيضًا
مقالات ذات صلة
اضافة ايقونة زر تشغيل وايقاف المقطع الصوتي بشكل مختلف في فلاتر

اضافة ايقونة زر تشغيل وايقاف المقطع الصوتي بشكل مختلف في فلاتر في هذا المقال نشارك…

اضافة عبارة const لجميع المتغيرات التي تحتاجها بشكل تلقائي في Flutter

 اضافة عبارة const لجميع المتغيرات التي تحتاجها بشكل تلقائي في Flutterكما نعلم ان const تساعد…

عرض اسم التطبيق باكثر من لغه حسب لغة الجهاز وايضا SplashScrren على اجهزة الاندرويد

عرض اسم التطبيق باكثر من لغه حسب لغة الجهاز  وايضا SplashScrren على اجهزة الاندرويد لكي…

🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع