تابستون داره تموم میشه ها، فرصت‌ها محدودن کلی آفر جذاب در کمپین تابستون🔥👇
۰ ثانیه
۰ دقیقه
۰ ساعت
۴ یلدا محصلی
فراخوانی متد add در bloc
جامعه فلاتر ایجاد شده در ۲۳ فروردین ۱۴۰۱

سلام وقت بخیر

در مورد مبحث bloc یک سوال داشتم.

از لحاظ نحوه ی مدیریت state ها، معماری و.. فراخوانی متد add در کلاس bloc کار درستی هست (مثلا کد زیر، برای اپدیت شدن لیست یادداشت‌ها بعد از یک تغییر) یا روش بهینه‌تری وجود داره؟

ممنونم

class NoteListBloc extends Bloc<NoteListEvent, NoteListState> {
  final AppDatabase database;
  NoteListBloc(this.database) : super(NoteListInitial()) {
    on<NoteListEvent>((event, emit) async {
      if (event is NoteListStar) {
        await database.updateNote(event.noteData);
        add(NoteListStart());
      }
      if (event is NoteListStart) {
        emit(NoteListLoading());
        await _initialList(emit);
      }
    });
  }

سلام وقتتون بخیر

کلا این کار اشتباهه حالا برای چی در ادامه خدمتتون میگم

  • شما در کلاس مربوط به بلاک وظیفه این رو دارید که برای event‌های مختلف سناریو‌های خاص خودش رو بنویسید مثلا وقتی event شما از نوع homePage Started هست شما باید داده‌های مورد نیاز و تسک‌های موجود در دیتابیس رو برای کاربر اماده کنید تا نمایش داده بشه و ... درمورد سایر event‌ها هم همین قضیه دقیقا صادق هست .
  • اما کجا باید از add استفاده کرد ؟؟؟ شما زمانی از add استفاده میکنید که میخواهید یک event رو به bloc خبر بدید که باید اتفاق بیفته اونوقت بلاک به کلاس خودش رجوع میکنه و تمام کد هایی که شما برای اون event نوشتید رو براتون اجرا میکنه حالا برای جا افتادنش یه مثال میگم خدممتون : فرض کنید میخواید یه تسکی رو از میون تسک هاتون سرچ کنید پس وقتی داخل TextField مربوط به سرچ چیزی رو تایپ میکنید باید به بلاک بگید event مربوط به search رو اینجا برات میفرستم (با استفاده از add) توام کارایی که توی سرچ باید بکنی رو برام بفرس و دقیقا کدهایی که برای عمل سرچ باید اجرا بشن توسط بلاک اجرا میشن .

پوذش اگر مثال‌ها ساده و با زبان عامیانه بیان شدن .

محمد حسین سخایی ۲۳ فروردین ۱۴۰۱، ۲۳:۲۲

درسته، ممنون از توضیحتون

البته هدف منم همین بود که بعد از ستاره دار شدن یک عنصر لیست، رویداد مربوط گرفتن کل دیتا از دیتابیس رخ بده

پس راه حل چیه؟? مثلا اگر من بخوام بعد از حذف یک عنصر از لیست یا اپدیت شدنش، کل لیستم رو بروزرسانی کنم که تغییرات اعمال بشه، چه روش هایی برای این کار هست؟

خیلی ممنون ??

یلدا محصلی ۲۴ فروردین ۱۴۰۱، ۰۶:۰۸

وقت بخیر مجدد

شما توی لایه Repository این رو هندل میکنید ینی با ارث بری از ChangeNotifier و استفاده از notifyListeners در متد‌های که مربوط به تسک‌ها نوشتید این قضیه رو خود به خود هندل میکنید همچنین از ویجتی به نام Consumer باید استفاده کنید تا مدام به Repository شما گوش بده و با تغییر Repository کل لیست رو rebuild کنه .

بهترین پاسخ
محمد حسین سخایی ۲۴ فروردین ۱۴۰۱، ۰۹:۵۲

درسته مچکرم

اول این کار رو انجام داده بودم اما چون از RepositoryProvider استفاده کرده بودم، جواب نمیداد. الان درست شد :)

بنظرم خوب میشه در یک فرصت مناسبی در مورد انواع provider هاهم صحبت کنیم.

ممنون از راهنمایی تون??

یلدا محصلی ۲۴ فروردین ۱۴۰۱، ۱۰:۲۱