فلاتر : چرا برای شروع برنامه نویسی Flutter را انتخاب کردم؟

سال‌های گذشته فریمورک‌های زیادی با شعار Multi Platform و اینکه “یک بار بنویس و چند خروجی بگیر” معرفی شدند و من که سال‌های زیادی با استفاده از جاوا، اپلیکیشن‌های اندروید می‌ساختم، دنبال یک راه‌حل خوب برای توسعه سریع‌تر و با Performance خوب می‌گشتم؛ ولی هر بار که سمت استفاده از این نوع فریمورک‌ها (مثل React Native یا Xamarin و…) می‌رفتم، می‌فهمیدم که شعارهاشون فقط در حد حرف هستند و در واقعیت عملی نمی‌شوند.من دیگه نسبت به همه این فریمورک‌ها بدبین شده بودم و یک جورهایی امیدم رو از دست داده بودم. حتی خیلی‌ها از من درباره فلاتر (Flutter) می‌پرسیدند و من می‌گفتم این هم حتما یکی مثل بقیه هست و فایده نداره. جالب اینجاست که همه می‌گفتن فلاتر، فوق العاده و یک شاهکاره هست و خیلی تعریف‌های دیگه. ولی وقتی به اون‌ها می‌گفتم نمونه کاری دارید؟ جوابشون نه بود (فقط شنیده بودن فلاتر خوبه). چون تجربه همین تعریف و تمجید‌ها رو از React Native هم داشتم، می‌گفتم پس دوباره این بچه‌ها یه پروژه Hello World با فلاتر زدند، جو گرفتتشون و میگن عالیه!تا اینکه یه روز که سرم خلوت شده بودم و وقت آزاد داشتم گفتم برم ببینم این فلاتر که همه میگن عالیه آیا واقعا میتونه به شعارهاش عمل کنه یا نه! من طبق تجربیاتم هیچوقت با توسعه یک اپلیکیشن ساده، یک فریمورک رو قضاوت نمی‌کنم و تا اپلیکیشن درست حسابی باهاش ننویسم، نمی‌تونم درباره ی مزیت‌ها و معایبش نظر بدم.اولین پروژه با فلاتر – جذاب و دوست داشتنیخلاصه سرتون رو درد نیارم، چون شنیده بودم قدرت فلاتر در پیاده سازی رابط کاربری نهفته شده، رفتم و پیچیده‌ترین و زیباترین طرحی که توی Dribble پیدا کردم (عکسش رو پایین قرار دادم) رو شروع کردم به پیاده سازی و در حین پیاده سازی اینطوری ????? شدم! انگار که نیمه‌ی گمشده ی خودم رو بعد از سال‌ها پیدا کرده بودم.لینک طرح در وب سایت دریبلهمه کسانی که تجربه برنامه نویسی موبایل (IOS و Android) دارن، با دیدن طرح بالا متوجه میشن که چقدر پیاده‌سازی همچین طرحی سخت و دشوار هست. ولی جالبه بدونید یادگیری و پیاده سازی این طرح با فلاتر برای من که همزمان با پیاده سازی داشتم یاد می‌گرفتم فقط ۲ روز طول کشید!پروژه تلوبیون با فلاتر – چالشی سنگین در ۳ هفتهبعد از این پروژه فهمیدم فلاتر (Flutter) با فریمورک‌های معروف قبلی خیلی فرق داره و واقعا یک انقلاب در توسعه اپلیکیشن‌های موبایل و وب و حتی دسکتاپ ایجاد می‌کنه. بنابراین شروع کردم به تحقیق‌های بیشتر و عمیق‌تر که ببینم نحوه کارش چطور هست. در حال تحقیق و تفحص بودم که یک پیشنهاد کاری جذاب از تلوبیون دریافت کردم و عضوی از تیم اونجا شدم. اینکه میگم جذاب به این دلیل بود که ۱۴ میلیون نصب داشتند و رتبه الکسای ۳ در ایران که واقعا تجربه کاری بزرگی بوده و هست.اونجا به مدیر فنی (CTO) پیشنهاد کردم از فلاتر استفاده کنیم و مزیت‌هاش رو که گفتم با استقبال روبرو شدم و در مدت تنها ۳ هفته کل برنامه رو با فلاتر بازنویسی کردم و در نهایت منتشرش کردیم. این پروژه چالش واقعا بزرگی برای من بود و از طرفی ریسک زیادی هم داشت، چون تا به حال هیچ برنامه‌ای در ایران با ۱۴ میلیون نصب فعال، با فریمورک نوپایی مثل فلاتر پیاده سازی نشده بود.فلاتر (Flutter) چیست؟فلاتر یک فریمورک مشهور برای توسعه اپلیکیشن‌های موبایل، وب و دسکتاپ هست که در سال ۲۰۱۷ اولین نسخه‌اش توسط گوگل منتشر شد. اگر اولین صفحه از مستندات فلاتر رو مطالعه کرده باشید متوجه خواهید شد که شرکت گوگل، فلاتر رو یک Ui Toolkit معرفی کرده (ابزاری برای توسعه رابط کاربری).چرا فلاتر ابزاری برای توسعه رابط کاربری معرفی شده؟بر خلاف فریمورک‌های مشهور دیگه در زمینه توسعه اپلیکیشن‌های موبایل، فلاتر کدهای مربوط به پیاده سازی رابط کاربری شما رو تبدیل به کدهای پلتفرم Native نمی‌کنه بلکه تمامی اجزای تشکیل دهنده رابط کاربری رو خودشون از صفر پیاده سازی کردند و مستقیما توسط یک موتور گرافیکی ۲ بعدی به نام Skia رندر میشن. اما بقیه بخش‌های تشکیل دهنده اپلیکیشن مثل کار با api‌های پلتفرم (مثلا بلوتوث، دوربین یا file manager) کاملا با زیرساخت نیتیو پیاده میشن. به همین دلیل گوگل، فلاتر رو یک فریمورک Ui معرفی می‌کنه. طبق تجربه‌ای که من داشتم، سرعت رندر رابط کاربری‌های پیچیده و انیمیشن‌ها، سرعتی حتی بیشتر از native در اندروید داشت. دلیلش هم اینه که درصد بسیار زیادی عملیات رندرینگ توسط GPU و موتور گرافیک Skia انجام میشه.اسکیا Skia چیست؟اسکیا (Skia) یک کتابخانه متن باز (Open Source) ۲ بعدی است که روی پلتفرم‌های مختلف که سخت افزار و نرم افزاهای مختلفی دارند، تونایی اجرا دارد. در واقع Skia مثل یک موتور گرافیکی (Graphic Engine) عمل می‌کنه و جالبه بدونید در نرم افزارهایی مثل Google Chrome، Firefox، Android، Flutter، Chrome Os و بسیاری از پلتفرم‌های دیگه، برای اجرای انیمیشن‌ها و رندرینگ از اسکیا استفاده می‌کنند.زبان دارت (Dart) چیست؟دارت زبانی هست که توسط گوگل برای توسعه نرم افزارهای سمت کلاینت طراحی شد ولی برای توسعه بک اند (Back End) وب و اپلیکیشن‌های دسکتاپ هم قابل استفاده است. دارت یک زبان شی گرای کامپایلری با قابلیت Garbage Collection سریع با شیوه نگارش شبیه C هست. این زبان هم می‌تونه به زبان ماشین و هم جاوا اسکریپت کامپایل بشه.زبان Dart قابلیت‌های منحصر به فردی داره که بسیار برای من جذاب بودند، مثلا اینکه به دو روش JIT (JUST IN TIME) و AOT (Ahead Of Time) می‌تونه کامپایل بشه اونم مستقیما به زبان ماشین!JIT: یعنی زمان اجرا. این کامپایلر رو موقع توسعه و تست اپ استفاده می‌کنید و به این شکل کار می‌کنه که یک ماشین مجازی (Virtual Machine) ساخته می‌شه و کدهای شما رو زمان اجرا به زبان ماشین کامپایل می‌کنه و از قابلیت‌هاش اینه که بعد از هر تغییر با ذخیره کدها، تغییرات روی پروژه لحاظ می‌شه. همچنین به راحتی می‌تونید debug کنید. سرعت اجرای نرم افزار در jit به دلیل کامپایل زمان اجرا بسیار پایین‌تر از AOT هست. به همین دلیل فقط مناسب فاز توسعه و تست نرم افزار هست.AOT: این نوع کامپایل رو باید زمانی استفاده کنید که مرحله توسعه و تست نرم افزارتون به اتمام رسیده و می‌خواید اپلیکیشن یا کدهای بک اند خودتون رو منتشر کنید. این کامپایلر تمامی کدهای شما رو بازبینی و سپس در یک فاز مستقیما به زبان ماشین تبدیل می‌کنه. به همین دلیل بعد از کامپایل به روش AOT سرعت شروع و اجرای نرم افزارتون به شدت افزایش پیدا می‌کنه.مسیر یادگیری فلاتر (Flutter)برای یادگیری فلاتر باید این مسیر رو دنبال کنید:آشنایی به مبانی کامپیوتر: مفاهیمی مثل نحوه عملکرد و کاربرد کامپایلر یا مباحث ساده‌تر مثل آشنایی با نحوه عملکرد سیستم عامل، CPU، Memory و …تسلط به مفاهیم شی گراییزبان دارت (Dart)آشنایی با نحوه عملکرد فریمورک Flutterآشنایی با مفاهیم State Management و Widgetکسب تخصص در زمینه‌های مختلف فریمورک فلاتر مثل معماری‌های نرم افزاری، مدیریت Stateها، پلاگین‌ها و