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

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

⭕️پشتیبانی:
@PureCoder_support
@MohammadTaherri
Download Telegram
💊Capsule
🔥extends vs implement
5⃣

توی دارت چیزی به نام interface نداریم.

🔥برای این منظور از abstract کلاس ها استفاده میکنیم.

abstract class Contract{
void doSomething() ;
}

Class Concrete implement Contract {

void doSomething () {
// do your work...
}
}


کلاس های abstract هم میتونن متد های معمولی داشته باشن (همراه با بدنه /مثل بقیه کلاس ها) و هم متد های بدون بدنه.

هم میتونیم یک abstract کلاس رو implement کنیم و هم میتونیم ازش extends کنیم.

ولی تفاوتش چیه؟ 🤔

🔥اگه extends کنیم، این کلاس مثل یک super class برای ما عمل میکنه و تمام ویژگی های اون رو به ارث میبریم و علاوه بر اون باید متد های بدون بدنه اون رو پیاده سازی کنیم.

🔥اگه اون رو implement کنیم، کلا دیگه موضوع به ارث بردن ویژگی های اون میره پی کارش و ما مجبور میشیم که تمام متد های اون رو (چه با بدنه و چه بدون بدنه) پیاده سازی کنیم.

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

ولی این مورد استفاده توصیه نمیشه.

اگه abstract کلاسمون همه متد هاش بدون بدنه بودن و شبیه به interface بود اون رو implement میکنیم.

و اگه هر دو نوع رو در خودش داشت ازش extends میکینم که بتونیم تمام ویژگی هاش رو به ارث ببریم و متد های بدون بدنش رو هم implement یا پیاده سازی کنیم.
#capsule
🔥10👍3
💊Capsule
🔥extends vs implement
6⃣

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

abstract class MyInterface{

const MyInterface._() ;

}


البته کلاس هایی که توی یک فایل یا library هستن میتونن این دست انداز رو رد کنن و بازم extends کنن😝
#capsule
🔥11
PYsvgTz.png
2 MB
🔥Design Patterns🔥

#capsule
👍6
💊Capsule
نام گذاری

برای نام گذاری متغیر ها , فانکشن ها , کلاس ها و ... توی زبان های برنامه نویسی از 4 الگوی مختلف استفاده میشه:

✔️snake_case
✔️camelCase
✔️PascalCase
✔️kebap-case

🔥هر زبان برنامه نویسی برای نام گذاری قوانین خودش رو داره و باید اون ها رو رعایت کنیم.

🔥توی دارت :

برای نام گذاری فایل ها از snake_case استفاده میکنیم.

home_page.dart

برای نام گذاری متغیر های و فانکشن ها از camelCase استفاده میکنیم.

var newUser;

User createUser(){}

برای نام گذاری کلاس ها از PascalCase استفاده میکنیم.

class HomePage{}

#capsule
👍14🔥4
💊Capsule
🔥Key
1⃣

🟢دو نوع Key توی فلاتر داریم :

GlobalKey
LocalKey

✔️هر دو subclass کلاس Key هستن.

تفاوت اول و مهم این دو در این هست که GlobalKey باید توی کل اپ unique باشه.

یعنی اگه به یه ویجت توی یک فریم یه GloablKey دادید، دیگه نمیتونید از اون GlobalKey برای ویجت دیگه و توی همون فریم استفاده کنید.

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

ولی LocalKey ها اینطور نیستن و شما میتونید برای دو ویجت متفاوت و در یک فریم از یک LocalKey یکسان استفاده کنید.

🔥به شرطی که :

✔️اون دو ویجت فرزند مشترک یک ویجت پدر نباشند.

مثلا هر دو نباید فرزند مشترک یک column یا یک stack باشن.

🔥علاوه بر اون اگه از Navigator 2 استفاده میکنید باید به page هاتون LocalKey بدید و نمیتونید از یک LocalKey یکسان برای دو page مختلف استفاده کنید.

#capsule
#advanced
14👍4🔥4
💊Capsule
🔥GlobalKey
2⃣

🟢اولین کاربرد مهم GlobalKey برای این هست که به context یک ویجت و همچنین به state اون (در صورتی که ویجت استیت فول) باشه، در بقیه قسمت های اپ دسترسی داشته باشیم.

با استفاده از دو variable به نام های
✔️currentContext
✔️currentState
میتونیم به این منظور برسیم.

🔥علت اینکه توی نام از current استفاده شده چون که این موارد میتونن در طول lifetime یک GlobalKey تغییر کنن.

مثال)
با دادن GlobalKey به نویگیتور به جای استفاده از
Navigator.of(context).push
میگیم
navigatorKey.currentState.push

🔥این کار از لحاظ پرفرمانس عملکرد بهتری داره.

🟢به همین صورت میتونید به ویجت مورد نظر GlobalKey بدید و در بقیه قسمت های اپ به state اون دسترسی پیدا کنین و متد های داخل state اش رو کال کنید (مثل نویگیتور)
یا به contextاش دسترسی پیدا کنید.

بیش از اندازه استفاده نکنید (مطابق نیاز)

#capsule
#advanced
🔥9👍2
💊Capsule
🔥GlobalKey
3️⃣

🟢در مورد کاربرد اول GlobalKey گفتیم که میتونیم با استفاده از اون به context و state یک ویجت برسیم.

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

مثلا برای Navigator , Scaffold و ... میتونه مفید باشه.

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

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

🔥با استفاده از context هم میتونیم کار هایی از قبیل :‌

✔️دسترسی به renderObject ویجت مورد نظر

✔️نوتیف فرستادن به وسیله context

✔️و...

رو انجام داد.
#capsule
🔥7👍2