سوالات مصاحبه برنامه نویس فلاتر
اگر به عنوان یک برنامه نویس فلاتر قصد دارید به مصاحبه کاری بروید و نمی دونید قراره ازتون چه سوالی میپرسن ما براتون لیستی از سوالات و پاسخهای مصاحبه فلاتر متداول در زیر آمده است رو جمع بندی کردیم و بطور کامل به مهمترین سوالات یک توسعه دهنده فلاتر میپردازیم.
فهرست سوالات برنامه نویسان فلاتر
1) فلاتر چیست؟
Flutter یک UI toolkit برای ایجاد برنامه های کاربردی موبایل زیبا ، سریع و native است که دارای یک زبان برنامه نویسی و codebase واحد است. همچنین یک فریمورکopen source است که توسط Google توسعه یافته است. به طور کلی ، Flutter یک زبان نیست بلکه یک SDK است . برنامه های Flutter از زبان برنامه نویسی Dart برای ایجاد یک برنامه استفاده می کنند. اولین نسخه آلفا Flutter در مه 2017 منتشر شد.
Flutter عمدتا برای برنامه های موبایل دو بعدی بهینه شده که می توانند در هر دو سیستم عامل Android و iOS اجرا شوند. ما همچنین می توانیم از آن برای ساخت اپلیکیشن های full-featured از جمله دوربین ، ذخیره سازی ، موقعیت جغرافیایی ، شبکه ، SDK هایthird party و موارد دیگر استفاده کنیم.
2) دارت چیست؟
دارت یک زبان برنامه نویسی همه منظوره (general purpose) و شی گرا و C-style syntax است. همچنین open source است و توسط گوگل در سال 2011 توسعه یافته است. هدف از برنامه نویسی دارت ایجاد UI (رابط کاربری) frontend برای وب و اپلیکیشن های تلفن همراه است. زبان دارت را می توان هم AOT (Ahead-of-Time) و هم JIT (Just-in-Time) کامپایل کرد.
3) آیا باید دارت را برای فلاتر یاد بگیرم؟
بله ، یادگیری زبان دارت برای ساخت برنامه های Flutter بسیار ضروری است.
4) آیا Flutter رایگان است؟
بله . Flutter هم رایگان و هم open source است.
5) ویجت های Flutter چیست؟
یک برنامه Flutter همیشه به عنوان درختی از ویجت ها در نظر گرفته می شود. هر زمان که قصد ساختن هر چیزی در Flutter را دارید ، در داخل ویجت قرار می گیرد. ویجت ها توضیح می دهند که view برنامه شما با پیکربندی و وضعیت فعلی چگونه باید باشد. هنگامی که تغییری در کد ایجاد کردید ، ویجت با محاسبه تفاوت ویجت قبلی و فعلی توضیحات آن را بازسازی کرده تا حداقل تغییرات برای ارائه در UI برنامه مشخص شود.
ویجت ها برای ساختن برنامه با یکدیگر به صورت تودرتو (nested) هستند. این بدان معناست که root اپلیکیشن شما ، یک ویجت است و تا انتها نیز یک ویجت است. به عنوان مثال ، یک ویجت می تواند چیزی را نمایش دهد ، می تواند طراحی را تعریف کند ، می تواند تعامل (interaction)را انجام دهد و غیره.
6) از ویجت های Stateful و Stateless چه می دانید؟
ویجت Stateful ، اطلاعات state را درون خود دارد. از آن به عنوان پویا (dynamic) یاد می شود زیرا می تواند دیتاهای داخلی را در طول عمر ویجت تغییر دهد. ویجتی که به ما اجازه می دهد صفحه را refresh کنیم ، ویجت Stateful نامیده می شود. این ویجت متد build() ندارد. ولی دارای متد createState() است که کلاسی را باز می گرداند که از کلاس State Class فلاتر extend شده است. نمونه های ویجت Stateful عبارتند از Checkbox ، Radio ، Slider ، InkWell ، Form و TextField.
ویجت Stateless هیچگونه اطلاعات state ندارد. در طول عمر خود ثابت می ماند. نمونه های ویجت Stateless عبارتند از Text ، Row ، Column ، Container و غیره . اگر صفحه یا ویجت دارای محتوای ثابت است ، باید از ویجت Stateless استفاده شود ، اما اگر می خواهید محتوا را تغییر دهید ، باید ویجت مورد نظر از نوع Stateful باشد.
7) بهترین Editorها برای توسعه فلاتر کدامند؟
ابزارهای توسعه Flutter باعث توسعه سریعتر Flutter شده و در نتیجه گردش کار توسعه دهنده را تقویت می کند. Flutter IDE و ابزارها به برخی از پلاگین ها برای توسعه اپلیکیشن نیاز دارند. پلاگین ها به ما کمک می کنند تا کامپایل Dart ، آنالیز کد و توسعه Flutter را شروع کنیم. IDE محبوب برای توسعه Flutter به شرح زیر است:
- Android Studio
- Visual Studio
- IntelliJ IDEA
- Xcode
8) فایل pubspec.yaml چیست؟
فایل پیکربندی پروژه است که در حین کار با پروژه ، Flutter از آن بسیار استفاده خواهد کرد. این فایل به شما این امکان را می دهد که برنامه شما چگونه کار می کند. همچنین به ما اجازه می دهد تا محدودیت هایی را برای برنامه تعیین کنیم. این فایل شامل موارد زیر است:
- تنظیمات کلی پروژه مانند نام ، توضیحات و نسخه پروژه.
- وابستگی های پروژه
- assets پروژه (به عنوان مثال ، تصاویر ، صدا و غیره).
9) package ها و plugin ها در فلاتر را توضیح دهید ؟
یک package مجموعه ای از انواع مشابه کلاس ها ، interface ها و sub-package ها است. پکیج ها و پلاگین ها به ما کمک می کنند تا برنامه را بدون نیاز به توسعه همه چیز از پکیج ها بسازیم. در Flutter ، پکیج ها به شما امکان می دهد ویجت ها یا قابلیت های جدیدی را به برنامه وارد کنید. پکیج ها و پلاگین ها فرق بسیار کمی با هم دارند. به طور کلی ، پکیج ها کامپوننت های جدید یا کدی هستند که به زبان دارت نوشته شده اند ، در حالی که پلاگین ها با استفاده از کد native قابلیت های بیشتری را در دستگاه ایجاد می کنند. در DartPub ، پکیج ها و پلاگین ها هر دو به عنوان package شناخته شده است.
10) مزایای Flutter چیست؟
مزایای جذاب فریمورک Flutter به شرح زیر است:
توسعه Cross-platform : این ویژگی به Flutter اجازه می دهد تا یکبار کد را بنویسد ، حفظ کند و می تواند در پلتفرم های مختلف اجرا شود. که در نهایت باعث صرفه جویی در وقت ، تلاش و پول توسعه دهندگان می شود.
توسعه سریعتر: عملکرد برنامه Flutter سریع است. Flutter برنامه را با استفاده از کتابخانه arm C/C++ کامپایل می کند که آن را به کد ماشین نزدیکتر می کند و performance native بهتری به برنامه می بخشد.
انجمنی خوب: Flutter دارای پشتیبانی community خوبی است که در آن توسعه دهندگان می توانند مسائل را بپرسند و به سرعت نتیجه بگیرند.
Live and Hot Reloading: این روند توسعه برنامه را بسیار سریع می کند. این ویژگی به ما اجازه می دهد تا به محض ایجاد تغییرات ، کد را تغییر داده یا به روز کنیم.
حداقل کد: برنامه Flutter توسط زبان برنامه نویسی Dart توسعه یافته است ، که از کامپایل JIT و AOT برای بهبود کلی زمان راه اندازی ، عملکرد و تسریع performance استفاده می کند. JIT سیستم توسعه را بهبود می بخشد و UI را بدون تلاش بیشتر برای ایجاد یک سیستم جدید، تازه می کند.
UI متمرکز: دارای UI عالی است زیرا از ویجت design-centric ، ابزارهای high-development ، API های پیشرفته و بسیاری ویژگی های دیگر استفاده می کند.
مستندات: Flutter پشتیبانی documentation بسیار خوبی دارد. ما می توانیم هر چیز نوشته شده در یک جا را ، بدست آوریم.
11) چگونه می توانید Flutter را نصب کنید؟
برای نصب و اجرای Flutter در سیستم ویندوز ، ابتدا باید این شرایط را برای محیط توسعه خود برآورده کنید.
سیستم عامل | Windows 7 یا بالاتر (همچنین می توانید از سیستم عامل Mac یا Linux استفاده کنید.) |
فضای آزاد دیسک | 400 مگابایت (فضای دیسک ، IDE یا ابزارها را شامل نمی شود). |
ابزارها | 1. Windows PowerShell 2 Git for Windows 2.x (در اینجا ، از گزینه Git from Windows Command Prompt استفاده کنید). |
SDK | Flutter SDK برای ویندوز |
IDE | Android Studio (رسمی) |
برای نصب کامل نصب فلاتر آموزش نصب فلاتر را کلیک کنید.
12) بین Flutter و React Native کدام بهتر است؟
Flutter و React Native هر دو برای توسعه برنامه native hybrid از یک codebase واحد استفاده می شوند. این برنامه ها می توانند بر روی سیستم عامل های iOS و Android اجرا شوند.
React Native توسط فیس بوک توسعه یافته است ، در حالی که فریمورک Flutter برای اولین بار توسط Google معرفی شده است. بنابراین ، هر دو فریمورک دارای feature و انجمن بسیار خوبی هستند.
Flutter از زبان Dart برای ایجاد برنامه ها استفاده می کند ، در حالی که React Native از JavaScript برای ساخت برنامه ها استفاده می کند.
از نظر توسعه دهنده ، انتخاب بین آنها بسیار دشوار است. بنابراین ، انتخاب برنده بین Flutter و React Native بسیار چالش برانگیز است.
بررسی جامع فلاتر یا ریکت نیتیو را بخوانید
13) چرا ساخت اولین برنامه Flutter اینقدر طول می کشد؟
وقتی برنامه Flutter را برای اولین بار می سازید ، زمان بیشتری طول می کشد. به این دلیل است که Flutter فایل APK یا IPA مخصوص دستگاه را ایجاد کرده است. بنابراین ، Gradle و Xcode برای ساخت فایل ، مورد استفاده قرار می گیرند و زمان زیادی طول می کشد.
14) چرا پوشه Android و iOS در پروژه Flutter قرار دارد؟
Android: این پوشه دارای یک پروژه کامل Android است. هنگام ایجاد برنامه Flutter برای Android استفاده می شود. وقتی کد Flutter در کد اصلی کامپایل شود ، به این پروژه Android تزریق می شود ، بنابراین نتیجه یک برنامه native اندروید خواهد بود. برای مثال: وقتی از شبیه ساز Android استفاده می کنید ، این پروژه Android برای ساخت برنامه Android استفاده می شود ، که بیشتر در دستگاه مجازی Android (AVD)قرار می گیرد.
iOS: این پوشه دارای یک پروژه کامل Mac است و هنگام ساخت برنامه Flutter برای iOS استفاده می شود. مشابه پوشه Android است که هنگام توسعه برنامه برای Android استفاده می شود. وقتی کد Flutter در کد native کامپایل شود ، در این پروژه iOS تزریق می شود ، بنابراین نتیجه یک برنامه native iOS است. ایجاد یک برنامه Flutter برای iOS تنها زمانی امکان پذیر است که شما با macOS و Xcode IDE در حال کار باشید.
15) انیمیشن Tween چیست؟
شکل کوتاه شده in-betweening است. در انیمیشن tween ، لازم است ابتدا و انتهای انیمیشن مشخص شود. این بدان معناست که انیمیشن با مقدار Start شروع می شود ، سپس از طریق یک سری از مقادیر intermediate حرکت می کند و در نهایت به مقدار end می رسد. همچنین جدول زمانی و منحنی را ارائه می دهد که زمان و سرعت انتقال را مشخص می کند. widget framework، محاسبه نحوه انتقال از ابتدا و انتها را ارائه می دهد.
16) Hot Reload را در Flutter توضیح دهید؟
ویژگی hot reload به شما امکان می دهد به سرعت و به آسانی آزمایشی را در پروژه انجام دهید. این به ایجاد UI ، افزودن فیچرهای جدید ، رفع Bugها و توسعه سریع برنامه کمک می کند. برای بارگیری hot reload برنامه Flutter ، مراحل زیر را انجام دهید:
- برنامه را در یک ویرایشگر ساپورت کننده فلاتر یا ترمینال ویندوز اجرا کنید.
- هر یک از فایل های دارت را در پروژه تغییر دهید.
- اگر از IDE استفاده می کنید که Flutter را پشتیبانی می کند ، سپس Save All را انتخاب کنید یا روی دکمه Hot Reload در نوار ابزار کلیک کنید. بلافاصله ، می توانید نتیجه را در شبیه ساز یا دستگاه واقعی خود مشاهده کنید.
17) چند برنامه محبوب که از Flutter استفاده می کنند نام ببرید؟
امروزه بسیاری از سازمانها از Flutter برای ساختن برنامه استفاده می کنند. برخی از محبوب ترین برنامه های ساخته شده بر روی Flutter به شرح زیر است:
- Google Ads
- Reflectly
- Alibaba
- Birch Finance
- Coach Yourself
- Tencent
- Watermaniac
18) آخرین نسخه Flutter SDK چیست؟
آخرین نسخه فریمورک فلاتر ، 2.5.2 Flutter- v در 30 سپتامبر 2021 است.برای نصب کامل نصب فلاتر آموزش نصب فلاتر را کلیک کنید.
19) پکیج های مشهور دیتابیسFlutter را نام ببرید؟
پرکاربردترین و محبوب ترین بسته های پایگاه داده مورد استفاده در Flutter به شرح زیر است:
پایگاه داده sqflite: به شما امکان دسترسی و modify پایگاه داده SQLite را می دهد.
پایگاه داده Firebase: این امکان را به شما می دهد تا به پایگاه داده ابری دسترسی داشته و آن را modify کنید.
20) کدام نوع از انیمیشن ها به شما امکان می دهد رفتارهای دنیای واقعی(real-world) را نشان دهید؟
انیمیشن مبتنی بر فیزیک (Physics-based) به شما امکان می دهد رفتارهای real-world را در فلاتر نشان دهید.
21) تفاوت بین Hot Restart و Hot Reload چیست؟
موارد زیر تفاوت های اساسی بین Hot Restart و Hot Reload است:
Hot Restart | Hot Reload |
عمدتا با مقدار state کار می کند. | با یک کلید r کوچک در ترمینال یا commands prompt کار می کند. |
به توسعه دهندگان اجازه می دهد یک برنامه کاملاً کامپایل شده دریافت کنند زیرا مقادیر حفظ شده state را از بین می برد و آنها را به صورت پیش فرض تنظیم می کند. در هر بار راه اندازی مجدد ، درخت ویجت برنامه ما به طور کامل با کد تایپ شده جدید بازسازی می شود. | ویژگی Hot Reload به ما اجازه می دهد تا کد جدید اضافه شده را سریع در فایل کامپایل کرده و آنها را به ماشین مجازی دارت (DVM) ارسال کنیم. پس از اتمام به روزرسانی DVM ، بلافاصله UI برنامه را به روز می کند. |
زمان بیشتری نسبت به Hot Reload طول می کشد تا برنامه را کامپایل و به روز کنید. | به ایجاد UI ، افزودن feature های جدید ، رفع bug ها و توسعه سریع برنامه کمک می کند. |
22) در قطعه کد زیر ، makeMangoShake() را با استفاده از syntax مختصر ” fat arrow” به یک گیرنده بنام mange shake تبدیل کنید.
class Recipe {
int mango;
int milk;
int sugar;
Recipe(this.mango, this.milk, this.sugar);
int makeMangoShake() {
return mango+milk+sugar;
}
}
Fat Arrow (=>) زمانی استفاده می شود که متد شامل یک خط کد باشد. ما می توانیم از آن با استفاده از syntax زیر استفاده کنیم:
1 | methodName(parameters) => statement; |
لازم به ذکر است که ما نمی توانیم از کلید واژه return با Fat Arrow (=>) استفاده کنیم. پس از تبدیل makeMangoShake() به یک Fat Arrow ، مانند کد زیر به نظر می رسد:
int get mangoshake => mango + milk + sugar;
23) تفاوت بین توابع main()و runApp() در Flutter چیست؟
ما می توانیم توابع main و runApp را در Flutter به شکل زیر متمایز کنیم:
تابع main() مسئول شروع برنامه است. بدون تابع main() ، ما نمی توانیم هیچ برنامه ای را در Flutter بنویسیم.
عملکرد runApp() مسئول بازگرداندن ویجت هایی است که به عنوان root درخت ویجت به screen متصل شده اند و روی screen ، نمایش داده می شوند.
24) چه زمانی باید از mainAxisAlignment و crossAxisAlignment استفاده کنید؟
ما می توانیم از crossAxisAlignment و mainAxisAlignment برای کنترل چگونگی همترازی ویجت های row و column بر اساس انتخاب خودمان استفاده کنیم.
محور کراس (cross-axis) row به صورت عمودی و محور اصلی(main axis) به صورت افقی اجرا می شود. برای درک بهتر تصویر زیر را ببینید.
cross-axis ستون (column) به صورت افقی و main axis به صورت عمودی اجرا می شود. برای درک بهتر تصویر زیر را ببینید.
25) تفاوت بین SizedBox و Container چیست؟
Container در فلاتر ، یک ویجت parent است که می تواند شامل چندین ویجت child باشد و آنها را به طور بهینه از طریق width ، height ، padding ، background color و غیره مدیریت کند. اگر ویجتی داریم که نیاز به یک ظاهر طراحی شده در پس زمینه (background styling) دارد ممکن است دارای محدودیت رنگ ، شکل یا اندازه باشد ، و آن را در یک ویجت container پوشش (wrap)دهیم.
ویجت SizedBox در Flutter یک box است که سایز مشخصی دارد. برخلاف Container ، به ما اجازه نمی دهد color یا decoration ویجت را تعیین کنیم. ما فقط می توانیم از آن برای اندازه ویجت child استفاده کنیم. این بدان معناست که ویجت child خود را مجبور می کند که عرض یا ارتفاع خاصی داشته باشد.
26) Stream در Flutter چیست؟
Stream ، دنباله ای از رویدادهای غیرهمزمان (asynchronous events) است. در واقع یک نوع pipe است که در یک طرف آن مقداری در انتهای آن قرار می دهیم و اگر در طرف دیگر شنونده (listener)داشته باشیم ، این مقدار را دریافت خواهد کرد. ما می توانیم چندین شنونده را در یک stream نگه داریم ، و همه آنها هنگامی که در pipeline قرار می گیرند ، ارزش یکسانی دریافت می کنند.
ما می توانیم stream را با استفاده از await for یا listen() از Stream API پردازش کنیم. راهی برای پاسخگویی به خطاها وجود دارد. ما می توانیم stream ها را از جهات مختلف ایجاد کنیم ، اما می توان آنها را به یک شکل مورد استفاده قرار داد. مثال زیر را ببینید:
Future<int> sumStream(Stream<int> stream) async {
var sum = 0;
await for (var value in stream) {
sum = sum + value;
}
return sum;
}
27) انواع مختلف stream ها را توضیح دهید؟
stream ها می توانند دو نوع باشند که عبارتند از:
1- Single subscription streams
رایج ترین نوع stream است که شامل دنباله ای از event ها است . همچنین رویدادها را به ترتیب صحیح و بدون از دست دادن هیچکدام از آنها ارائه می دهد. اگر هیچ یک از رویدادها missing شد ، بقیه stream بی معنی است. این stream عمدتا برای خواندن یک فایل یا دریافت درخواست وب استفاده می شود. یک بار گوش می دهد ، و اگر دوباره گوش می دهد ، به معنای از دست دادن یک initial event است. هنگامی که شروع به گوش دادن می کند ، داده ها fetch شده و به صورت قطعات (chunk) ارائه می شوند.
2- Broadcast streams
یک نوع stream است که برای پیام های منحصر به فرد استفاده می شود و می تواند بدون اطلاع از event های قبلی، به طور همزمان مدیریت شود. همچنین می تواند چندین شنونده (listener) داشته باشد تا به طور همزمان گوش دهند ، و ما می توانیم پس از لغو اشتراک (subscription)قبلی ، دوباره گوش دهیم. رویدادهای ماوس در مرورگر نوعی از این stream است.
28) چرا متد build() بر روی State هست ولی در StatefulWidgets نیست؟
دلیل اصلی این امر این است که StatefulWidget از کلاس State جداگانه ای استفاده می کند بدون اینکه متدی در داخل body خود ایجاد کند. این بدان معناست که همه فیلدهای داخل ویجت تغییر ناپذیر هستند و شامل تمام زیرمجموعه های آن می شوند.
از سوی دیگر ، StatelessWidget ساختار و متد های مرتبط با آن را در داخل body خود دارد. این به دلیل ماهیت StatelessWidget است که با استفاده از اطلاعات ارائه شده به طور کامل روی صفحه نمایش داده می شود. همچنین اجازه نمی دهد در آینده اطلاعات State تغییر کند.
StatefulWidget به ما امکان می دهد اطلاعات State را در طول برنامه تغییر دهیم. بنابراین ، ذخیره سازی در متد ساخت برای برآوردن شرایط کلاس ویجت که در آن همه fields ها تغییر ناپذیر هستند ، مناسب نیست. این دلیل اصلی معرفی کلاس State است. در اینجا ، ما فقط باید تابع createState() را override کنیم تا State تعریف شده را با StatefulWidget متصل (attach) کنیم ، و سپس همه تغییرات مورد انتظار در یک کلاس جداگانه اتفاق می افتد.
29) حالت های مختلف ساخت در Flutter چیست؟
ابزار Flutter هنگام کامپایل برنامه از سه حالت پشتیبانی می کند. بسته به جایی که در چرخه توسعه هستیم ، می توان این حالت های کامپایل را انتخاب کرد. نام حالت ها عبارتند از:
- Debug
- Profile
- Release
30) تفاوت اپراتورهای”؟” و “؟؟” را توضیح دهید.
اپراتور ? | اپراتور ?? |
” ?” عملگر برای ارزیابی و بازگشت مقدار بین دو عبارت بر اساس شرایط داده شده استفاده می شود. می توان از آن به عنوان زیر استفاده کرد:وضعیت expr1 : expr2?این عملگر ابتدا شرط را بررسی می کند و اگر درست باشد ، expr1 را ارزیابی کرده و مقدار آن را برمی گرداند (در صورت مطابقت شرط). در غیر این صورت ، مقدار expr2 را ارزیابی و برمی گرداند. | عملگر “?” برای ارزیابی و بازگشت مقدار بین دو عبارت استفاده می شود. می توان از آن به عنوان زیر استفاده کرد:expr2 ?? expr1این عملگر ابتدا عبارت 1 را بررسی می کند و در صورت non-null بودن ، مقدار آن را برمی گرداند. در غیر این صورت ، مقدار عبارت 2 را ارزیابی و برمی گرداند. |
31) چرا به mixins نیاز داریم؟
دارت از چند وراثتی پشتیبانی (multiple inheritance) نمی کند. بنابراین برای پیاده سازی چند وراثتی در Flutter/Dart ، ما به mixins نیاز داریم. Mixins راهی برای نوشتن کد کلاسهای قابل استفاده مجدد در کلاس های چند وراثتی ارائه می دهد.
32) چرا از Ticker در Flutter استفاده می کنیم؟
Ticker در فلاتر نرخ refresh انیمیشن ما است. در واقع کلاسی است که سیگنال را در یک فاصله منظم ، یعنی حدود 60 بار در ثانیه ارسال می کند. ما می توانیم آن را با ساعت خود ، که در فواصل منظم تیک می زند، درک کنیم. در هر تیک ، Ticker یک متد callback با مدت زمان اولین تیک در هر ثانیه ، پس از شروع ارائه می دهد. حتی اگر Tickerها در زمان های مختلف شروع شوند ، همیشه به طور خودکار همگام سازی می شوند.
33) keys در فلاتر چیست و چه موقع باید از آن استفاده کرد؟
- keys به عنوان شناسه Widget ها ، Element ها و SemanticsNodes استفاده می شوند. هنگامی که یک ویجت جدید سعی می کند Element موجود را به روز کند ، می توانیم از آن استفاده کنیم. سپس ، key آن باید همان key ویجت فعلی مرتبط با Element باشد.
- key ها نباید بین elementهای یک parent متفاوت باشند.
- subclass های Key باید GlobalKey یا LocalKey باشند.
- key ها زمانی مفید هستند که بخواهیم مجموعه ای از ویجت ها از همان نوع را که state را نگهداری کرده ، دستکاری (مانند افزودن ، حذف یا مرتب سازی مجدد) کنیم.
34) چگونه می توانید کد را فقط در حالت debug mode اجرا کنید؟
برای اجرای کد فقط در حالت اشکال زدایی ، ابتدا باید dart foundation را به صورت زیر وارد کنیم:
import 'package:flutter/foundation.dart' as Foundation;
در مرحله بعد ، ما باید از kReleaseMode به شکل زیر استفاده کنیم:
if (Foundation.kReleaseMode){ // is Release Mode ??
print('release mode');
} else {
print('debug mode');
}
35) profile mode چیست و چه زمانی از آن استفاده می کنید؟
profile mode برای اندازه گیری performance برنامه های ما استفاده می شود. در این حالت ، برخی از قابلیت اشکال زدایی برای نمایش performance برنامه شما حفظ می شود. این حالت در emulator و simulator غیرفعال است زیرا نمایانگر performance واقعی نیستند.
برای کامپایل profile mode می توانیم از دستور زیر استفاده کنیم:
flutter run --profile
36) release mode چیست و چه زمانی از آن استفاده می کنید؟
release mode به ما امکان می دهد کدها را بهینه کرده و بدون هیچ گونه debug data به صورت کاملاً بهینه سازی شده تولید کنیم. در این حالت ، بسیاری از کد برنامه به طور کامل حذف یا بازنویسی می شود.
هنگامی که آماده انتشار برنامه هستیم ، از این حالت استفاده می کنیم. ما می توانیم از دستور زیر برای کامپایل release mode استفاده کنیم:
flutter run --release
37) تفاوت بین WidgetsApp و MaterialApp چیست؟
MaterialApp | WidgetsApp |
MaterialApp به همراه کتابخانهmaterial ، لایه ای است که در بالای WidgetsApp و کتابخانه آن ساخته شده است که طراحی متریال را پیاده سازی می کند که ظاهر یکدستی را برای برنامه ما در هر پلتفرمی فراهم می کند. | WidgetsApp برای basic navigation استفاده می شود که شامل بسیاری از ویجت های اساسی همراه با کتابخانه ویجت هایی است که Flutter برای ایجاد UI برنامه ما استفاده می کند. |
ابزارهای جالب بسیاری مانند Navigator یا Theme را برای توسعه برنامه ارائه می دهد. | کلاس WidgetsApp کلاس اصلی کلاس MaterialApp است. |
چندین ویجت را برای ساخت اپلیکیشن های material design ، تحت پوشش قرار می دهد. | چندین ویجت را برای ساخت اپلیکیشن را تحت پوشش قرار می دهد. |
38) BuildContext چیست؟
BuildContext در فلاتر بخشی از ویجت های موجود در Element tree است به طوری که هر ویجت ، BuildContext مخصوص خود را دارد. ما عمدتا از آن برای دریافت reference به ویجت یا theme دیگر استفاده می کنیم. به عنوان مثال ، اگر می خواهیم از element material design استفاده کنیم ، لازم است که آن را به scaffold ارجاع دهیم. که می توانیم آن را با استفاده از متد Scaffold.of (context) دریافت کنیم.
39) چه نوع Testهایی را می توانید در Flutter انجام دهید؟
تست یک Activity است که برای تأیید (verify)و اعتبار(validate) اپلیکیشن استفاده می شود و بدون اشکال است و نیازهای کاربر را برآورده می کند. به طور کلی ، ما می توانیم از این سه نوع آزمایش در Flutter استفاده کنیم:
تست های واحد(Unit Tests): یک function ، متد یا class واحد را آزمایش می کند. هدف آن اطمینان از صحت کد در شرایط مختلف است. این آزمایش برای بررسی اعتبار business logic استفاده می شود.
Widget Tests: یک ویجت را آزمایش می کند. هدف آن اطمینان از این است که UIویجت همانطور که انتظار می رود ظاهر شده و با سایر ویجت ها تعامل دارد.
Integration Tests: یک برنامه کامل یا بخش بزرگی از برنامه را تأیید می کند. هدف آن اطمینان از این است که همه ویجت ها و سرویس ها همانطور که انتظار می رود با هم کار می کنند.
Flutter همچنین یک additional testing ارائه می دهد که به عنوان یک آزمون طلایی شناخته می شود. هدف آن اطمینان از داشتن تصویری از ویجت یا صفحه نمایش است و بررسی اینکه آیا ویجت واقعی با آن مطابقت دارد یا خیر.
40) اپراتورهای Null-aware چیست؟
دارت اطلاعات مفیدی را برای رسیدگی به مقادیر null ارائه می دهد.
- عملگر تخصیص “=??” که تنها زمانی که آن متغیر خالی است مقدار را به یک متغیر اختصاص می دهد.
int a; // Initial value of a is null.
a ??= 5;
print(a); // It will print 5
عملگر “??” null-aware که برای ارزیابی و استفاده از مقدار بین دو عبارت استفاده می شود. ابتدا عبارت 1 را بررسی می کند و اگر غیر null باشد ، مقدار آن را برمی گرداند. در غیر این صورت ، مقدار عبارت 2 را ارزیابی و برمی گرداند:
print(3 ?? 5); // It will print 3
print(null ?? 5); // It will print 5
نتیجه گیری
در این آموزش بطور مفصل به مهمترین سوالات در مصاحبه برای برنامه نویسان فلاتر پرداختیم. اگر سوال دیگری بنظرتون مهم میاد حتما در بخش نظرات قرار دهید تا بررسی کنم. خوشحال میشم نظر خودتونو رو با من در میان بگذارید.
دیدگاهتان را بنویسید