مهرداد
مهرداد
خواندن ۲ دقیقه·۳ سال پیش

تزریق وابستگی در فلاتر با Get_it

گاهی وقت ها موردی پیش میاد که کلاس هایی که مینویسیم به کلاس های دیگه ای وابسته هستن. یعنی بدون اونها نمیتونن کارشون رو انجام بدن مثلا کد زیر رو ببینید

قطعا قبلا به این مورد برخورد کردید. الان کلاس Car برای انجام کارش به کلاس Wheel وابستگی داره.

اولین راهی که به نظر همه میرسه همینه دقیقا، که یه object ازش بسازن و استفاده کنن. پس مشکل کجاس؟

مشکل اینه که من هر دفه باید هی از روی کلاس نمونه بسازم.

راه بعدی چیه؟

راه بعدی اینه که کلاس مورد نیاز رو از طریق سازنده inject کنم.

اینهم یک نوعی از تزریق وابستگی محسوب میشه اما مشکل این کار کجاس؟

https://idpay.ir/mmbpay



مشکل اینجاست که اگه من بجای یه کلاس 50 تا کلاس داشته باشم که وابسته به Wheelباشن، بعد از تغییر توی سازنده ی کلاسم باید بگردم و 50 جای دیگه رو تغییر بدم.

دیگه این راه حل ها کاربرد نداره.

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

مثلا ما یه کلاس داریم به اسم ()Appinfo

AppInfo(){

}

میایم و از این ویجت استفاده میکنیم


حالا کلاس MaterialApp رو wrapمیکنیم توی این ویجت.

حالا فقط کافیه توی اون ویجتی که به AppInfoنیاز داریم اینجوری بنویسیم:

Var appInfo=InheritedInjecttion.of(context).appInfo;

حالا در صورت تغییر کلاس مورد نیاز دیگه نیازی به تغییر کلاس های دیگه نداریم.

راه سوم:

یه راه دیگه استفاده از کتابخونه های مختلفه. Get_itنسبتا خوب این کار رو انجام میده. البته یه تفاوتی داره با یه سری کتابخونه ها مثل hilt یا dagger که اینجا جاش نیست.

لینک کتابخونه : https://pub.dev/packages/get_it

یه فایل دارت میسازم به اسم locator و یه نمونه از GetIt میسازم و یک متد برای نوشتن کد های مربوز به تزریق:


شما داخل تابع main برنامتون setupLocator رو صدا کنید.

خوب حالا چی باید توی setupLocator بنویسیم؟ اینجا هر کلاسی که میخواید رو به دو روش کلی میتونید تزریق کنید. یکی singleton و یکی factoryفرقشون هم در اینکه که اگر سینگلتون تعریف کنید با هر بار فراخونی یه نمونه ی جدید ساخته نمیشه. ولی داخل factory این اتفاق میوفته و برای استفاده در لایه ی viewmodel مناسب به نظر میاد.

من الان میخوام کلاس appinfo رو که بهش نیاز دارم اینجا برای تزریق بنویسم و جای دیگه ازش استفاده کنم:


حالا میرم اونجایی که بهش نیاز دارم:


تموم شد. حالا با هر تغییری در سازنده شما فقط یکجا کد رو تغییر میدین.

اگر فکر میکنید بهتر میشه این مورد رو توضیح داد خوشحال میشم تو نظرات بگین.

فلاترتزریق وابستگیآموزش فلاترکلاسget it
Android and Flutter developer
شاید از این پست‌ها خوشتان بیاید