تزریق وابستگی در flutter تکنیکی است که در آن یک شی وابستگی های یک شی دیگر را تامین می کند. وابستگی یک شی است که می تواند در کلاس استفاده شود. این می تواند یک سرویس شبکه، سرویس پایگاه داده، سرویس مکان و غیره باشد. در این آموزش به سه شکل تزریق وابستگی پذیرفته شده در فلاتر می پردازیم.
انتقال وابستگی ها از طریق سازنده برای دسترسی به داده ها یک سطح پایین تر، شاید حتی دو، کاملاً خوب است. اگر در اعماق درخت ویجت چهار سطح باشید و ناگهان به داده های یک شی در کد خود نیاز داشته باشید، چه؟
به عبارت ساده، یک ویجت 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(),
),
);
}
}
ثبت دیدگاه جدید
0 دیدگاه
نشانی ایمیل شما منتشر نخواهد شد. بخشهای موردنیاز علامتگذاری شدهاند *