موارد جدید در Flutter 3.13
موارد جدید در Flutter 3.13
پیمایش دوبعدی، گرافیک سریعتر، بهروزرسانیهای Material 3 و موارد دیگر
به نسخه سه ماهه Flutter ما خوش آمدید، این بار برای Flutter 3.13! تنها در سه ماه پس از آخرین نسخه، ما 724 درخواست جذب ادغام شدهایم و 55 عضو انجمن اولین نظر خود را برای Flutter نوشتهاند!
به خواندن ادامه دهید تا در مورد همه افزودهها و پیشرفتهای جدیدی که انجمن Flutter در این نسخه اخیر کمک کرده است مطلع شوید!
موتور
ما چندین بهبود در Impeller (رندرگر گرافیکی جدیدمان ) ایجاد کردهایم و APIهای موتور جدیدی را برای دستگاههای تاشو اضافه کردهایم.
پروانه
بهبود عملکرد iOS
با تشکر از بازخورد با کیفیت بالا از کاربران Flutter، در این نسخه ما به بهبود عملکرد Impeller در iOS ادامه دادیم.
در نتیجه بهینهسازیهای مختلف، رندر Impeller در iOS اکنون نه تنها تأخیر کمتری دارد (با حذف کامل jank کامپایل سایهبان)، بلکه در برخی از بنچمارکها نیز میانگین توان بالاتری دارد. بهویژه، در معیار عملکرد انتقالهای فلاتر/گالری ما، میانگین زمان شطرنجی فریم اکنون تقریباً نصف آن چیزی است که در Skia بود.
بهبود میانگین زمان شطرنجی فریم در گالری Flutter معیار عملکرد را در آیفون 11 تغییر می دهد. دوره زمانی تحت پوشش تقریباً زمان از برش شاخه 3.10 تا برش شاخه 3.13 است.
بهبود وفاداری
در نسخه 3.10 ما اعلام کردیم که هنگام استفاده از ایمپلر، رنگهای وسعتی زیر پرچم در دسترس هستند. پس از شنیدن و پرداختن به بازخورد از سوی کاربران، رنگهای گستره وسیع اکنون هنگام استفاده از Impeller در iOS پیشفرض هستند.
به روز رسانی پیشرفت در ایمپلر در اندروید
ما همچنان به پیشرفت در باطن Vulkan برای ایمپلر ادامه میدهیم، اما هنوز به سطح کیفیتی که یک دوره پیشنمایش رسمی مفید باشد، نرسیده است. ما میخواهیم اطمینان حاصل کنیم که اولین تجربه کاربران ما با Impeller در اندروید با کیفیت بالا است و هنوز کاملاً به آنجا نرسیدهایم. امیدواریم در اواخر سال جاری وارد یک دوره پیش نمایش برای Impeller در اندروید در یک نسخه پایدار شویم. اگرچه Impeller در اندروید هنوز برای پیش نمایش کاملاً آماده نیست، بکاندهای OpenGL و Vulkan از بسیاری از بهینهسازیهای بکاند آگنوستیک که در طول سال گذشته برای HAL ایمپلر انجام دادهایم، بهرهمند شدهاند. به طور خاص، میانگین زمانهای شطرنجی فریم برای اندروید نیز در معیار عملکرد انتقال flutter/gallery به طور قابل توجهی بهبود یافته است. پیشرفتهای بیشتری در حال انجام است تا پیشنمایش در اندروید بتواند با کیفیت بالا باشد.
یک بار دیگر، پیشرفت ما با مشارکتهای جامعه، بهویژه کاربر GitHub ColdPaleLight، که چندین وصله مرتبط با ایمپلر بسیار تحسینبرانگیز را تالیف کرد، و وفاداری و عملکرد را بهبود بخشید، از جمله افزودن پشتیبانی برای گرادیانهای مخروطی، بسیار تسریع شد.
ایمپلر شگفت انگیز در macOS
در آخرین نسخه پایدار خود، اعلام کردیم که Impeller، بازنویسی موتور رندر ما، به طور پیشفرض برای iOS روشن میشود. از آن زمان، ما بازخورد خوبی از مشتریان شنیدیم. اکنون، ما مشتاقیم اعلام کنیم که Impeller برای macOS در پیش نمایش در دسترس است. میتوانید Impeller را آزمایش کرده و با دنبال کردن دستورالعملهای صفحه ایمپلر، آن را در برنامه خود فعال کنید.
ما مشتاقیم که شما این را آزمایش کنید و بازخورد ارائه دهید. بهترین راه برای کمک به ما برای بهبود Impeller برای macOS این است که با اجرای برنامه macOS خود بدون گرم کردن SkSL و استفاده از DevTools برای یافتن نمونه هایی از jank به دلیل کامپایل سایه بان، معیارهای پایه را ایجاد کنیم. در مرحله بعد، برنامه خود را با استفاده از Impeller آزمایش کنید – کلیک کنید و اشکالات، بهبود عملکرد یا رگرسیون عملکرد را بررسی کنید. اگر متوجه هر گونه مشکلی شدید، قویاً شما را تشویق می کنیم که آنها را در GitHub ثبت کنید. مطمئن شوید که اطلاعات مربوط به دستگاهی که روی آن کار میکنید، فیلمهای ضبطشده، و ردیابی عملکرد خود را درج کنید.
به دنبال امتحان Impeller در macOS هستید؟ Wonderous را از فروشگاه App Mac نصب کنید!
جهت آموزش فلاتر و سورسهای متعدد به سایت فلاتر فارسی سر بزنید
API موتور جدید
پشتیبانی تاشو بهبود یافته
به منظور پشتیبانی بهتر از دستگاههای تاشو، یک API جدید برای بازیابی ویژگیهای مختلف نمایشگر اضافه کردهایم. دریافت کننده جدید FlutterView.display یک شی Display را برمی گرداند. شی Display اندازه فیزیکی، نسبت پیکسل دستگاه و نرخ تازه سازی نمایشگر را گزارش می دهد. برای مثالی که از API جدید استفاده می کند، setPreferredOrientations را بررسی کنید.
چارچوب
مواد
ما تعدادی بهبود در Material Framework انجام دادهایم:
1) سازگاری بیشتر با پلتفرم را ارائه میکنیم،
2) امکان سفارشیسازی بیشتر
3) اضافه کردن قابلیتهای جدید.
تشخیص کاراکتر در TextField
هنگام استفاده از TextField در iOS، کاربران به طور خودکار گزینه ای برای استفاده از دوربین دستگاه برای تشخیص کاراکترها و درج آنها در فیلد مشاهده می کنند.
این ویژگی بدون مشارکت اعضای انجمن luckysmg (نویسنده) و tgucio (بازبین) امکان پذیر نخواهد بود. این ویژگی یک تلاش 1000 خطی و 70 commit بود که موتور و چارچوب را پل زد!
گفتگوی تطبیقی پلت فرم
یک سازنده تطبیقی به AlertDialog به همراه تابع تطبیقی showAdaptiveDialog اضافه شده است تا بسته به پلتفرم فعلی یک گفتگوی Material یا Cupertino را نمایش دهد.
اکنون با استفاده از ()AlertDialog.adaptive از ویجت CupertinoAlertDialog در iOS استفاده می کند:
و Material AlertDialog در اندروید.
CupertinoDatePicker با ماه و سال حالت monthYear را به CupertinoDatePicker اضافه می کند.
جهت آموزش فلاتر و سورسهای متعدد به سایت فلاتر فارسی سر بزنید
کوپرتینویی (سبک iOS) رادیوی سبک را بررسی کنید
ویژگی useCheckmarkStyle به CupertinoRadio اضافه شده است. این همچنین به ویجتهای Radio.adaptive و RadioListTile.adaptive اجازه میدهد کنترل کنند که آیا از سبک علامت چک در iOS استفاده میکنند یا خیر.
گزینه های سفارشی سازی بیشتر برای ویجت های Material است
چندین پیشرفت وجود دارد که سفارشی کردن طراحی ویجتهای Material را آسانتر میکند:
اکنون می توانید از ویژگی خطا برای InputDecoration (برخلاف یک رشته) برای سفارشی کردن ویجت خطا که در فیلدهای متنی نشان داده شده است استفاده کنید:
اکنون می توانید نکات ابزار را به ButtonSegment اضافه کنید:
اکنون می توانید شکاف را در ExpansionPanelList با استفاده از ویژگی materialGapSize شخصی سازی کنید
اکنون می توانید trackOutlineWidth را برای سوئیچ سفارشی کنید
اکنون می توانید padding را با ویژگی tilePadding در NavigationDrawe سفارشی کنید
می توانید نحوه تراز کردن برگه ها را با استفاده از ویژگی alignment برای TabBar انتخاب کنید
رنگ MaterialState برای چیپس
این امکان سفارشی کردن رنگ تراشه ها را در همه حالت های مختلف فراهم می کند.
چیپس های مرتفع
انواع FilterChip.elevated، ChoiceChip.elevated، و ActionChip.elevated مطابق با مشخصات Material 3 اضافه شده اند.
onSubmitted to Search Bar
هنگامی که کاربر وارد کردن متن را تمام می کند و دکمه Done را روی صفحه کلید فشار می دهد، اجازه می دهد تا یک عمل متفاوت آغاز شود.
BaseTapAndDragGestureRecognizer
یک کلاس پایه برای خانواده ای از کلاس ها اضافه شده است که شامل پشتیبانی از tap + pan (TapAndPanGestureRecognizer) وtap + کشیدن افقی(TapAndHorizontalDragGestureRecognizer) می شود.
این کلاسها قبلاً برای پیادهسازی حرکات فیلد متنی بومی استفاده شدهاند. با این حال، آنها برای موارد استفاده دیگر نیز عالی هستند – به عنوان مثال، مقیاس گذاری یک ویجت با استفاده از دو ضربه سریع + حرکت عمودی کشیدن.
تغییرات چرخه عمر برنامه
AppLifeCycleListener
کلاس AppLifecycleListener برای گوش دادن به تغییرات در چرخه عمر برنامه و پاسخ به درخواستهای خروج از برنامه اضافه شد.
پیمایش
پایه اسکرول دو بعدی
این نسخه از Flutter همچنین شامل پایه ای برای ساخت ویجت هایی است که در دو بعدی حرکت می کنند، که به معنای مجموعه ای از کلاس های جدید برای ساختن است، از جمله:
ChildVicinity، نمایشی شبیه به یک نمایه در یک نمای طومار یک بعدی، نشان دهنده موقعیت نسبی کودکان در دو بعد.
TwoDimensionalChildDelegate، مشابه SliverChildDelegate با زیر کلاسهای مشابه: TwoDimensionalChildBuilderDelegate & TwoDimensionalChildListDelegate
TwoDimensionalScrollView، یک کلاس پایه انتزاعی است که یک TwoDimensionalScrollable و TwoDimensionalViewport ایجاد می کند که با همان مدل ScrollView یک بعدی مطابقت دارد.
RenderTwoDimensionalViewport، و در نهایت، اسب کاری قرار دادن کودکان جعبه در دو بعدی.
اسکرول دو بعدی نیز با برخی تعاملات جدید از جمله پیمایش مورب همراه است. برای انواع تعاملات جدید، DiagonalDragBehavior را ببینید و آنها را در TwoDimensionalScrollView یا TwoDimensionalScrollable خود پیکربندی کنید.
ما یک مطالعه کاربردی را انجام دادیم تا این پایه را برای توسعه دهندگان ایجاد کنیم تا بتوانند هر آنچه را که می توانند تصور می کنند در در همه جهات پیمایش ، بسازند.
تیم Flutter در حال حاضر مشغول ساخت ویجتهای اسکرول دو بعدی در بالای این چارچوب است که به زودی در بسته دو_بعدی_scrollables عرضه میشود.
برش های جدید
Flutter 3.13 مجموعه جدیدی از برشها را برای ایجاد جلوههای اسکرول منحصربهفرد به همراه دارد.
SliverMainAxisGroup و SliverCrossAxisGroup هر دو از چیدمان چندین برش با هم پشتیبانی می کنند. در محور اصلی، یکی از جلوههایی که میتواند ایجاد کند، سرصفحههای چسبنده است که به هدرهای سنجاقشده اجازه میدهد تا در حین حرکت هر گروه از برشها از دید خارج شوند.
گروهبندی محوری متقاطع اجازه میدهد که برشها در کنار هم در نمای دید، با ویجتهای جدید مانند SliverCrossAxisExpanded و SliverConstrainedCrossAxis که قادر به تعیین تخصیص فضا برای هر قطعه گروهبندی شده در محور متقاطع هستند، چیده شوند.
همچنین DecoratedSliver، شبیه به DecoratedBox، در کتابخانه sliver است. این به کاربران اجازه می دهد تا یک برش را که حتی
می تواند یک گروه تکه تکه باشد، با یک تزئین دلخواه تزئین کنند.
در این مثال دارتپد، تمام این برشهای جدید را در عمل ببینید.
دسترسی
به روز رسانی دسترسی
ویژگی دسترسپذیری onOffSwitchLabels برای CupertinoSwitch برای نمایش برچسبهای ورودی/خروجی اضافه شد.
FocusSemanticEvent اضافه شده است. با این حال، باید با احتیاط از آن استفاده کرد زیرا ممکن است انتظارات کاربران را از نحوه عملکرد فوکوس a11y از بین ببرد.
اکنون IconButton’s isSelected برای صفحه خوان ها در دسترس است.
اندروید
اهداف پشتیبانی جدید
با این نسخه، Flutter اکنون از هدف قرار دادن Android 14/API 34 پشتیبانی میکند. در حالی که ما هنوز در حال کار بر روی چند ویژگی جدید در Android 14 هستیم (یعنی پیمایش پیشبینیکننده)، این نسخه را کاملاً در برابر Android SDK جدید آزمایش کردهایم و رفع هر گونه مرتبط با آن را در اولویت قرار دادهایم.
iOS
کاهش بهم ریختگی چرخش در iOS
هنگامی که صفحه iOS می چرخد، برنامه های Flutter قبلاً مقداری بهم ریختگی را تجربه می کردند که متفاوت از برنامه های اصلی iOS به نظر می رسید. ما برای کاهش این امر تغییراتی ایجاد کردهایم:
تغییر نام Runner
هنگامی که یک برنامه Flutter iOS ایجاد می شود، یک پروژه Runner Xcode و فضای کاری Xcode در پوشه /ios ایجاد می شود. اکنون، می توانید نام فضای کاری یا پروژه را تغییر دهید تا در نهایت با لیستی از Runners مواجه نشوید.
آماده سازی برای iOS 17 و Xcode 15
با انتشار قریب الوقوع iOS 17 و Xcode 15، کاربرانی که مایل به توسعه با استفاده از این زنجیره ابزار هستند، باید از Flutter 3.13 استفاده کنند. علاوه بر این، هنگام دانلود Xcode 15، مطمئن شوید که شبیه ساز iOS 17 را نیز دانلود کرده اید.
به روز رسانی بازی های فلاتر
ما جعبه ابزار بازیهای گاه به گاه Flutter را در سال 2022 با قالب بازی، آموزش، مستندات، فضاهای اجتماعی و اعتبارات GCP/Firebase/Ad راه اندازی کردیم تا توسعه بازی برای توسعه دهندگان Flutter را شروع کنیم. از آن زمان، ده ها هزار بازی با استفاده از فلاتر منتشر شده است! از زمان راهاندازی، ما بهطور فعال با توسعهدهندگان بازی Flutter تعامل و نظرسنجی کردهایم تا دریابیم چگونه میتوانیم جعبه ابزار بازیها را بهبود ببخشیم. تقریباً همه آنها به دنبال منابع بیشتر و کد نمونه برای کمک به طراحی بهتر، توسعه و کسب درآمد از بازی های خود هستند.
امروز، ما یک بهروزرسانی جدید برای صفحه وب Flutter Games با چرخ فلکی از منابع ویدیویی و بازیهای جدید منتشر میکنیم تا در حین ساخت در Flutter درباره آنها بیاموزیم. ما تعدادی به روز رسانی جدید برای جعبه ابزار در چند ماه آینده با منابع و نمونه های اضافی برای شروع سفر توسعه بازی شما داریم.
به عنوان اولین قدم، در جولای 2023 با AdMob شریک شدیم و یک کارگاه منحصر به فرد طراحی UX و کسب درآمد را میزبانی کردیم که به توسعه دهندگان بازی Flutter اختصاص داشت. ~ 100 توسعه دهنده از طریق یک وبینار تعاملی زنده به ما پیوستند و امتیاز رضایت 4.6/5.0 را به جلسه دادند. ما امیدواریم که به زودی محتوای کارگاه را خلاصه کنیم و این بینش را به طور گسترده با همه شما به اشتراک بگذاریم.
ابزار سازی
ویژگی های جدید DevTools
ما بهبودهایی در عملکرد و قابلیت استفاده DevTools ایجاد کردهایم که عبارتند از:
ما یک منوی سرریز جدید در نوار پیمایش اضافه کردیم تا مواردی را که لیست برگهها نمیتوان به یکباره نمایش داد رسیدگی کرد.
ما یک افسانه برای انواع کلاس ها در تب Memory اضافه کردیم.
علاوه بر این، ما پیمایش جدول درختی در پروفایلر CPU را سریعتر و روانتر کردیم. در دیباگر، ما جستجو در یک فایل یا جستجوی یک فایل را تا 5 برابر سریعتر انجام داده ایم.
شکستن تغییرات
Material 3 به طور پیش فرض در نسخه بعدی
ما مشتاقیم اعلام کنیم که در نسخه پایدار Flutter بعدی، قصد داریم پیشفرض ThemeData useMaterial3 را از false به true تغییر دهیم. به عبارت دیگر، برنامهها بهطور پیشفرض رنگهای Material 3، سبکهای متن و سایر تصاویر را دریافت خواهند کرد.
نسخه ی نمایشی Material 3 باید برای پیش نمایش تفاوت های M2 و M3 مفید باشد.
پلتفرم های پشتیبانی شده اندروید
Flutter دیگر از سطوح(16، 17 و 18) Android Jelly Bean API پشتیبانی نمی کند. خبر خوب این است که اکثر برنامه ها باید به طور پیش فرض به این minSdkVersion جدید منتقل شوند.
با این حال، اگر بهطور خودکار تغییر نکردهاید، ممکن است به این دلیل باشد که تغییراتی در سطح ماژول build.gradle ایجاد کردهاید و ممکن است لازم باشد minSdkVersion را به صورت دستی افزایش دهید. برای به روز رسانی، سطح ماژول build.gradle را از ریشه پروژه Flutter خود پیدا کنید. معمولاً در<YOUR PROJECT/android/app/build.gradle> یافت می شود. نسخه minSdkVersion را به 19 برسانید. اگر flutter.minSdkVersion را میبینید و حداقل 19 است، حداقل شما به درستی تنظیم شده است.
افزونههای Flutter بهطور پیشفرض منتقل نمیشوند، بنابراین نویسندگان افزونه باید minSdkVersion را در فایل سطح بالای build.gradle موجود در <YOUR PLUGIN>/android/build.gradle بهروزرسانی کنند.
فهرست تغییرات و راهنمای مهاجرت
تغییرات اساسی در این نسخه شامل API های منسوخ شده ای است که پس از انتشار نسخه 3.10 منقضی شده اند. برای مشاهده همه APIهای آسیبدیده، به همراه راهنمای زمینه و مهاجرت اضافی، به راهنمای لغو این نسخه مراجعه کنید. بسیاری از این موارد توسط Flutter Fix پشتیبانی میشوند، از جمله رفع سریع در IDE، و بهطور عمده با دستور Dart fix اعمال میشوند.
اولویت ها و تریاژ مخزن فلاتر
به روز رسانی های تریاژ
در چند ماه گذشته مجموعه جدیدی از تعاریف را برای اولویت های خود (P0-P3) اتخاذ کرده ایم. این ما را با تعاریفی که توسط اکثر پروژههای منبع باز دیگر استفاده میشود تطابق بیشتری میدهد، و تصمیماتی را که باید در مورد اهمیت باگها اتخاذ کنیم، سادهتر میکند – به جای 7 دسته، اکنون فقط 4 دسته داریم. امیدواریم که این به ما در برقراری ارتباط بیشتر کمک کند. به طور موثر با کسانی از شما که اشکالات را ارسال می کنند و سپس متعجب می شوند که چه زمانی همه چیز برطرف می شود!
نتیجه
با رسیدن به پایان این اطلاعیه، میخواهم اذعان کنم که در آینده نه چندان دور با تلاشهای جامعه فوقالعادهمان، در جایی که امروز هستیم نخواهیم بود و قطعا به درجات بالاتر خواهیم رسید!
برای فهرست کاملی از روابط عمومیهایی که در این نسخه گنجانده شدهاند، لطفاً بخش یادداشتهای انتشار و گزارش تغییرات را برای این نسخه بررسی کنید.
Flutter 3.13 امروز در استیبل موجود است و دارای دارت 3.1 می باشد. برای شروع با این جدیدترین بهروزرسانیها، تنها چیزی که نیاز است یک ارتقاء فلاتر است.
دیدگاهتان را بنویسید