شارك المقالة

استخدام Flutter Hooks مع ترتيب ثابت للخطافات وتخزين Future وStream، وفهم عمر controllers ومفاتيح إعادة إنشاء الموارد.

لا تنشئ Future جديدة مع كل build

useFuture(fetchData()) يعيد إنشاء عملية fetch عند كل بناء إذا كانت الدالة تنشئ Future جديدة. أنشئها بـuseMemoized مع مفاتيح المدخلات الفعلية ثم مرر الناتج إلى useFuture. ينطبق المبدأ على stream عند الحاجة إلى ثبات الاشتراك. لا تجعل initialData نص تحميل ثم تتجاهل snapshot.error وconnectionState.

الترتيب والعمر أساس صحة hooks

استدعِ hooks بالترتيب نفسه في كل بناء، ولا تضع useTextEditingController في شرط يتغير أو حلقة بعدد مختلف. hooks الخاصة بالـcontrollers تدير الموارد التي أنشأتها وفق عقدها، لكن اشتراكًا أنشأته في useEffect يحتاج cleanup مناسبًا. useMemoized يحفظ نتيجة محليًا، ولا ينقل عملية CPU ثقيلة إلى isolate ولا يجعل حسابًا غير نقي آمنًا.

خطوات التطبيق والشرح

ماهي Hooks ولماذا عليك البدء في استخدامها في مشايعك داخل Flutter

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

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

ما هي Flutter Hooks؟

Flutter Hooks هي مكتبة تساعد على تبسيط إدارة حالة التعليمات البرمجية في تطبيقات Flutter. فكرة الخطافات مشابهة لفكرة React، والتي تسمح لك بإدارة الحالة دون الحاجة إلى استخدام StatefulWidget وState مباشرة. يساعد استخدام الخطافات على تحسين تجربة كتابة التعليمات البرمجية عن طريق تقليل تعقيد إدارة الحالات .

لماذا نستخدم Flutter Hooks؟

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

إعادة استخدام الكود: يمكنك استخدام نفس الخطافات في عناصر واجهة مستخدم متعددة، مما يعمل على تحسين إعادة استخدام الكود.

أداء أفضل: باستخدام خطافات مثل useMemoized وuseFuture، يمكن تقليل العمليات الباهظة الثمن التي يتم إجراؤها عدة مرات دون داع.

useMemoized

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

useFuture هو خطاف يستخدم لإدارة العقود الآجلة بكفاءة في Flutter. بدلاً من استخدام FutureBuilder، يمكنك استخدام useFuture لكتابة تعليمات برمجية أكثر إيجازًا ووضوحًا.

useFuture

في هذا المثال، يتم استخدام useFuture لانتظار fetchData لجلب البيانات وعرض النتيجة على الشاشة.

useStream

useStream هو خطاف آخر مفيد لإدارة التدفقات في Flutter. بدلاً من استخدام StreamBuilder، يمكنك الاعتماد على useStream لجعل التعليمات البرمجية أكثر وضوحًا وأسهل في القراءة.

البرمجة باستخدام Hooks مقابل البرمجة بدونها

في هذا المثال، باستخدام StatefulWidget وFutureBuilder، نرى أن الكود أطول وأكثر تعقيدًا مقارنة بـ useFuture في المثال السابق. يوضح هذا كيف يمكن للخطافات تبسيط عملية إدارة الحالة ودورة الحياة في Flutter.


useTextEditingController


useTextEditingController هو خطاف يستخدم لإدارة النص في TextField أو أي عنصر إدخال نص آخر. يعمل هذا الخطاف بشكل مشابه لـ TextEditingController، ولكنه يتناسب بشكل أفضل مع دورة حياة عناصر واجهة المستخدم الخاصة بـ Flutter.
في هذا المثال، يتم استخدام useTextEditingController لإدارة النص في TextField دون الحاجة إلى كتابة الكثير من رموز الحالة التقليدية.

useAnimationController

useAnimationController هو خطاف يستخدم لإنشاء الرسوم المتحركة والتحكم فيها في تطبيق Flutter. يمكن استخدامه لتحويل عناصر مثل عناصر واجهة المستخدم بسهولة.
في هذا المثال، تم استخدام useAnimationController لتحريك عنصر الحاوية. تتحكم الرسوم المتحركة في الحجم مع توسع الصندوق تدريجيًا.
بدون إستخدام Hooks سوف تحتاج لعمل dispose لكل Controller وايضا في حالة initState سوف تحتاج لعملها .

فوائد استخدام الخطافات في فلاتر

تقليل التعقيد: باستخدام الخطافات، يمكنك تقليل التعقيد المرتبط بإدارة الحالة ودورة حياة عنصر واجهة المستخدم.
إعادة استخدام الكود: يمكن بسهولة استخدام الخطافات مثل useMemoized وuseFuture عبر عناصر واجهة مستخدم متعددة.
تحسين الأداء: تجنب عمليات إعادة الحساب غير الضرورية وتجنب العمليات المكلفة.

تُعد Flutter Hooks إضافة قوية إلى نظام Flutter البيئي، مما يساعد على تبسيط إدارة الحالة وكتابة تعليمات برمجية أكثر وضوحًا وتنظيمًا. باستخدام خطافات مثل useMemoized وuseFuture وuseStream، يمكن تحسين أداء التطبيق وتقليل التعقيد. نأمل أن تكون الأمثلة والشروحات قد أعطتك فهمًا أفضل لكيفية استخدام هذه الميزات الرائعة.

مثال الشفرة بعد المراجعة

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

import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
class LessonPreview extends HookWidget {
 const LessonPreview({super.key, required this.lessonId, required this.load});
 final String lessonId;
 final Future<String> Function(String) load;
 @override
 Widget build(BuildContext context) {
   final future = useMemoized(() => load(lessonId), [lessonId, load]);
   final snapshot = useFuture(future);
   if (snapshot.connectionState != ConnectionState.done) {
     return const CircularProgressIndicator();
   }
   if (snapshot.hasError) return const Text('Could not load the lesson');
   return Text(snapshot.data ?? 'No content');
 }
}
// Parent must pass a stable load function when its behavior is unchanged.
// Add a compatible flutter_hooks dependency before using this component.

مرجع للتنفيذ

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

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

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