<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
    <channel>
        <title>نوشته های مهدی باقری</title>
        <link>https://virgool.io/feed/@monobit</link>
        <description>ApexTeam | Pana</description>
        <language>fa</language>
        <pubDate>2026-06-16 11:02:20</pubDate>
        <image>
            <url>https://files.virgool.io/upload/users/143430/avatar/a4LGfv.png?height=120&amp;width=120</url>
            <title>مهدی باقری</title>
            <link>https://virgool.io/@monobit</link>
        </image>

                    <item>
                <title>بررسی صرافی پای: یک صرافی ارز دیجیتال با رویکرد متفاوت</title>
                <link>https://virgool.io/@monobit/%D8%A8%D8%B1%D8%B1%D8%B3%DB%8C-%D8%B5%D8%B1%D8%A7%D9%81%DB%8C-%D9%BE%D8%A7%DB%8C-%DB%8C%DA%A9-%D8%B5%D8%B1%D8%A7%D9%81%DB%8C-%D8%A7%D8%B1%D8%B2-%D8%AF%DB%8C%D8%AC%DB%8C%D8%AA%D8%A7%D9%84-%D8%A8%D8%A7-%D8%B1%D9%88%DB%8C%DA%A9%D8%B1%D8%AF-%D9%85%D8%AA%D9%81%D8%A7%D9%88%D8%AA-oqygrqqbeypm</link>
                <description>در دنیای پرهیاهوی ارزهای دیجیتال، انتخاب یک صرافی مناسب می‌تواند چالش‌برانگیز باشد. اخیراً، صرافی جدیدی به نام &quot;پای&quot; توجه برخی کاربران را به خود جلب کرده است. در این مطلب، قصد داریم به بررسی ویژگی‌های این صرافی بپردازیم و نقاط قوت و ضعف آن را مورد ارزیابی قرار دهیم.رابط کاربری ساده و کاربرپسندیکی از نکات قابل توجه در مورد صرافی پای، طراحی ساده و رابط کاربری کاربرپسند آن است. این ویژگی می‌تواند برای کاربران مبتدی و حرفه‌ای جذاب باشد و فرآیند خرید و فروش ارزهای دیجیتال را تسهیل کند.کارمزدهای رقابتیصرافی پای تلاش می‌کند با ارائه کارمزدهای رقابتی، کاربران را به خود جذب کند. این امر می‌تواند به کاهش هزینه‌های معاملات و افزایش سودآوری برای کاربران منجر شود.امنیت و حفاظت از دارایی‌هاامنیت، یکی از مهم‌ترین دغدغه‌های کاربران در صرافی‌های ارز دیجیتال است. صرافی پای از فناوری‌های پیشرفته و اقدامات امنیتی مانند احراز هویت دو مرحله‌ای و کیف پول‌های سرد برای حفاظت از دارایی‌های کاربران استفاده می‌کند.پشتیبانی از ارزهای دیجیتال متنوعصرافی پای در حال حاضر از بسیاری از توکن های معروف شبکه TON پشتیبانی می‌کنه ولی قراره به زودی شبکه Solana و توکن های محبوب این شبکه هم اضافه بشه در نتیجه در آینده نزدیک از طیف گسترده‌ای از ارزهای دیجیتال پشتیبانی می‌کند و امکان خرید و فروش ارزهای متنوع را برای کاربران فراهم می‌سازد.عدم نیاز به احراز هویت برای واریز، برداشت و معاملهیکی از ویژگی‌های منحصر به فرد صرافی پای، عدم نیاز به احراز هویت برای واریز، برداشت و معامله است. این امر می‌تواند برای کاربرانی که به حریم خصوصی خود اهمیت می‌دهند یا با محدودیت‌های احراز هویت مواجه هستند، جذاب باشد.پشتیبانی مشتریانصرافی پای پشتیبانی 24 ساعته را از طریق ایمیل و چت آنلاین ارائه می‌دهد. این امر می‌تواند به کاربران در حل مشکلات و پاسخ به سوالاتشان کمک کند.رویکرد کامیونیتی محور و مینی اپلیکیشن تلگرامصرافی پای با رویکرد کامیونیتی محور و ارائه مینی اپلیکیشن در تلگرام، تلاش می‌کند تجربه SocialFi را برای کاربران فراهم کند. این ویژگی می‌تواند برای کاربرانی که به تعاملات اجتماعی در حوزه ارزهای دیجیتال علاقه‌مند هستند، جذاب باشد.نتیجه‌گیریصرافی پای با ارائه ویژگی‌هایی مانند رابط کاربری ساده، کارمزدهای رقابتی، امنیت، پشتیبانی از ارزهای متنوع و عدم نیاز به احراز هویت، تلاش می‌کند نیازهای کاربران را برآورده کند. با این حال، قبل از استفاده از هر صرافی ارز دیجیتال، انجام تحقیقات کامل و بررسی جوانب مختلف آن ضروری است.نکته مهمسرمایه‌گذاری در ارزهای دیجیتال همواره با ریسک همراه است. قبل از هرگونه سرمایه‌گذاری، تحقیقات لازم را انجام دهید و از ریسک‌های موجود آگاه باشید.</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Sat, 29 Mar 2025 18:36:39 +0330</pubDate>
            </item>
                    <item>
                <title>دنیای NFT ها و نوآوری (LNFT) با پلتفرم لانچ‌پد پیتزاتون</title>
                <link>https://virgool.io/@monobit/%D8%AF%D9%86%DB%8C%D8%A7%DB%8C-nft-%D9%87%D8%A7-%D9%88-%D9%86%D9%88%D8%A2%D9%88%D8%B1%DB%8C-lnft-%D8%A8%D8%A7-%D9%BE%D9%84%D8%AA%D9%81%D8%B1%D9%85-%D9%84%D8%A7%D9%86%DA%86-%D9%BE%D8%AF-%D9%BE%DB%8C%D8%AA%D8%B2%D8%A7%D8%AA%D9%88%D9%86-y3ahh4lm9qoa</link>
                <description>دنیای توکن‌های غیر قابل تعویض (NFT) دائما در حال تحول است و پلتفرم لانچ‌پد پیتزاتون با معرفی (LNFT) در خط مقدم این نوآوری قرار دارد. اما LNFT دقیقا چیست و چگونه می‌تواند برای هنرمندان مفید باشد؟در این مقاله، قصد دارم به شرح دنیای هیجان‌انگیز LNFT، یک سرویس جدید انقلابی ساخته شده بر روی بلاک‌چین TON بپردازم. این که چگونه LNFT شما را قادر می‌سازد تا کلکسیون‌های NFT منحصر به فرد و قابل شخصی‌سازی ایجاد کنید و سطح عمیق‌تری از تعامل را برای مخاطبان خود به ارمغان آورید.با پلتفرم لانچ‌پد پیتزاتون همراه شوید تا وارد دنیای جدیدی از آزادی خلاقانه شوید و امکانات لینفت را کشف کنید!توکن‌های غیرتکراری لایه‌ای (LNFT) چیست؟این نوع ازNFT های لایه ای، به نوعی انقلابی در NFT هستند. بر خلاف NFT های استاندارد که تصاویر تک و غیرقابل تغییری هستند، LNFT ها امکان شخصی سازی را ارائه می دهند. مجموعه ای از آثار هنری را تصور کنید که هر قطعه از ویژگی های از پیش طراحی شده مانند پس زمینه، شخصیت ها و لوازم جانبی تشکیل شده است. با LNFT، ضرب کننده (مالک) می تواند این ویژگی ها را برای ایجاد NFT شخصی سازی شده خود ترکیب کند.مزایای LNFT برای آرتیست هاآزادی خلاقانه بیشتر: LNFTها به هنرمندان امکان می‌دهند تا مجموعه‌های هنری پیچیده‌تر و متنوع‌تری را ایجاد کنند.تعامل بیشتر با مخاطبان: LNFTها به کلکسیونرها اجازه می‌دهند تا NFTهای منحصر به فرد خود را با ترکیب ویژگی‌های مختلف ایجاد کنند، که منجر به تعامل عمیق‌تر با مخاطبان می‌شود.صرفه جویی در زمان: با LNFTها، می‌توان به جای ایجاد تک تک NFTها، مجموعه‌های هنری را با سرعت بیشتری طراحی و منتشر کرد.افزایش دسترسی به مخاطبان: LNFTها می‌توانند به شما کمک کنند تا به مخاطبان گسترده‌تری دسترسی پیدا کنید، زیرا کلکسیونرها می‌توانند NFTهای منحصر به فرد خود را با سلیقه خود ایجاد کنند.تحول دنیای هنر دیجیتالبرای هنرمندان، LNFTها دنیای جدیدی از آزادی خلاقانه را باز می کنند. با LNFT، شما مجموعه ای از ویژگی های منحصر به فرد را طراحی می کنید، و به کلکسیونرها اجازه می دهید تا آنها را با هم ترکیب کنند و انواع بیشتری از NFT ها را از آثار هنری اصلی شما ایجاد کنند. این به معنای صرفه جویی قابل توجه در زمان و پتانسیل گسترش دسترسی مخاطبان شماست.پلتفرم لانچ‌پد پیتزاتون: دروازه شما به دنیای LNFTپلتفرم لانچ‌پد پیتزاتون فرآیند ایجاد و استقرار مجموعه LNFT را برای هنرمندان ساده می کند. این پلتفرم کاربرپسند روند آپلود ویژگی های اثر هنری (traits) و تنظیم پارامترها برای مجموعه شما را ساده می کند و به شما امکان می دهد روی طراحی خود تمرکز کنید در حالی که لانچ‌پد پیتزاتون از جنبه های فنی شما را حمایت می کند.کانال @TonDartist در تلگرام یک راهنمای ویدیویی سریع و عالی را گردآوری کرده است که کل فرآیند را در پلتفرم لانچ‌پد پیتزاتون برای شما شرح می دهد. این راهنمای گام به گام شما را به دانش لازم برای رها کردن خلاقیت خود و زنده کردن ایده لینفت خود مجهز می کند. [همین حالا تماشا کنید!]. پس منتظر نباشید، امروز وارد دنیای جذاب LNFT شوید و با پلتفرم لانچ‌پد پیتزاتون اولین اثر هنری لایه ای خود را منتشر کنید!</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Thu, 04 Jul 2024 15:48:40 +0330</pubDate>
            </item>
                    <item>
                <title>وام گرفتن اونقدرا هم سخت نیست ?</title>
                <link>https://virgool.io/@monobit/pana-zytzq8zjqzrb</link>
                <description>پانا چیست؟یکی از پروژه هایی که اخیرا روی اون کار میکردم (پانا) یکی دوماهی میشه که منتشر شده و از فاز نسخه بتا خارج شده و الان همه میتونن ازش استفاده کنن. قبل از اینکه بگم کارمون چیه یه گپ و درد و دل کوچیک با هم بکنیم بعد میگم چطوری میتونیم کنار هم برای هم به هم کمک کنیم تا یکم حال خودمون و اطرافیانمون رو بهتر کنیم.توی این اوضاع سخت اقتصادی که تقریبا اکثریت جامعه باهاش دست و پنجه نرم میکنن واقعا چرخوندن زندگی دشواره مخصوصا اگه تنها نباشی و مسئولیت یه خونواده رو دوشت هست.هممون از راه های مختلفی برای اینکه یکم از این فشار ها رو کم کنیم استفاده میکنیم. بعضیا با پس اندازشون سرمایه گذاری میکنن توی بازار های مالی مختلف، بعضیا برای اینکه بتونن ماشین یا خونه بخرن یا مثلا ماشین خودشون رو ارتقا بدن به یه ماشین مدل بالاتر، برای دریافت وام اقدام میکنن (که خب متاسفانه همونطور که خودتون میدونید بانک ها بنا رو میذارن بر ندادن وام و ترجیحشون اینه به کارمندای خودشون یا افراد نزدیک تر وام بدن). همه با هر روشی که میشه سعی داریم بار این فشار های موجود رو کم کنیم اما گاها مسیری که برای این کار انتخاب میکنیم نه تنها بهمون کمک نمیکنه بلکه مارو از چاله میندازه تو چاه.نمونش میشه همین وام های خرید کالایی که مُد شده و ظاهرا گرفتنشون هم آسونه و فکر می‌کنیم که حتی بهره دریافتیشون از بانک ها کمتره در حالیکه با یه محاسبه ساده میشه فهمید بعضیاشون سالانه تا ۴۰ درصد هم دارن از کاربر بهره دریافت میکنن.چطوره دیگه تن ندیم به استفاده از این سیستم های پول سازی و بهره های سنگینشون که همیشه یه عده خاص برنده میشن، و این نکته رو یادمون نره که ما همو داریم :)همتون کم و بیش با صندوق های قرض الحسنه خونگی یا مساجد محلتون آشنایی دارین. روال کارشون هم میدونین ولی چون خیلی کوتاه و سادست یه بار مرور میکنیم. این صندوق ها عموما یک مدیر (یا گروهی از مدیران) دارن که وظیفه ایشون مدیریت ورودی صندوق، وصول اقساط، برگزاری قرعه کشی و اعلام برنده هست. روال کار اینه که مثلا در ساده ترین شکل ممکن این صندوق ها ده نفر جمع میشن دور هم و هر ماه مبلغی رو (فرضا ۱ میلیون تومان) در صندوق جمع آوری میکنن و با قرعه کشی هر ماه به مدت ۱۰ ماه یکی از اون افراد برنده ۱۰ میلیون تومان میشه. در بدترین حالت اونی که جزو آخرین نفراته و اسمش در میاد شاید به صورت یکجا مشکلش حل نشه اما پولش رو تو این مدت پس انداز کرده.حالا فکر کنید این آدما یعنی اعضای خونواده، دوستان و آشناهای شما که قدرت این رو دارن که هر ماه مبلغی رو توی صندوقی جمع کنن تا شاید مشکلی از افراد گروه حل بشه، بتونن از طریق یک اپلیکیشن موبایلی به سادگی این کار رو انجام بدن و مدیریت صندوق هاشون رو به اون بسپارن. پانا اینکارو واستون میکنه.پانا یک پلتفرم هوشمند وام سپاری و پس انداز چرخشیه (ROSCA)، یک پلتفرم نوآورانه اجتماعی که با بهره گیری از هوش مصنوعی پیشرفته، امکان شناسایی و ایجاد گروه بندی های هوشمند و خودکار برای خانواده ها، دوستان، همکاران، هم محله ای ها، آشنایان و … را فراهم میکند. پانا با الهام گرفتن از مفاهیمی مانند گروه های خیریه خانوادگی، صندوق های وام دوستانه و خانگی و بانکداری بدون ربا، امکان تاسیس گروه هایی را فراهم میکند که اعضا بتوانند پس اندازهای مشترک خود را مدیریت کرده و به یکدیگر وام های بدون بهره ارائه کنند. هوش مصنوعی بکار گرفته شده در پانا این گروه ها را هدایت و مدیریت می کند تا بتوانند به اهداف خود برسند. (اگر میخواید بهتر با پانا آشنا بشید پیشنهاد میکنم یه سر به وبسایت پانا بزنید یا پست معرفی پانا در بلاگ رو ببینید یا ویدئو آموزشی آکادمی پانا رو از آپارات تماشا کنید)امیدوارم پانا بتونه کوچکترین خدمتی به شما عزیزان بکنه و بتونیم با پشتیبانی همدیگه و حمایت از خونواده و اطرافیانمون تا جایی که ممکنه به هم کمک بکنیم تا همه با هم زندگی‌مون رو قشنگ و قشنگ تر کنیم.خوشحال میشم اگر بعد از ثبت نام کد معرف من رو به عنوان کسی که تو رو با پانا آشنا کرده معرفی کنی اینطوری هر دوتامون میتونیم از جایزه معرفی بهره‎مند بشیم.کد معرف من: 1111</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Tue, 15 Aug 2023 23:47:56 +0330</pubDate>
            </item>
                    <item>
                <title>Flutter MouseRegion</title>
                <link>https://virgool.io/flutter-community/flutter-mouseregion-hc7wgdj2znoo</link>
                <description>MouseRegionکسایی که فلاتر وب کار میکنن مسلما یه نقطه ای احساس کردن نیازه که بتونن cursor ماوس رو وقتی که میره روی یک ویجت یا یه نقطه از صفحه عوض کنن و خب راه خوبی براش پیدا نمیکردن. تا قبل از امروز که متوجه یه موضوع جالب شدم برای حل این مشکل توی وب اینکارو میکردم.اول از همه توی پوشه پلتفرم web کنار پوشه lib باید فایل index.html رو باز کنیم به تگ body یه id اختصاص بدیم. (هدف اینه هرجا نشانگر ماوس از روی ویجتمون رد شد یا بعبارتی hover اتفاق افتاد واسه ویجتمون، میگیم که cursor رو برای body عوض کن اینطوری درسته که به خود اون المنت توی صفحه cursor ندادیم اما با این کلک تونستیم نشانگر رو عوض کنیم)&lt;body id=&amp;quotapp-container&amp;quot&gt;بعد از اینکار واسه اینکه بتونیم راحت تر برای هر ویجتی که خواستیم این امکان رو برقرار کنیم کافیه یه extension روی ویجت بسازیم و هر ویجت رو با MouseRegion بیایم Wrap کنیم بعد توی onHover اون ویجت cursor رو برای body تغییر بدیم.extension MouseCursor on Widget {
  static final appContainer =
      html.window.document.getElementById(&#039;app-container&#039;);

  Widget cursor(
      {String type = &#039;default&#039;,
      Function(PointerHoverEvent e) onHover,
      Function(PointerExitEvent e) onExit,
      Function(PointerEnterEvent e) onEnter}) {
    return MouseRegion(
        child: this,
        onHover: (PointerHoverEvent e) {
          appContainer.style.cursor = type;
          if (onHover != null) onHover(e);
          // you can use any of these:
          // &#039;help&#039;, &#039;wait&#039;, &#039;move&#039;, &#039;crosshair&#039;, &#039;text&#039; or &#039;pointer&#039;
          // more options/details here: http://www.javascripter.net/faq/stylesc.htm
        },
        onExit: (PointerExitEvent e) {
          // set cursor&#039;s style &#039;default&#039; to return it to the original state
          appContainer.style.cursor = &#039;default&#039;;
          if (onExit != null) onExit(e);
        },
        onEnter: (PointerEnterEvent e) {
          if (onEnter != null) onEnter(e);
        });
  }
}و در نهایت برای استفاده ازش کافیه هر ویجتی که میخواین مثلا ماوس رو اون به شکل دست (pointer | click | hand اینا همشون یکی ان :)) در بیاد کافیه به شکل زیر از افزونه ای که نوشتیم استفاده کنید.widget.cursor(type: &#039;pointer&#039;)اما خب بعد از مدت ها با کلی ترس و لرز فلاتر رو بروزرسانی کردم و اتفاق خیلی جذابی افتاده بود (انتظار داشتم مشکل لعنتی TextField/TextFormField با زبون فارسی و عربی حل بشه ولی نشدهههههه).به ویجت MouseRegion یک Property جدید اضافه شده به اسم cursor و دیگه نیازی به این دردسرا نیست و خیلی راحت میتونیم بنویسیم :cursor: SystemMouseCursors.clickرشد فلاتر حقیقتا امیدوار کنندست اما از اینکه هنوز TextField این وضعیت رو داره خیلی ناراحتم :(یه کاریش بکنید توروخدا!!!</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Tue, 21 Jul 2020 14:37:19 +0430</pubDate>
            </item>
                    <item>
                <title>اجرای متد بعد از ساخت کامل ویجت در فلاتر</title>
                <link>https://virgool.io/MonoBit/flutter-widget-first-frame-load-upexzqfcnfvi</link>
                <description>تا حالا شده دلتون بخواد دقیقاً بعد از اینکه متد build توی یک statefulWidget صدا زده شد، یک snackbar نشون بدین یا مثلا یه دیالوگ به محض نمایش اولین لایه از یک ویجت نشون بدین؟وقتی خواستم یه اسنکبار (SnackBar) ساده رو توی initState درست کنم یه جورایی nullPointerException گرفتم :Dclass HomeScreen extends StatefulWidget {
  @override
  HomeScreenState createState() =&gt; new HomeScreenState();
}

class HomeScreenState extends State&lt;HomeScreen&gt; {
  GlobalKey&lt;ScaffoldState&gt; _key = new GlobalKey();

  @override
  void initState() {
    super.initState();
    // NOTE: Calling this function here would crash the app.
    showHelloWorld();
  }

  @override
  Widget build(BuildContext context) {
    return new Scaffold(key: _key, body: Container(color: Colors.red));
  }

  void showHelloWorld() {
    _key.currentState.showSnackBar(SnackBar(
      content: Text(&amp;quotHelloWorld&amp;quot),
    ));
  }
}اروری که میگیرفتم این بود که یعنی هنوز ویجت رو نساختم و تو میخوای به اون ویجت دسترسی پیدا کنی و یه متد از currentState اون ویجت صدا بزنی؟و اما واسه اینکه از این حدسم مطمئن بشم (چرا واقعا؟ نمیدونم) رفتم و داخل initState بجای اینکه showHelloWorld رو یهویی صدا بزنم با یه تاخیر کمی مثلا 5 ثانیه صداش میزنم که مطمئن باشم ویجتم ساخته شده ولی خب مسلماً این روش جالبی نیست :)// Add this after super.initState();
Future.delayed(Duration(seconds: 5)).then((v) =&gt; showHelloWorld());به قول بهتاش &quot;من دیگه رد دادم&quot; و رفتم سراغ دکتر گوگل عزیز و نتایج جالب بود :بعد از super.initState بیایم و از WidgetsBinding به شکل زیر استفاده کنیم.توی داکیومنت فلاتر از WidgetsBinding به عنوان چسب بین لایه ویجت ها و موتور فلاتر نام برده شده. (The glue between the widgets layer and the Flutter engine)و یا همین تیکه کد رو در قالب یه mixin به ویجت stateful خودتون اضافه کنید.// Add this after super.initState();
WidgetsBinding.instance.addPostFrameCallback((_) =&gt; showHelloWorld(context));از متد addPostFrameCallback برای اضافه کردن یک FrameCallback به انتهای فریم درحال اجرا استفاده میشه به این معنی که به محض اینکه فریم مربوط به رندر اولین لایه از این ویجت تموم بشه متد مورد نظر شما قابل اجراست و میتونه به المنت های رندر شده دسترسی داشته باشه (تکنیکالی).OR// Use this Mixin with your StatefulWidget
mixin WidgetLoadMixin&lt;T extends StatefulWidget&gt; on State&lt;T&gt; {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addPostFrameCallback((_) =&gt; (context));
  }

  void (BuildContext context);
}حالا کافیه متد  رو override کنید و به راحتی هر کاری که میخواین بعد از لود شدن کامل ویجت انجام بشه توش بنویسید.*** یه dependency هم هست که همین کار (mixin بالا) رو براتون انجام میده به اسم after layout که میتونید ازش استفاده کنید اما کدهای بالا کارتون رو راه میندازه.امیدوارم از خوندن این مطلب لذت برده باشید.مهدی باقری</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Thu, 26 Mar 2020 00:48:26 +0430</pubDate>
            </item>
                    <item>
                <title>فلاتر دسکتاپ (Flutter Desktop)</title>
                <link>https://virgool.io/MonoBit/flutter-desktop-zvrbe17dblmw</link>
                <description>جدیداً خیلی دارن ویندوزی ها رو اذیت میکننا! یعنی چی آخه توی مک و لینوکس کامند flutter create پوشه ها و کانفیگ مربوط به ویندوز و وب رو ایجاد میکنه و بی دردسر میتونین دولوپ کنین ولی واسه توسعه یک برنامه دسکتاپ توی ویندوز باید این همه سختی و مشقت رو تحمل کرد! البته الان که کانفیگش رو تموم کردم و آماده استفادست بهش که نگاه میکنم زیادم پیچیده نیست فقط باید تا موقعی که یه فکری به حالش بکنن با این سیستم روی دسکتاپ تو حالت دیباگ خروجی برنامه هامون رو ببینیم.مرحله 0.اول از همه تا یادمون نرفته توی ترمینال branch مربوط به flutter sdk از رو هرچی که هست (stable , ...) بردارید و بذارید روی master چون فقط روی این شاخه میتونیم اینکارو بکنیم! برای اینکار از دستور زیر استفاده کنید :flutter channel
برای مشاهده ی کانال هاflutter channel master
برای سوییچ کردن به کانال مسترمن طبق عادت همه کارام رو توی Android Studio انجام میدم و این دستور ها رو هم توی ترمینال اون مینویسم بعد از اینکار دستور flutter doctor رو اجرا کنید که با یک صحنه ای مثل صحنه زیر مواجه میشین!خروجی دستور flutter doctorمرحله 1.همونطور که می بینید میگه که ویژوال استودیو (develop for windows) رو میخوام حتما هم 2019 باشه یا بالاتر که خب مال من 2017 بوده ولی حرف حرف خودشه. بعد گفته که از کجا میتونیم دانلود کنیم که لینکش رو میذارم فقط پیشنهادم اینه نسخه Community رو دانلود کنید. https://visualstudio.microsoft.com/downloads/ بعد از اینکه زحمت دانلود installer رو کشیدین میرسیم به قسمت شیرین نصب که اصلا کاری نداره فقط از بین گزینه های مربوط به Desktop development with C++ باید اونایی که توی تصویر بالا اومده انتخاب کنید که شامل MSBuild (که فکر کنم خودکار تیک زده شده باشه) و MSVC و Windows 10 SDK (آخرین نسخه رو دانلود کنید) میشه.کافیه یبار دیگه flutter doctor رو بگیرین تا مطمئن بشین همه چی رو به راهه؛ اگه درست اون چیزایی که باید رو نصب کرده باشین ???مرحله 2.نصب که تموم شد از گیتهاب پروژه ی flutter-desktop-embedding رو کلون کنید و از داخل پوشه example پوشه windows رو کامل کپی کنید و در پروژه خودتون کنار پوشه libs جاگذاری کنید.مرحله 3.داخل ترمینال دستور زیر رو بنویسیدflutter config —enable-windows-desktopبرای اینکه تاثیرش رو بذاره باید تمام ide هایی که باهاشون فلاتر کار میکنید ببندید و دوباره باز کنید.قبل از اینکه بریم سراغ مرحله آخر و اجرای برنامه ترجیحا یبار اول flutter clean و بعد flutter packages get بکنید و بعدش هم flutter packages upgrade بکنید :)مرحله آخر.توی ide که ازش استفاده میکنید چه VSCode چه Android Studio چه Intellij میتونید علاوه بر دستگاه اندرویدی که متصل هست یه دیوایس دیگه به عنوان (Windows(desktop ببینید و روی اون دستگاه اجرا بگیرید یا از دستور زیر تو خط فرمان استفاده کنید.flutter run -d windowsزیباست نه؟! عیناً همون برنامه که توی موبایلتون میتونه اجرا بشه حالا به راحتی میتونه توی ویندوز هم اجرا بشه بدون حتی یک خط کد اضافه!!! ??.نمونه پروژه فلاتر (خروجی دسکتاپ)داشت یادم میرفت یه خط باید اضافه کنید به برنامتون هروقت میخواین خروجی ویندوز دسکتاپ بگیرین!داخل main.dart تابع main قبل از فراخوانی runApp مقدار debugDefaultTargetPlatformOverride رو برابر با TargetPlatform.fuchsia قرار میدیم.debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia; // for desktop embedderنکته خیلی مهم : با هر آپدیت و تغییری توی فلاتر و flutter-desktop-embedding لازمه پوشه windows رو کاملا پاک کنید و از پوشه موجود در پوشه example دایرکتوری مذکور استفاده کنید.</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Sun, 15 Mar 2020 03:58:18 +0330</pubDate>
            </item>
                    <item>
                <title>Dart Extension (افزونه های دارت)</title>
                <link>https://virgool.io/MonoBit/dart-extension-xd3ibvjtpicu</link>
                <description>Dart Languageاخیراً به شدت به زبون شیرین دارت (Dart) علاقمند شایدم معتاد شدم. مخصوصاً که از نسخه 2.7 میشه توش extension نوشت، و خب شاید بهتره بگم بعد از تجربه ی طولانی مدتی که با جاوا داشتم الان چیزی مثل extension باعث میشه به وجد بیام و یه جورایی توی نوشتن extension method ها دارم زیاده روی میکنم شاید :)حین کار با فلاتر به ویجتی برخوردم به اسم Visibility! واسه اونایی که نمیدونن بگم که به کمک این ویجت میتونید یه ویجت child رو توی صفحه نامرئی کنید؛ مثل کاری که توی اندروید با ویژگی visibility به View ها میتونستیم اونا رو تو سه حالت View.VISIBLE، View.GONEو View.INVISIBLE داشته باشیم.حقیقتش من از اینکه ویجتم رو بندازم داخل یه ویجت دیگه به اسم Visibility اصلا حس خوبی نداشتم به همین خاطر یه افزونه خیلی ساده نوشتم روی همه ویجت های پروژم که این کار رو برام ساده تر و شیک تر میکنه (البته که کاملا سلیقه ایه!).extension Visibility on Widget {
  Widget visible(bool visibility) {
    return visibility ? this : SizedBox.shrink();
  }
}حالا هر ویجت دلخواهی بدون نیاز به wrap شدن توی ویجت Visibility میتونه خاصیت مرئی یا نامرئی شدن رو به شکل زیر داشته باشه :widget.visible(TRUE/FALSE);بجای :Visibility (
  visible: FALSE/TRUE,
  child: widget,
)یکی دیگه از مواردی که لازم شد برای کلاس String یک افزونه بنویسم این بود که توی فلاتر متدی نداریم که کد hex بصورت رشته رو تبدیل بکنه به یک شیء از نوع Color بخاطر همین متدش رو در قالب یک extension method نوشتم :extension StringUtil on String {
  Color toColor() {
    return new Color(int.parse(this.substring(1, 7), radix: 16) + 0xFF000000);
  }
}خلاصه که پیشنهاد میکنم تا جایی که میشه ازشون استفاده کنید :) خیلی کاربردی و خیلی جذابن!توی مقاله بعدی کامل توضیح میدم که چجوری میتونید با این قابلیت باحال و خفن کار کنید و extension های مورد نیاز خودتون رو بسازید و ازش لذت ببرید.</description>
                <category>مهدی باقری</category>
                <author>مهدی باقری</author>
                <pubDate>Mon, 02 Mar 2020 22:53:47 +0330</pubDate>
            </item>
            </channel>
</rss>