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

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

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
🔥Article
🔥مفهوم const و درک و استفاده درست ازش ممکنه برای خیلی ها مبهم باشه..
خود من وقتی که تازه دارت رو شرو کرده بودم با این مفهوم مشکل داشتم و درکش نمیکردم و حتا از مدرسین اون موقع فلاتر هم که میپرسیدم اون ها هم خوب توضیح نمیدادن...

توی این مجموعه مقاله ۶ قسمتی مفهوم const رو با جزئی ترین نکات با هم بررسی میکنیم.

بعد از خوندن این مجموعه میتونی مثل یه استاد این مفهوم رو به بقیه یاد بدی...

لینک قسمت اول آموزش :
https://vrgl.ir/P0OY9

🔥https://t.me/flutter_challenges

#beginner #intermediate #article
🔥Article
🔥اگه با فانکشن بدون پرانتز مشکل داری و درکش نمیکنی...

🔥اگه وقتی توی فلاتر باید به onPressed یه button یه فانکشن پاس بدی و بهش یه فانکشن بدون پرانتز پاس میدی ولی کامل درکش نمیکنی که داره چه اتفاقی میوفته...

🔥و حتا اگه از نظر خودت کامل درک میکنی که چه اتفاقی داره میوفته...

مقاله زیر رو بخون :
https://virgool.io/flutter-challenge/dart-function-without-parentheses-hscdfgcxdoro

حتا اگه همه چیز رو درک میکنی باز هم این مقاله حرف برای گفتن و نکته جدید برای فهمیدن دارن 😍😍

🔥https://t.me/flutter_challenges

#article #beginner #intermediate
🔥Challenge

میخوام یه variable تعریف کنم که امکان این رو داشته باشه که مقادیری از هر تایپی داخلش بریزم...

دو تا انتخاب میتونم داشته باشم :‌
1) Object myVariable
2) dynamic myVariable

این دو حالت چه تفاوت هایی با هم دارن و هر کدوم برای چه کاربرد هایی خوبن ؟
#challenge
#dart_challenge
#intermediate
🔥Article
قسمت جدید داستان null در دارت منتشر شد.

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

لینک مقاله :‌

https://vrgl.ir/qJhrV

#beginner #article #intermediate
🔥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
⚡️نکات طلایی scrollable ویجت ها⚡️
3️⃣
Scrollbars

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

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

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


#list_view #capsule #intermediate
💊Capsule
⚡️نکات طلایی scrollable ویجت ها⚡️
5⃣
PageStorageKey

این نوع Key یه subclass از ValueKey هست با یه کاربرد خاص.
قبلن در مورد انواع key ها و کاربردشون گفتم و این نوع رو به آینده موکول کردم.

الان وقتشه 😍😍

🔥اگه بخوایم ScrollView موقعیت اسکرول خودش رو حفظ کنه و وقتی که خراب شد و دوباره از اول ساخته شد برگرده به همون scroll position قبلی، از این نوع از key استفاده می کنیم.

🔥برای مثال وقتی توی یه TabbarView یا یه PageView یه دونه ListView داشته باشیم وقتی میریم page بعدی این page که شامل لیست هست کامل destroy میشه و بعد که برمیگردیم از اول ساخته میشه.

🔥برای اینکه موقعیت اسکرول خودش رو ذخیره کنه و بعد که از اول ساخته شد دوباره بره همون جا :

✔️به یکی از parent های ListView یا خودش یه key از این نوع میدیم.

✔️توی ScrollController هم باید پارامتر زیر رو true کنیم :
keepScrollOffset

🔥از این نوع key کلن میتونیم برای ذخیره و بازیابی اطلاعات توی یک Route و توی frame های مختلف استفاده کنیم که یه کاربردش همین بود که گفتم.


#capsule #intermediate #local_key #list_view
🔥Challenge

▶️سناریو :

یه قسمتی از اپمون قراره که جستجو توی محصولات یا... رو پیاده کنیم.

🔴یه Search Box لازم داریم.

🔴کاربر شروع میکنه به نوشتن و همزمان باید جستجو انجام بشه...

چالش :

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

🟢یعنی اگه کاربر بدون وقفه (۲ثانیه ای) به تایپ کردن ادامه داد هیچ جستجویی انجام نمیشه.

توضیح بدید که این مساله رو، به خصوص وقفه ۲ ثانیه رو چطوری هندل میکنید؟

⛔️ساختار معماری در این چالش مدنظر نظر نیست.
فقط نحوه هندل کردن این موضوع به خصوص وقفه مهم هست.
در صورت لزوم میتونید کد هم ارائه کنید.

#challenge #flutter_challenge #dart_challenge
#intermediate
🔥Challenge

▶️سناریو :
میخوایم یک فرایند Sign up و Sign in شبیه به تلگرام رو انجام بدیم.

1⃣Sign up
وقتی که برای اولین بار وارد اپ میشیم و از قبل اکانت نداریم.

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

2⃣Sign in
وقتی که از قبل اکانت داریم.

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

چالش :

ℹ️از دید کاربر معمولی احتمالا فرایند sign up و sign in به صورت کاملا مستقل پیاده سازی شده، توضیح بدید که ایا این فرایند ها مستقل هستند یا اینکه قسمتی از این دو فرایند به صورت مشترک پیاده سازی میشوند.

2⃣این فرایند ها رو تحلیل کنید و بگید چه api هایی و با چه جزییاتی (ساختار api) برای پیاده سازی این فرایندها نیاز دارید.

#challenge #flutter_challenge #intermediate
🔥Challenge

چالش :

تفاوت Future.delayed با Timer چیه؟ 🤔

#challenge
#dart_challenge
#begginer
#intermediate
🔥Challenge

چالش :

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

#challenge
#dart_challenge
#intermediate
💊Capsule
BottomSheet
ℹ️

🔥توی متریال دیزاین دو نوع ‌Bottom Sheet داریم.

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

🟢این نوع رو میشه به دو روش استفاده کرد :

🔥پارامتر bottomSheet توی ویجت Scaffold

🔥🔥استفاده از فانکشن
showBottomSheet
و یا
Scaffold.of(context).showBottomSheet()

🔴هر کدوم از این روش ها تفاوت هایی دارن که بعدا اشاره میکنیم.

✔️Modal
این نوع درواقع یک گزینه جایگزین برای Dialog یا popup menu هست و جلوی تعامل کاربر با بقیه قسمت های صفحه رو میگیره.

🟢در صورتی که Dismissible باشه با لمس کردن قسمت های دیگه صفحه بسته میشه.

🔥این مورد رو میشه با استفاده از فانکشن
showModalBottomSheet

استفاده کرد.

#capsule
#intermediate
💊Capsule
BottomSheet
2️⃣

✔️Persistent

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

🔥پارامتر bottomSheet توی Scaffold :‌

توی این حالت :‌

باتم شیت جزو محتوای اصلی صفحه حساب میشه.

جلوی تعامل کاربر با بقیه المان های صفحه رو نمیگیره

با لمس کردن بقیه قسمت های صفحه بسته نمیشه

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

دکمه بک به اپ بار اضافه نمیشه

با بک زدن یا Navigator.pop کل صفحه بسته میشه

🔥توی این حالت باتم شیت اون پایین صفحه میمونه و به هیچ وجه قابل بستن نیست مگر اینکه توی برنامه ست استیت کنی و توی build جدید باتم شیت نداشته باشی

#capsule
#intermediate
💊Capsule
BottomSheet
3️⃣

✔️Persistent

و اما روش دوم

🔥استفاده از فانکشن
showBottomSheet
یا
Scaffold.of(context).showBottomSheet

توی این حالت:

باتم شیت جلوی تعامل کاربر با بقیه قسمت های صفحه رو نمیگیره

با لمس کردن بقیه قسمت های صفحه بسته نمیشه

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

دکمه بک به اپ بار اضافه میشه

با بک زدن یا Navigator.pop ابتدا باتم شیت بسته میشه و با بک دوم صفحه

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

#capsule
#intermediate
BottomSheet
4⃣

خب تا اینجا bottom sheet های نوع Persistent رو دیدیم و با دو روش استفاده از اون ها ، شباهت ها و تفاوت های این روش ها اشنا شدیم.

حالا چرا به اینا میگن Persistent؟

🔥این کلمه به معنی ماندگار هست (یه چیز توی این مایه ها 😝)

حالا چون این نوع از bottom sheet ها مزاحم کار کردن با بقیه قسمت های صفحه نمیشن و با کار کردن با بقیه قسمت های صفحه بسته نمیشن، توی متریال دیزاین بهشون میگن

Persistent Bottom Sheets

#capsule
#intermediate
💊Capsule
GIT

<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<footer>

#git
#intermediate
توی این پست راجب خط اول صحبت میکنم.


🟢<type>(<scope>): <subject>

✔️type : required
✔️scope : optional
✔️subject: required

type
میتونین به صورت قراردادی توی پروژه ای که دارین انجام میدین type های مختلف رو مشخص کنید .

🔥یه سری type هایی که مرسوم هست :
🔰feat(feature)
وقتی یه چیز جدیدی اضافه کردی
🔰docs
وقتی داکیومنت تغییر کرده یا داکیومنت نوشتی
🔰fix
وقتی یه باگی رو فیکس کردی
🔰refactor
یه کدی رو تغییر دادی که نه ویژگی جدید اضافه شده و نه باکی فیکس شده
🔰style
کد ها رو فرمت کردی
مثلا خطهای اضافه رو پاک کردی
اسپیس ها رو درست کردی
که فقط کدها قشنگتر به نظر بیان
🔰test
یه تستی نوشتی
🔰chore
کارهایی مثل اضافه کردن به دپندنسی یا فایل pubsoec که تغییری توی کدها ایجاد نمیکنن

#git
#intermediate