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

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

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
Forwarded from Persian Flutter (PayamZ)
This media is not supported in your browser
VIEW IN TELEGRAM
سلام بچه ها اولین ورژن پکیج toastification رو منتشر کردم

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

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

https://github.com/payam-zahedi/toastification
☘️سال نوی خورشیدی و نوروز باستانی بر همه ی ایرانی های عزیز با فرهنگ ها، زبان ها و قومیت های مختلف و بر همه ی پارسی زبانان سراسر دنیا که بخشی از این فرهنگ و تمدن زیبا هستن، به خصوص افغانستانی ها و تاجیکستانی های عزیز که در این گروه هم در خدمت تعدادیشون هستیم، مبارک باشه.

🐇 ان شاالله سال کلینی رو تجربه کنید.

@purecoder_ir
سلام دوستان

⭕️تا یکشنبه شب میتونید از تخفیف ۵۰ درصدی عید نوروز دوره ی Object Oriented Design استفاده کنید.

⭕️بعد از اون هزینه دوره افزایش خواهد داشت.

⭕️هزینه دوره با تخفیف : ۷۰۰ هزار تومان

⭕️برای ثبت نام (و مشاوره) به اکانت پشتیبانی پیام بدید :

@PureCoder_support

پرداخت هزینه دوره به صورت کارت به کارت هست.

⭕️لینک دوره در سایت :
https://purecoder.ir/course/object-oriented-design-part-one/

🟢دوره تا فصل ۵ تکمیل شده و فصل های ۶ و ۷ هم تا ۳ روز اینده تکمیل میشن.
Pure Coder pinned a photo
🌳TDD

اقای Martin Fowler میگه :
هر احمقی میتونه کدی بنویسه که ماشین بتونه اون رو بفهمه.
برنامه نویس خوب کسیه که کدی بنویسه که انسان بتونه اون رو بفهمه.

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

کدی که انسان بتونه بفهمه باید clean باشه.
توی چنین کدی باید duplication ها از بین رفته باشن.
اصول طراحی باید رعایت شده باشن و قابل فهم برای انسان و همچنین قابل توسعه باشه.

🍀واقعیتش سخته که بخوای همزمان کدی بنویسی که هم کار کنه و هم clean باشه و هم...

🍀متد TDD این concern ها رو کاملن از هم جدا میکنه.

میگه اول بدون اینکه نگران clean بودن یا duplication ها یا اصول طراحی و حتا پرفرمانس و بهینه بودن کدت و... باشی، کدی بنویس که کار کنه.

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

فقط برای نوشتن کدت باید از متد Test first استفاده کنی و همه ی کدها از تست ها drive بشن.

حالا وقتی کدی نوشتی که کار کرد و دیگه نگران درست بودن کدت نیستی، میتونی تمرکزت رو بگذاری روی سایر موضوعات.

کدت رو clean کنی و duplication ها رو از بین ببری.
اصول طراحی رو رعایت کنی.
بهینش کنی و...

انقد refactor میکنی کدت رو که انسان فهمش کنی.

ولی نکته ی مهم اینه که الان یه عالمه تست داری که میتونی بهشون تکیه کنی و در جریان refactor کردن کدت، هر لحظه تست ها رو ران کنی و مطمئن بشی که کدت سالمه و داره درست کار میکنه و Refactor کردن باعث عبور از خط قرمز ها نشده.

@purecoder_ir
🌳TDD

🍀اقای Kent Beck خالق TDD, اعتقاد داره که همین که duplication ها رو توی کد از بین ببریم، خود به خود اصول طراحی هم رعایت و جفت و جور میشه.

🍀اقای Robert C Martin معروف به عمو باب که خودش رو از شاگردان Kent Beck میدونه، با این نظر مخالفه و میگه با از بین بردن duplication ها الزامن نمیتونیم بگیم که همه اصول طراحی هم رعایت شدن و اعتقاد داره که این دو مورد رو باید توی دو سطح متفاوت روی کد مون اعمال کنیم.

🍀همچنین عمو باب میگه که Test First یعنی که توی همه چیز باید اولویت با تست باشه.

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

@purecoder_ir
سلام
دوستانی که توی open ai ثبت نام کردید و از chat gpt استفاده کردید...

در مورد روندش
اینکه از کجا شماره مجازی گرفتید
و هر نکته ی دیگه ای که فکر میکنید به درد میخوره...

لطفن کامنت ارزشمند تون رو زیر این پست بگذارید و تجربه ی خودتون رو بگید.

با تشکر 🙏
Forwarded from Persian Flutter (PayamZ)
This media is not supported in your browser
VIEW IN TELEGRAM
تو ورژن جدید Toastification شما میتونید message های خودتون رو با animation دلخواه نشون بدید

اگه براتون مفید بود یه استار برامون تو گیتهاب بزارید

https://github.com/payam-zahedi/toastification

@persian_flutter
⭕️بحث فلاتری

🟢در مورد پرفرمانس خیلی میشنویم.
میگن این اپه پرفرمانسش بالاس... اون یکی پایینه... و و و و...

🟢خب فلاتر یه فریمورک UI هست.
اینکه دقیقن هدف فلاتر به عنوان یه فریمورک UI چی هست رو بعدن صحبت میکنیم...

🟢ولی
وقتی با UI طرفیم، پرفرمانس دقیقن به چه معنی هست؟
توی فلاتر چطوری میتونیم تفسیرش کنیم؟
چه معیاری برای سنجش پرفرمانس میتونیم داشته باشیم و بر اساس اون اپ های مختلف رو با هم مقایسه کنیم؟

⚠️مشخصن در مورد رم و مدیریت حافظه صحبت نمیکنیم.
پس این موضوع رو باز نکنید.

@PureCoder_ir
This media is not supported in your browser
VIEW IN TELEGRAM
🥺🥺مرز های تکنولوژی در نشست با جمعی از دانشمندان یک درصد برتر جهان دریده شد!!!!
Pure Coder
🥺🥺مرز های تکنولوژی در نشست با جمعی از دانشمندان یک درصد برتر جهان دریده شد!!!!
پایتونیسم درد کلی جامعه ی ایرانه...

خواه قبول کنیم یا نکنیم...
خوشمون بیاد یا نیاد...

خوشحال باشیم یا ناراحت، بخندیم یا گریه کنیم، این جلسه و این اقای به ظاهر دانشمند و این صحبت ها، اینه ی تمام قد جامعه ی ماست...
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 حفظ میشه)

#state_life_cycle
اگه یه استیت فول رو توی درخت const کنیم و پرنتش ریبیلد بشه... ایا متد های didUpdateWidget و build استیتش کال میشن و ریبیلد میشه؟
Anonymous Quiz
43%
اره
57%
نه
اگه توی state یه stateful به یه inheritedWidget وابسته بشیم و اون stateful هم توی درخت const کنیم.... ایا با اپدیت شدن inheritedWidget متد های didChangeDependencies و build از state کال میشن و ریبیلد میشه؟
Anonymous Quiz
49%
آره
51%
نه
ایا با setState کردن.... در لحظه و همون موقع state ریبیلد میشه؟
Anonymous Quiz
52%
اره
48%
نه
⭕️یک راه دیگه به غیر از const کردن برای جلوگیری از ریبیلد شدن ویجت وقتی که پرنتش ریبیلد میشه بگید 🤔
Channel photo updated
🔥مراحلی که فلاتر برای مقایسه دو ویجت توی بیلد های مختلف طی میکنه :

1⃣Reference Equality
در ابتدا چک میکنه که ایا دو ویجت رفرنس مشترک دارن یا نه.
اگه اینجوری باشه اون ویجت اصلن و ابدن ریبیلد نمیشه.

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

2⃣Type + Key
اگه رفرنس ها یکی نبودن، runtime type و key دو ویجت با هم مقایسه میشن.
اگر ویجت key نداشته باشه، مقدارش نال میشه و توی این مقایسه تاثیری نمیگذاره.

درصورتی که دو ویجت توی دو بیلد مختلف runtime type یکسان و key یکسان داشته باشن، state ویجت حفظ میشه و اون ویجت ریبیلد میشه و متد های زیر کال میشن :
✔️didUpdateWidget
✔️build

⚠️البته با فرض stateful بودن، اگه stateless هم باشه ویجت ریبیلد میشه و متد build کال میشه.

3⃣ create new ....

اگه مقایسه type و key به فنا بره و دو تا ویجت از این مقایسه سربلند بیرون نیان، ویجت قبلی کلن از درخت پرت میشه بیرون و یه دونه جدید ساخته میشه.

⚠️یه جاهایی باید از Element به جای ویجت استفاده میکردم که برای سادگی این کار رو نکردم.

@purecoder_ir