تعرف لماذا يتعطل تطبيقك عند الكتابة السريعة في حقل البحث ولماذا استخدام Debouncer هو الحل

تعرف لماذا يتعطل تطبيقك عند الكتابة السريعة في حقل البحث ولماذا استخدام Debouncer هو الحل

ما هو Debouncer؟

هل سمعتَ بمصطلح "Debouncer"؟ لا تقلق، فهو ليس نوعًا من الطعام اللذيذ، بل تقنية ذكية تُستخدم في برمجة Flutter لمنع تنفيذ العمليات بشكل متكرر دون داعٍ.


ما هو Debouncer؟

ببساطة، تخيّل أنك تضغط على زرّ "البحث" بشكل متكرر أثناء كتابة استعلامك.

مع Debouncer، لن يتمّ إرسال كل ضغطة إلى خادم البحث،

بل سيتمّ تنفيذ البحث فقط بعد 500 مللي ثانية من آخر ضغطة،

مما يوفر لك الوقت ويُحسّن من أداء التطبيق.


كيف يعمل Debouncer؟

يعتمد Debouncer على مفهوم "التايمر". إليك شرح مبسط لكيفية عمله:


تحديد مدة التأخير: نحدد مدة زمنية محددة، على سبيل المثال 500 مللي ثانية، للتأخير قبل تنفيذ العملية.

إلغاء العمليات المتكررة: في كل مرة يتمّ فيها الضغط على الزرّ (أو تنفيذ أيّ عملية أخرى)، يتمّ التحقق من حالة التايمر. إذا كان التايمر قيد التشغيل، يتمّ إلغاؤه تلقائيًا لمنع تنفيذ العملية مرة أخرى.

تنفيذ العملية بعد التأخير: إذا انتهى وقت التأخير دون أيّ ضغطات جديدة، يتمّ تنفيذ العملية المطلوبة.

أمثلة على استخدام Debouncer:


البحث: كما ذكرنا سابقًا، يمكن استخدام Debouncer لتجنّب إرسال طلبات بحث متكررة إلى خادم البحث مع كل ضغطة على لوحة المفاتيح.

زيادة المنتجات في سلة التسوق: في تطبيق التجارة الإلكترونية، يمكن استخدام Debouncer لمنع إرسال طلبات متكررة لإضافة منتج إلى سلة التسوق مع كل ضغطة على زرّ "+" (أو أيّ زرّ آخر).


فوائد استخدام Debouncer:

  • تحسين تجربة المستخدم: يُساعد Debouncer على تجنب تأخر الاستجابة وتقديم تجربة سلسة للمستخدم.
  • تقليل استهلاك الموارد: يُقلّل من عدد الطلبات المُرسلة إلى الخوادم ويُحسّن من أداء التطبيق بشكل عام.
  • تجنّب الأخطاء: يُساعد على منع تنفيذ العمليات بشكل خاطئ نتيجة للضغطات المتكررة.


ملاحظة:

استخدام Debouncer بشكل صحيح: من المهمّ تحديد مدة التأخير المناسبة للتطبيق الخاص بك. يجب أن تكون المدّة كافية لمنع الضغطات المتكررة، ولكن لا طويلة لدرجة تُعيق تجربة المستخدم.

البدائل: تتوفر مكتبات جاهزة في Flutter تُسهّل استخدام Debouncer، مثل flutter_debouncer و easy_debounce.


مثال على ذلك

Timer? _debounce;
_onSearchChanged(String query) {
if (_debounce?.isActive ?? false) _debounce?.cancel();
_debounce = Timer(const Duration(milliseconds: 500), () {
// do something with query
});
}

تعليقات