ویرگول
ورودثبت نام
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالیمن عدنان کمالی چاهوئی هستم و برنامه نویس و درحال تبدیل شدن به مهندس کامپیوتر
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالی
خواندن ۲ دقیقه·۱۰ ماه پیش

ویجت به ارث رسیده (Inherited Widget) در فلاتر

Inherited Widget Diagram
Inherited Widget Diagram


حتما شنیدین که میگن این مال از پدرش به ارث رسیده تو زندگیش خیلی راحته و سختی نکشیده.

حالا فلاتر هم برای اینکه دیتایی از ویجت پدر به ویجت فرزند برسه اومده کار رو راحت تر کرده که دیگه به زحمت نیوفتیم.

خود من در اوایل استفاده از فلاتر میومدم برای اینکه به یک ویجت فرزند دیتایی رو پاس بدم برای هر کدون یک کانستراکتور تعریف می کردم حالا باید برای هر کدوم از زیر ویجت هام که فراخوانی می کردم این دیتا رو پاس می دادم یا حتی بدتر ممکن بود توی یک ویجت اصلا کاربرد نداشته باشه دیتا ولی چون یک ویجت فرزند داشت که به اون دیتا نیاز داشت باید پاس میدادی مثل کد زیر:

دیتا من در ParentWidget هست ولی FirstChildWidget نیاز داره
دیتا من در ParentWidget هست ولی FirstChildWidget نیاز داره

استفاده از مدیریت وضعیت (State manager)

بعد از گذشت اولین تجربه و آشنا شدن با مدیریت وضعیت ها (استیت منجر) شرایط یکم تغییر کرد حالا دیگه خیالم راحت بود که پارامتری نیاز نیست پاس بدم و میام توی این مدیریت وضعیت متغییرم رو تعریف می کنم و دیتا رو بدون کانستراکتور ویجت ها و بدون پل زدن از ویجت میانی می فرستم به ویجتی که میخوام، اینم خوب بود ولی خب ممکن بود این استیت منجر من یکم اضافه بار داشته باشه خب ما نمیایم که یک استیت منجیر بسازیم که یک متغییری رو پاس بدیم حتما توی استیت منجر مون تابع هایی وجود داره و الی آخر که این آبجکت رو اگر بخوایم اضافه کنیم به بخشی از کد به کل اونها دستری خواهیم داشت.

استفاده از استیت منیجر برای دیتا
استفاده از استیت منیجر برای دیتا

ارث بردن و راحت شدن (InheritedWidget)

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

قبل از دیدن کد یه چندتا از الزامات رو بذار بگم

  • با توجه به اینکه پدر فرزند هست پس حتما باید فرزند داشته باشه پس child باید داشته باشه
  • متود updateShouldNotify که مقدار بولین بر میگردونه میگه کی باید آپدیت بشم که معمولا اینجوریه که اگر مقدار دیتا تغییر نکرد از ویجت قبلیت نیاز به آپدیت نیست و ری بیلد نیازی نیست بشن
  • رایجه که از of استفاده کنیم و توی اون برسی کنیم که آیا این کانتکست ما اون ویجت به ارث برده داره یا نه اگر نداره ارور نشون بده تا توی حالت دیباگ بدونیم که از کلاسمون در جای درست استفاده کردیم یا نه
Access Data Using Inherited Widget
Access Data Using Inherited Widget

فقط یک نکته رو بگم که اگر میخوای مستقیم توی خود اون کلاس دیتا رو استفاده کنی لازمه از بیلدر کمک بگیری.

Direct Use
Direct Use


امیدوارم مطلب مفید واقع شده باشه.


فلاتردارتکلین کد
۰
۰
Adnan Kamali | عدنان کمالی
Adnan Kamali | عدنان کمالی
من عدنان کمالی چاهوئی هستم و برنامه نویس و درحال تبدیل شدن به مهندس کامپیوتر
شاید از این پست‌ها خوشتان بیاید