پیاده سازی معماری RivePod مناسب برای متوسط و کوچک (بدون نیاز به context)
5 دقیقه
Riverpod یک راهکار مدیریت وضعیت (State Management) مدرن و قدرتمند برای Flutter است که جایگزینی امنتر و انعطافپذیرتر برای Provider قدیمی محسوب می شود. برای پیاده سازی معماری Riverpod بدون نیاز به BuildContext، باید از قابلیتهای اصلی آن یعنی Providers (به خصوص Provider, StateProvider, StateNotifierProvider و FutureProvider) به طور مستقیم در منطق کسبوکار (Business Logic) استفاده کنید؛ این امر باعث جداسازی بهتر لایهها و قابلیت تست بالاتر میشود. در این مقاله به شما می گوییم که چگونه می توان Riverpod را بدون نیاز به Context نصب کرد.
Riverpod چیست؟
ماهیت اصلی Riverpod، ارائه دسترسی آسان و ایمن به وضعیتها (Providers) در هر نقطهای از برنامه است؛ بدون اینکه نیاز باشد Context را پاس داد. در واقع این معماری بر پایه Dependency Injection (تزریق وابستگی) و Providerها استوار است.
این ابزار از انواع متعددی از Providers (مانند StateProvider برای وضعیتهای ساده، StateNotifierProvider برای منطق پیچیده و FutureProvider برای کارهای ناهمزمان) استفاده می کند. با استفاده از ref.watch و ref.read در ویجتهای ConsumerWidget، می توان وضعیتها را خواند و به تغییرات آنها گوش داد؛ این موضوع باعث می شود تا کدی تمیزتر، قابل تستتر و با کمترین میزان خطا در زمان اجرا داشت. افرادی که به طراحی اپلیکیشن در مشهد می پردازند، می توانند پیاده سازی معماری RivePod را بدون نیاز به Context به خوبی انجام دهند.
امکانات Riverpod
قبل از پیاده سازی معماری Riverpod ابتدا بهتر است تا با امکانات آن آشنا شوید. Riverpod یک سیستم مدیریت وضعیت ایمن و مدرن است که خطاهای نوعی را در زمان کامپایل شناسایی می کند و با فراهم کردن Providers های داخلی، مدیریت وضعیتهای ناهمزمان (Loading/Error) را بسیار ساده می سازد؛ در حالی که منطق برنامه را کاملاً قابل تست و مستقل از فلاتر نگه می دارد.
جالب است بدانید که پیاده سازی معماری bloC در فلاتر میتواند از Riverpod (به عنوان یک ابزار مدیریت وضعیت پیشرفته) برای مدیریت و تزریق وابستگیها (Dependency Injection) در سراسر اپلیکیشن خود استفاده کند؛ در حالی که همچنان ساختار اصلی مبتنی بر رویداد و وضعیت BLoC را حفظ میکند. امکانات Riverpod شامل موارد زیر است.
ایمنی نوع و حذف خطاهای زمان اجرا
Riverpod تضمین می کند که ارجاعات شما به Stateها از نظر نوع صحیح هستند و اکثر خطاها را در زمان کامپایل (قبل از اجرای برنامه) نه در زمان اجرا به شما نشان مید هد.
مدیریت ساده وضعیتهای ناهمزمان (Loading/Error)
Providerهایی مانند FutureProvider به طور خودکار وضعیتهای در حال بارگذاری، داده موفق و خطا را مدیریت می کنند. شما با استفاده از متدهای سادهای مانند when، UI را بر اساس این سه حالت به راحتی تغییر می دهید.
تستپذیری و جداسازی منطق
با Riverpod کد شما کاملاً قابل تست است، زیرا می توانید منطق اصلی را از UI جدا کنید. همچنین، می توانید Providers را در تستها به راحتی جایگزین (Mock) کنید تا رفتارهای مختلف برنامه را به صورت مجزا بررسی کنید.
ویژگی های Riverpod
در پیاده سازی معماری Riverpod باید بدانید که آن ویژگیهای بسیار زیادی دارد؛ جالب است بدانید که در طراحی اپلیکیشن با فلاتر Riverpod می تواند به عنوان جایگزینی کارآمد برای روشهای سنتی تزریق وابستگی یا مدیریت وضعیت در معماریهای دیگر (از جمله برای مدیریت وضعیتهای داخلی در BLoC ها) به کار رود و خوانایی و نگهداری کد را افزایش دهد. مهمترین ویژگیهای Riverpod را در قالب جدول زیر بیان می کنیم.
|
توضیح کوتاه |
ویژگی کلیدی |
دستهبندی |
|
سیستم مدیریت وضعیت مدرن، قوی و کاملاً ایمن از نظر نوع (Type-Safe). |
Riverpod 2.0+ |
مدیریت وضعیت (State) |
|
ساختار مقیاسپذیر (Scalable) و مبتنی بر ویژگیهای درجه یک که نگهداری کد را آسان میکند. |
معماری تمیز |
معماری |
|
پشتیبانی آسان و داخلی برای پیادهسازی رابط کاربری چند زبانه. |
محلیسازی (Localization) |
بینالمللیسازی (i18n) |
|
امکان اعمال آسان تمهای دارک/لایت برای زیبایی و دسترسیپذیری بهتر رابط کاربری. |
تمهای تیره/روشن |
رابط کاربری (UI) |
|
پشتیبانی کامل از تستهای واحد (Unit)، ویجت (Widget) و تستهای یکپارچهسازی (Integration). |
تست جامع |
تستپذیری |
|
قابلیت ادغام آسان در خطوط لوله ادغام و تحویل پیوسته (CI/CD) برای خودکارسازی گردشهای کاری. |
سازگار با CI/CD |
توسعه و استقرار |
|
مستندات زیبا، تعاملی و در دسترس برای یادگیری و ارجاع سریع. |
اسناد مدرن |
مستندسازی |
|
تضمین میکند که تنها ویجتهایی که نیاز به بهروزرسانی دارند، رندر مجدد شوند (جلوگیری از بیلد غیرضروری). |
بهینهسازی رندرینگ |
عملکرد (Performance) |
|
منطق اصلی برنامه میتواند مستقل از فلاتر تعریف شده و در پلتفرمهای دیگر نیز قابل استفاده باشد. |
پلتفرم Agnostic |
پلتفرم |
مراحل اجرای معماری riverpod بدون وابستگی به context
برای پیاده سازی معماری Riverpod، فقط کافی است تا کل اپلیکیشن را در ProviderScope قرار دهید و وضعیتها را با Providerها (مثل StateProvider یا StateNotifierProvider) تعریف کنید. سپس داخل ویجتها با ref.watch برای گوش دادن و ref.read برای تغییر یا فراخوانی از آنها استفاده کنید.
مراحل اجرای Riverpod شامل موارد زیر است.
گام ۱: نصب و آمادهسازی پروژه
مطمئن شوید که وابستگیهای زیر در pubspec.yaml شما وجود دارد:
.png)
گام ۲: تعریف مدل و مدیریتکننده وضعیت (StateNotifier)
این بخش کاملاً منطق خالص است و به هیچ وجه به فلاتر یا context وابسته نیست.

گام ۳: تعریف Provider سراسری
Provider را خارج از هر ویجت یا تابعی تعریف کنید تا سراسری (Global) باشد. این تعریف نیز مستقل از context است. فایل main.dart (یا یک فایل Providers مجزا):

گام ۴: فعالسازی در ریشه برنامه
در پیاده سازی معماری Riverpod توجه داشته باشید که کل برنامه را برای فعالسازی قابلیتهای Riverpod درون ProviderScope قرار دهید.
گام ۵: مصرف State در ویجت با استفاده از ref (جایگزین context)
برای مصرف State در متد build یک ویجت، ارثبری را از StatelessWidget یا Stateful Widget به HookWidget تغییر دهید. این کار به شما امکان استفاده از هوکهایی مانند ref.watch و ref.read را می دهد که دیگر نیازی به context ندارند. بازنویسی ویجت UI:

سخن پایانی
برای پروژههای کوچک و متوسط، پیاده سازی معماری Riverpod بر استفاده بهینه از NotifierProvider و جداسازی کامل منطق از ویجتها متمرکز است. شما کلاسهای وضعیت خود را با استفاده از Notifier تعریف می کنید که وضعیت را بدون نیاز به BuildContext تغییر می دهد. سپس، برای مصرف این وضعیت، از ویجتهایی مانند ConsumerWidget استفاده کرده و با ref.watch وضعیت را به صورت واکنشی می خوانید. این رویکرد، وابستگی مستقیم به context در منطق را حذف کرده، تستپذیری را تضمین می کند و سادگی مورد نیاز برای پروژههای کوچک را فراهم می آورد. متخصصان ما در رایا پارس با شعار تلفیق دانش و استراتژی با مشاوره کسب و کار در مشهد برای شما بهترین اپلیکیشنها را طراحی می کنند.



