سلام به همه دوستان عزیزم امیدوارم که حالتون تو این روزای کرونایی خووووب باشه. ❤️❤️
قبل از اینکه بخوام برم بالا منبر واستون ?? تمام این مباحثی که توی این مقاله به شما میگم جامع تر و کامل ترش همراه با کلی مثال رو میتونید توی کانال یوتوبم ببینید. تماشای ویدیو pubspec.yaml در یوتوب من
بزارین اول از همه چیز بهتون بگم که اصن این فایل pubspec.yaml واسه چی تو همه برنامه های ما هستش؟؟???
این فایل تمام اطلاعات و وابستگی های پکیج ما به پکیج های دیگه رو توی خودش نگه میداره و با زبان yaml هم نوشته میشه. واسه همین تو تمام برنامه هایی که میسازید ردپای این فایل رو میبینید. ??
اما این اطلاعات که گفتم چیان ؟
اسم پکیج ما رو مشخص میکنه و ضروری هم هست ینی هر برنامه ای که میسازید باید مقدار name رو بهش بدید. حالا اگه پکیج ما یک library package باشه (ینی بقیه پکیج ها بتونن به پکیجی که ما نوشتیم وابسته بشن) پکیج های دیگه با این name ای که ما تعریف کردیم میتونن از پکیج ما استفاده بکنن. و توی سایت هایی که میزبان پکیج هستند مثه pub.dev پکیج ما با این name ای که گفتیم نمایش داده میشه. هم چنین زمانی که توی کدمون میخوایم فایل های برنامه خودمون رو import کنیم باید اولش اسم پکیجمون رو بنویسیم یعنی اگه من یک پکیج داشته باشم با اسم ali و بخوام توی کدم فایل مثلا main رو import کنم باید به این شکل عمل کنم :
import 'package:ali/main.dart';
قوانینی که برای انتخاب name وجود داره عبارتند از :
این پارامتر به ما اجازه میده تا هم به Dart SDK و هم به نسخه Flutter محدودیت هایی اضافه کنیم، به این معنی که وقتی مینویسیم :
ما مشخص میکنیم که این برنامه یا پکیج فقط بر روی نسخه های Dart SDK بالاتر یا مساوی از 2.7.0 اما پایین تر از 3.0.0 اجرا شود.
علاوه بر این، میتونیم با استفاده از پارامتر flutter مشخص کنیم که از چه نسخه فلاتر استفاده میکنیم :
در این مورد، ما فقط در صورتی به برنامه خود اجازه اجرا میدیم که از نسخه Flutter 1.22.0 استفاده کنیم.
اگه شما قصد دارید که پکیج خودتون رو منتشر کنید که بقیه هم ازش استفاده کنند (مثلا توی pub.dev بزاریدش) حتما باید شماره ورژن رو مشخص کنید و هر بار که آپدیتی روی پکیجتون میدید این ورژن رو تغییر بدید این جوری کسانی که میخوان از پکیج شما استفاده کنن میتونن ورژن های پکیج شما رو ببینند و یا حتی از ورژن های مختلف پکیج شما استفاده کنند.
اما اگه پکیجتون یک پکیج local (یا همون application package که جایی منتشر نشده) باشه میتونید ورژن رو مقدار دهی نکنید و دارت به صورت پیش فرض مقدار 0.0.0 رو به عنوان ورژن پکیج شما میزاره.
حالا اگه کلا نمیدونین چجوری باید ورژن بندی کنید من توی مقاله های بعدی نحوه ورژن گذاری رو به شما کامل یاد میدم.(یا میتونید ویدیوی یوتوبم رو ببینید که کامل نحوه ورژن گذاری رو توضیح دادم : ویدیو یوتوب )
این پارامتر هم اگه میخوایم که پکیجمون رو به صورت عمومی منتشر کنیم (library package) ضروری است.
با استفاده از این پارامتر ما میتونیم یک توضیحات خلاصه از پکیجمون و کاری که میکنه رو فراهم کنیم که زمانی که دیگران دنبال پکیج ما میگردند (مثلا در pub.dev) توضیحات مربوط به پکیج ما رو ببینند و با پکیج ما آشنا بشن. اما اگه قصد ندارید که پکیج خودتون رو منتشر کنید (application package) این پارامتر اختیاریست و میتونید اون رو نادیده بگیرید.
قوانینی که برای نوشتن description وجود داره عبارتند از :
اگه بخوایم آدرس وب سایت پکیجمون رو مشخص کنیم میتونیم این پارامتر رو مقدار دهی بکنیم.
اما این پارامتر کاملا اختیاریه چه واسه library package ها چه واسه application package ها.
اما اگه پکیج شما یک library package هست که قصد دارید اون رو منتشرش کنید بهتره که این پارامتر رو مقداردهی کنید تا کسانی که میخوان از پکیج شما استفاده کنن بفهمن پکیج شما از کجا اوومده.
تنها قانونی هم که واسه مقداردهی این پارامتر وجود داره اینه که :
این پارامتر هم شبیه به homepage است ینی هم کاملا اختیاریست و هم اینکه حتما باید یک url باشد با این تفاوت که آدرس url ای که اینجا قرار میدید آدرس source code پکیج شماست.
اگر پکیج شما روی github قرار داره میتونید آدرس github پکیجتون رو برای این پارامتر قرار بدید.به این صورت : https://github.com/<user>/<repository>
با اینکه مثل homepage کاملا اختیاریه ولی اگه قصد دارید پکیج تون رو عمومی منتشر کنید بهتره که این پارامتر رو مقدار دهی کنید تا اطلاعات بیشتری در دسترس کسانی که میخوان از پکیج شما استفاده کنند قرار بدید.
این پارامتر هم مثل دوتا پارامتر قبلیه یعنی هم کاملا اختیاریه هم اینکه حتما باید یک url باشه ولی فرقش اینه که آدرسی که قرار میدیم باید آدرس جایی باشه که کسانی که از پکیج شما استفاده میکنن بتونن باگ هایی که روی پکیج وجود داشت رو ببینن و هم اینکه اگه باگی وجود داشته باشه اون رو ثبتش کنن که شما بتونید اون باگ رو بررسی و رفعش کنید.
با اینکه کاملا اختیاریه ولی بهتره که برای پکیج های عمومی این پارامتر رو مقدار دهی کنید.
نکته : اگه پکیج شما توی pub.dev باشه و پارامتر repository (پارامتر قبلی) رو با آدرس github پکیجتون مقدار دهی کرده باشید، در این حالت اگه پارمتر issue tracker رو مقدار دهی نکنید خود pub.dev به صورت اتوماتیک issue tracker گیت هاب پکیجتون رو به عنوان مقدار این پارامتر قرار میده. (https://github.com/<user>/<repository>/issues
)
برخی از پکیج ها یک صفحه وبی دارند که توی اون صفحه مستندات کامل اون پکیج گذاشته شده. اگه پکیج شما هم به صورت عمومی منتشر شده و این صفحه مستندات رو هم به صورت جداگانه داره میتونید آدرس اون صفحه رو به عنوان مقدار این پارامتر قرار بدید.
این پارامتر هم برای library package ها و هم برای application package ها کاملا اختیاریست. و حتما باید یک url باشد.
اگر میخوایم توی برنامه خودمون از یک سری پکیج دیگه استفاده کنیم باید اسم اون پکیج ها رو در این بخش وارد کنیم.
ما دو نوع dependency داریم. dependencies و dev_dependencies. اما فرقشون چیه ؟
اگه به یک پکیج هم در فاز توسعه و هم در فاز اجرا نیاز داشته باشیم اسم اون پکیج رو در بخش dependencies قرار میدهیم و این پکیج ها در خروجی نهاییه برنامه وجود خواهند داشت ولی اگه به یک پکیج تنها در فاز توسعه و طراحی نیاز داشته باشیم اون پکیج رو در بخش dev_dependencies قرار میدیم.
مثلا اگه از پکیج های linter استفاده میکنید که یک سری قوانین روی کد نوشتن شما اعمال میکنه یا از پکیج هایی استفاده میکنید که یک سری کد رو واسه ما تولید میکنه و یا از پکیج های تست نویسی استفاده میکنید، چون این کارها فقط در فاز توسعه و طراحی به درد ما میخوره پس این پکیج ها رو در بخش dev_dependencies قرار میدیم.
نکته : dev_dependencies ها در خروجی نهاییه برنامه ما وارد نمیشن
ما به 4 روش میتونیم یک پکیج رو به برناممون اضافه کنیم :
این سناریو را تصور کنید: ما از پکیج bloc با نسخه 6.0.0 به صورت مستقیم توی برناممون استفاده می کنیم، اما در عین حال از یه پکیج دیگه ای هم توی برناممون استفاده میکنیم که اون پکیجه خودش از نسخه 5.0.0 bloc استفاده می کنه.
الان برنامه ما به صورت مستقیم داره از نسخه 6 بلاک استفاده میکنه و به صورت غیر مستقیم به نسخه 5 بلاک هم وابسته است. الان با این شرایط اگه دستور flutter pub get رو بزنیم به ما ارور میده که ورژن های بلاک با هم همخونی ندارن.
حالا اگه ما نتونیم ورژن bloc ای که توی پکیج دیگه داره استفاده میشه و ورژن 5 رو داره زیادش کنیم و به ورژن 6 تبدیلش کنیم، یا باید ورژن bloc ای که داریم ازش به صورت مستقیم استفاده میکنیم رو از 6 بیاریم روی 5 (که خب این باعث میشه از ویژگی های جدید پکیج بلاک محروم بشیم) یا اینکه از dependency_overrides استفاده کنیم. و بهش بگیم که برنامه من حتما باید از نسخه 6 بلاک استفاده کنه صرف نظر از اینکه هر پکیجی داره از چه نسخه بلاکی استفاده میکنه. و پکیج بلاک رو به شکل زیر در لیست dependency_overrides قرار میدهیم:
dependency_overrides: flutter_bloc: 6.0.6
الان با این کار برنامه من کلا با بلاک نسخه 6.0.6 کار میکنه و دیگه کاری نداره که پکیج های دیگه ای که از بلاک استفاده میکنن و توی برنامه ما هم هستن از چه نسخه بلاکی استفاده میکنن. الان اگه flutter pub get کنیم مشکل ناهمخونی ورژن ها برطرف میشه.( اما استفاده از dependency_overrides کمی خطرناک است و در بعضی مواقع باعث ارور های بیشتری میشه : میتونی این ارورها رو در ویدیو یوتوبم ببینی )
به صورت پیش فرض پکیج ما روی pub.dev منتشر میشه اگه میخوایم که روی هیچ جایی منتشر نشه میتونیم مقدار none رو بهش بدیم :
publish_to: none
و اگه میخوایم از سرور های میزبان پکیج دیگه استفاده کنیم میتونیم این پارامتر رو مقدار دهی کنیم.
این پارامتر هم کاملا اختیاری است.
در پایین فایل ما قسمتی به نام flutter رو می بینیم. زمان ایجاد یک پروژه جدید، می بینیم که از قبل یک پارامتر دارد به اسم uses-material-design که برابر با true است و اگه ما میخوایم از icon font های متریال استفاده کنیم حتما باید مقدارش رو برابر با true بزاریم.
و در آخر هم میتونیم asset ها و font های خودمون رو در بخش flutter مشخص کنیم :
خب دیگه رسیدیم به آخر این مقاله ?? و من توی این مقاله تمام فیلدهای مهمی که توی فایل pubspec.yaml وجود داشت رو به شما توضیح دادم و امیدوارم که واستون مفید بوده باشه.
در انتها اگه میخواین این مبحث رو کامل تر و عمیق تر متوجه بشید میتونید ویدیوی کانال یوتوب من که مربوط به فایل pubspec.yaml میشه رو نگاه کنید. توی اون ویدیو مفاهیم همراه با مثال و جزئی تر بررسی شده اند.
لینک ویدیو آموزش فایل pubspec.yaml به صورت کامل : https://youtu.be/zx4NvRdaxac
لینک کانال یوتوب من : https://www.youtube.com/c/FlutterStan
لینک کانال تلگرام من برای با خبر شدن از آخرین مقالات و ویدیو ها : https://t.me/flutter_stan
ممنون میشم ازتون که با دنبال کردن کانال یوتوب من از من حمایت کنید ❤️❤️❤️❤️