<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های mohammad masoudi</title>
        <link>https://virgool.io/feed/@mohammadmasoudi2020</link>
        <description></description>
        <language>fa</language>
        <pubDate>2026-06-28 05:18:07</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/1702143/avatar/avatar.png?height=120&amp;width=120</url>
            <title>mohammad masoudi</title>
            <link>https://virgool.io/@mohammadmasoudi2020</link>
        </image>

                    <item>
                <title>اسکرول پیشرفته NestedScrollView در فلاتر</title>
                <link>https://virgool.io/@mohammadmasoudi2020/%D8%A7%D8%B3%DA%A9%D8%B1%D9%88%D9%84-%D9%BE%DB%8C%D8%B4%D8%B1%D9%81%D8%AA%D9%87-nestedscrollview-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-hwui77ped2bu</link>
                <description>اسکرول پیشرفته NestedScrollView در فلاتردر فلاتر برای نمایش لیست در حال معمول از SingleChildScrollView یا Listview و Gridview استفاده می کنیم. این به هیچ وجه مشکلی نداره و همه چیز اوکیه، اما تا چه زمانی؟ تا زمانی که بخوایم توی اون صفحه از ویجت های دیگه ای بجز لیست ها استفاده کنیم. چند مثال میزنم واستون و بعد در مورد راه حل صحبت می کنم.مثال اول: مثلا شما لیست پست های اینستاگرام رو در صفحه اصلی اون در نظر بگیرید. ابتدا AppBar، بعد لیست استوری ها و در نهایت لیست پست ها قرار داره که با اسکرول کردن پست ها و به انتها رسیدن، مجددا درخواست به سرور ارسال میشه و پست های صفحه بعد به انتهای لیست اضافه میشه. در این صفحه اینستاگرام، ما نمیتونیم از Listview استفاده کنیم. چرا؟ چون ۱- در این طراحی اگر بخوایم از Listview استفاده کنیم، بخاطر وجود لیست استوری ها که وابسطه به رفتار اسکرول صفحه به سمت بالا میره یا برمیگرده، نیاز به مدیریت اون هست.۲- بخاطر وجود ویجت لیست استوری ها Listview ما برای پست ها به درستی کار نمیکنه و پشت سر هم به سرور درخواست ارسال میکنه و لیست جدید پست ها رو میگیره و این تا بی نهایت میره که واقعا چیز سمیهمثال دوم: صفحه پروفایل اینستاگرام رو در نظر بگیرید که ابتدا Appbar، بعد چند ویجت متن و عکس برای پروفایل و بیو، سپس ویجت های دکمه ویرایش و بعد از اون دکمه های Tabbar که برای مدیریت tab ها قرار دارند. در نهای هم ویجت Tabview رو می بینید که برای لیست پست های شما و تگ شده ها قرار داره.در این طراحی که عمرا بتونید از Listview استفاده کنید. هم بخاطر دلایل مشابه مثال قبلی و هم مخصوصا وجود Tabbar اون وسط.استفاده از NestedScrollView:برای طراحی صفحاتی مشابه صفحات مثال زده شده، میتونید ار NestedScrollView استفاده کنید. باید بدونید که NestedScrollView صفحه ما رو به دو بخش تقسیم می کنه و در نهایت اونها رو به یک ویجت تبدیل می کنه که باعث میشه بتونیم روی اونها اسکرول انجام بدیم و مدیریت پیشرفته تری روی اجزای اون داشته باشیم.بخش اول headerSliverBuilder هست که خروجی اون یک لیستی از ویجت ها است. ما میتونیم در مثال اول ویجت Appbar و لیست استوری ها و در مثال دوم ویجت های Text و Image و Button و Tabbar رو در این بخش قرار بدیدم و در بخش دوم اون که body هستش یک Listview برای لیست پست ها یا Tabview قرار بدیم. کد نهایی ما برای مثال اول چیزی شبیه کد زیر می شود.Scaffold(
    body: NestedScrollView(
      headerSliverBuilder: (context, innerBoxIsScrolled) =&gt; [

        SliverAppBar(        
         // appbar content
          ),

        SliverToBoxAdapter(
          child:  // stories box
      ),

      ],

      body: Listview.builder(
        // posts content
      ),
    ),
  );صفحه اول اینستاگرامکد نهایی ما برای مثال دوم هم شبیه کد زیر می شود.DefaultTabController(
  length: 2,

  child: Scaffold(

    appBar: AppBar(
      //content appbar
    ),

    body: NestedScrollView(
      headerSliverBuilder: (context, innerBoxIsScrolled) =&gt; [

        SliverToBoxAdapter(
          // top box for avatar and bio or buttons
        ),

        SliverAppBar(

          // fix when scroll top
          pinned: true,
          automaticallyImplyLeading: false,
          flexibleSpace: SizedBox(
            child: TabBar(
              tabs: [
                Tab(), // post tab
                Tab(), // tags tab
              ],
            ),
          ),
        ),
      ],

      body: TabBarView(
        children: [
          Gridview.builder(), // my posts
          Gridview.builder() // my tags
        ],
      ),
    ),
  ),
);عکس صفحه پروفایل اینستاگرامدر نظر داشته باشید که می تونید از CustomScrollview هم استفاده کنید که در حالتی که tab در طراحی شما وجود ندارد مشکلی نیست، مثل مثال اول. اما زمانی که در طراحی از tabbar استفاده می کنید مشکل در اسکرول کردن دارید. چطور؟ ببینید در این حالت وقتی روی لیست پست ها اسکرول می کنید appbar به سمت بالا حرکت نمیکنه. همینطور تمام ویجت های دیگه که استفاده شدند.امیدوارم که از این مقاله استفاده کرده باشید. خوشحال میشم با نظراتتون به بهتر شدن مقالاتم کمک کنید.</description>
                <category>mohammad masoudi</category>
                <author>mohammad masoudi</author>
                <pubDate>Fri, 14 Jul 2023 20:28:56 +0330</pubDate>
            </item>
                    <item>
                <title>چطور بدون دانش برنامه‌نویسی اولین پروژه خودم رو گرفتم</title>
                <link>https://virgool.io/@mohammadmasoudi2020/%DA%86%D8%B7%D9%88%D8%B1-%D8%A8%D8%AF%D9%88%D9%86-%D8%AF%D8%A7%D9%86%D8%B4-%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87-%D9%86%D9%88%DB%8C%D8%B3%DB%8C-%D8%A7%D9%88%D9%84%DB%8C%D9%86-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%AE%D9%88%D8%AF%D9%85-%D8%B1%D9%88-%DA%AF%D8%B1%D9%81%D8%AA%D9%85-wufhpdquvnzh</link>
                <description>عکس من(محمد مسعودی) پنج سال پیشبچه‌های زیادی رو دیدم که از نبودن کار و پروژه شکایت می‌کنن. یا حتی بعضیاشون بیخیال برنامه‌نویسی میشن و میرن سراغ کارای دیگه. برای همین تصمیم گرفتم داستان اولین پروژه خودم رو بگم تا شاید بتونه انگیزه‌ای بشه برای این افراد.سال ۹۳ تا ۹۵ به عنوان ویزیتور توی یه کارخانه تولید قطعات لاستیکی خودرو(توی شهرک صنعتی شهرمون) کار می‌کردم. سال ۹۵ کارخانه آتیش گرفت و منم بیکار شدم، اما قبل رفتنم از اونجا مالک کارخانه بهم گفت یسری حساب کتاب با یه شرکت چاپ و بسته بندی داره که نیاز به پیگیری و جمع شدن موضع هست، و قرار شد این کار رو به عنوان کار آخرم در این کارخانه انجام بدم.با هماهنگی قبلی به دفتر این شرکت رفتم و منتظر بودم تا کارشناس حسابداریشون رو ببینم. توی سالن که منتظر نشسته بودم، متوجه شدم میز کنارم سه تا از بچه‌های شرکت نشستن و دارن در مورد ایده یه نرم‌افزار ثبت اگهی توی حوزه املاک صحبت می‌کنن و بعد از چند دقیقه صحبتشون رسید به جایی که در مورد بحث پیدا کردن برنامه‌نویس و نحوه اجرای اون صحبت می کردن. در همون حین که از همدیگه می‌پرسیدن کسی رو میشناسن برنامه‌نویسی بلد باشه یا نه، من یه جرقه توی ذهنم زده شد (درسته، به همونی که فکر می کنید فکر کردم، تصمیم گرفتم به عنوان کار جدید برم سراغ برنامه نویسی، بدون داشتن هیچ دانشی نسبت به این حوزه). رفتم سمت میزشون و گفتم من برنامه‌نویسی اندروید رو بلدم، اگر تمایل داشته باشید میتونم این پروژه رو واستون انجام بدم (هر سری به اون لحظه فکر می‌کنم پرام میریزه).کمی صحبت کردیم و قرار شد برای نمونه من یک دمو اولیه (بخدا که اگر اون موقع میدونستم دمو اپلیکیشن چیه) توی یک هفته واسشون آماده کنم، اگر پسندیدن با هم قرارداد ببندیم.بعد برگشت از اونجا، به دوستم (رضا) زنگ زدم و بعد توضیح داستان بهش گفتم: یادمه تو هم علاقه داشتی برنامه نویسی یاد بگیری، اگر پایه باشی با هم این پروژه رو انجام بدیم (رضا اون موقع توی گوشیش سعی میکرد کدنویسی رو یاد بگیره، هنوز توان خرید سیستم نداشت مثل من). رضا هم بدون هیچ تاملی قبول کرد.اول باید یه سیستم واسه خودم جور میکردم، واسه همین به داییم زنگ زدم و گفتم اگر سیستمش رو لازم نداره برای چند ماه ازش قرض بگیرم، اون هم قبول کرد. یه ماشین دربست کردم سیستم رو بردم خونمون (خونه ما توی روستا به فاصله ۲۵ کیلومتری شهر بود و خونه داییم توی شهر).با کمک همون صاحب کارخانه تونستیم یه کامپیوتر قسطی هم برای رضا جور کنیم و جفت سیستم‌ها رو آوردیم توی زیرزمین خونه ما (تا الان سه چهار روز از وقت یک هفته‌ایم گذشته بود).برای شروع نیاز داشتیم آموزش ببینیم، برای همین اومدم شهر (روستای ما اینترنت نداشت) و توی کافینت، توی اینترنت دنبال دوره‌های آموزشی گشتم. یه دوره آموزشی اندروید از وبسایت آنکوکودر (بهنام آقاجانی) خریدم و ریختم روی فلش و بردم کوه. با رضا شروع کردیم به نگاه کردن ویدئوها که متوجه شدیم اع، باید ایکلیپس نصب کنیم (اون موقع نمیدونستیم چه کابوسیه). مجددا فرداش اومدم شهر و نرم افزارهای مورد نیاز و اس دی کی (sdk) اندروید و هر چیز دیگه که توی ویدئوی آموزش جهت پیشنیاز بود رو دانلود کردم و بردم کوه.توی این مدت به بچه‌های اون شرکت زنگ زدم و زمان بیشتری رو برای تحویل دمو درخواست کردم و اون‌ها هم مشکلی نداشتن و چند روز بیشتر بهم وقت دادن.از بعد راه اندازی سیستم‌ها من و رضا شبانه روز (بعضی روزها تا ۲۰ ساعت) وقت گذاشتیم و مثل طوطی هرچی توی ویدئوی آموزشی میدیدیم رو تکرار میکردیم و مینوشتیم و تلاش میکردیم با همون چیزی که یاد گرفتیم یه صفحه دمو برای خودمون درست کنیم (از سخت‌ترین و شیرین‌ترین روزهای عمرمون محسوب میشه اون روزها). بلاخره بعد چند روز یه صفحه ساختیم (فقط ui خالی بود که یه بنر و چند تا لیست اگهی و یه منو داشت) و بردم شرکت و به بچه‌ها نشون دادم.اصلا اصلا اصلا فکرشم نمیکردم از این طرح خوششون بیاد، اون روز رو یادم نمیره، من اون قرارداد رو باهاشون بستم. اون روز از خوشحالی فقط گریه نکردم. قرارداد به مبلغ هشت میلیون و بازه زمانی هفت ماهه بود.من و رضا روی این پروژه شبانه روز کار کردیم و زندگیمون رو گذاشتیم تا بلاخره تونستیم تمومش کنیم. (در کل باید بگم ما توی این مدت که این پروژه ر‌و ساختیم برای هر نرم‌افزار، هر پکیج، هر باگ، هر سوال، باید میومدیم شهر، توی کافینت، توی اینترنت میگشتیم و چیزای مورد نیاز رو با فلش میبردیم کوه و ادامه کار رو پیش میبردیم، از وحشتناک بودن این پروسه دیگه نگم که خود آفلاین کار کردن و خوردن به هر باگ چقدر عذاب آور بود و ما برای حلش باید چند بار می اومدیم شهر).یک  اپلیکیشن اندروید به همراه وبسایت و پنل مدیریت.  که باعث شد کلی چیز یاد بگیریم.در طول بازه هفت ماهه ما زبان‌های java, php, html, JavaScript و css رو یادگرفتیم و همزمان این پروژه رو تموم کردیم.این پروژه شروع من بود، شروعی پر از چالش و سختی. اما هر جوری بود دوام آوردم و ادامه دادم. اگر مسیری رو انتخاب می کنید و فکر می کنید درسته، مستقیم برید توی دلش، هیچ چیزی نیست که بتونه جلوی شما رو بگیره.اگر این بخش از خاطره زندگی من رو دوست داشتید، بهم بگید تا بخش‌های دیگه‌ای از خاطراتم رو هم بنویسم.پ:ن: الان اومدم توی شهر زندگی می کنم، علاوه بر php, java و JavaScript حالا با فریمورک‌ها و زبان‌های دیگه‌ای مثل vue, laravel, flutter, dart و nova هم کار میکنم. رضا هم علاوه بر این‌ها پایتون هم کار می‌کنه.</description>
                <category>mohammad masoudi</category>
                <author>mohammad masoudi</author>
                <pubDate>Sun, 12 Feb 2023 21:58:26 +0330</pubDate>
            </item>
                    <item>
                <title>سه راه حل برای بهبود سئو در فلاتر</title>
                <link>https://virgool.io/@mohammadmasoudi2020/%D8%B3%D9%87-%D8%B1%D8%A7%D9%87-%D8%AD%D9%84-%D8%A8%D8%B1%D8%A7%DB%8C-%D8%A8%D9%87%D8%A8%D9%88%D8%AF-%D8%B3%D8%A6%D9%88-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-ikfqhcmrzkhe</link>
                <description>سئو در فلاترسلام به همه فلاتری‌های عزیز، امروز میخوام در مورد بهبود سئو در وب اپلیکیشن‌های فلاتری واستون بنویسم. راستش اینکه بشه با فلاتر وبسایت طراحی کنی واسم شگفت انگیز بود، اما بعد از کمی جستجو و مطالعه فهمیدم اوپس، ای دل غافل، فلاتر سئو درست درمونی نداره (یعنی اصلا نداره). کلی غمگین شدم، آخه خیلی از وبسایت‌هایی که طراحی میکنم بر پایه محتوا هستن و نیاز به سئو دارن، واسه همین بیخیال این کار شدم. اما بعد از مدتی تصمیم گرفتم یه تلاش کوچیکی برای حل این مشکل کنم، آخه واقعا حیفه که پروژه فلاتر رو واسه Android و IOS خروجی بگیری اما واسه وب نگیری.در طول این جستجو به نتایج و راه حل‌هایی رسیدم که در این پست واستون میگم. خب مرثیه سرایی بسه، بریم سراغ درس و مشق‌مون.با نام و یاد خدا شروع می کنیم:در فلاتر شما میتونید وب اپلیکیشن‌های سینگل پیج (PWA) خیلی خفن بنویسید. اما pwa ها مشکل سئو دارن، در فریم ورک های جاوااسکریپتی مثل ریکت و ویو و ... چندین راه حل رو طراحی کردن که بتونن این مشکل وب اپ‌ها رو برطرف کنن، مثلاً ssr یا مدیریت هدر با dom.من هم از همین راه حل‌های جاوااسکریپتی (قطعا بغیر از ssr, چون فلاتر نمیتونه ssr رو پشتیبانی کنه) استفاده کردم تا بتونم مشکل خودم در فلاتر رو برطرف کنم (نه اونقدر خوب ولی قابل قبول).راه حل‌های من:بخش اول: مدیریت روت‌هااول از همه باید مثل هر وبسایت معمولی دیگه‌ای شما هم روت‌های مشخص برای صفحات وبسایتتون داشته باشید. برای این کار فلاتر راه‌حل‌های زیادی رو مشخص کرده که پیشنهاد محبوب من استفاده از پکیج auto route  هستش. شما با این پکیج میتونید به خوبی برای پروژتون روت‌های استاتیک و داینامیک مشخص کنید و اون‌ها رو به راحتی مدیریت کنید. برای مثال بعد از استفاده این پکیج روت‌های شما به شکل زیر میشن.https://example.com/#/https://example.com/#/postshttps://example.com/#/posts/:idhttps://example.com/#/posts/:slughttps://example.com/#/aboutبخش دوم: مدیریت مربع (#)یکی از مشکلات اساسی روت‌های بالا وجود مربع (#) در روت‌ها هستش. تا وقتی این مربع وجود داره گوگل و بقیه موتورهای جستجو وبسایت شما رو pwa میبینن و تمام صفحات وبسایت شما رو یک صفحه تلقی می‌کنند (این خیلی بده). پس اینجا باید بریم به جنگ مربع. شما با نصب پکیج url strategy و کانفیگ ساده اون، به راحتی از غول این مرحله هم عبور می کنید. حالا باید مربع از ساختار روت‌های شما حذف شده باشه و روت های شما شبیه مثال زیر باشه:https://example.com/https://example.com/postshttps://example.com/posts/:idحالا وبسایت شما صفحات متفاوت داره و گوگل و بقیه بچه های سئو (دیگر موتورهای جستجو) هم اینو میفهمن.بخش سوم: مدیریت تگ هد headشما باید کاری کنید که با باز شدن هر صفحه جدید دیتای مربوط به اون در تگ head ما لود بشه. برای مثال تگ عنوان (title) یا متاتگ توضیح (description) یا تگ کلمات کلیدی (keywords) و هر تگ دیگه ای که دوست دارید رو متناسب با هر روت (صفحه) تغییر بدید.ابتدا میریم سراغ عنوان صفحه. برای تغییر عنوان هر صفحه میتونید با قرار دادن کد زیر در هر صفحه عنوان اون رو تغییر بدید.
.....

@override
Widget build(BuildContext context) {

SystemChrome.setApplicationSwitcherDescription(
ApplicationSwitcherDescription(   
label: &amp;quotعنوان صفحه - نام وبسایت&amp;quot,  
 primaryColor: Theme.of(context).primaryColor.value, // This line is required 
));

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

@override Widget build(BuildContext context) {
Helper.setPageTitle(&amp;quotعنوان صفحه - نام وبسایت&amp;quot, context);

....
بعد از عنوان نوبت تگ های دیگه میشه. برای این کار باید با استفاده از DOM به تگ های مورد نظر در head دسترسی پیدا کنیم و مقدار اون ها رو متناسب با هر صفحه تغییر بدیم. برای این کار مشابه کد زیر برای تگ توضیح (description) عمل می کنیم.
.....

setDescription(){
  MetaElement metaElement = (document.querySelector(&amp;quotmeta[name=&#039;description&#039;]&amp;quot) ??
      document.createElement(&#039;meta&#039;)) as MetaElement;
  metaElement.setAttribute(&amp;quotname&amp;quot, &amp;quotdescription&amp;quot);
  metaElement.setAttribute(&amp;quotcontent&amp;quot, &amp;quotاین یک مقدار توضیح است&amp;quot);
}


@override
Widget build(BuildContext context) {

  Helper.setPageTitle(pageTitle, context);
  
  setDescription();

....حالا اگر روی صفحه وبسایت خودتون inspect بگیرید و تگ های درون head  رو بررسی کنید می بینید که تگ title و متا تگ description مقدار دلخواه شما رو گرفته. با توجه به قطعه کد بالا می تونید برای باقی تگ های درون head مقدار دلخواه رو قرار بدید. نا گفته نمونه که برای تگ title هم میتونید از همین روش هم استفاده کنید.خب به آخر مطلب رسیدیم. همونطور که می دونید سئو در فلاتر به صورت کامل پشتیبانی نمیشه و نباید انتظار داشته باشیم که این مورد به فلاتر اضافه بشه, چون مسیر فلاتر کاملا متفاوت هست. اما با راه کارهای بالا میتونید محتوای هر صفحه رو برای موتورهای جستجو مشخص کنید و تا حد معقولی به سئوی وبسایت فلاتری خودتون کمک کرده باشید.امیدوارم که از این مقاله راضی بوده باشید و من تونسته باشم به شما کمکی کرده باشم. موفق و پایدار باشید.</description>
                <category>mohammad masoudi</category>
                <author>mohammad masoudi</author>
                <pubDate>Thu, 12 Jan 2023 00:31:54 +0330</pubDate>
            </item>
                    <item>
                <title>تفاوت bloc ،provider و getx در فلاتر</title>
                <link>https://virgool.io/flutter-community/%D8%AA%D9%81%D8%A7%D9%88%D8%AA-bloc-provider-%D9%88-getx-%D8%AF%D8%B1-%D9%81%D9%84%D8%A7%D8%AA%D8%B1-mtf1pcrlnkso</link>
                <description>اگر داری این مقاله رو می‌خونی یعنی تو هم مثل من خیلی درگیر این بودی که تفاوت این سه‌تا state management یعنی bloc ،provider و getx رو بدونی، اینکه کدوم بهتره و باید از کدوم توی پروژه خودت استفاده کنی.خب بیایم یک نگاه به هر کدوم بندازیم و ببینم چه ویژگی‌ها و نقطه ضعف‌هایی دارن.شماره یک blocاحتمالا bloc بهترین راه‌حل برای state management ها است که از طریق اون می‌تونید الگوهای معماری رو هم یاد بگیرید.مزایا:۱- جدا شدن کامل منطق پروژه۲- نگهداری، تست نویسی و توسعه آسان پروژه۳- تیم حرفه‌ای توسعه دهنده۴- وجود اسپانسر برای این پکیج۵- داکیومنت قوی و وجود کدهای سمپل زیادمعایب:۱- کدنویسی بیشتر نسبت به رقیبان۲- سرعت توسعه پایین‌تر از رقیبان بخاطر دلیل شماره یک۳- یادگیری سخت‌تر بخاطر پیچیده‌تر بودن نسبت به پکیج‌های رقیب (دلیل اصلی که تازه کارهای فلاتر میرن سمت رقیب‌هاش)آمارها:تعداد ۹,۲۰۰ ستاره در githubتعداد ۴,۱۰۰ لایک در pub.devشماره دو getxاحتمالا getx به عنوان دومین راه حل محبوب برای state management ها است که یکی از بحث برانگیزترین و پر حاشیه ترین‌ها در بین پکیج‌های فلاتر است. این پکیج به دلیل مشکلاتی که در تست نویسی و اختلال در الگوهای معماری باعث شده تا گروه زیادی از توسعه دهنده‌های فلاتر از اون متنفر باشن، اما همزمان بخاطر سرعت زیاد و کوتاه بودن کدنویسی بخش زیادی از برنامه نویس‌ها هم به اون علاقه دارن.مزایا:۱- کدنویسی بسیار آسان (دلیل اصلی محبوبیت بین تازه‌کارهای فلاتر)۲- کدنویسی بسیار کوتاه۳- محبوبیت زیادمعایب:۱- در حقیقت این پکیج رو نمیشه یک state management نام گذاری کرد و بیشتر یک میکرو فریمورک است که هر چیزی رو در درون خودش داره، مثل مدیریت روت‌ها تا هر چیز دیگه. و این وابستگی پروژه شما رو به این پکیج بسیار زیاد میکنه.۲- بزرگ بودن بیش اندازه پکیج که باعث شده مشکلات زیادی رو درون خودش داشته باشه.۳- نداشتن اسپانسر که باعث میشه هر لحظه برنامه نویس اون پکیج بیخیال توسعه اون بشه.۴- فعال نبودن توسعه دهنده اون به صورت مستمر.۵-وقتی یک باگ در این پکیج پیدا میشه و به توسعه دهنده گذارش میشه، زمان زیادی طول میکشه تا اون رو برطرف کنه.۶- نداشتن مستندات واقعی و صحیح۷- شهرت بد در جامعه فلاترآمارها:تعداد ۶,۹۰۰ ستاره در githubتعداد ۹,۴۰۰ لایک در pub.devشماره سه providerپکیج provider برای state management از طریق InheritedWidget است که به روشی ساده این کار رو میکنه. باید بدونید در پکیج bloc هم از provider  استفاده شده. شما در provider میتونید به راحتی از Triple, ValueNotifier, ChangeNotifier و دیگر آبجکت‌ها استفاده کنید. این پکیج توسط تیم رسمی فلاتر توسعه داده میشه و به عنوان اولین پکیج مدیریت استیت ها از طرف فلاتر توصیه شده. مزایا:۱- کدنویسی سریع۲- کدنویسی آسان۳- محبوبیت زیاد۴- پشتیبانی و توسعه توسط تیم فلاتر. این یعنی تا فلاتر هست، provider  هم توسعه پیدا میکنه و هست. پس خیالتون ازش راحت.معایب:والا خیلی گشتم نبود. اگر شما میدونید برام بنویسید.آمارها:تعداد ۴,۳۰۰ ستاره در githubتعداد ۶,۸۰۰ لایک در pub.devنتیجه گیریخب حالا که به نقاط قوت و ضعف هر سه‌تای عزیز دل نگاه کردیم بریم سراغ منبر من. ببینید اینجای کار تصمیم گیرنده خودتونید، باید ببینید میخواید چه پروژه‌ای بزنید. اگر زمان مهمه و پروژه کوچیکه پس سرعت عمل مهمه، اما اگر پروژه بزرگه و قراره توسعه طولانی مدت داشته باشه جواب مشخصه.برای راحت شدن فکر شما هم باید بگم شخصاً بعد این همه بررسی و تجربه کار با این پکیج ها به این نتیجه رسیدم که در پروژه جدید (تقریبا اندازه دیوار) که قراره انجام بدم از provider  استفاده کنم. چون باید یک پروژه نسبتاً بزرگ رو توی کمتر از چند ماه تحویل بدم پس سرعت عمل، راحتی و توسعه در آینده برام مهمه و اینها همه در provider وجود داره.باید بدونید در خیلی از بخش های پروژه اصلا نیازی به هیچ کدوم از این پکیج ها نیست و میتونید با StateFulWidget مشکلتون رو حل کنید. در نهایت اینم بگم که هر چی ابزار به وجود میاد فقط و فقط برای اینه که به ما کمک کنن. پس از این ابزارها استفاده کنید و لذت کار با اونها رو ببرید.خوشحال میشم نظرتون رو در مورد این پکیج‌ها و مقاله من بنویسید. راستی اینم بگم این اولین مقاله من در ویرگول بود. امیدوارم که برای شما مفید واقع شده باشه.</description>
                <category>mohammad masoudi</category>
                <author>mohammad masoudi</author>
                <pubDate>Wed, 06 Jul 2022 23:46:44 +0430</pubDate>
            </item>
            </channel>
</rss>