Flutter Zone | فلاتر و دارت
782 subscribers
520 photos
311 videos
1.07K files
811 links
ناحیه‌ی فلاتر
برای فلاتر
اموزش های فلاتر و دارت از یودمی

لینک گروه : https://t.me/flutterzone_group
Download Telegram
Forwarded from IranCoderz (Farid Ghaderi)
This media is not supported in your browser
VIEW IN TELEGRAM
مایکروسافت دیشب از Copilot Agent رونمایی کرد. با این آپدیت، کوپایلت از یک دستیار به یک برنامه‌نویس تبدیل می‌شه و می‌تونید تو گیت‌هاب بهش ایشو اساین کنید که بره انجامش بده.

همچنین کوپایلت از با آنالیز ریپازیتوری‌های شما، استایل کد زدن شما رو کامل آنالیز می‌کنه و با همون سبک‌ براتون کد می‌زنه.

🆔 @IranCoderz | 👩‍💻🧑‍💻
👍3
This media is not supported in your browser
VIEW IN TELEGRAM
یکی از ویژگی های جدید DevTools قابلیتی به اسم Property Editor هست این امکان و به شما میده که بصورت ویژوال مقادیر ویجت هارو تغییر بدید و نتیجه و ببینید

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
👍31
Forwarded from Pure Coder (Mohammad Taheri)
🔥Flutter & Layerd Architecture

فلاتر از یک معماری لایه ای یا به عبارتی Layerd Architecture استفاده میکنه.

توی این لایه ها foundation کف کف قرار میگیره و همه ی لایه های دیگه میتونن بهش دسترسی داشته باشن و لایه های material و cupertino بالای بالا قرار میگیرن.

برای مثال لایه ی Widgets نسبت به rendering توی سطح بالاتری قرار میگیره و میتونه از rendering استفاده کنه ولی rendering به widgets دسترسی نداره. به همین شکل material و cupertino به widgets دسترسی دارن ولی widgets به اونا دسترسی نداره.

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

⚠️پ.ن: فریمورک ها هم باید معماری داشته باشن و روی اصول جلو برن. وگرنه از هم میپاشن.

پ.ن: همه ی پوشه های توی تصویر نماینده ی یک لایه ی مجزا نیستن‌.

@purecoder_ir
4
Pub workspaces?
Anonymous Poll
78%
Yes
25%
No
یه پروژه داریم با دوتا اپ (Server,Client).
اپ Server برای ویندوز و اپ Client برای اندروید هست.
یک سری کد (UI) هم بین این دو اپ مشترک هست.
یکی از بهترین روش هایی که برای مدیریت همچین پروژه هایی میشه استفاده کرد Pub workspaces هست.

یکی از مزیت های Pub workspaces کاهش منابع مصرفی توسط سیستم هست.

https://dart.dev/tools/pub/workspaces
https://lazebny.io/modern-monorepo-management
👍4
یکی از روش های کاهش زمان اجرای پروژه های فلاتر استفاده از فلگ fastDebug میباشد

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
👍3
جدیدا خیلی از Copilot استفاده میکنم.
من کد میزنم دیگه خودش کامنت میزاره برای کدها.
یه جوری کامنت میزاره که فک نمی‌کردم این کد همچین کارایی داشته باشه. خیلی خوبه
🤣🤣
🤣91
Forwarded from sasan safari
سوال دوم:

فرض کنید در حال توسعه‌ی یه اپلیکیشن Flutter هستید که باید به صورت آفلاین هم کار کنه؛ یعنی کاربر بتونه بدون اینترنت داده وارد کنه و بعد که دوباره آنلاین شد، اطلاعات با سرور sync بشن.
چه راهکاری برای مدیریت این حالت آفلاین/آنلاین و همگام‌سازی داده‌ها پیشنهاد می‌کنید؟

و چه نقش‌هایی باید بین لایه‌های مختلف اپ (UI، domain، data) تقسیم بشن تا این قابلیت به‌درستی کار کنه؟
4
Forwarded from sasan safari
sasan safari
سوال دوم: فرض کنید در حال توسعه‌ی یه اپلیکیشن Flutter هستید که باید به صورت آفلاین هم کار کنه؛ یعنی کاربر بتونه بدون اینترنت داده وارد کنه و بعد که دوباره آنلاین شد، اطلاعات با سرور sync بشن. چه راهکاری برای مدیریت این حالت آفلاین/آنلاین و همگام‌سازی داده‌ها…
#همگام_سازی در فلاتر


اول از همه من یک معماری ساختاری انتخاب میکنم که برای چنین اپی قطعا Clean بهترین هست و البته آرکیتکچر پترنِ CQRS که اینم جدا توضیح میدم.

توی لایه UI فقط نمایش و تعامل داریم.
لایه‌ی Application کار مدیریت وضعیت و فراخوانی use caseها رو انجام می‌ده.

لایه‌ی Domain شامل منطق اصلی اپه، مثل عملیات ثبت، و همین‌طور موتور همگام‌سازی.

و در نهایت لایه Data که با دیتابیس لوکال و سرور در ارتباطه.

حالا برای اینکه حالت آفلاین/آنلاین درست مدیریت بشه، اول باید کاری کنیم که همه‌ی داده‌ها اول به صورت لوکال ذخیره بشن؛ چه اینترنت باشه چه نباشه. یعنی مثلا از دیتابیس‌هایی مثل Drift یا Hive استفاده می‌کنیم و اطلاعاتو اونجا نگه می‌داریم.

نکته‌ی مهم اینه که وقتی کاربر داده‌ای رو وارد می‌کنه، باید اون عملیات (مثل افزودن، ویرایش، یا حذف) به شکل یه "عملیات همگام‌سازی" ثبت بشه. یه چیزی شبیه به صف عملیات، که مثلا بگه: این یادداشت قراره ساخته بشه، این یکی ویرایش بشه، اون یکی حذف بشه... و همین‌طور(یه جواریی یه سری فلگ داریم)

هر کدوم از این عملیات یه state دارن: در حال انتظار، انجام شده، یا ناموفق. بعد یه چیزی به اسم Sync Engine
(اینو پیامای بعدی توضیح میدم) داریم که وقتی اینترنت وصل شد، میاد یکی‌یکی این عملیات‌ها رو اجرا می‌کنه و اونا رو با سرور هماهنگ می‌کنه.
اینجا باید حواسمون به چند تا چیز باشه:

اگه عملیات موفق بود، علامت می‌زنیم که همگام شده.
اگه شکست خورد، اون عملیات توی صف می‌مونه تا بعداً دوباره امتحانش کنیم.
ممکنه کانفلیکت هم پیش بیاد. مثلاً کاربر آفلاین یه چیزی رو تغییر داده، همزمان سرور هم اون داده رو عوض کرده. تو این حالت یا از روش ساده‌ی "آخرین تغییر برنده است" استفاده می‌کنیم، یا یه استراتژی ترکیبی داریم، یا حتی به کاربر نشون می‌دیم که یه تضاد وجود داره.
در نهایت نقش هر لایه توی اپ اینجوری تقسیم می‌شه:

لایه UI فقط داده رو نمایش می‌ده و وضعیت sync رو نشون می‌ده.
لایه Application عملیات رو مدیریت می‌کنه و موتور sync رو راه می‌اندازه.
لایه Domain منطق اصلی رو داره، مثل تعریف موجودیت‌ها، عملیات‌ها، و اینکه sync چجوری انجام بشه
لایه Data چ مسئول ارتباط با دیتابیس لوکال و API سروره.

علاوه بر اینا، باید سیستم رو طوری طراحی کنیم که تغییرات شبکه رو تشخیص بده؛ مثلاً وقتی دوباره آنلاین شدیم، عملیات sync خودکار شروع بشه. برای اینکار از پکیج‌هایی مثل connectivity_plus استفاده می‌کنیم.
اگه بخوام خلاصه کنم:
همیشه اول داده رو لوکال ذخیره کن، حتی وقتی آنلاینیم.
تغییرات رو توی یه صف نگه دار.
با یه موتور sync این صف رو مدیریت کن.

اینجوری، یه اپ مقاوم می‌سازیم که توی هر شرایطی، حتی بدون اینترنت هم درست کار می‌کنه و هیچ داده‌ای از دست نمیره

@sasansafari_dev1400
7👍3👏1
Forwarded from sasan safari
خب Sync Engine رِ بگیم

سینک انجین وظیفه داره تغییرات کاربر رو وقتی آفلاین بوده ذخیره کنیم و وقتی اینترنت وصل شد، این تغییرات رو به سرور بفرستیم. برای ذخیره لوکال معمولا از hive یا drift استفاده می‌کنیم. برای فهمیدن وضعیت اتصال اینترنت از connectivity_plus کمک می‌گیریم و برای ارسال داده به سرور هم http یا dio.
الگوریتم کار اینطوره که تغییرات تو یه صف ذخیره می‌کنیم و وقتی اینترنت وصل شد، یکی‌یکی به سرور ارسال می‌کنیم. اگه موفق بود، وضعیتشون رو آپدیت می‌کنیم و اگه نه، دوباره تلاش می‌کنیم. تو این روند برای کنترل اینکه هر عملیات کامل شده یا نه، معمولا از completer استفاده می‌کنیم که یه ابزار توی دارته برای مدیریت عملیات‌های async، یعنی باهاش می‌تونیم بفهمیم چه زمانی هر فرایند sync تموم شده یا خطا داده.
برای اجرای این فرایند حتی تو پس‌زمینه هم می‌تونیم از workmanager استفاده کنیم تا داده‌ها همیشه هماهنگ بمونن و چیزی از دست نره :)

@sasansafari_dev1400
5
Forwarded from sasan safari
و نهایتا الگوی معماری مهم CQRS که یعنی Command Query Responsibility Segregation

یعنی اینکه مسئولیت نوشتن یا تغییر داده‌ها (Command) رو از مسئولیت خوندن داده‌ها (Query) جدا کنیم. یعنی یه مدل و مسیر جدا برای نوشتن داریم و یه مدل و مسیر جدا برای خوندن. اینجوری کد مرتب‌تر، راحت‌تر قابل نگهداری و بهتر مقیاس‌پذیر می‌شه.
تو معماری کلین معمولا بخش Command رو تو لایه دامنه (Domain) می‌ذاریم که منطق تغییر داده‌ها و قوانین کسب‌وکار رو اجرا می‌کنه، ولی بخش Query رو می‌تونیم تو لایه دیتا یا حتی لایه UI مدیریت کنیم تا خواندن داده‌ها بهینه‌تر باشه. این تقسیم‌بندی کمک می‌کنه خواندن و نوشتن داده‌ها مستقل باشن و هر کدوم به بهترین شکل کنترل بشن
4👍1
آموزش ساخت کتابخانه ویندوز از کد گولنگ و اتصال به فلاتر دسکتاپ + ویدیو

▫️ در این راستا، زبان Go (گو) به عنوان یک ابزار عالی برای برنامه‌نویسی سیستمی و ساخت کتابخانه‌های بومی، و فلاتر دسکتاپ به عنوان یک فریم‌ورک چندسکویی قدرتمند، می‌توانند ترکیبی بسیار موثر باشند.

در این مقاله، به طور کامل به این پرسش پاسخ می‌دهیم که چگونه یک کد نوشته شده به زبان Go را به یک کتابخانه DLL ویندوز تبدیل کنیم و آن را در یک پروژه فلاتر دسکتاپ فراخوانی کنیم.

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



⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
👍5
معماری Server Driven UI در فلاتر

▫️تصور کنید که بتوانید آپدیت‌ها را در لحظه ارسال کرده و رابط کاربری را مستقیماً از سرور کنترل کنید؛ بدون تأخیر و بدون نیاز به تأیید.

این دقیقاً همان چیزی است که رابط کاربری سمت سرور (Server-Driven UI) به دنبال آن است.


🌐 پیاده سازی معماری Server Driven UI در فلاتر: طراحی رابط کاربری از سرور

⚜️اولین مرجع فارسی فلاتر @flutter_learn_ir
👍5
Forwarded from Pure Coder (Mohammad Taheri)
⛔️ترجمه ممنوع

💡فانکشن که مشخصه چیه.

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

پس اگه مستقل بود و به هیچ ابجکت یا کلاسی گره نخورده بود بهشون میگیم فانکشن و اگه به یه ابجکت یا کلاس گره خورده بود، میگیم متد. (Instance Method یا Static Method )

تروخدا به اینا تابع نگید🤦‍♂🤦‍♂ بگید فانکشن یا متد.

مدرس های عزیز مخصوصن شماها به اینا تابع نگید. شما بگید هزار نفر یاد میگیرن میگن🤦‍♂🤦‍♂😂

وقتی شروع کردی به ترجمه ی این ها و به فانکشن گفتی تابع، اون موقع دیگه برای متد واژه ی مستقل پیدا نمیکنی و گیر میوفتی.
اینا واژگان تخصصی ان، نباید ترجمه بشن‌‌‌‌.

موارد دیگه که باید رعایت کنید:

کانستراکتور نه سازنده.
ابجکت نه شی.
ابجکت ارینتد نه شی گرا.
فانکشنال پروگرمینگ نه برنامه نویسی تابع محور 🤦‍♂🤦‍♂😭
یونیت تست نه تست واحد.
ترد نه نخ🤦‍♂ مگه سیگاره😂
و ... .

خیلی زیادن.

@purecoder_ir
👍4👎1