وضعیت برنامه های Flutter چطور حفظ کنیم؟
وضعیت برنامه های Flutter می تواند کمک کنه تا مشکلی که اندروید و iOS در فرآیندهای برنامه های خود برای بهینه سازی استفاده می کنند و از منابع مختل می کنند را برطرف کند.
این سیستم ها میتوانند برنامهها را در پسزمینه بکشند تا حافظه و CPU بیشتری برای پیشزمینه به دست آورد. یک برنامه کشته شده زمانی که کاربر آن را بازگرداند از ابتدا شروع میشود.
با این حال، کاربر انتظار دارد به جای شروع دوباره، همان حالت برنامه را ببیند که وقتی آن را ترک کرد.
نحوه حفظ وضعیت برنامه های Flutter:
وضعیت برنامه های فلاتر را در این آموزش و نحوه حفظ آن را هنگامی که سیستم تصمیم به کشتن آنها می گیرد، خواهیم دید. قراره باهم یاد بگیریم که چگونه:
1.محیط را تنظیم کنیم.
2.باید بخش های قابل بازیابی را کشف کنیم.
3.برنامه ها با بازیابی حالت پیاده سازی کنیم.
4.تست بازیابی حالت را انجام بدیم.
قبل از شروع آموزش بدانید:
حفظ وضعیت برنامه های فلاتر نیاز به پیش نیازهایی دارد.
توجه: برای دنبال کردن این آموزش به داشتن شاختی از فلاتر نیاز دارید. اگر یک مبتدی مطلق هستید، ابتدا آموزش شروع با فلاتر را بررسی کنید.
توجه: در این آموزش فرض میکنیم که روی macOS کار میکنید و برنامههایی برای اندروید و iOS میسازید. با این حال، شما میتوانید روی لینوکس یا ویندوز کار کنید
و فقط برای اندروید بیلد کنید. اگر چنین است، بخشهای مخصوص iOS را نادیده بگیرید و از میانبر کلید Shift-F10 به جای Control-R استفاده کنید.
همچنین می توانید همان برنامه را برای وب یا دسکتاپ بسازید، اما بازیابی حالت در آن پلتفرمها معنایی ندارد.
حین مسیر آموزش چکارهایی میکنیم؟
برای شروع شدن با کلیک روی دانلود مواد در بالا یا پایین آموزش، پروژه شروع را دانلود کنید. در این آموزش، شما یک برنامه لیست ToDo می سازید که به شما امکان می دهد
عنوان و تاریخ را برای هر مورد اضافه کنید. سپس، عملکرد بازیابی حالت را اضافه میکنید تا در صورت بسته شدن غیرمنتظره برنامه، هیچ داده مهمی را از دست ندهید.
ابتدا برنامه ساده را بررسی خواهید کرد.
پروژه شروع را باز کرده و اجرا کنید.
بعد می توانید از Control-R در اندروید استودیو استفاده کنید.
دکمه مثبت را فشار دهید و عنوانی را در گفتگوی جزئیات مورد تایپ کنید.
یک دیالوگ در بالای پشته ناوبری و متن عنوان مورد، حالت حافظه را تشکیل می دهد.
بنابراین، اکنون (عدم) ترمیم را آزمایش خواهید کرد!
برای هر دو پلتفرم باید جداگانه این کار را انجام دهید. تست در اندروید به تنظیمات Developer رفته و گزینه Don’t keep activities را فعال کنید.
سپس، برنامه خود را به جلو بیاورید. از دست دادن حالت را خواهید دید – برنامه از ابتدا شروع می شود و گفتگو بازیابی نمی شود:
برای شبیه سازی بازیابی یک فرآیند، باید برنامه خود را به پس زمینه ارسال کنید. سپس، یک برنامه دیگر را در پیش زمینه بیاورید. در نهایت به اپلیکیشن خود بازگردید. بازگشت از تغییر دهنده برنامه اخیر بدون دست زدن به هیچ برنامه دیگری کافی نیست. همچنین، برنامه خود را از برنامه های اخیر حذف نکنید. پس از آن سیستم حالت را بازیابی نمی کند.
توجه: پس از تست بازیابی حالت، گزینه Don’t keep activities را غیرفعال کنید! فعال کردن آن ممکن است باعث تخلیه باتری و از دست رفتن داده در سایر برنامهها شود. بسیاری از برنامه ها بازیابی حالت را به درستی انجام نمی دهند.
تست روی iOS
iOS گزینه ای برای اجرای عملیات کشتن مانند اندروید ندارد. شما باید چند کار دستی انجام دهید. با باز کردن ios/Runner.xcworkspace در Xcode شروع کنید. تنظیمات Build را مانند تصویر زیر روی Profile تنظیم کنید:
توجه داشته باشید که ساخت برنامه در حالت Profile زمان بیشتری نسبت به Debug نیاز دارد. در مورد اپلیکیشن ساده این آموزش، نباید تاثیر قابل اندازه گیری داشته باشد. اما، زمانی که روی پروژه های بزرگتر کار می کنید، ممکن است بخواهید به طور پیش فرض از حالت Debug استفاده کنید. در چنین مواردی، فقط در صورت نیاز می توانید به حالت نمایه بروید. در مرحله بعد، دکمه play (یا Command-R، نه Control مانند Android Studio!) را فشار دهید تا برنامه اجرا شود. دکمه مثبت را فشار دهید و عنوانی را در قسمت جزئیات آیتم تایپ کنید. با فشار دادن دکمه Home یا انجام یک حرکت، برنامه را به پس زمینه ارسال کنید. دکمه توقف (یا Command-.) را در Xcode فشار دهید. و در نهایت برنامه را با زدن نماد آن دوباره باز کنید. در این مرحله از Xcode برای راه اندازی برنامه استفاده نکنید! کشف وضعیت قابل بازیابی
قبل از شروع برنامه نویسی، به این فکر کنید که دقیقاً چه قسمت های قابل بازیابی برنامه شما هستند. یک نقطه شروع خوب این است که به دنبال StatefulWidgets بگردید. همانطور که از نام پیداست، آنها باید دارای حالت های قابل تغییر باشند. توجه داشته باشید که فقط حالت حافظه برای اهداف بازیابی مهم است. به مثال ساده با چک باکس نگاه کنید:
در اینجا، حالت بررسی شده را فوراً به روشی ثابت ذخیره می کنید، جایی مانند پایگاه داده محلی، فایل یا باطن. بنابراین، گنجاندن آن در منطق بازیابی منطقی نیست، حتی اگر یک چک باکس در StatefulWidget باشد. اکنون، به مثال دوم با یک چک باکس و یک دکمه برای commit وضعیت آن نگاه کنید:
در این حالت، حالت بین ضربه زدن روی یک چک باکس و یک دکمه فقط در حافظه وجود دارد. پس باید موضوع مرمت باشد. سایر منابع رایج حالت قابل بازیابی عبارتند از:
TextField (همراه با حالت های مبهم متن) دکمه های رادیویی ویجت های قابل گسترش و جمع شدنی (مانند کشو) ظروف قابل پیمایش (به عنوان مثال، ListViews) به آخرین گلوله توجه کنید. ظرف قابل پیمایش ممکن است در داخل StatelessWidget باشد. با این حال، موقعیت اسکرول آن یک حالت در حافظه است. در چنین حالتی، ممکن است بخواهید ویجت خود را به StatefulWidget تبدیل کنید و یک فیلد برای ScrollController به وضعیت آن اضافه کنید.
حالت قابل بازیابی بیش از محتوای ویجت را پوشش می دهد. پشته ناوبری نیز یک حالت در حافظه است. کاربران انتظار دارند به همان مکانی که قبل از ترک اپلیکیشن بوده اند بازگردند. توجه داشته باشید که دیالوگ ها – مانند پاپ آپ ها و مدال ها – در پشته نیز هستند.
اجرای احیای وضعیت
توجه: تغییراتی که با راهاندازی مجدد داغ و ویژگیهای بارگذاری مجدد داغ اعمال میکنید، وقتی فرآیند برنامه از بین میرود، درست مانند حالت ذخیرهنشده در حافظه، از بین میروند. همیشه قبل از آزمایش بازیابی حالت، برنامه خود را با استفاده از Control-R یا دکمه پخش سرد شروع کنید. در نهایت، می توانید با قرار دادن MaterialApp در main.dart، دستان خود را کثیف کنید. جایگزین // TODO: با restorableScopeId با خط کد زیر جایگزین کنید:
این می تواند هر رشته غیر قابل تهی باشد. اگر می خواهید تغییرات انجام شده در برنامه را آزمایش کنید، برنامه را متوقف کرده و با کمک Control-R یا Command-R در macOS آن را دوباره اجرا کنید. به دقت نگاه کنید، و خواهید دید که هنوز هیچ اثر قابل مشاهده ای وجود ندارد. restorationScopeId قابلیت بازیابی حالت را برای ویجتهای نسل فعال میکند. همچنین بازیابی اولیه پشته ناوبری را روشن می کند.
اگر دوست داری بیشتر با فلاتر آشنا بشی و سورس های متعدد رو بتونی دریافت کنی حتما به فلاتر فارسی سر بزن.
دیدگاهتان را بنویسید