Pure Coder
785 subscribers
189 photos
30 videos
8 files
150 links
⭕️آدرس سایت:
https://purecoder.ir

⭕️گروه پرسش و پاسخ:
@purecoder_gp

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
#beginner
#capsule

🔥Capsule
⚡️⚡️ShapeBorder⚡️⚡️
Pure Coder pinned Deleted message
🔥Article
قسمت جدید داستان null در دارت منتشر شد.

توی این قسمت جلسه اول رسیدگی به اتهامات دارت تشکیل میشه...یه داستان خیلی جذاب که آخرش نکات زیادی در مورد :
✔️Scopes
✔️nullable variables
✔️non-nullable variables
✔️final variables
✔️late
و ارتباط همه این ها با هم یاد میگیریم.😍😍
پس این مقاله رو از دست نده و با دقت بخونش.😍
حتا اگه همه این ها رو بلدی هم نکات جدید هست که اینجا یاد بگیری😍😍

لینک مقاله :‌

https://vrgl.ir/qJhrV

#beginner #article #intermediate
🔥Challenge

دوستان به نظرتون استفاده از stateful باعث میشه پرفرمانس اپ پایین بیاد یا استفاده از stateless و تبدیل stateful ها به stateless پرفرمانس رو بالا میبره؟

#challenge #flutter_challenge
🔥Challenge
⚡️⚡️Dart 2.15⚡️⚡️
Constructor tear-offs

توی پست های قبلی و یه مقاله اختصاصی در مورد function ها و وقتی که از یه function بدون پرانتز استفاده میکنیم صحبت کردیم.

حالا توی ورژن جدید Dart یه قابلیت مشابه برای constructor ها ارایه شده...
هرچی راجب این قابلیت و کاربردهاش میدونی بگو...
#challenge #dart_challenge
#intermediate
💊 Capsule
⚡️⚡️Dart 2.15⚡️⚡️
1⃣
Constructor tear-offs

قبلن با این ویژگی توی function ها آشنا شدیم وقتی که یک function رو بدون پرانتز به کار میبردیم و توی یه مقاله هم کامل بهش پرداختیم که میتونی مطالعه کنی.

🔥حالا توی ورژن جدید Dart این قابلیت برای constructor ها هم ارایه شده.
و میتونی constructor های یه کلاس رو بدون پرانتز به جایی پاس بدی یا توی یه variable ذخیره کنی و بعدن ازشون استفاده کنی.

🔥دو دسته constructor توی یه کلاس ممکنه داشته باشیم:

✔️Default constructor
🔥برای این از این قاعده استفاده کن :
ClassName.new


✔️Named constructor
🔥برای این هم :
ClassName.constructorName

#capsule #intermediate
💊 Capsule
⚡️⚡️Dart 2.15⚡️⚡️
2⃣
Constructor tear-offs

🔥مثالی که Michael Thomsen توی مقاله خودش برای توضیح این ویژگی جدید Dart زده :

class FruitWidget extends StatelessWidget {
@override
Widget build(BuildContext context) {
return Column(
children: ['Apple', 'Orange'].map(Text.new).toList());
}
}



میبیند که constructor ویجت Text رو پاس داده به map.
در واقع داریم روی یه لیست از String ها یه map میزنیم که یه لیست از ویجت ها تولید کنیم.
پس در نتیجه map انتظار داره که توی ورودی ی Function بهش بدیم که اینجوری باشه :

Widget Function(string input)

که Defualt constructor ویجت Text رو میشه بهش پاس داد.

#intermediate #capsule
میخوام توی پست های بعدی یکم در مورد مفاهیم انیمیشن توی فلاتر صحبت کنیم ...

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

موافقین؟ 😁😁
💊Capsule
⚡️⚡️Animation⚡️⚡️

معنای لغوی Animation چیه؟ 🤔
یعنی متحرک، هر تصویری که متحرک باشه.

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

🔥یه چیزی هست به اسم توهم 😂
توهم حرکت، توهم متحرک بودن.

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

✔️دوربین فیلم برداری کاری نمیکنه جز گرفتن یه تعداد عکس با فاصله زمانی کم .
✔️نمایشگر کاری نمیکنه جز قراردادن یه تعداد عکس پشت سر هم.
✔️و حتا چشم انسان هم کاری نمیکنه جز گرفتن عکس های پی در پی از وقایع و فرستادن اون ها به مغز.

🔥و همه این ها با هم یه چیزی رو بوجود میارن به نام توهم حرکت.
و ما در واقع داریم توهم میزنیم 😂

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

#intermediate #capsule #animation
💊Capsule
⚡️⚡️Animation⚡️⚡️

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

گفتم که پردازنده تصویر رو رندر میکنه و نمایشگر تصویر رو نمایش میده.
پس اینجا با ۲ واحد سخت افزاری سر و کار داریم که هر کدوم ویژگی های خودشون رو دارن.

🔥توی هر نمایشگر یه مفهومی داریم به اسم Refresh rate.

این برای هر نمایشگر با یه عددی بیان میشه که واحدش هرتز هست و میگه یه نمایشگر توی هر ثانیه چند بار میتونه تصویر خودش رو رفرش یا اپدیت کنه.

مثلن اگه ۶۰ هرتز باشه توی هر ثانیه ۶۰ بار میتونه تصویر خودش رو رفرش کنه یعنی تقریبن هر ۱۶/۳۳ میلی ثانیه یه بار.

ولی این کافی نیست و فقط به صرف اینکه یه نمایشگر ۶۰ هرتز داشته باشیم نمیتونیم بگیم که تصویر توی هر ثانیه ۶۰ بار رفرش میشه.

🔥 توی پردازنده یا GPU یه مفهومی داریم به اسم Frame rate.

این تعداد Frame هایی رو که پردازنده گرافیکی توی هر ثانیه میتونه تولید کنه رو بیان میکنه.
و واحدش fps یا Frame per Seconds هست.

وقتی میگیم 60 fps یعنی اینکه پردازنده این قابلیت داره که توی هرثانیه ۶۰ فریم یا ۶۰ تصویر جدید رندر کنه.

🔥حالا نکته مهمی که هست اینه که همیشه refresh rate نمایشگر با frame rate پردازنده برابر نیست.
یعنی ممکنه یه نمایشگر سرعت رفرشش بیشتر از سرعت تولید فریم توسط پردازنده باشه یا برعکس و اینجوری بین این دو ناهماهنگی بوجود میاد 🤦‍♂

راه حل چیه به نظرتون؟


#animation #capsule #advanced
🔥Article
قسمت جدید داستان null در دارت منتشر شد.

توی این قسمت جلسه دوم رسیدگی به اتهامات دارت تشکیل میشه...یه داستان خیلی جذاب که آخرش نکات زیادی در مورد انواع مختلف ارگومان های ورودی function ها و constructor ها یاد میگیریم.😍😍

لینک مقاله :‌
https://virgool.io/flutter-challenge/dart-null-story-court-2-fybaowhhzpf1

#beginner #article
دوستان منبع اصلی برای مقاله های نال سیفتی که تا حالا اماده شده و در اینده اماده میشه ادرس زیر هست :

https://dart.dev/null-safety/understanding-null-safety

هر کسی به خوندن از منابع اصلی و البته زبان اصلی علاقه داره میتونه این مقاله رو دنبال کنه. 👌
💊Capsule
⚡️⚡️Dart threads⚡️⚡️
قبلن دوتا پست در مورد سینگل ترد بودن یا نبودن فلاتر داشتیم که میتونی با این تگ پیداشون کنی و بخونی
#single_thread

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

این حرف از کجا در اومده؟ 😅😅🤦‍♂🤦‍♂

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

خب دارت هم همین جوره
هیچ فرقی نداره از این لحاظ
زبان های دیگه که خودشون هوشمند براتون ترد نمیسازن
اون جا هم اولش یه ترد هست و میتونید ترد های بیشتر اضافه کنید.

توی دارت هم همینه فقط اسمش شده isolate
تلفظش میشه : آیزولیت
معنیش میشه محصور (همچین چیزی 😅)

حالا چرا این اسم رو گذاشتن روش؟
مریض بودن ایا؟ 😅
خب میزاشتن همون ترد دیگ 🤦‍♂🤦‍♂

نه عزیزان دل مریض نبودن.

🔥هر آیزولیت که ساخته میشه یک ترد جدید ساخته میشه.
در واقع هر ایزولیت یک سینگل ترد داره و یک event loop که کد ها داخلش اجرا میشه.

ولی برخلاف زبان هایی مثل جاوا یا c++ که ترد های مختلف از یک Shared memory استفاده میکنه اینجا توی دارت هر کدومشون یک private memory دارن و مموری رو بین خودشون share نمیکنن و فقط با رد و بدل کردن message با هم ارتباط برقرار می کنن

به همین دلیل بهشون میگن isolate.

#single_thread #capsule #advanced
💊Capsule
⚡️⚡️Animation⚡️⚡️

🔥توی پست های قبلی در مورد اینکه معنی لغوی Animation چیه صحبت کردیم و متوجه شدیم که وقتی که داریم یه تصویر متحرک یا یه فیلم میبینم یا یه بازی کامپیوتری میکنیم در واقع داره چه اتفاقی میوفته.

🔥همچنین با دو تا مفهوم از مفاهیمی که سخت افزار های درگیر توی این قضیه باهاشون سر و کار دارن آشنا شدیم.

نمایشگر : refrash rate (هرتز)
پردازنده : frame rate (fps)

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

GPU : Graphics Processing Unit
CPU : Central Processing Unit

یه سوال هم مطرح کردیم که...

🔥حالا یه سوال دیگه این جا مطرح میشه که Flutter با کدوم یک از مفاهیم بالا بیشتر درگیره؟ با اولی یعنی refresh rate یا دومی یعنی frame rate.

#advanced #capsule #animation
💊Capsule
⚡️نکات طلایی scrollable ویجت ها⚡️
1⃣

چند تا نکته که موقع استفاده از ListView ، GridView , CustomScrollView یا ویجت های مشابه که scrollable هستن میتونه به بهبود پرفرمانس کمک کنه :

🔥اگه ویجت مورد نظرتون یعنی ListView یا... قراره کل صفحه رو پوشش بده (تاکید میکنم کل صفحه) در این صورت پارامتر clipBehavior رو واسش روی حالت none بگذارید :
clipBehavior : Clip.none

🔥اگه قراره کل صفحه رو پوشش نده و یه قسمت خاصی از صفحه رو میگیره این پارامتر رو روی حالت زیر که پیش فرض خودش هم هست بگذارید :
clipBehavior : Clip.hardEdge

🔥مقادیر دیگه برای این پارامتر مثل
Clip.antiAlias
رو فقط در صورت نیاز ضروری و اگه واقعن میدونستید که دارید چکار میکنید قرار بدید.

نکات بعدی در پست های بعدی 😍😍

#advanced #capsule #scrollable #list_view #clip #performance
💊Capsule
⚡️نکات طلایی scrollable ویجت ها⚡️
2⃣
این یکی قاتل پرفرمانسه
shrinkWrap = true
🔥شاید از این استفاده کنی و خیلی وقت ها تاثیری توی پرفرمانس هم نبینی ولی من بهت میگم که از این آپشن صرف نظر کن.

🔥وقتی که false باشه یعنی حالت پیش فرض scrollable مربوطه حداکثر فضایی رو که parent اش در اختیارش گذاشته رو میگیره.
یعنی خودش رو تا بزرگترین حد ممکن که parent اش بهش اجازه داده بسط میده.

🔥حالا بعضی وقت ها بعضی ویجت ها قیود مشخصی به child هاشون اعمال نمیکنن و اون ها رو محدود نمیکنن که سایز مشخصی داشته باشن (یا محدودشون نمیکنن که سایزشون توی یه بازه خاص باشه)

مثل column که child هاشو در راستای ارتفاع محدود نمیکنه و بهشون اجازه میده که از 0 تا infinity هر سایزی که دلش خواست بگیره و بعدن اگه مجموع سایز child هاش از سایز مجاز خودش بیشتر شده اون ها رو clip میکنه.

این که چرا مثلن column رفتارش اینجوریه و مث آدم از اول child ها رو محدود نمیکنه بماند. 😅

ولی خب توی همچنین شرایطی scrollable widget ما چون که قیود مشخصی (constraints) بهش اعمال نشده نمیدونه که باید چه سایزی بگیره.

🔥حالا توی همچین شرایطی این آپشن یعنی shrinkWrap به کار میاد و با true کردنش به جای اینکه ویجت خودش رو تا حداکثر اندازه مجاز بسط بده به اندازه بچهاش سایز میگیره.

🔥ولی در این حالت اتفاقاتی میوفته که به شدت روی پرفرمانس تاثیر میذاره.

🔥پس همیشه یه راه دیگه برای حل این مشکل پیدا کنید و از پارامتر استفاده نکنید مگر اینکه انقد حرفه ای بودید که میدونستید که توی اون حالت خاص که دارید استفاده میکنید و با شرایطی که ویجت های parent دارن این مورد خیلی قضیه رو حاد نمیکنه. 😍

من میگم استفاده نکنید. اختیار با خودتون 😁
#capsule #advanced #list_view #performance #shrinkwrap
💊Capsule
⚡️نکات طلایی scrollable ویجت ها⚡️
3️⃣
Scrollbars

🔥وقتی یک scroll view استفاده میکنیم به صورت پیش فرض برای پلتفرم های دسکتاپ مثل windows و macos و linux اسکرول بار میذاره و برای Android و IOS و fuchsia اسکرول بار نمیذاره.

برای فعال یا غیر فعال کردن این قابلیت لینک زیر رو ببین :

فعال کردن (یا غیر فعال کردن) scrollbars در scrollView


#list_view #capsule #intermediate
پارسی رو پاس بداریم یا نه؟

من شخصن یکی از طرفداران سر سخت زبان پارسیم.
از ایرانی بودنم ناراحت نیستم و سرسختانه بر این باورم که باید زبان پارسی رو حفظ کنیم.
زبانی که اجداد ما با همت فردوسی ها و... به هر سختی که بود حفظش کردن و ما هم وظیفه داریم که حفظش کنیم.

بگذریم....
ولی بیایم یکم توی فضای تخصصی خودمون.

ما خارج از فضای تخصصی برنامه نویسی مخلص زبان پارسی هستیم ولی به کار بردن یک سری لغات پارسی برای بعضی از واژه های تخصصی شاید زیاد درست نباشه.

به قول یه دوستی که میگفت مثلن polymorphism رو همه جای دنیا به همین اسم میشناسن.
همه جا این لغت رو به کار میبرن.
پس بهتره که ما هم از همین واژه تخصصی استفاده کنیم و مثلن نیایم بگیم چند ریختی یا...

یا نگیم متغیر.... بهتر نیست بگیم variable؟؟

ما وارد یک فضای تخصصی شدیم و این فضا یک سری واژگان محدود داره و چه خوبه که همه دنیا این واژگان محدود رو بدون دستکاری به کار ببرن.