سلام.

اگر با فلاتر کار کرده باشید حتما با مشکلاتی در خصوص تغییر در UI اپلیکیشن مواجه هستین. صدا زدن مدام متد setsate خیلی کار تو مخیه و با سختی میشه از زیر تغییر بقیه ی قسمت هایی که نمیخوایم دوباره رندر بشن در رفت.

پیکج های خوبی برای مدیریت استیت تو فلاتر ارایه شدن که میشه از BloC به عنوان معروف ترین اونا اسم برد که یک نوع دیزاین پترن یا شاید معماری هم هست.

تو این مطلب یه نگاه کوچیک هم داریم (نه آموزش) به یه پکیج دیگه به اسم Get که یکی از کاراش مدیریت استیته.

خلاصه ای از امکاناتش رو بخوام بگم میشه:

۱- راحت ترین روش برای Navigate کردن
۲- بی دردسر ترین متد برای نمایش اسنک بار و دیالوگ بدون نیاز به Context
۳- مدیریت استیت
۴- متد باحال برای DataStore
۵- تعویض تم
۶- متدهای جالب برای Validate کردن
۷- تعویض Locale
۸- تزریق وابستگی

بعد از یه چندتا کد سمپل زدن باهاش خیلی زود ارتباط برقرار میکنید و مطمءنن ازش لذت میبرید.

مثلا برای تغییر یه آیتم توی UI میتونید از چند روش استفاده کنید.
یه کلاس میسازیم به اسم NameController که از GetxController ارث ببره.

class NameController extends GetxController {
  var fam = "".obs;

  changeName(String fam) {
    this.fam.value = fam;
  }
}

اون .obs مشخص میکنه که این متغیر به صورت لایو تغییرات رو ردگیری میکنه درست مثل livedata توی اندروید. البته میشه به صورت زیر هم نوشت:

1var fam=RxString("");

حالا بگذریم.

فرض کنید که میخوایم متن یه Text رو عوض کنیم.
حالا اگر دارید از اون obs استفاده میکنید ادامش به این شکله که باید برید ویجت Text خودتون رو بزارید تو ویجت Obs و اون باید Text رو ریترن کنه:

Obx(() => Text("Clicked on ${nameController.fam}")),

البته بالاتر nameController رو به شکل زیر تعریف کردم:

final NameController nameController = Get.put(NameController());

تمام شد. نکته اینکه نیازی نیست ویجتتون stateful باشه.

حالا هرجایی که changeName رو صدا بزنید مقدار اتوماتیک آپدیت میشه.

nameController.changeName("Ghooodaaaa");

یه سری متد باحال دیگه هم داره. مثلا ever. بهش متغیرتون رو پاس میدین بعد به ازای هربار تغییر اینم اجرا میشه. یا چیزای دیگه.

به نظرم یه نگاه به داکیومنتش بندازین چیزای جالبی داره.