مقاله های سیسوگ, بلاگ خبری سیسوگ, توصیه شده

فلاتر (Flutter)، جانشین کیوت (Qt)؟

مقایسه QT و فلاتر

خیلی از مهندسین الکترونیک حتماً اسم Qt (کیوت) رو شنیدند، بخصوص اونایی که با سیستم عامل‌های امبدد یا سخت افزارهایی با سیستم عامل ، مثل رزبری پای.. کار کردند و می‌کنند.

ولی شاید خیلی از شما اسم فلاتر را هم نشنیده باشید!

فلاتر یک جایگزین ایده آل برای Qt هست که به نظر به‌زودی جایگزین اون هم خواهد شد!

به روز رسانی: فلاتر جایگزین ایده آلی برای UI (رابط کاربری) هست، نه تمام Qt.

به روز رسانی: هنوز تا پخته شدن اکوسیستم Flutter Desktop راه زیادی داریم و انواع مختلفی از پلاگین‌ها برای دسکتاپ باید تولید بشه، اما اگه پروژه شما بخش موبایل با UI پیچیده هم داره، استفاده از Flutter به شدت میتونه هزینه‌های توسعه رو کاهش بده.

 

داستان چیه؟

چند ماه پیش خبر رسید که شرکت Digia که مالک و توسعه دهنده اصلی Qt هست، میخواد پشتیبانی بلند مدتش رو از نسخه‌های اوپن سورس برداره و کاربران اوپن سورس رو مجبور کنه از نسخه 5.15 مهاجرت کنند به نسخه 6.

به روز رسانی: شرکت Digia مالک Qt نیست و از سال 2014 در تملک شرکت Qt هست.

این تصمیم اعتراضات زیادی رو برانگیخت، چرا؟ چون نسخه 6 خیلی از قابلیت‌های نسخه 5 رو نداشت و هنوز در حال توسعه بود (هنوز هم همینطوره).

به روز رسانی: قول داده شده در نسخه 6.2 این کاستی‌ها برطرف میشه و نسخه 6.2 در سپتامبر 2021 برنامه ریزی شده که منتشر بشه.

این تصمیم امنیت خیلی از پروژه ها رو تحت شعاع قرار داد، چونکه اگه مشکل امنیتی در نسخه ای از Qt باشه که پشتیبانی بلند مدت نداره، اون نسخه دیگه به روز رسانی امنیتی نمیشه!

همونطور که میدونید امنیت برای همه سیستم ها مهمه، بخصوص سیستم های صنعتی، بالاخص! که اخیرا باج گیری های امنیتی در ایران خیلی رواج پیدا کرده و هر روز خبری از هک شدن یک بیزینس معروف میشنویم!

به روز رسانی: برای دریافت آپدیت‌ها باید از نسخه های 6 به بعد استفاده کنید.

به روز رسانی: اگر به هر نحوی سیاست‌های شرکت کیوت به این سمت برود که ویژگی‌ها و اساس این کتابخانه را تجاری کند، در این صورت بر اساس تعهدات قانونی خود که در زمان دریافت امتیاز کیوت ارائه کرده است، موظف است کد‌های کیوت را با آخرین تغییرات تحویل به جامعه‌ی متن‌باز KDE دهد. بنابراین، جای نگرانی در این وجود ندارد.

به روز رسانی: البته شاید هم باید از کاملا اوپن سورس شدن یک پروژه تا حدی ترسید!

 

داستان جایگزینی Qt با Flutter در یک پروژه

من که نرم افزاری هستم و خیلی با Qt سر و کار ندارم، از کجا متوجه این موضوع شدم؟

یکی از دوستان ازم خواست که با Flutter برای روی Linux یک اپلیکیشن بسازم و یک کدی بنویسم که بتونه با یک Serial Port ارتباط بگیره، چون میخوان این اپلیکیشن رو روی یک دستگاه Embedded استفاده کنند…!

بعد از اینکه اپلیکیشن رو بهش تحویل دادم، درخواست یک جلسه Skype کرد، گفت یکی از شرکت های همکار در دانمارک میخوان از Flutter برای نوشتن اپلیکیشن برای یک دستگاه Embedded استفاده کنند و نیاز به مشاوره دارند. جلسه که شروع شد، مدیر پروژه شون دلیل استفاده از فلاتر رو “تصمیم کمپانی Digia مبنی بر برداشتن پشتیبانی بلند مدت از نسخه های اوپن سورس 5.15 به بعد” عنوان کرد. از من خواستند تا Flutter رو برای Yocto – نسخه Dunhill بیلد بگیرم، گفتم این کار در تخصص من نیست و از زیر بار این کار (نسبتا کثیف) فرار کردم.

شاید برای شما مفید باشد: آموزش رزبری پای از 0 تا 100

خودشون پیگیری کردند و با افرادی در ایران و سپس آلمان تونستن این کار رو انجام بدن، خوشبختانه شرکت Sony ژاپن قبلا زیرساخت این کار رو فراهم کرده بود و اون ها تونستن سریع نتیجه گیری کنند. مجدد درخواست جلسه دادند در اسکایپ، گفتند “ما 100% فلاتر رو برای این پروژه انتخاب کردیم و به طور کامل Qt رو کنار گذاشتیم!”. خلاصه این باب شروع همکاری بنده با پروژه شون بود و الان تقریبا کمتر از 2 هفته میشه که پروژه شون رو توسعه میدم.

حالا ممکنه سوال بشه چرا از بین گزینه های موجود، فلاتر؟

 

چرا فلاتر Flutter؟

گوگل فلاتر

شرکت گوگل چند سالی بود که مخفیانه روی سیستم عاملی به اسم Fuchsia (فوشیا) و “مجموعه ابزار توسعه اپلیکیشن” جدید خودش کار میکرد.

سال 2017 این مجموعه ابزار توسعه اپلیکیشن رو با نام Flutter معرفی کرد. شعارش این بود که با فلاتر میتونین اپلیکیشن های بسیار سریع و بسیار زیبا رو با یک کد واحد برای پلتفرم های اندروید و آی او اس بیلد بگیرین. اون زمان من خودم با ReactNative و Android بعضی از اپلیکیشن های شرکتی رو توسعه میدادم. این ReactNative رو فیسبوک 2 سال زودتر ساخته بود و دقیقا همین ادعای فلاتر رو داشت. البته ReactNative عقبه و پشتیبانی ReactJS رو داشت که در بین FrontEnd کارها (کسانی که دیزاین تحت وب میزنند) خیلی محبوب بود. با اینکه خیلی جاها اذیت میکرد، ولی خوب راضی بودم که با یک بار کد نوشتن میتونم برای اندروید و آی او اس خروجی بگیرم، و البته کد نویسی و مدیریت وضعیتش (State Management) هم نسبت به کدهای Native خیلی خیلی ساده تر بود.

 

من اون زمان اخبار و مقالات رو خیلی دنبال میکردم، تا اینکه خیلی اتفاقی یک مقاله در رابطه با Flutter دیدم.

زبان برنامه نویسی فلاتر، زبان Dart هست که چند سال پیش توسط گوگل ایجاد شد. برام نا آشنا بود همه چیز، زبان، سینتکس، نحوه دیزاین و خیلی چیزها، در اولین برخورد خیلی جدی نگرفتم موضوع رو تا اینکه ماه آینده دیدم تعداد محتوایی که در این رابطه تولید میشه خیلی بیشتر شده (ویدئوهای آموزشی و مقالات و …)!

 

رفتم سراغ مقایسه، باید مطمئن میشدم این جریان یک جریان هیجانی نیست و مثل بقیه محصولاتی که گوگل بیخیالشون شده، از بین نمیره؟!

 

نتیجه این مطالعات و مقایسه های من این شد که فلاتر رو به عنوان فریم ورک اصلی خودم برای توسعه اپلیکیشن های موبایل انتخاب کردم، اگه میخواهین بیشتر بدونین لطفا به این مقالات مربوط به سال 2019 که در سایت خودم نوشتم، سر بزنین:

 

یادگیری برنامه نویسی موبایل با نگاهی به بازار کار

یک سال با فلاتر Flutter

Flutter vs Xamarin مقایسه برنامه نویسی کراس پلتفرم موبایل

Flutter – یک سال و نیم با فلاتر

 

حدودا اوایل 2019 بود که اپل تصمیم گرفت تمامی اپلیکیشن های ایران یا فارسی زبان رو از فروشگاه خودش برداره، و اون اشتیاق من برای تولید اپلیکیشن iOS به شدت کم شد.

با اینکه مشتری هامون تقاضا داشتند که اپلیکیشن ها رو برای iOS هم خروجی بگیریم، اما راه حل مناسبی برای این کار نداشتیم (البته با دانش اون زمان..!).

 

یکدفعه سال 2020 گوگل با یک سورپرایز اومد و اعلام کرد که الان میشه با فلاتر برای Mac OS و Linux و Windows و WEB هم خروجی گرفت. میخوام سر به تن ویندوز و مک نباشه، ولی وب؟ لینوکس؟ واقعا؟ بله این خواب نبود…! توی این 4 سال فلاتر آنچنان محبوبیتی پیدا کرده و آنقدر انعطاف و قابلیتی میده برای خروجی گرفتن برای سیستم عامل های مختلف که دیدم شرکت Sony هم پا به عرصه گذاشته و فلاتر رو برای سیستم عامل های امبدد آماده کرده.

 

چطوری فلاتر یاد بگیریم؟

اگه شما هم نگران مشکلات Qt هستین، یا قصد دارین در کنار پروژه سخت افزاریتون اپلیکیشن موبایل و یا … هم بدین، Flutter بهترین گزینست.

معمولا تکنولوژی ها تا در ایران شناخته و استفاده بشند، حداقل 3 سال زمان میبره (این تجربه من در رابطه با ReactNative و Flutter هست)، حالا خودتون حساب کنید چقدر زمان میبره تا آموزش های فارسی مرتبط با اون تکنولوژی ایجاد بشه…!

به من هر سال پیشنهاد میشه که دوره آموزشی برگزار کنم، ولی واقعا انقدری درگیری ها زیاد بوده که موفق به این کار نشدم، از طرفی هم با خودم فکر میکردم بالاخره بقیه دست به کار میشن و آموزش های خوبی تولید میکنند دیگه! چه نیازی به آموزش های من هست؟

اما متأسفانه هنوز آموزش‌هایی با کیفیت و نکته سنجی‌های لازم به زبان فارسی تولید نشده، از اون بدتر خیلی از متخصصین نرم افزار در حال مهاجرت هستند از کشور! (نیروی کار مناسب و متخصص به شدت کم شده).

شاید حداقل کاری که الان میشه کرد اینه که آموزش های خوبی تولید کرد تا نیروهای متخصصی تربیت بشند و دوباره جانی تازه به صنعت نرم افزاری کشور داد.

برای همین تصمیم گرفتم تا چیزهایی که یاد گرفته ام رو به دیگران هم آموزش بدم، و این راه رو با آموزش فلاتر شروع میکنم.

 

قصد دارم تا دوره ی آموزشی مبتدی تا پیشرفته فلاتر رو تا آخر تیر ماه آماده کنم که در درجه اول پروژه محور و کاملا عملی باشه و در درجه دوم پایه و اساس خیلی از کاربردهای دیگه باشه (یعنی آموزش ها به درد کارهای دیگه هم بخوره و فقط مختص به اون پروژه نباشه).

فکر میکنم این دوره آموزشی میتونه برای خیلی از مهندسین الکترونیک هم مفید باشه به همین علت سرفصل های پیشفرض را در زیر مینویسم که اگر دوستان سیسوگی هم پیشنهادی دارند اطلاع بدند تا به سرفصل ها اضافه بشه.

 

 

قرار هست در این دوره یک اپلیکیشن فروشگاهی رو تولید کنیم که سرفصل های این دوره به شرح زیر هست:

 

1- نصب اندروید و فلاتر روی ویندوز

2- ایجاد پروژه جدید و تعیین ساختار پوشه‌ها

3- تنظیمات دو زبانه

4- تنظیمات اولیه تم و فونت

5- طراحی کامل صفحه خانه

5-a) طراحی اپ بار

5-b) طراحی باتم بار

5-c) طراحی بنرها، کارت‌ها و دسته بندی‌ها

6- طراحی صفحه محصول

7- طراحی سبد خرید

8- آشنایی با http و استفاده از API های وب

9- صفحه ثبت نام

10- شبیه سازی پرداخت

11- اتصال سبد خرید به Provider برای مدیریت بهتر وضعیت در کل اپلیکیشن

12- بهینه سازی مصرف شبکه (تصاویر و …) و بالا بردن سرعت پردازش شبکه

13- نحوه ایجاد پلاگین مبتنی بر Dart برای استفاده مجدد در اپلیکیشن‌ها

14- شیء گرایی مبتدی تا پیشرفته با Dart

15- (هدیه ویژه) ایجاد پلاگین Native برای اندروید

 

انتشار مطالب با ذکر نام و آدرس وب سایت سیسوگ، بلامانع است.

شما نیز میتوانید یکی از نویسندگان سیسوگ باشید.   همکاری با سیسوگ

17 دیدگاه در “فلاتر (Flutter)، جانشین کیوت (Qt)؟

  1. Avatar for شهنازی شهنازی گفت:

    سلام
    اموزش چی شد پس؟

  2. Avatar for امیررضا رهبری امیررضا رهبری گفت:

    سلام خسته نباشید
    من توی یه پروژه iot نیاز دارم که یک نرم افزار موبایلی بنویسم که از mqtt هم برای اتباط با esp استفاده میکنه. به نطر شما من بهتره که از qt استفاده کنم یا فلاتر؟

  3. Avatar for مسعود مسعود گفت:

    سلام خسته نباشید بابت آموزشهای خوبتون ،آیا امکانش هست برای طراحی گرافیک و منوهای ال سی دی موجود در پروژه مون(با توجه به اینکه پردازنده مورد استفاده بدون سیستم عامل یا bare metal هست)از فلاتر استفاده بشه ؟

  4. Avatar for میثم پرویزی میثم پرویزی گفت:

    من قبلا توی ویندوز از Visual C# برای نوشتن این نوع از پروژه ها که هم نیاز به ارتباط با پورت سریال و هم نیاز به UI داره استفاده می کردم.
    اما الان میخوام همین کارو توی لینوکس و برای یه پروژه امبدد انجام بدم که به شکل اتفاقی مطلب شما رو دیدم.
    اگه قبلا با C# و .NET کار کرده باشین میخواستم نظرتون رو راجع به C# در مقایسه با فلاتر بدونم. چون امکانات خیلی خوبی برای این جور پروژه ها داره. الان هم که .NET رو میشه توی لینوکس نصب کرد و برای UI هم میشه از Avalonia استفاده کرد. خودم هنوز ازش استفاده نکردم ولی به نظر چیز خوبی میاد!

    https://docs.avaloniaui.net/docs/getting-started/programming-with-avalonia

  5. Avatar for Mahdi.h Mahdi.h گفت:

    سلام
    چه قدر خوب که بخش هایی از مطلب بروزرسانی شد!
    کلا برداشت از این مطلب متفاوت شد.

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      ممنونم از نظرتون

      پیشنهاد میکنم این مقاله که به انگلیسی هست رو بخونید: https://pkoretic.medium.com/flutter-vs-qt-qml-9a2d655b5ab1

      و این بحث در انجمن کیوت رو پیگیری کنید: https://forum.qt.io/topic/112466/qt-quick-vs-flutter/6

  6. Avatar photo محمدرضا عابدینی گفت:

    سلام ممنون از این اطلاعات خوبتون بی صبرانه مشتاق اموزش های خوبتون هستم..

  7. Avatar for پویا پویا گفت:

    سلام وقتتون بخیر میشه اون قسمت که گفتید “و از زیر بار این کار (نسبتا کثیف) فرار کردم” رو یه توضیحی بدید یعنی دقیقا میخواستند چیکار انجام بدید و چرا این کار کثیف اسمش
    ممنون خیلی از مقاله خوبتون.

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      سلام وقت شما هم بخیر

      بیلد گرفتن Yocto Dunhill و Flutter هم پهنای باند اینترنت خوبی میخواد هم پردازش و حافظه میگیره، خلاصه زمان زیادی میبره.
      از حوصله من خارج بود برای همین قبول نکردم.

  8. Avatar for محمد محمد گفت:

    سلام
    بسیار عالی
    من خودم چند سالی هست با Qt کار کردم برای توسعه نرم افزار.
    بی صبرانه منتظر دوره آموزشی تون هستم.
    بسیار ممنون

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      سلام دوست عزیز
      از همراهی شما سپسگزارم

    2. Avatar for محمد محمد گفت:

      الان پشیمونید که کیوت رو یاد گرفتید ؟؟؟؟

  9. Avatar for سعید ساهور سعید ساهور گفت:

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

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      سلام،
      بله خوشبختانه میشه و این خبر خیلی خوشحال کننده ایه

      1. Avatar for سعید ساهور سعید ساهور گفت:

        خوب گام به گام که هرویدیو اموزشی که اماده بزارین تا گام به گام بیاییم جلو
        خیلی مشتاقیمممممممم☺️?

  10. Avatar for Ali Ali گفت:

    درود بر شما.
    راهتان ادامه یابد ..

    1. Avatar for علی اشتهاری پور علی اشتهاری پور گفت:

      سلام و درود بر شما
      سپاسگزارم

دیدگاهتان را بنویسید

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