اذهب إلى المحتوى
  • 0

شرح استخدام الفئة المجردة abstract class في فلاتر BLOC

Mohammed Hhhh

السؤال

و انا اتابع دوره لاحظت ان الي بيشرح خلى اول class  من ال. states
 abstarct  class  ايش السبب 

 

Screenshot2023-05-23at4_59_45PM.png.61ac96685dd9def119035b83fe2a1126.png

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

السبب وراء وضع الـ abstract class في بداية قائمة الـ states في فلاتر BLOC هو لتوفير واجهة مشتركة لجميع حالات الحالة (states) المحتملة التي يمكن أن يتبعها Cubit أو Bloc.

وباستخدام الـ abstract class ، تستطيع تعريف مجموعة محددة من الحالات الأساسية التي قد يعتمدها Cubit أو Bloc دون الحاجة إلى إعادة تعريف الأساليب الأساسية في كل مرة.

والكود في الصورة، تم به تعريف NewestBooksState كـ abstract class وتنفيذها من قبل عدة حالات محددة، مثل NewestBooksInitial و NewestBooksLoading و NewestBooksFailure و NewestBooksSuccess.

ومن خلال استخدام abstract class، تستطيع توحيد النهج وتطبيق المنطق المشترك بين حالات الحالة المختلفة، مثل توفير قائمة الممتلكات (props) المشتركة وأي أساليب أخرى ترغب في تعريفها لجميع حالات الحالة.

أيضًا بوجود abstract class، بإمكانك استخدام المتغيرات من نوع NewestBooksState للإشارة إلى أي حالة من حالات الحالة، مما يسهل تحديد الحالة الحالية واتخاذ الإجراءات المناسبة في الـ Cubit أو Bloc الخاص بك.

وسأقدم لك مثالًا يوضح كيفية استخدام الفئة المجردة (abstract class) في فلاتر BLOC، ولنفترض أن لدينا Cubit لإدارة حالة قائمة أحدث الكتب في تطبيق مكتبة.

فتستطيع كتابة الفئات المختلفة على النحو التالي:

import 'package:equatable/equatable.dart';

abstract class NewestBooksState extends Equatable {
  const NewestBooksState();

  @override
  List<Object> get props => [];
}

class NewestBooksInitial extends NewestBooksState {}

class NewestBooksLoading extends NewestBooksState {}

class NewestBooksFailure extends NewestBooksState {
  final String error;

  const NewestBooksFailure(this.error);

  @override
  List<Object> get props => [error];
}

class NewestBooksSuccess extends NewestBooksState {
  final List<Book> books;

  const NewestBooksSuccess(this.books);

  @override
  List<Object> get props => [books];
}

هنا لدينا الفئة المجردة NewestBooksState التي تم تنفيذها من قبل عدة حالات محددة.

وNewestBooksState يحتوي على المنطق المشترك لجميع حالات الحالة، والذي يشمل تنفيذ props لإعطاء معرف فريد لكل حالة، وذلك لتمكين المقارنة والتعامل مع التغييرات في الحالة بشكل فعال.

  • NewestBooksInitial: حالة البداية، ويمثل الحالة الأولية للقائمة.
  • NewestBooksLoading: حالة التحميل، ويشير إلى أن القائمة تحمل البيانات حاليًا.
  • NewestBooksFailure: حالة الفشل، ويشير إلى حدوث خطأ أثناء جلب البيانات، ويحتوي على رسالة الخطأ المحددة.
  • NewestBooksSuccess: حالة النجاح، ويشير إلى أن البيانات تم جلبها بنجاح، ويحتوي على قائمة الكتب الأحدث.

وباستخدام الفئة المجردة NewestBooksState وحالاتها المحددة، يمكنك توحيد المنطق وإدارة حالة قائمة الكتب في Cubit الخاص بك، وإصدار حالة معينة باستخدام emit داخل Cubit بناءً على المنطق والأحداث التي تحدث في التطبيق.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

السبب في جعل الصنف الأول "abstract" هو أنه يعمل كصنف أساسي أو واجهة للصنف الآخر الذي يمتد منه. في هذه الحالة، يهدف "NewestBooksState" إلى كونها واجهة مشتركة لجميع الحالات الممكنة التي يمكن أن يكون عليها "NewestBooksCubit".

بجعل "NewestBooksState" مجرد صنف أساسي، فلا يمكن إنشاؤه مباشرة، ولكن يمكن تمديده من خلال صنف آخر لتعريف حالات أكثر تحديداً. هذا هو نمط شائع في إدارة الحالة بنمط Cubit أو BLoC، حيث يكون الحالة الأساسية مجردة، وتمتد الحالات الفعلية منها لتمثيل حالحالات المختلفة للتطبيق.

بالإضافة إلى ذلك، بتنفيذ صنف "Equatable" والتعديل على الطريقة "props"، يمكّن ذلك من مقارنة الحالات المختلفة بسهولة عن طريق مقارنة خصائصها. وهذا مهم عندما يصدر Cubit حالة جديدة ونريد التحقق من ما إذا كانت مختلفة عن الحالة السابقة وتحريك التحديثات وفقًا لذلك.

كما أن استخدام الفئة المجردة abstract class في بلوك (BLoC) له عدة فوائد:

  • تنظم الحالات (states) في هيكل تراثي. يمكن للفئة المجردة ان تكون اب لجميع الحالات، وبالتالي تربط بينها.
  • تجبر على تطبيق الوظائف التي يحتويها الفئة الأب abstract class في الفئات المشتقة منها. مثلا يمكن تعريف وظيفة abstract في الفئة الأب، ثم تطبيقها في الفئات البنات.
  • تسهل اضافة فئات جديدة مشتقة لأن التركيبة والقواعد الأساسية يتم وضعها في الفئة الأب.
  • تساعد في اعادة الإستخدام لأن الفئة الأب تحتوي على المنطق المشترك بين الحالات، ويمكن استخدام نفس المنطق في سياقات مختلفة.
  • في المثال الذي أعطيته، تم استخدام abstract class لتنظيم حالات الكيوبت (cubit) في هيكل تراثي. وهذا يسهل الحفاظ على الكود وتطويره فيما بعد.
رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

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

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...