dependency injection in flutter

dependency injection in flutter

تزریق وابستگی در flutter تکنیکی است که در آن یک شی وابستگی های یک شی دیگر را تامین می کند. وابستگی یک شی است که می تواند در کلاس استفاده شود. این می تواند یک سرویس شبکه، سرویس پایگاه داده، سرویس مکان و غیره باشد. در این آموزش به سه شکل تزریق وابستگی پذیرفته شده در فلاتر می پردازیم.
 
InheritedWidgets
 get_it 
provider

 
InheritedWidgets
انتقال وابستگی ها از طریق سازنده برای دسترسی به داده ها یک سطح پایین تر، شاید حتی دو، کاملاً خوب است. اگر در اعماق درخت ویجت چهار سطح باشید و ناگهان به داده های یک شی در کد خود نیاز داشته باشید، چه؟
به عبارت ساده، یک ویجت inherited به طور موثر به شما امکان می دهد از طریق BuildContext به تمام ویژگی های آن، به هر ویجت در زیر درخت آن دسترسی داشته باشید.
روش استفاده از ویجت‌های inherited  با قرار دادن درخت مورد نظر در ویجت inherited  است. ما می خواهیم این ویجت در کل برنامه ما ارائه شود، بنابراین MaterialApp را با ویجت InheritedInjection می بندیم.(wrap)
 
 
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return InheritedInjection(
      child: MaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(
            primarySwatch: Colors.blue,
          ),
          home: HomeView()),
    );
  }
}


get_it
get_it چیزی است که به عنوان یک سرویس یاب ساده شناخته می شود. به طور سنتی شما انواع خود را در یک رابط ثبت می کنید و پیاده سازی مشخص را برای آن ارائه می دهید.
انواع کلاس به دو صورت قابل ثبت است.

Factory: هنگامی که یک نمونه از آن نوع را از ارائه دهنده خدمات درخواست می کنید، هر بار یک نمونه جدید دریافت خواهید کرد. برای ثبت ViewModel هایی که باید همان منطق را در شروع اجرا کنند یا باید هنگام باز شدن نمای جدید باشند، خوب است.

Singleton: Singleton ها به دو صورت قابل ثبت هستند. هنگام ثبت نام، یک پیاده سازی ارائه دهید یا یک لامدا ارائه دهید که اولین باری که نمونه شما درخواست می شود، فراخوانی می شود (LazySingleton). Locator یک نمونه از نوع ثبت شده شما را نگه می دارد و همیشه آن نمونه را به شما برمی گرداند.
import 'service_locator.dart';

void main() {
  setupLocator();
  runApp(MyApp());
}

 
provider
 
provider دارای  StreamProvider، ChangeNotifierProvider، ListenableProvider است که می تواند برای معماری کل برنامه شما استفاده شود. سپس مانند InheritedWidget، مقدار تزریق شده توسط Provider فقط در زیردرخت آن موجود است. برای دریافت value در همه جا، ما کل برنامه خود را در یک provider  قرار می دهیم.
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Provider(
      builder: (context) => AppInfo(),
      child: MaterialApp(
        title: 'Flutter Demo',
        theme: ThemeData(
          primarySwatch: Colors.blue,
        ),
        home: Scaffold(),
      ),
    );
  }
}
 
نویسنده :
مجید پورداود
  • مجید پورداود
  • مهندس نرم افزار و تحلیلگر ارشد سیستم های کامپیوتری تحت وب می باشم. از سال 1395 برنامه نویسی را شروع کردم و به زبان های php (فریم ورک laravel -codeigniter)  و زبان جاوا اسکریپت (فریم ورک express.js-nest.js)  تسلط دارم.  

ثبت دیدگاه جدید

0 دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *