Flutter | فلاتر
2.57K subscribers
207 photos
34 videos
32 files
575 links
لینک گروه برای اشتراک منابع و یادگیری فلاتر
https://t.me/joinchat/EOllGEqgbASbAHtD03cXTA
حمایت از کانال:
idpay.ir/fluttery

انتقاد ،پیشنهاد،نوشتن مطلب:
@h_noroozi_t_96
@ni30000
Download Telegram
تجربه ناخوش‌آیند بکی از دوستان در رابطه با اهمیت گیت

خواهشن با گیت کار کنید
من دو روزه حالم بده
یه اپلیکیشن آب و هوا و راه نوشته بودم که توی اپلیکیشنم یه امکان گذاشته بودم که شما مسیرتو انتخاب میکردی (مثلا از تهران به رشت) و ده دقیقه قبل از هر ایونتی بهش آلارم میداد
مثلا قراره بارون بیاد یا تا چند دقیقه دیگه باران تمام میشود و تا فلان جا دیگه هوا بارانی نیست و از اینجور چیزا
هارد لپ تاپم سوخت
دو روزه از بس اعصابم بهم ریخته است که حتی توان شروع دوباره ندارم
اگر یه ریپازیتوری توی گیت داشتم هیچوقت کل پروژه به فنا نمیرفت
Forwarded from Pure Coder
⚡️چرخه حیات State ، مختصر ، کامل و دقیق⚡️

1⃣mount
اولین بار که یک stateful ساخته میشه و توی درخت قرار میگیره متد های زیر از state به ترتیب اجرا میشن :
State Constructor

initState
didChangeDependencies
build

توی هر سه متد بالا به context دسترسی داریم و میتونیم با context کار کنیم.
برخلاف تصور و اشتباه رایج خیلی ها که میگن داخل initState به context دسترسی نداریم.
🔥فقط اگه میخاستیم به یه inheritedWidget وابسته بشیم مثلن theme.of رو صدا بزنیم این کار رو باید توی دو متد didChangeDependencies یا build انجام بدیم.
🔥همیچنین توی متد های بالا با استفاده از پروپرتی widget میتونیم به ویجت این State دسترسی داشته باشیم.

2⃣setState
هر بار که توی استیت setState صدا زده بشه متد build یکبار دیگه اجرا میشه.

3⃣update
هر بار که ویجت parent این stateful این ویجت رو با یه کانفیگ جدید اپدیت کنه متدهای زیر اجرا میشن :
didUpdateWidget (Widget oldWidget)
build

ویجت parent این ویجت اپدیت شده و child خودش که همین stateful ما هست رو با یه ویجت جدید از همین type اپدیت کرده (ویجت ها immutable هستن)
در نتیجه didUpdateWidget اجرا میشه که به state اطلاع بده که ویجتت اپدیت شده.
توی ورودی هم ویجت قبلی (stateful قبلی /oldWidet) رو بهش میده.
ویجت جدید هم از طریق پروپرتی widget قابل دسترسیه.

4⃣dependencies changed
اگه این ویجت به یه InheritedWidget وابسته شده باشه مثلن Theme.of رو با context خودش صدا زده باشه.
هر بار که اون InheritedWidget اپدیت بشه و این اپدیت شدن رو به درخت زیر خودش نوتیف بده متد های زیر به ترتیب اجرا میشن :
didChangeDependencies
build

5⃣deactivate
هر بار که ویجت parent این ویجت تصمیم بگیره این نقطه از درخت رو با یه ویجت جدید جایگزین کنه یا کلن این ویجت رو حذف کنه و دیگه این ویجت بدردش نخوره این ویجت رو غیر فعال میکنه و از درخت حذف میکنه و در این مرحله متد زیر اجرا میشه :
deactivate

🔥در این مرحله هنوز متد dispose اجرا نمیشه و فقط deactivate اجرا میشه.

6⃣activate
اگه به این ویجت یه GlobalKey داده باشیم بعد از deactivate شدن ممکنه یه جای دیگه از درخت (با یه parent) دیگه به یه ویجت از این نوع و همین GlobalKey نیاز داشته باشه.
در نتیجه این ویجت activate میشه و توی اون نقطه از درخت مورد استفاده قرار میگیره و parent اش نسبت به قبل تغییر میکنه.(این اتفاق یعنی پیوند زدن به یه جای دیگه درخت حتمن باید توی همین فریم اتفاق بیفته که ویجت deactivate شده)
درنتیجه متد زیر توی state اجرا میشه :
activate
بعد از این متد هم متد
build
اجرا میشه و اگه این ویجت توی اجرای قبلی به یه inheritedWidget وابسته شده باشه قبل build هم متد زیر اجرا میشه :
didChangeDependencies
پس یا :
activate
build
یا
activate
didChangeDependencies
build
بسته به شرایط اجرا میشن.

7⃣unmount
اگه بعد از deactivate شدن و تا پایان این فریم این ویجت به هیچ جای دیگه پیوند نخوره (GlobalKey نداشته باشه یا لازم نشه که پیوند بخوره) متد زیر اجرا میشه :
dispose
و state برای همیشه میره پی کارش و غیر قابل استفاده میشه.

پس بلافاصله بعد از متد deactivate متد dispose اجرا نمیشه.
یه فاصله ای بینشون هست.
فاصله خیلی کم و در حد میلی ثانیه هست ولی بین اجرای این دو فاصله هست.

🔥همیشه قبل از dispose متد deactivate اجرا میشه ولی الزامن همیشه بعد از deactivate متد dispose اجرا نمیشه.

پس :
🔥توی initState هم به context دسترسی داریم.

🔥وابسته شدن به InheritedWidget رو حتمن توی didChangeDependencies یا build انجام میدیم.

🔥توی متد های deactivate و dispose کارهایی که مربوط به context میشه رو انجام نمیدیم (چون widget tree اون موقع statble نیست و در واقع این ویجت parent خودش رو از دست داده و parent نداره)

🔥کارهایی مثل dispose کردن کنترلر ها و ... رو توی متد dispose انجام میدیم و نه deactivate چون بعد از deactivate ممکنه دوباره به درخت برگرده و reperent بشه.

🔥در صورتی که ویجت GlobalKey داشته باشه (فقط GlobalKey) ممکنه بعد از deactivate شدن reparent بشه و به یه parent دیگه پیوند بخوره و مجددن activate بشه(که در این صورت state حفظ میشه)

#statefulwidget
#state_life_cycle
#فلاتر
#آسان
#کوییز
در کد نوشته شده یک مشکل وجود دارد که با تصحیح آن میتوانیم شکل سمت راست را ببینیم
اشتباه کد در کجاست ؟(جواب درست رو کامنت کنید)
⚡️⚡️یه نکته ⚡️⚡️

🔥توی هر function کدهای بعد از return اجرا نمیشن.

String getName() {
return 'mohammad';
}

🤔🤔حالا اگه یه موقعی خواستیم یه کدی بعد از return بنویسیم و اجرا شه باید چکار کنیم؟

😍با یک ترفند خیلی ساده.

String getName() {
try{
return 'Mohammad';
}finally{
print('something') ;
}
}

🔥از بلوک try... finaly استفاده میکنیم
کد های اصلی رو داخل try مینویسیم و return رو هم همون جا قرار میدیم و کدهایی که میخایم بعد return اجرا شن رو توی بلوک finaly میگذاریم 🤪
Forwarded from Pure Coder
⚡️⚡️Flutter Key⚡️⚡️
5⃣

تقسیم بندی انواع key ها در فلاتر

✔️اون هایی که رنگ مشکی دارن abstract هستن و بقیه کلاس های معمولی هستن .

✔️اون هایی که با <T> مشخص شدن Generic هستن.

#key #local_key
#flutter_key #flutter_key
#value_key #object_key #unique_key
Forwarded from Pure Coder
⚡️⚡️یه نکته ⚡️⚡️
کد بالا رو نگاه کنید.
یه کلاس Point داریم که دو تا instance field داریم به اسم های x و y که توی constructor مقدار گرفتن.

یه instance field دیگه هم داریم
distanceToOrigin
که میخوایم اون رو با استفاده از دو تا فیلد دیگه مقدار بدیم.

ولی بهمون ارور میده چون که نمیتونیم از یه instance field برای مقدار دهی یه instance field دیگه استفاده کنیم.

🤔🤔راه حل چیه؟
Forwarded from Pure Coder
🔥راه حل اول استفاده از getter هست
double get distanceToOrigin => ....

و به این روش میشه از مقادیر instance field های دیگه داخل این getter استفاده کرد.
چون که getter یه متد هست و داخلش میشه از instance field های کلاس استفاده کرد.
Forwarded from Pure Coder
🔥راه حل دوم استفاده از late هست.
late final distanceToOrigin = ...

در این حالت distanceToOrigin هم یه instance field هست ولی چون از late استفاده کردیم همون اول کار که از کلاس ابجکت ساخته میشه مقدار دهی نمیشه و اولین باری که میخوایم از این فیلد استفاده کنیم مقدار دهی میشه.

در این حالت امکان استفاده از const constructor نیست.
چرا؟ 🤔
Forwarded from Pure Coder
🔥کاربرد :
کاربرد دو راه حل بالا :

توی State یه Stateful
جایی که میخوایم توی یه فیلد از پروپرتی widget استفاده کنیم.

مثلن :
Color color = widget.color:
که به مشکل میخوریم.
که با استفاده از getter و یا late میشه برطرفش کرد.
Color get color => widget.color;

Or

late Color color = widget.color;

توی abstract classها (که میخوایم constructor نداشته باشن و فقط یه interface باشن) هم میتونیم بعضی فیلد ها رو با توجه به فیلد های دیگه مقدار بدیم.

و...
سلام کسی کتاب صوتی clean code به انگلیسی رو داره؟!
#کوییز
#پیشرفته
#فلاتر
وظیفه قطعه کد بالا چیست؟
و علت استفاده از extension رو کامنت کنید؟
Forwarded from Pure Coder
⚡️⚡️یه نکته ⚡️⚡️
توی زبان دارت چیزی به صورت صریح به اسم interface نداریم و هر کلاسی میتونه در حکم یک interface عمل کنه.
یعنی با implement کردن یک کلاس به جای extend کردن میتونیم از اون کلاس به عنوان interface استفاده کنیم.

✔️پس یه کلاس توی دارت هم قابلیت ارث بری داره و هم اینکه میشه به عنوان interface ازش استفاده کرد.

🔥حالا اگه بخوایم یه کلاسی بنویسیم که فقط و فقط یه interface باشه باید چکار کنیم؟
یعنی اینکه کلاسمون نه قابلیت ارث بری داشته باشه و نه بشه ازش نمونه ساخت و دقیقن مثل یک interface فقط بشه implement اش کرد.

برای اینکار از پترن ساده زیر استفاده میکنیم.

abstract class MyInterface {

MyInterface._() ;

}

😍یعنی با یه private constructor امکان نمونه ساختن و ارث بری رو ازش میگیریم و فقط میتونیم implement اش کنیم.
Forwarded from وب سایت آموزشی کدفلو (Hasan Noroozi)
https://b2n.ir/r07455

قسمت دوازدهم دوره فلاتر وب منتشر شد😍🤩🥳
نمایش تصاویر
پیاده سازی فرم ها

طراحی صفحه ثبت‌نام
@h_noroozi_t_96

حسن نوروزی عزیز تولدت مبارک🌹

این رو توی کانال گذاشتم که بچه ها بدونند امروز تولدته بتونند تخفیف توپی ازت بگیرند برای امروز 😂😂
Forwarded from وب سایت آموزشی کدفلو (Hasan Noroozi)
🎂🥳😚😍😍
تخفیفاتی برای دوره های فلاتر سایت اعمال شده که میتونین ازش استفاده کنین
Codeflow.ir
Forwarded from وب سایت آموزشی کدفلو (Hasan Noroozi)
سرفصل های آموزشی اولین وتنها دوره GetX فلاتر به زبان فارسی وب سایت کد فلو

مقدمات و دلیل استفاده

کار با snackBar و نمایش پیغام ها

نمایش bottom sheet ها و تغیر تم برنامه در أGetX

جابجایی بین صفحات و navigation ها به صورت کامل

کار با state management و مدیریت داده ها در برنامه با Obx (اشنایی با انواع متغیر ها)

کار با reactive state management

کار با انواع کنترل های reactive و اموزش simple state management

کار با worker ها و unique ID

چند زبانه کردن اپلیکیشن ها و internationalization

کار با Dependency Injection و Binding ها

گرفتن اطلاعات از api و نمایش ان با استفاده از GetX

اشنایی با GetView و GetWidget

پروژه ایجاد یک todo اپ به صورت کامل که با سرور در ارتباط هست و موارد زیر رو پوشش میده

📍 ثبت نام در اپلیکیشن
📍 اعتبار سنجی فرم ها
📍 ذخیره سازی اطلاعات لاگین حافظه لوکال
📍 گرفتن و نمایش موارد از سرور
📍 افزودن موارد
📍 حذف موارد
📍 ویرایش موارد
📍 جستجو در موارد اضافه شده

🛑🛑اگه مورد خاص دیگه مد نظر دوستان هستش بیان کنن که ما اضافه کنیم در این دوره فوق آلعاده


آدرس دوره Getx در فلاتر
http://codeflow.ir/UKvpS
Media is too big
VIEW IN TELEGRAM
تا حالا به این فکر کردید که چطوری بتونید پردازش های سنگین رو توی دارت هندل کنید بدون اینکه برنامه بسته بشه یا توی کار نرم افزار وقفه ای ایجاد بشه ؟


توی این ویدیو با isolate آشنا میشید که کار رو برای شما خیلی راحت انجام میشده


ویدیو رایگان از دوره فلیمو

codevolution.ir