<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های yalda student</title>
        <link>https://virgool.io/feed/@yld_student</link>
        <description>یلدا محصلی؛ برنامه نویس فلاتر، دبیر کامپیوتر</description>
        <language>fa</language>
        <pubDate>2026-06-16 16:14:50</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/72512/avatar/NVPjXX.jpeg?height=120&amp;width=120</url>
            <title>yalda student</title>
            <link>https://virgool.io/@yld_student</link>
        </image>

                    <item>
                <title>دستورالعمل‌هایی برای برنامه نویس نشدن</title>
                <link>https://virgool.io/@yld_student/%D8%AF%D8%B3%D8%AA%D9%88%D8%B1%D8%A7%D9%84%D8%B9%D9%85%D9%84-%D9%87%D8%A7%DB%8C%DB%8C-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3-%D9%86%D8%B4%D8%AF%D9%86-mjrui3ensflc</link>
                <description>don&#039;t codeهمیشه در برهه‌های زمانی مختلف یه سری مشاغل ترند شدند و می شدند و حجم زیادی از افراد به سمت اون هجوم بردند؛ یه دوره مهندسی، یه تایمی پزشکی، بورس، برنامه‌نویسی، هوش مصنوعی و.. . الان اینطوری شده که اینستاگرام رو باز می‌کنی دوره‌های رایگان و غیر رایگان تو چشمت پرتاب میشه! یه مناسبتی که میشه آفر میزنن:80% تخفیف دوره‎ها،وبینار نقشه راه برنامه نویسی رایگان،سمنیار 4 قدم تا جیمز داسگلرلایو هوش مصنوعی در 10 روزو..توی همین لایوها و میت ها و گردهمایی‌ها هم همیشه عده ای هستند که می‌پرسن فلاتر یا نیتیو؟ وب یا موبایل؟ مک یا ویندوز؟ دوغ یا نوشابه؟ 😵‍💫در ادامه‌ی تبلیغات هم سلسله‌ای از استوری‌های رضایت مشتری گذاشته میشه که سهراب با فلان دوره طی 2ماه پروژه‌ی 60میلیونی گرفته یا استخدام گوگل شده و.. . در نهایت عده‌ای ترغیب میشن و دوره رو به سبد خرید اضافه می‌کنند و اولین قدم برای مارتین اندرسون شدن رو بر میدارن :) توی چند درصد از همین گپ و گفت‌ها در مورد چالش ها و سختی‌های هر کدوم از این فیلدها گفتن؟ چند بار اومدن از این زاویه بررسی کنن چه تیپ‌های شخصیتی مناسب این کار هستند؟ تا حالا به این ساید ماجرا فکر کردید؟ همیشه گفتیم و شنیدیم پشتکار مهم تر از هوش و استعداده اما نمیشه استعداد یابی رو نادیده گرفت. هیچ‌کاری نشد نداره اما مسیر موفقیت یلدا مثل مهتاب نخواهد بود. اگه دیتا ماینینگ برای پیمان مناسب نبوده لزوما برای پرویز این‌طور نیست. بعضی مسیرها طی کردنش بهینه تره نسبت به یک route دیگه! شما می‌تونید برنامه‌نویس شید اما ممکنه دیزاینر بهترین بشید! پس چشم بسته هرکسی هرکاری کرد شما هم نرید دقیقا همون کار رو بکنید!ما بدین در نه پی حشمت و جاه آمده‌ایم ................... از بد حـــــــــــــادثه این جا به پناه آمده‌ایمرهرو منــــــــــــزل عشقیم و ز سرحد عدم ................... تا به اقلیم وجود این همه راه آمده‌ایمقبل از انتخاب هر مسیری به قسمت‌های دارکش هم فکر کنید. شرح این آتش جان‌سوز، نگفتن تا کی؟ تمام ماجرا درآمد n میلیونی نیست برادر من! تا گوساله گاو بشه خیلی راهه خواهر من! هدف از گفتن این حرفا این نیست که بگم برنامه نویسی بده، نیاید ولی با چشم باز انتخاب کنید. صبر خیلی مهمه؛ صبر برای به ثمر نشستن کاری که می‌کنی، صبر برای رشد، صبر برای رفع مشکلاتی که توی پروژه ات هست. خیلی وقتا ممکنه کسی نباشه یا نخواد یا ندونه که بهت بگه چیکار کنی، اینجا صبر خودشون نشون میده که بری اینقدررر بری و بگردی و آزمایش کنی تا به نتیجه برسی. ممکنه مجبور باشی مسیر رفته رو برگردی، کد نوشته رو پاک کنی بازم نباید جا بزنی، یه روز لبخند میزنی یه روز اشک اینجا باید زمان بذاری؛ اگه از کسی کمکی می‌خوای، از تجربه‌اش میخوای استفاده کنی باید این کار رو درست انجام بدی. وقت هرکسی برای خودش ارزشمنده در عین حال زمانی که شما صرف کاری می‌کنید ارزش و اهمیت اون رو نشون میده. یک روزی یک فردی که به تازگی میخواست وارد این وادی بشه و در جستجوی راه درست بود، در اولین پیامش نوشت: «س» به‌جای سلام و من به این فکر می‌کردم این آدم در ادامه مسیر چطوری میخواد عمل کنه؟! با اون زمانی که اینجا سیو کردی چکار مهمی کردی؟ تو برای حل مشکلت حاضر نیستی پیام رو کامل بنویسی، چطور می‌تونی این توقع رو داشته باشی بقیه متقابلا این کار رو بکنن و بهت راهنمایی بدن؟ خلاصه که بله ...حالا با هر زور و ضربی که شروع کردین و دستتون رفت تو پوست گردو، چندتا نکته رو یادتون باشه؛همواره، همیشه و همه‌جا گوگل دوست خوب شماست 🤝هر زمان تو کدتون به مشکل خوردین و خواستین کمک بگیرید، چندتا پوینت رو فراموش نکنید.1. در اکثر افراد تازه‌کار این تفکر هست که کدی که نوشتن همه چیش درست و کامله و اگه مشکلی هست از فریمورکه! یادتون نره کد هوشمند نیست که حدس بزنه شما چی می‌خواید که همونطور که مدنظر شماست اجرا بشه یا منظورتون رو درک کنه.2. اگر از کدتون میخواید عکس بفرستید، عکس با کیفیت و کامل تهیه کنید؛ مثلاً معلوم باشه این کد مربوط به کدوم فایل یا کلاسی هست، شماره خطوط ترجیحا مشخص باشه یا صورتتون توی عکس نباشه😐.3. فردی که بهش مراجعه کردید بی‌خبر ترین شخص نسبت به کد شماست؛ پس توضیحات کامل درمورد جزئیات کد و کاری که می‌خواید انجام بدید ارائه بدید تا سریعتر و بهتر مشکل‌تون حل بشه :)4. از break point و لاگ استفاده کنید و به‌درستی استفاده کنید! حتی‌الامکان از عبارات رندوم و بی‌معنی استفاده نکنید. علاوه بر اون چیزی هم در لاگ ننویسید که خودتون هم گمراه بشید! یه بار دوستی جایی که داشت ارورهای سمت سرور رو هندل می‌کرد، بجای پرینت کردن خطای پرتاب شده، لاگی با این محتوا گذاشته بود که &quot;اتصال خود به اینترنت را بررسی کنید&quot; و بنده خدا براش عجیب بود چرا برنامه اش به اینترنت وصل نمیشه😶! آب در کوزه و ما ..بله...5. سعی کنید کد رو درک کنید حفظش نکنید! اوایل ممکنه بعضی چیزا حفظ کنید اما منطق و لاجیک رو فرمول‌وار حفظ نکنید، همه چیز همه جا ثابت نیست. با کد دوست باشید؛ هر کدی قصه‌ی خودشو داره، با قصه کدتون مچ بشید. به پروژه هاتون نگید nightmare! سر یه پروژه‌ای یک کارآموزی داشتیم که در عرصه یادگیری پیشتاز و پیشگام بود اما امان از زمانی که به باگ می‌خورد.. قبلا در مقاله‌‌ی &quot;کد تمیز گلی از گلهای گیتهاب است&quot; هم گفتم؛ کد شما مثل بچه‌تون هست باهاش مهربون باشید درکش کنید صبور باشید. همیشه 13بدر خوش میگذره، ببین موقع چالش در عمل چند چندی 😏اگر با زبان‌های شی‌گرا کار می‌کنید، تفکر شی‌گرایی، جنبه‌ها و ویژگی‌های اون رو عمیقا درک کنید. برای یه دکمه کت ندوزید، لازم نیست هرجایی کلاس بسازید! و برعکس بعضی مشکلات به سادگی با شی‌گرایی قابل حل شدن هستند!خلاصه که برنامه نویسی اونقدرا هم آسون نیست که همیشه در صلح و صفا بگذره و یه شبه بتونید یه واحد تو قیطریه بخرید ولی اگه اهلش باشید حتی اگه در ثریا هم باشه نشد نداریم 😊 خلّص و تمّت!</description>
                <category>yalda student</category>
                <author>yalda student</author>
                <pubDate>Tue, 26 Dec 2023 11:37:12 +0330</pubDate>
            </item>
                    <item>
                <title>کد تمیز گلی از گل های گیتهاب است</title>
                <link>https://virgool.io/flutter-community/%DA%A9%D8%AF-%D8%AA%D9%85%DB%8C%D8%B2-%DA%AF%D9%84%DB%8C-%D8%A7%D8%B2-%DA%AF%D9%84-%D9%87%D8%A7%DB%8C-%DA%AF%DB%8C%D8%AA%D9%87%D8%A7%D8%A8-%D8%A7%D8%B3%D8%AA-iasgqgol7ll3</link>
                <description>به نام خداوند کدهای پاکخانه ی دل ما را از کرم، عمارت کن!              پیش از آنکه این خانه رو نهد به ویرانی(شیخ بهایی)بعد از چند ماه سلام ?اواخر تابستون بود که می خواستم یک مطلب درمورد یکی از پکیج های فلاتر بنویسم که حوادثی پیش اومد که نشد ? حدود یک ماه پیش تصمیم گرفتم در اولین فرصت به اون تصمیم جامه عمل بپوشونم که به یک پروژه برخوردم که تصمیم گرفتم موضوع صحبت رو موقتا عوض کنم ? خلاصه که این نوشته برای من مثل حبسیه اس برای ملک الشعرا.. ?پروژه کذایی از این قرار بود که باید UI یک اپلیکیشن توسعه یافته رو rebuild می کردم که کار عجیبی هم نبود.قبلا مقداری در جريان پروژه بودم که مثلا از cubit استفاده شده، نحوه پیاده سازی api ها به چه صورت فاجعه باره. اما سمت view رو ندیده بودم که ای کاااش میشد برم عقب، ای کاش ندیده بودمت !الآنی که دست به کیبورد شدم لازم دونستم یک سری نکاتی رو بگم که اگر معدود فلاتر دولوپر هایی داریم که این جوری نرم افزار توسعه میدن برن یه گوشه بشینن و به کثیف کاری هاشون تو کد فکر کنن.. ?این همه پریشانی بر سر پریشانی…خب خیلی هامون می دونیم که آنکل باب مهربان یک کتاب داره به اسم clean code که به تفصیل توضیح داده کجا و چجوری کدهای شیک بزنیم و احادیث زیادی در باب مطالعه این کتاب اومده. علاوه بر این، یک اصطلاح دیگه داریم به اسم clean architecture که اگه در جریانش هستید که آفرین! اگه هم نه که برادرمون گوگل حرف در این مورد زیاد داره. از Chat GPT هم می تونید بپرسید ?. مورد سوم هم داخل فریمورک فلاتر قابل رؤیته؛ میدونید که اساس این فریمورک بر پایه widgetها بنا شده. از ب بسم الله که شروع به توسعه می کنیم یک widget می سازیم و همین فرمون رو ادامه می دیم.با عنایت به این ۳ اصل اساسی میریم که اون کد رو نقد کنیم.. ? از شما به عنوان یک توسعه دهنه فهیم و محترم انتظار میره که جوری نرم افزار رو توسعه بدید که بعدا مورد لطف بقيه قرار نگیرید! نرم افزار و اون کدی که براش نوشته میشه همچون فرزند شماست؛ نباید جوری فرزندتون رو بار بیارید که بعدا نتونید جمعش کنید! خشت اول رو باید درست بذارید که می چرخه زمونه، اینجور نمی مونه!خب برگردیم به نقد کد..شما موقع توسعه اپ تون به ویجت هایی برمیخورید که ویژگی های مشترکی دارند و تکرار می شن و مثلا ممکنه تفاوتش در یک title باشه. مثل دکمه ای در چندین جای اپ وجود داره و تفاوتش مثلا فقط در عنوان و عملکردش هست. اینجا عقل سلیم میگه این ویجت رو extract یا استخراج کن و مثلاً عنوان و فانکشن مربوط به onTap ش رو به عنوان ورودی در سازنده دریافت کن. تا اگه یه روز خواستی یک تغییری در ظاهرش ایجاد کنی یک جا رو فقط بخوای عوض کنی. یا همون اصل DRY (Don’t Repeat Yourself). علاوه بر اون کدت هم خواناتره؛ ۴ صباح دیگه اومدی پاش نشستی بهتر یادت میاد اینا چی ان اونا کدومن ?نکته بالا تا حدی درمورد تم برنامه هم صادقه؛ اگر فرضاً تمامی TextField های برنامه borderRadius یکسان دارند این رو باید توی Theme برنامه یک بار برای همیشه تعریف کنی و خلاص! رنگ های برنامه هم قس علی هذا ..در هر زبان برنامه نویسی یک استایل برای نام گذاری ها وجود داره؛ که بهتر و زیبا تره که رعایت بشه. یعنی چی؟ مثلا میخوای به کلاسی که نوشتی اسم بدی باید به صورت UpperCamelCase باشه، به ثابت های میخوای اسم بدی lowerCamelCase طور اسم بده. شاید فکر کنین چه فرقی داره، مهم اینه کار کنه! درسته کار میکنه ولی تمیزز نیست دوست عزیز!? جهت کسب اطلاعات بیشتر به داکیومنت خود فلاتر مراجعه بنما!مطلب بعدی ترکیب چندین اصل هست؛ وقتی شما می خواهید تابعی رو بنویسید، به چندین نکته باید توجه کنید:اصل اول solid در مورد تک مسئولیتی صحبت میکنه؛ اما شما اگه عاقل باشی متوجه میشی که این اصل رو میتونی روی توابع هم پیاده کنی و تعمیم بدی؛ درکتاب کلین کد هم بهش پرداخته شده. که یک تابع باید یک کار مشخص انجام بده؛ همچنین نباید تابعی بنویسی که ۳۰ - ۴۰ خطه! عمو باب گفته حدود ۱۵ خط حداکثر باشه ?حالا ممكنه در این اثنا فاز خیلی clean بودن برداری و بیای موقع پیاده سازی ui به ازای هر ویجت یک متغیر تعریف کنی، مثلا:var nameTextField = TextFiled();
var phoneTextField = TextFiled();
//and so onبعدش بیای متد build رو پیاده سازی کنی و اینا رو بهش بدی. خدمتت عرض کنم که اینم اشتباهه ?! هیچ جا چنین کاری انجام نشده! کار عاقلانه اینه اون رو به صورت method یا یک ویجت extract کنید و تامام.در آخر، مقیاس نقد رو یکم بالاتر می برم .. در هر پروژه درست و حساب یک معماری وجود داره. مثلا اگه پروژه تون با Get نوشته شده با MVC میتونید مجلسی تر بنویسیدش. لزوم وجود معماری بر همگان واضحه و هدف این مقاله بیان اهمیت اون نیست! در ابتدایی ترین حالت یک، پروژه باید یک ساختار معقول و منطقی داشته باشه که مشخص باشه هرچیزی کجاست. چه معنى داره model هر صفحه کنار همون صفحه باشه! چرا ساخت مدل، ارسال رکوئست، دریافت پاسخ و مدیریتش همگی توی onPressed باشه ?؟! اون cubit هویجه پس؟! Datasource کشکه؟!این طلب گر از تو و از من خطاست           گر بمیرم این دم از غم هم رواست(عطار)امیدوارم این نکات براتون مفيد باشه و کمک بکنه کدهایی بنویسید که عاقبت بخیر بشید ? مرسی از توجه تون؛ اشتراک گذاری فراموش تون نشه ?یقیناً در این نشانه هایی است برای مردمی که می اندیشند(سوره روم، آیه ۲۱)</description>
                <category>yalda student</category>
                <author>yalda student</author>
                <pubDate>Thu, 09 Mar 2023 01:21:43 +0330</pubDate>
            </item>
                    <item>
                <title>کتابخانه Drift که بود و چه کرد؟ (2)</title>
                <link>https://virgool.io/flutter-community/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-drfit-%DA%A9%D9%87-%D8%A8%D9%88%D8%AF-%D9%88-%DA%86%D9%87-%DA%A9%D8%B1%D8%AF-ngzalr7jumuh</link>
                <description>نحوه نوشتن کوئری در Driftمدیریت داده در فلاترقسمت دومدر قسمت اول به نحوه تعریف جداول در Drift پرداختیم. دیگه واقعا نوبت نوشتن کوئری هاست. خب میدونید که 4 نوع عملیات داریم؛ select، insert، delete و update. علاوه بر این هم clause های مختلفی توی SQL داریم، where clause، join clause و.. . همه­ ی این کار ها به سادگی با چند تا تابع قابل انجامه. در ادامه برای هرکدوم یک ریز مثالی نوشتیم؛ تو خود حدیث مفصل بخوان از این مجمل... در قدم اول سراغ insert میریم. کد زیر یک category به جدول Category اضافه میکنه. ساده است فقط باید دقت داشته باشید که تابع insert یک کتگوری از نوع Companion دریافت میکنه.insert in Driftنحوه update یک رکورد هم به آسونی A,B,C هست. خود Drift در نظر میگیره اونجاهایی PK ها برابرند اپدیت رو انجام میده. خلاف تابع insert، این تابع ورژن Dataی کتگوری رو دریافت میکنه.update in Driftمورد بعدی درمورد حذف یک رکورد از جدول هست. میدونید دیگه برای حذف رکورد نیاز به شرط داریم که اشتباهاً همه ی رکورد ها رو حذف نکنیم. یکی از جاهایی که تابع where میتونه خودنمایی کنه دقیقاً همین جاست که حذفیات رو مشخص کنیم.Delete in Driftو در نهایت نوبت به select می رسه. کوئری که در شکل پایین می بینید برای جستجو بین Note هاست. علاوه بر اون من بنا به نیازی که توی پروژه ام بوده، دوتا جدول رو باهم دیگه join کردم؛ انواع join ها هم وجود داره. select in Driftیک نکته مهم اینه که وقتی شما دو تا جدول رو باهم join می کنید، خروجی کوئری شما هیچکدوم از اون دو جدول قبلی نیست، در چنین شرایطی Drift به شما لیستی از TypedResult برمیگردونه که خودتون زحمت باید parse کردن دیتا رو بکشید. این اتفاقات لزوماً موقع join رخ نمیده؛ ممکنه شما در یک کوئری تصمیم بگیرید یک ستون به خروجی تون (مثلاً به علت استفاده از Aggregation function ها یا ...) اضافه کنید. اینجا هم نتیجه به parse کردن نیاز داره.نحوه Parse کردن TypedResult به خروجی دلخواهمی بینید که خروجی هر دو جدول رو میشناسه و می تونید به Column های هرکدوم جداگانه و به سادگی دسترسی پیدا کنید.امیدوارم براتون مفید بوده باشه و بدانید و آگاه باشید که امکانات این کتابخانه به اندک نکاتی که طی این 2 مقاله بهش اشاره شد محدود نمیشه! راستی! من در این پروژه و این ریپازیتوری گیتهاب  از Drift استفاده کردم، دوست داشتین ببینیدش و بهش Star بدید ;)در آخر، اگر تمایل داشتید درمورد این کتابخونه جذاب و جالب بیشتر مطالعه داشته باشید، حتما به داکیومنتش سر بزنید (و أوصیکم بالقرائت داکیومنت).</description>
                <category>yalda student</category>
                <author>yalda student</author>
                <pubDate>Sat, 27 Aug 2022 17:27:36 +0430</pubDate>
            </item>
                    <item>
                <title>کتابخانه Drift که بود و چه کرد؟ (1)</title>
                <link>https://virgool.io/flutter-community/%DA%A9%D8%AA%D8%A7%D8%A8%D8%AE%D8%A7%D9%86%D9%87-drfit-%DA%A9%D9%87-%D8%A8%D9%88%D8%AF-%D9%88-%DA%86%D9%87-%DA%A9%D8%B1%D8%AF-nen1bxtgppbh</link>
                <description>مقدمه ای بر کتابخانه Drift در Flutterقسمت اولتوی این مقاله میخوام در مورد دیتابیس Drift صحبت کنم. سیستم های مدیریت داده متعدد و متفاوتی داخل فلاتر وجود داره که ممکنه کم و بیش با اونا آشنایی داشته باشید؛ مثل Drift، Hive، Sqflite، GetX Storage و.. .بعضی از این DBMSها از نوع Relational  هستند؛ مثل Sqflite و Drift، بعضی دیگه شون هم مثل Hive از مدل NoSql هستند. هرکدوم از این ها مزیت و عیب خودشون رو دارند که فعلا مورد بحث ما نیست :)از هرچه بگذریم سخن Drift خوشترست..کتابخونه Drift (که قبلا از اسمش Moor بوده) مخصوص برنامه های Dart و Flutter هست که از همه ی پلتفرم ها هم پشتیبانی میکنه. برنامه نویس به دو صورت میتونه کوئری هایی که درنظر داره رو بنویسه؛ هم به زبان  Dart و هم SQL. اولین کار اینه که این پکیج به پروژه مون اضافه کنیم:نصب:dependencies:
  drift: ^2.0.2+1
  sqlite3_flutter_libs: ^0.5.0
  path_provider: ^2.0.0
  path: ^1.8.2

dev_dependencies:
  drift_dev: ^2.0.2
  build_runner: ^2.2.0شاید فکر کنید واقعا نصب همه ی این پکیج ها لازمه؟ باید بهتون بگم بله بله؛ drift که خود دیتابیس مون هست. drift بر مبنای sqlite3ساخته شده sqlite3_flutter_libs بیشتر برای پلتفرم های موبایل کاربرد داره، اگر شما از فلاتر استفاده نمی کنید، می تونید (با مسئولیت خودتون) نصبش نکنید. این دیتابیس هایی که گفتیم همه شون اطلاعات روی دستگاه به صورت لوکال ذخیره میکنن و طبیعتاً باید یه جای درست و حسابی برای دیتا پیدا بشه، برای همین پکیج های path_provider و path رو به پروژه اضافه می کنیم. دو تا پکیج آخر رو هم برای جنریت شدن کد ها و کوئری ها لازم داریم.حالا که Drift رو نصب کردیم، کار اصلی شروع میشه. بالاتر بهتون گفتم که به دو روش میشه دیتابیس رو طراحی کرد و کار رو پیش برد. در روش اول از زبان Dart کمک می گیریم:اولین کاری که باید انجام بدیم، پیاده سازی جدول(ها)مون هست. به مدد این کتابخونه، خیلی شیک Table ها طراحی میشن:جدول Category:جدول Categoryجدول  Note:جدول Noteباتوجه به اینکه نوع ستون های جدول چی هست می تونید از IntColumn، TextColumn، BoolColumn، DateTimeColumnو RealColumnاستفاده کنید. اگر بخواهید برای اون فیلد مقدار دیفالت تعریف کنید از تابع withDefaultاستفاده می کنید و مقداری که مدنظر دارید رو بهش پاس می دید. تابع namedزمانی عرض اندام می کنه که تمایل داشته باشید اسم یک فیلد توی پایگاه داده متفاوت از اسم getter اون باشه. بقیه موارد بنظر واضح میاد تا برسیم به مبحث کلید های اصلی و خارجی.برای تعریف کلید(ها) اصلی جدول تون می تونید primaryKeyرو override کنید و ستون های لازم رو بهش معرفی کنید؛ به همین راحتی، به همین خوشمزگی.اگر داخل جدول تون فیلدی داشته باشید که رفرنسی از یک جدول دیگه باشه (همون Foreign key خودمون)، برای اون هم یک تابع reference داریم که یک چندتا پارامتر اجباری و اختیاری داره. ورودی های اجباری اون اسم جدول مبدا و اسم ستون هست. دو تا پارامتر اختیاری هم برای Referential Actions داره که با استفاده از KeyActionمیتونید اکشن مدنظر تون رو استفاده کنید.خب حالا که جدول ها مون رو تعریف کردیم یه کلاس لازم داریم که دیتابیس مون رو مدیریت کنیم؛ این شکلی:database.dartداخل DrfitDatabase@ باید جدول ها و viewهایی(اگر داریم) که تعریف کردیم به این کلاس معرفی کنیم. در صورتی که بخوایم زمانی که دیتابیس داره ساخته میشه یا اپدیت میشه و.. کانفیگ های به خصوصی انجام بدیم، میتونیم تابع migration رو override کنیم. این تابع یک MigrationStrategyبرمیگردونه که 3 تا تابع در ورودی به صورت دلخواه دریافت میکنه؛ onCreate،  onUpgrade و  beforeOpen.یادتون نره این کامند رو باید اجرا کنید، تا فایل database.g.dart تولید بشه:flutter pub run build_runner buildبعد از اینکه این فایل جنریت شد، به ازای هر کدوم از این جدول هایی که تعریف کردیم، دوتا کلاس تولید میشه (مثلا NoteData و NoteCampanion) که هرکدوم کاربرد خودشو داره.توی پست بعدی، نحوه ی پیاده سازی کوئری ها رو بررسی میکنیم ;)  تا اینجای کار مرسی که خوندین، منتظر نظراتتون هستم *_*</description>
                <category>yalda student</category>
                <author>yalda student</author>
                <pubDate>Sat, 27 Aug 2022 13:21:54 +0430</pubDate>
            </item>
            </channel>
</rss>