سلام
برای بروزرسانی سبد خرید من از این راه رفتم که براتون توضیح میدم. دوستان اگه راه حلی دارن مطرح کنند که بقیه هم استفاده کنند.
۱- مرحله اول اینکه یسری تغییرات توی فایل مین پروژتون بدین.
ویجت متریال اپ رو باید زیرمجموعه یا فرزند یه ویجت دیگه به نام MultiBlocProvider قرار بدین این یه ویجت از کتابخونه بلاک هست. به این شکل
من از مولتی بلاک استفاده کردم چون توی کدم دوتا بلاک میخوام تعریف کنم. همینطور که میبینید یه اتریبیوت داره به اسم providers که آرایه ای از بلاک پروایدر رو دریافت میکنه.
من CartBloc رو اینجا تعریف کردم و بعد ایونت استارت رو بهش پاس دادم. توجه کنید که چون CartBloc رو اینجا تعریف کردین دیگه نباید هیچ اینستنسی از CartBloc جایدیگه از برنامه داشته باشین چون حتما باعث مموری لیک یاتداخل ناخواسته تو برنامه میشه.
۲-مرحله دوم اینکه برید توی پوشه جزییاتت محصول و فایل product_event رو بازکنید , این تغییرات رو اعمال کنید. البته من شاید یکم کدام نسبت به چیزی که آقای شاهینی نوشتن متفاوت باشه شما خودتون تغییرات رو اعمال کنید.
توی انیجا من یه کلاس ایونت دارم که دوتا پروپرتی داره یکی context وهمون poduct id
۳- مرحله سوم اینه که برید توی فایل product_bloc و این تغییرات رو بدین
توی اینجا من یه متود نوشتم به اسم OnAddToCartButtonClicked همینطور که از اسمش مشخص زمانی کال میشه که ایونت CartAddButtonClickEvent رخ بده به ورودیهای متود توجه کنید که یه event از نوع CartAdd... میگیره و امیتر از نوع ProductState. داخل متود یسری کارهای معمول انجام میشه ولی مهمترین قسمت اینه
اینجا ما از ایونتی که توی ui برای bloc ارسال کردیم context رو میگیریم. کتابخونه bloc یه اکستنشن متود روی کانتکست داره به نام read که میتونه از طریق ویجتتری بره بالا و اون بلاکی که قبلا ساختیم رو بهمون برگردونه که اینجا همون CartBloc هست که توفایل مین ساختیم. ما اینجا توی بلاک محصول یه ایونت به بلاک کارت ارسال میکنیم که خودتو بروز کن.
۴- مرحله آخر توی فایل ویو در جزییات محصوله که ازمانی هست که کاربر کلید خرید رو فشار میده و باید ایونت CartAddButtonClickEvent ارسال بشه.
اینجا توی اتریبیوت onPressed فلوت اکشن باتن دوباره از اکستنشن context.read استفاده کردم و ایونت رو به بلاک فرستادم که دوتا مقدار میگیره : کانتکست و ایدی محصول
این راحی بود که من رفتم احتمالا یکم کداها مغایر باشه با کدای بقیه ولی اینجا من سعی کردم کلیت رو بگم. الان دقیقا هر محصولی که خرید میشه سبد خرید هم درلحظه بروزرسانی میشه.
امیدوارم خوب توضیح داده باشم.