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

سلام

برای بروزرسانی سبد خرید من از این راه رفتم که براتون توضیح میدم. دوستان اگه راه حلی دارن مطرح کنند که بقیه هم استفاده کنند.

۱- مرحله اول اینکه یسری تغییرات توی فایل مین پروژتون بدین.

ویجت متریال اپ رو باید زیرمجموعه یا فرزند یه ویجت دیگه به نام MultiBlocProvider قرار بدین این یه ویجت از کتابخونه بلاک هست. به این شکلf9e5-main.png

من از مولتی بلاک استفاده کردم چون توی کدم دوتا بلاک میخوام تعریف کنم. همینطور که میبینید یه اتریبیوت داره به اسم providers که آرایه ای از بلاک پروایدر رو دریافت میکنه.

من CartBloc رو اینجا تعریف کردم و بعد ایونت استارت رو بهش پاس دادم. توجه کنید که چون CartBloc رو اینجا تعریف کردین دیگه نباید هیچ اینستنسی از CartBloc جایدیگه از برنامه داشته باشین چون حتما باعث مموری لیک یاتداخل ناخواسته تو برنامه میشه.

۲-مرحله دوم اینکه برید توی پوشه جزییاتت محصول و فایل product_event رو بازکنید , این تغییرات رو اعمال کنید. البته من شاید یکم کدام نسبت به چیزی که آقای شاهینی نوشتن متفاوت باشه شما خودتون تغییرات رو اعمال کنید.

e443-product_event.png

توی انیجا من یه کلاس ایونت دارم که دوتا پروپرتی داره یکی context وهمون poduct id

۳- مرحله سوم اینه که برید توی فایل product_bloc و این تغییرات رو بدین

3198-product_bloc.png

توی اینجا من یه متود نوشتم به اسم OnAddToCartButtonClicked همینطور که از اسمش مشخص زمانی کال میشه که ایونت CartAddButtonClickEvent رخ بده به ورودی‌های متود توجه کنید که یه event از نوع CartAdd... میگیره و امیتر از نوع ProductState. داخل متود یسری کارهای معمول انجام میشه ولی مهمترین قسمت اینه 8298-context.png

اینجا ما از ایونتی که توی ui برای bloc ارسال کردیم context رو میگیریم. کتابخونه bloc یه اکستنشن متود روی کانتکست داره به نام read که میتونه از طریق ویجت‌تری بره بالا و اون بلاکی که قبلا ساختیم رو بهمون برگردونه که اینجا همون CartBloc هست که توفایل مین ساختیم. ما اینجا توی بلاک محصول یه ایونت به بلاک کارت ارسال میکنیم که خودتو بروز کن.

۴- مرحله آخر توی فایل ویو در جزییات محصوله که ازمانی هست که کاربر کلید خرید رو فشار میده و باید ایونت CartAddButtonClickEvent ارسال بشه.

092f-product_view.png

اینجا توی اتریبیوت onPressed فلوت اکشن باتن دوباره از اکستنشن context.read استفاده کردم و ایونت رو به بلاک فرستادم که دوتا مقدار میگیره : کانتکست و ایدی محصول

این راحی بود که من رفتم احتمالا یکم کداها مغایر باشه با کدای بقیه ولی اینجا من سعی کردم کلیت رو بگم. الان دقیقا هر محصولی که خرید میشه سبد خرید هم درلحظه بروزرسانی میشه.

امیدوارم خوب توضیح داده باشم.