تفاوت bloc ،provider و getx در فلاتر

اگر داری این مقاله رو می‌خونی یعنی تو هم مثل من خیلی درگیر این بودی که تفاوت این سه‌تا state management یعنی bloc ،provider و getx رو بدونی، اینکه کدوم بهتره و باید از کدوم توی پروژه خودت استفاده کنی.
خب بیایم یک نگاه به هر کدوم بندازیم و ببینم چه ویژگی‌ها و نقطه ضعف‌هایی دارن.


شماره یک bloc


احتمالا bloc بهترین راه‌حل برای state management ها است که از طریق اون می‌تونید الگوهای معماری رو هم یاد بگیرید.
مزایا:
۱- جدا شدن کامل منطق پروژه
۲- نگهداری، تست نویسی و توسعه آسان پروژه
۳- تیم حرفه‌ای توسعه دهنده
۴- وجود اسپانسر برای این پکیج
۵- داکیومنت قوی و وجود کدهای سمپل زیاد

معایب:
۱- کدنویسی بیشتر نسبت به رقیبان
۲- سرعت توسعه پایین‌تر از رقیبان بخاطر دلیل شماره یک
۳- یادگیری سخت‌تر بخاطر پیچیده‌تر بودن نسبت به پکیج‌های رقیب (دلیل اصلی که تازه کارهای فلاتر میرن سمت رقیب‌هاش)

آمارها:
تعداد ۹,۲۰۰ ستاره در github
تعداد ۴,۱۰۰ لایک در pub.dev


شماره دو getx


احتمالا getx به عنوان دومین راه حل محبوب برای state management ها است که یکی از بحث برانگیزترین و پر حاشیه ترین‌ها در بین پکیج‌های فلاتر است. این پکیج به دلیل مشکلاتی که در تست نویسی و اختلال در الگوهای معماری باعث شده تا گروه زیادی از توسعه دهنده‌های فلاتر از اون متنفر باشن، اما همزمان بخاطر سرعت زیاد و کوتاه بودن کدنویسی بخش زیادی از برنامه نویس‌ها هم به اون علاقه دارن.

مزایا:
۱- کدنویسی بسیار آسان (دلیل اصلی محبوبیت بین تازه‌کارهای فلاتر)
۲- کدنویسی بسیار کوتاه
۳- محبوبیت زیاد

معایب:
۱- در حقیقت این پکیج رو نمیشه یک state management نام گذاری کرد و بیشتر یک میکرو فریمورک است که هر چیزی رو در درون خودش داره، مثل مدیریت روت‌ها تا هر چیز دیگه. و این وابستگی پروژه شما رو به این پکیج بسیار زیاد میکنه.
۲- بزرگ بودن بیش اندازه پکیج که باعث شده مشکلات زیادی رو درون خودش داشته باشه.
۳- نداشتن اسپانسر که باعث میشه هر لحظه برنامه نویس اون پکیج بیخیال توسعه اون بشه.
۴- فعال نبودن توسعه دهنده اون به صورت مستمر.
۵-وقتی یک باگ در این پکیج پیدا میشه و به توسعه دهنده گذارش میشه، زمان زیادی طول میکشه تا اون رو برطرف کنه.
۶- نداشتن مستندات واقعی و صحیح
۷- شهرت بد در جامعه فلاتر

آمارها:
تعداد ۶,۹۰۰ ستاره در github
تعداد ۹,۴۰۰ لایک در pub.dev


شماره سه provider


پکیج provider برای state management از طریق InheritedWidget است که به روشی ساده این کار رو میکنه. باید بدونید در پکیج bloc هم از provider استفاده شده. شما در provider میتونید به راحتی از Triple, ValueNotifier, ChangeNotifier و دیگر آبجکت‌ها استفاده کنید. این پکیج توسط تیم رسمی فلاتر توسعه داده میشه و به عنوان اولین پکیج مدیریت استیت ها از طرف فلاتر توصیه شده.

مزایا:
۱- کدنویسی سریع
۲- کدنویسی آسان
۳- محبوبیت زیاد
۴- پشتیبانی و توسعه توسط تیم فلاتر. این یعنی تا فلاتر هست، provider هم توسعه پیدا میکنه و هست. پس خیالتون ازش راحت.

معایب:
والا خیلی گشتم نبود. اگر شما میدونید برام بنویسید.

آمارها:
تعداد ۴,۳۰۰ ستاره در github
تعداد ۶,۸۰۰ لایک در pub.dev

نتیجه گیری


خب حالا که به نقاط قوت و ضعف هر سه‌تای عزیز دل نگاه کردیم بریم سراغ منبر من. ببینید اینجای کار تصمیم گیرنده خودتونید، باید ببینید میخواید چه پروژه‌ای بزنید. اگر زمان مهمه و پروژه کوچیکه پس سرعت عمل مهمه، اما اگر پروژه بزرگه و قراره توسعه طولانی مدت داشته باشه جواب مشخصه.
برای راحت شدن فکر شما هم باید بگم شخصاً بعد این همه بررسی و تجربه کار با این پکیج ها به این نتیجه رسیدم که در پروژه جدید (تقریبا اندازه دیوار) که قراره انجام بدم از provider استفاده کنم. چون باید یک پروژه نسبتاً بزرگ رو توی کمتر از چند ماه تحویل بدم پس سرعت عمل، راحتی و توسعه در آینده برام مهمه و اینها همه در provider وجود داره.

باید بدونید در خیلی از بخش های پروژه اصلا نیازی به هیچ کدوم از این پکیج ها نیست و میتونید با StateFulWidget مشکلتون رو حل کنید. در نهایت اینم بگم که هر چی ابزار به وجود میاد فقط و فقط برای اینه که به ما کمک کنن. پس از این ابزارها استفاده کنید و لذت کار با اونها رو ببرید.

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