حفظ وضعیت یک StatefulWidget

تعداد بازدید ها : 1,669 بازدید
 حفظ وضعیت یک StatefulWidget

در صورتی که از ویجت های StatefulWidget استفاده می نمایید در برخی مواقع پیش می آید که مایلید وضعیت استیت ها حفظ شوند و مقادیر خود را از دست ندهند . به عنوان مثال زمانی که بین Tab های یک اپلیکیشن در حال جابجایی هستید ، نباید پس از اولین بارگیری اطلاعات ، در نوبت های بعد ، اطلاعات به صورت خودکار مجدد بارگیری شود . در این حالت طبق دستورالعمل زیر عمل نمایید :

۱- دستور (AutomaticKeepAliveClientMixin) را به تعریف State اضافه نمایید .

مانند مثال زیر :

  1. class MyProducts extends StatefulWidget {
  2. @override
  3. _MyProductsState createState() => _MyProductsState();
  4. }
  5. class _MyProductsState extends State<MyProducts> with AutomaticKeepAliveClientMixin<MyProducts>{
  6. @override
  7. // ignore: must_call_super
  8. Widget build(BuildContext context) {
  9. return Container();
  10. }
  11. }
class MyProducts extends StatefulWidget {
  @override
  _MyProductsState createState() => _MyProductsState();
}

class _MyProductsState extends State<MyProducts> with AutomaticKeepAliveClientMixin<MyProducts>{
  @override
  // ignore: must_call_super
  Widget build(BuildContext context) {
    return Container();
  }
}

۲- تابع wantKeepAlive را override کنید و برابر true قرار دهید .

مانند مثال زیر :

  1. class MyProducts extends StatefulWidget {
  2. @override
  3. _MyProductsState createState() => _MyProductsState();
  4. }
  5. class _MyProductsState extends State<MyProducts> with AutomaticKeepAliveClientMixin<MyProducts>{
  6. @override
  7. // ignore: must_call_super
  8. Widget build(BuildContext context) {
  9. return Container();
  10. }
  11. @override
  12. // TODO: implement wantKeepAlive
  13. bool get wantKeepAlive => true;
  14. }
class MyProducts extends StatefulWidget {
  @override
  _MyProductsState createState() => _MyProductsState();
}

class _MyProductsState extends State<MyProducts> with AutomaticKeepAliveClientMixin<MyProducts>{
  @override
  // ignore: must_call_super
  Widget build(BuildContext context) {
    return Container();
  }

  @override
  // TODO: implement wantKeepAlive
  bool get wantKeepAlive => true;
}

کار به پایان رسیده است و هم اکنون ویجت شما در فراخوانی های بعدی مقادیر خود را حفظ می کند . این موضوع در صرفه جویی مصرف پهنای باند و سرعت عمل اپلیکیشن اثر مثبتی دارد .

امیدوارم این مطلب برای شما مفید باشد .

می خوانم   پروژه مینی سبد خرید
محمدمجتبی جوارشکیان

محمدمجتبی جوارشکیان

من محمدمجتبی جوارشکیان ، کارشناس IT و فعال اجتماعی هستم و در حوزه معماری ، طراحی ، تحلیل گری ، مدلسازی و توسعه ی محیط های نرم افزاری فعالیت دارم. همانند سایر کارشناسان IT در تلاشم تا دنیا جای زیباتری برای زندگی باشد. بسیار خوشحال می شوم من را از انتقادات ، پیشنهادات و نظرات خود مطلع فرمایید. آدرس ایمیل : mjfakhr@yahoo.com

ارسال یک پاسخ

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

17 − 6 =