
بطور خلاصه برای اینکه بتونیم UI خودمون رو آپدیت کنیم و دیتای جدیدی رو توی صفحه به نمایش بذاریم نیازه که وضعیت رو مدیریت و ریفرش کنیم که برای مثال statefull با استفاده از setState که داره میاد کل اون ویجت رو ریفرش میکنه . مسئله همینجاست که کل ویجتو ریفرش میکنه و اگر یک صفحه داشته باشیم که با statefull نوشته شده باشه و بخوایم یک قسمت کوچیکی رو تغییر بدیم کل صفحه ریفرش میشه
(شوخی: مثل این میمونه که دکتر بخواد پای بیمار رو عمل کنه ولی بیاد کل بدن رو بیهوش کنه :) )
راه حل برای این مورد اینه که فقط پای بیمار رو بیحسی بزنی یعنی اینکه اون قسمت رو فقط با statefull باز نویسی کنی و بقیه ویجت رو با stateless بزنی
معمولا ما از استیت منجمنت های مختلف استفاده می کنیم مثل provider که میاد یه بیلدری تحت عنوان Consumer در اختیار ما میذاره که هر زمانی که changenotifier رو کال کردیم فقط اون قسمت از ویجت ما که توی Consumer هست آپدیت میشه یا برای استیت منجمنت بلاک BlocBuilder داریم برای ری بیلد
stateless هم برای خودش بیلدر داره که اون هم هست StatefulBuilder که میاد فانکشن setState رو برامون فراهم میکنه و میتونیم توی اون یک تغییر استیت انجام بدیم که نمونش رو ببینید
await showDialog<void>( context: context, builder: (BuildContext context) { int? selectedRadio = 0; return AlertDialog( content: StatefulBuilder( builder: (BuildContext context, StateSetter setState) { return Column( mainAxisSize: MainAxisSize.min, children: List<Widget>.generate(4, (int index) { return Radio<int>( value: index, groupValue: selectedRadio, d: (int? value) { setState(() => selectedRadio = value); }, ); }), ); }, ), ); }, );
خیلی خب امیدوارم مطلب براتون مفید واقع شده باشه و حتما از بیلدر ها استفاده کنید