إضافة اشعار اضافة ملاحظة

خلّينا نضيف SnackBar بعد إضافة الملاحظة بشكل نظيف ومرتبط بالـ Cubit (مو من داخل الزر مباشرة) 🔥

🎯 الفكرة الصحيحة
Cubit يغيّر الحالة → UI يسمع → UI يعرض SnackBar
Dart

❗ لا تعرض SnackBar داخل Cubit
❗ ولا داخل onPressed مباشرة
👉 الأفضل عبر BlocListener

🧱 1) تعديل الحالات (State)
📁 notes_state.dart
✏️ أضف حالة جديدة:
class NoteAdded extends NotesState {}
Dart
📄 الشكل الكامل:
abstract class NotesState {}

class NotesInitial extends NotesState {}

class NotesLoading extends NotesState {}

class NotesLoaded extends NotesState {
  final List<Note> notes;
  NotesLoaded(this.notes);
}

/// 👇 جديدة
class NoteAdded extends NotesState {}

class NotesError extends NotesState {
  final String message;
  NotesError(this.message);
}
Dart
🧠 ليش؟
نحتاج "إشارة" للـ UI أن العملية نجحت
Dart
🧱 2) تعديل Cubit
📁 notes_cubit.dart
✏️ عدّل دالة addNote:
Future<void> addNote(Note note) async {
  try {
    await addNoteUseCase(note);

    /// 👇 إشعار النجاح
    emit(NoteAdded());

    /// 👇 تحديث البيانات
    fetchNotes();
  } catch (e) {
    emit(NotesError(e.toString()));
  }
}
Dart
🧠 ماذا حدث؟
1. أضفنا Note
2. أرسلنا حالة نجاح
3. بعدها حدثنا القائمة
Dart
🧱 3) استخدام BlocListener
📁 notes_page.dart
✏️ لف الصفحة بـ:
BlocListener<NotesCubit, NotesState>
Dart
📄 الكود
return BlocListener<NotesCubit, NotesState>(
  listener: (context, state) {

    /// 👇 عند النجاح
    if (state is NoteAdded) {
      ScaffoldMessenger.of(context).showSnackBar(
        const SnackBar(
          content: Text("تمت إضافة الملاحظة بنجاح"),
        ),
      );
    }

    /// 👇 عند الخطأ
    if (state is NotesError) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text(state.message),
        ),
      );
    }
  },

  child: Scaffold(
    appBar: AppBar(title: const Text("الملاحظات")),
    body: ...
  ),
);
Dart
🧠 ليش BlocListener؟
BlocBuilder = يعيد بناء UI
BlocListener = ينفذ actions (مثل SnackBar)
Dart
🔥 ماذا يحدث الآن؟
AddNotePage

Cubit.addNote()

emit(NoteAdded)

NotesPage يسمع

SnackBar يظهر
Dart
💥 ملاحظة مهمة جداً
SnackBar يحتاج ScaffoldMessenger
Dart
🎨 تحسين (اختياري)
AddNotePage

Cubit.addNote()

emit(NoteAdded)

NotesPage يسمع

SnackBar يظهر
Dart
🧠 خلاصة قوية
Cubit → emit
Listener → show SnackBar
Dart
🧠 الجملة الذهبية
Side effects go in BlocListener, not in UI buttons
Dart