{"id":502850,"date":"2026-11-12T08:39:28","date_gmt":"2026-11-12T05:39:28","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=502850"},"modified":"2026-11-12T08:39:28","modified_gmt":"2026-11-12T05:39:28","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=502850","title":{"rendered":"Flutter 3.50 \u2014 \u0427\u0442\u043e \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u043e Flutter?"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0412\u044b\u0448\u0435\u043b Flutter 3.50, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 2026 \u0433\u043e\u0434\u0430 \u043f\u043e <a href=\"https:\/\/docs.flutter.dev\/install\/archive\" rel=\"noopener nofollow\">\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432<\/a>. \u0412\u0435\u0442\u043a\u0443 \u043e\u0442\u0440\u0435\u0437\u0430\u043b\u0438 6 \u043e\u043a\u0442\u044f\u0431\u0440\u044f, \u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e\u043d\u0430 \u043f\u043e\u043f\u0430\u043b\u0430 11 \u043d\u043e\u044f\u0431\u0440\u044f. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0432\u044b\u0448\u0435\u043b <strong>Dart 3.14<\/strong>, \u0435\u043c\u0443 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 <a href=\"https:\/\/habr.com\/en\/articles\/1106886\/\" rel=\"noopener nofollow\">\u0441\u0442\u0430\u0442\u044c\u044f<\/a>.<\/p>\n<p>\u0412 \u0440\u0435\u043b\u0438\u0437 \u0432\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1200 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u043e\u0442 188 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u0432, \u0438\u0437 \u043d\u0438\u0445 69 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 PR.<\/p>\n<pre><code class=\"bash\">flutter upgrade<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper\"><\/span><\/a><\/div><\/pre>\n<h4>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c<\/h4>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 interop<\/p>\n<\/td>\n<td>\n<p align=\"left\">FFIgen (Objective-C) \u0438 JNIgen (Java\/Kotlin) \u0441\u0442\u0430\u043b\u0438 <strong>stable<\/strong>, \u0443 Pigeon \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0440\u0435\u0436\u0438\u043c native interop (preview)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Web<\/p>\n<\/td>\n<td>\n<p align=\"left\">Wasm-\u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 <strong>Safari 26.2+ \u0438 Firefox 147+ (\u0423\u0440\u0430!)<\/strong>, \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0444\u043b\u0430\u0433 <code>--web-content-hash<\/code> \u0438 \u043f\u0440\u0435\u0432\u044c\u044e WebParagraph (CanvasKit \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 31% \u043c\u0435\u043d\u044c\u0448\u0435)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 <code>material.dart<\/code> \u0438 <code>cupertino.dart<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b <strong>deprecated<\/strong>, <code>flutter create<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 <code>material_ui<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">iOS<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0430\u0441\u0430\u043d\u0438\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0430\u0434\u0440 (\u221216 \u043c\u0441 \u043d\u0430 60 \u0413\u0446, \u22128 \u043c\u0441 \u043d\u0430 120 \u0413\u0446), \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u043d\u0430 iOS 27<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Android<\/p>\n<\/td>\n<td>\n<p align=\"left\">Release-\u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a <code>Intent<\/code>, \u0443\u043b\u0443\u0447\u0448\u0435\u043d HCPP, \u0435\u0441\u0442\u044c opt-in \u0434\u043b\u044f DSL AGP 9<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Engine<\/p>\n<\/td>\n<td>\n<p align=\"left\">SDF-\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432 Impeller \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435, texture arrays \u0432\u043e Flutter GPU, \u043c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 OpenGL<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u042d\u043c\u0431\u0435\u0434\u0434\u0435\u0440\u044b<\/p>\n<\/td>\n<td>\n<p align=\"left\">Vulkan external textures \u0438 <code>FlutterEngineNotifyLowMemoryWarning<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0427\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f<\/h4>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0430\u043b\u043e, \u0432\u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442:<\/p>\n<ul>\n<li>\n<p><strong>iOS\/macOS:<\/strong> \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 Swift Package Manager, \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438. Trunk CocoaPods \u0441\u0442\u0430\u043d\u0435\u0442 read-only \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 2026 \u0433\u043e\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Material\/Cupertino:<\/strong> \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 <code>dart fix --apply --code=migrate_design_widgets<\/code> \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0434\u0438\u0444\u0444.<\/p>\n<\/li>\n<li>\n<p><strong>Android-\u043f\u043b\u0430\u0433\u0438\u043d\u044b:<\/strong> \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Kotlin \u0432 AGP (Built-in Kotlin).<\/p>\n<\/li>\n<li>\n<p><strong>Web:<\/strong> \u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 <code>--no-deprecated-js-interop<\/code> \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 Wasm.<\/p>\n<\/li>\n<li>\n<p><strong>Dart:<\/strong> \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 <code>dart migrate --dry-run<\/code> \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e Dart 3.14).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.<\/p>\n<h4>\u041f\u0440\u044f\u043c\u043e\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 interop \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c<\/h4>\n<p>\u041e\u0431 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Flutter \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0432\u0435\u043b\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 <em>direct native interop<\/em>: Dart-\u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c API \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 platform channels. \u0412 3.50 \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u043e\u0448\u043b\u0430 \u0434\u043e production:<\/p>\n<ul>\n<li>\n<p><strong>FFIgen<\/strong> \u0434\u043b\u044f Objective-C \u0441\u0442\u0430\u043b stable. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 C \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u0430 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>JNIgen<\/strong> \u0434\u043b\u044f Java \u0438 Kotlin \u0442\u043e\u0436\u0435 \u0441\u0442\u0430\u043b stable.<\/p>\n<\/li>\n<li>\n<p><strong>Pigeon<\/strong> \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0440\u0435\u0436\u0438\u043c native interop \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 preview. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f iOS, macOS \u0438 Android.<\/p>\n<\/li>\n<\/ul>\n<p>\u0427\u0435\u043c \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 platform channels? \u041a\u0430\u043d\u0430\u043b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435. \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443:<\/p>\n<ul>\n<li>\n<p>\u0432\u044b\u0437\u043e\u0432\u044b \u0431\u044b\u0432\u0430\u044e\u0442 <strong>\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438<\/strong>;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c <strong>\u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u043b\u044f\u0442\u043e\u0432<\/strong>;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0432\u0435\u0436\u0435\u0433\u043e API iOS \u0438\u043b\u0438 Android \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043e\u0431\u0435\u0440\u043d\u0451\u0442 \u0435\u0433\u043e \u0432 \u043f\u043b\u0430\u0433\u0438\u043d. \u0411\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c API \u043f\u0440\u044f\u043c\u043e \u0438\u0437 Dart. \u041c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0441\u0442\u0430\u043d\u0443\u0442 \u0442\u043e\u043d\u044c\u0448\u0435: \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043f\u043b\u044e\u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 Dart-API \u043f\u043e\u0432\u0435\u0440\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, <code>shared_preferences<\/code> \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Early Access: Jon Holtan, Rody Davis, Dominik Roszkowski, Alexander Thiele \u0438 Morgan McKenzie.<\/p>\n<p><strong>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/strong> \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 <a href=\"https:\/\/docs.flutter.dev\/interop\" rel=\"noopener nofollow\">Native interop<\/a> \u0441\u043e\u0431\u0440\u0430\u043b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f Android, iOS, macOS, Windows \u0438 Linux.<\/p>\n<h4>Web<\/h4>\n<h3>Wasm \u0432 Safari \u0438 Firefox<\/h3>\n<p>\u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 Flutter web \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 WebAssembly \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Chromium-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445: Chrome \u0438 Edge \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e 137-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c Wasm \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 \u0432 <strong>Safari 26.2+<\/strong> \u0438 <strong>Firefox 147+<\/strong>. \u041f\u043e \u0437\u0430\u043c\u0435\u0440\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u044d\u0442\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>\u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432\u0434\u0432\u043e\u0435 \u0432\u044b\u0448\u0435 FPS<\/strong>, \u0447\u0435\u043c JS-\u0441\u0431\u043e\u0440\u043a\u0430.<\/p>\n<p>\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c, \u043e\u043d\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, Wasm \u0438 JS:<\/p>\n<pre><code class=\"bash\">flutter build web --wasm<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 Chrome \u0438 Edge Wasm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043b\u044f Safari \u0438 Firefox \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0432\u043d\u043e: \u0432 <code>web\/flutter_bootstrap.js<\/code> \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 <code>webkit<\/code> \u0438 <code>gecko<\/code> \u0432 <code>wasmAllowList<\/code> \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>_flutter.loader.load<\/code>, \u0440\u044f\u0434\u043e\u043c \u0441 <code>blink<\/code>. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"javascript\">{{flutter_js}}{{flutter_build_config}}_flutter.loader.load({  config: {    wasmAllowList: {      blink: true,  \/\/ Chrome, Edge      webkit: true, \/\/ Safari      gecko: true,  \/\/ Firefox    },  },});<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/strong> \u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435 \u0441\u0432\u0435\u0440\u0438\u0442\u044c \u0441 <a href=\"https:\/\/docs.flutter.dev\/platform-integration\/web\/wasm\" rel=\"noopener nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043f\u043e Wasm<\/a>. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 allow-list \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 JS-\u0441\u0431\u043e\u0440\u043a\u0443.<\/p>\n<\/blockquote>\n<h3>\u0425\u0435\u0448\u0438 \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432: &#8212;web-content-hash<\/h3>\n<p>\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Flutter web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439. \u041d\u043e\u0432\u044b\u0439 \u0444\u043b\u0430\u0433 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0445\u0435\u0448 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u0438\u043c\u0435\u043d\u0430 JS-, Wasm-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0438\u0437 <code>build\/web\/assets\/**<\/code>, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 <code>flutter_bootstrap.js<\/code>:<\/p>\n<pre><code class=\"bash\">flutter build web --wasm --web-content-hash<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0424\u0430\u0439\u043b\u044b<\/p>\n<\/th>\n<th>\n<p align=\"left\"><code>Cache-Control<\/code><\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u0411\u0430\u043d\u0434\u043b\u044b \u0438 \u0430\u0441\u0441\u0435\u0442\u044b \u0441 \u0445\u0435\u0448\u0435\u043c<\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>max-age=31536000, immutable<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>index.html<\/code>, <code>flutter_bootstrap.js<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>no-cache<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f nginx:<\/p>\n<pre><code class=\"nginx\">location = \/index.html            { add_header Cache-Control \"no-cache\"; }location = \/flutter_bootstrap.js  { add_header Cache-Control \"no-cache\"; }location \/                        { add_header Cache-Control \"public, max-age=31536000, immutable\"; }<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f <code>precache_manifest.json<\/code>. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a Workbox \u0438\u043b\u0438 \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 service worker. \u041e\u043d \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0438\u0437 <code>flutter_service_worker.js<\/code>.<\/p>\n<h3>\u0410\u0443\u0434\u0438\u0442 \u0441\u0442\u0430\u0440\u043e\u0433\u043e JS interop<\/h3>\n<p><code>dart:html<\/code>, <code>dart:js<\/code>, <code>dart:js_util<\/code> \u0438 <code>package:js<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438, \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0438\u043c \u043f\u0440\u0438\u0448\u043b\u0438 <code>dart:js_interop<\/code> \u0438 <code>package:web<\/code>. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 Wasm, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0444\u043b\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:<\/p>\n<pre><code class=\"bash\">flutter build web --no-deprecated-js-interopflutter run -d chrome --no-deprecated-js-interopflutter test --platform chrome --no-deprecated-js-interop<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>WebParagraph: \u0432\u0451\u0440\u0441\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0438\u043b\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (preview)<\/h3>\n<p>\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Chrome \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c Enhanced <code>TextMetrics<\/code> API: \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 CanvasKit \u0434\u0432\u0438\u0436\u043e\u043a. \u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0451\u0442:<\/p>\n<ul>\n<li>\n<p>CanvasKit \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e <strong>\u0441 5,46 \u041c\u0411 \u0434\u043e 3,75 \u041c\u0411<\/strong>;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u043f\u043e \u0441\u0435\u0442\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u00ab\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0438\u00bb;<\/p>\n<\/li>\n<li>\n<p>\u0446\u0432\u0435\u0442\u043d\u044b\u0435 \u044d\u043c\u043e\u0434\u0437\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u044f\u0442\u0441\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u044c\u044e, \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/github.com\/flutter\/flutter\/issues\/172561\" rel=\"noopener nofollow\">issue #172561<\/a>.<\/p>\n<h4>Material \u0438 Cupertino: \u043f\u0440\u043e\u0449\u0430\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438<\/h4>\n<p>\u041e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442 \u044f\u0434\u0440\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f. \u041f\u0430\u043a\u0435\u0442\u044b <code>material_ui<\/code> \u0438 <code>cupertino_ui<\/code> \u0432\u044b\u0448\u043b\u0438 \u0432 1.0 \u0435\u0449\u0451 \u0432\u043e Flutter 3.47, \u0430 \u0432 3.50 \u0441\u0434\u0435\u043b\u0430\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433:<\/p>\n<ul>\n<li>\n<p><code>package:flutter\/material.dart<\/code> \u0438 <code>package:flutter\/cupertino.dart<\/code> \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b <strong>deprecated<\/strong>, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430\u043c\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 <code>flutter_localizations<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>flutter create<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 <code>package:material_ui<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>Deprecated \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043e, \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0442\u044c \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c. \u0414\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043a\u0441:<\/p>\n<pre><code class=\"bash\">dart fix --apply --code=migrate_design_widgets<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u041e<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u041f\u041e\u0421\u041b\u0415<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>import 'package:flutter\/material.dart';<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>import 'package:material_ui\/material_ui.dart';<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>import 'package:flutter\/cupertino.dart';<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>import 'package:cupertino_ui\/cupertino_ui.dart';<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/strong> \u0435\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0439 <code>MaterialUiCompatibilityBridge<\/code>. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c <a href=\"https:\/\/docs.flutter.dev\/release\/whats-new\" rel=\"noopener nofollow\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438<\/a>.<\/p>\n<\/blockquote>\n<p>\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u044d\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u043c: \u0443 <code>DropdownButtonFormField<\/code> \u0432 <code>material_ui<\/code> \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>enabled<\/code>. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 <code>onChanged: null<\/code>.<\/p>\n<h4>Framework<\/h4>\n<h3>\u0421\u043a\u0440\u043e\u043b\u043b \u0438 \u0441\u043b\u0430\u0439\u0432\u0435\u0440\u044b<\/h3>\n<p>\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0434\u0435\u043b\u0430\u043d \u0441\u0438\u043b\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430:<\/p>\n<ul>\n<li>\n<p><code><strong>SliverClipRect<\/strong><\/code><strong> \u0438 <\/strong><code><strong>SliverClipRRect<\/strong><\/code> \u043e\u0431\u0440\u0435\u0437\u0430\u044e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043b\u0430\u0439\u0432\u0435\u0440\u0430, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438. \u041e\u043f\u0446\u0438\u044f <code>clipOverlap<\/code> \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438. \u0410\u0432\u0442\u043e\u0440 \u2014 Emmanuel Lefebvre Dibon (<a href=\"https:\/\/github.com\/manu-sncf\" rel=\"noopener nofollow\">@manu-sncf<\/a>).<\/p>\n<\/li>\n<li>\n<p><code><strong>itemExtentBuilder<\/strong><\/code><strong> \u0432 <\/strong><code><strong>ListView.separated<\/strong><\/code><strong>.<\/strong> \u0420\u0430\u043d\u044c\u0448\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c <code>ListView.builder<\/code>. \u0410\u0432\u0442\u043e\u0440 \u2014 <a href=\"https:\/\/github.com\/Mairramer\" rel=\"noopener nofollow\">@Mairramer<\/a>.<\/p>\n<\/li>\n<li>\n<p><code><strong>ScrollPhysics.shouldUpdate<\/strong><\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u0435\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0444\u0438\u0437\u0438\u043a\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0430. \u0422\u043e\u0436\u0435 \u043e\u0442 <a class=\"mention\" href=\"\/users\/Mairramer\">@Mairramer<\/a>.<\/p>\n<\/li>\n<li>\n<p><code><strong>RawScrollbar.mouseCursor<\/strong><\/code> \u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u043e\u043c \u0438 \u0434\u043e\u0440\u043e\u0436\u043a\u043e\u0439. \u0410\u0432\u0442\u043e\u0440 \u2014 Soroush Yousefpour (<a href=\"https:\/\/github.com\/gabrimatic\" rel=\"noopener nofollow\">@gabrimatic<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b <code>Scrollable.ensureVisible<\/code>, overscroll \u0432 <code>SliverFillRemaining<\/code> \u0438 \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0432 <code>TreeSliver<\/code>.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 <code>itemExtentBuilder<\/code>: \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0434\u0432\u0438\u0436\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438 \u043f\u0440\u044b\u0436\u043a\u0438 \u043f\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u0435\u0448\u0435\u0432\u043b\u0435.<\/p>\n<pre><code class=\"dart\">ListView.separated(  itemCount: messages.length,  itemExtentBuilder: (index, dimensions) =&gt;      messages[index].isHeader ? 48 : 72,  separatorBuilder: (_, __) =&gt; const Divider(height: 1),  itemBuilder: (context, index) =&gt; MessageTile(messages[index]),);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u0422\u0435\u043a\u0441\u0442 \u0438 \u0432\u0432\u043e\u0434<\/h3>\n<ul>\n<li>\n<p><code>TextInputType.numberWithOptions<\/code> \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <code>password<\/code>, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f PIN-\u043a\u043e\u0434\u043e\u0432 \u043d\u0430 Android. \u0410\u0432\u0442\u043e\u0440 \u2014 Alex Li (<a href=\"https:\/\/github.com\/AlexV525\" rel=\"noopener nofollow\">@AlexV525<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u041d\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f <code>AutofillHints.emailOTPCode<\/code> \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u0434\u044b \u0438\u0437 \u043f\u0438\u0441\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 <code>Hyphens<\/code> \u0434\u043b\u044f \u043c\u044f\u0433\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u043c\u044f\u0433\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0434\u0435\u0444\u0438\u0441, \u0438 \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 breaking changes \u0440\u0435\u043b\u0438\u0437\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u00ab\u043f\u0440\u044b\u0436\u043e\u043a\u00bb \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f (Nicodemus Lin, <a href=\"https:\/\/github.com\/nicolinx\" rel=\"noopener nofollow\">@nicolinx<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u0432 \u043f\u043e\u043b\u044f\u0445 \u0441 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 \u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e (Nickolas de Luca Alberton).<\/p>\n<\/li>\n<li>\n<p>\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 <code>PageView<\/code> \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u043e\u043c LTR\/RTL-\u0442\u0435\u043a\u0441\u0442\u0435.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"dart\">TextField(  keyboardType: const TextInputType.numberWithOptions(password: true),  autofillHints: const [AutofillHints.emailOTPCode],  obscureText: true,);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430<\/h3>\n<ul>\n<li>\n<p><code>placeholder<\/code> \u0432 <code>DecorationImage<\/code> (Kishan Rathore, <a href=\"https:\/\/github.com\/rkishan516\" rel=\"noopener nofollow\">@rkishan516<\/a>).<\/p>\n<\/li>\n<li>\n<p><code>FadeInImageTransition.fadeInOver<\/code> (Anas Saifi, <a href=\"https:\/\/github.com\/anazr9\" rel=\"noopener nofollow\">@anazr9<\/a>).<\/p>\n<\/li>\n<li>\n<p><code>useLogicalSize<\/code> \u0432 <code>ResizeImage<\/code> \u0438 <code>useLogicalCacheSize<\/code> \u0432 <code>Image<\/code> (Koji Wakamiya, <a href=\"https:\/\/github.com\/koji-1009\" rel=\"noopener nofollow\">@koji-1009<\/a>).<\/p>\n<\/li>\n<li>\n<p><code>blendMode<\/code> \u0432 <code>RawImage<\/code> (Ishaq Hassan, <a href=\"https:\/\/github.com\/ishaquehassan\" rel=\"noopener nofollow\">@ishaquehassan<\/a>).<\/p>\n<\/li>\n<li>\n<p>\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 <code>BoxBorder<\/code>.<\/p>\n<\/li>\n<li>\n<p><code>HSVColor.lerp<\/code> \u0438 <code>HSLColor.lerp<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u044e\u0442 \u043e\u0442\u0442\u0435\u043d\u043e\u043a \u043f\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0439 \u0434\u0443\u0433\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u043a \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u0440\u0430\u0434\u0443\u0433\u0443.<\/p>\n<\/li>\n<\/ul>\n<h3>\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0438 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f<\/h3>\n<ul>\n<li>\n<p><code>SemanticsRole.slider<\/code> \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0445 \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p><code>MediaQueryData.reduceMotion<\/code> \u043e\u0442\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0443 \u00ab\u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u00bb, \u0442\u0430\u043a \u0447\u0442\u043e \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u043e-\u0447\u0435\u0441\u0442\u043d\u043e\u043c\u0443.<\/p>\n<\/li>\n<li>\n<p>Escape \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 <code>Tooltip<\/code> \u0438 <code>RawTooltip<\/code> \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u0444\u043e\u043a\u0443\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b VoiceOver \u0438 \u0444\u043e\u043a\u0443\u0441 \u0432 <code>WidgetsApp.router<\/code> \u043d\u0430 \u0432\u0435\u0431\u0435.<\/p>\n<\/li>\n<li>\n<p><code>skipTraversal<\/code> \u0432 <code>FocusableActionDetector<\/code> (Ishaq Hassan).<\/p>\n<\/li>\n<li>\n<p><code>barrierBuilder<\/code> \u0432 <code>showDialog<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0444\u043e\u043d \u0434\u0438\u0430\u043b\u043e\u0433\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u044b\u0442\u0438\u0435 (<a class=\"mention\" href=\"\/users\/Mairramer\">@Mairramer<\/a>).<\/p>\n<\/li>\n<li>\n<p><code>Navigator.popUntilWithResult<\/code> \u0441\u043d\u0438\u043c\u0430\u0435\u0442 \u043c\u0430\u0440\u0448\u0440\u0443\u0442\u044b \u0434\u043e \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u0441\u043d\u044f\u0442\u043e\u043c\u0443.<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"dart\">final reduceMotion = MediaQuery.of(context).reduceMotion;AnimatedContainer(  duration: reduceMotion ? Duration.zero : const Duration(milliseconds: 300),  \/\/ ...);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>\u041c\u043d\u043e\u0433\u043e\u043e\u043a\u043e\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442)<\/h3>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0438\u0434\u0451\u0442 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 Canonical, \u0443\u0447\u0430\u0441\u0442\u0432\u0443\u044e\u0442 Robert Ancell, Matthew Kosarek \u0438 Matej Knopp:<\/p>\n<ul>\n<li>\n<p><code>WindowControllerLinux<\/code>: \u0441\u0432\u043e\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 \u043e\u043a\u043e\u043d, \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c, \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0437\u043c\u0435\u0440\u0430;<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 macOS \u043e\u043a\u043d\u0430 \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043e \u043f\u043e\u043a\u0430\u0437\u0430;<\/p>\n<\/li>\n<li>\n<p><code>RegularWindow<\/code> \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d \u0432 <code>Window<\/code>, \u0430 <code>sizedToContent<\/code> \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u043d\u0430 <code>shrinkWrap<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>WindowManager<\/code> \u0442\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432\u044b\u0448\u0435 <code>WidgetsApp<\/code> \u0432 \u0434\u0435\u0440\u0435\u0432\u0435.<\/p>\n<\/li>\n<\/ul>\n<blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/strong> API \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439, \u0438 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0448\u0435 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442. \u0412 \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u0435\u043d\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c \u043f\u043e\u043a\u0430 \u0440\u0430\u043d\u043e.<\/p>\n<\/blockquote>\n<h4>Engine<\/h4>\n<ul>\n<li>\n<p><strong>SDF-\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432 Impeller \u043d\u0430 macOS, Linux \u0438 Windows.<\/strong> \u041b\u0438\u043d\u0438\u0438, \u0442\u043e\u043d\u043a\u0438\u0435 \u0440\u0430\u043c\u043a\u0438, \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u0435 \u0443\u0433\u043b\u044b \u0438 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0442\u0440\u043e\u044f\u0442\u0441\u044f \u043d\u0430 GPU \u0447\u0435\u0440\u0435\u0437 signed distance fields. \u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u044b \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u044b \u043d\u0430 macOS \u0438 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0438\u0435\u0441\u044f \u0442\u0435\u043d\u0438 \u0442\u0435\u043a\u0441\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><strong>Flutter GPU<\/strong> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 2D texture arrays, \u0447\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0431\u0430\u0442\u0447\u0438\u043d\u0433\u0430 \u0441\u043f\u0440\u0430\u0439\u0442\u043e\u0432 \u0438 \u0442\u0430\u0439\u043b\u043e\u0432. \u041e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 shader pipeline \u0441\u0442\u0430\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>OpenGL \u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/strong> <\/p>\n<ul>\n<li>\n<p>\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0448\u0435\u0439\u0434\u0435\u0440\u043e\u0432 OpenGL \u0432\u044b\u043d\u0435\u0441\u0435\u043d\u0430 \u0432 \u0444\u043e\u043d\u043e\u0432\u044b\u0439 \u043f\u043e\u0442\u043e\u043a (<a href=\"https:\/\/github.com\/xiaowei-guan\" rel=\"noopener nofollow\">@xiaowei-guan<\/a>);<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0441\u0431\u043e\u0438 \u043f\u0440\u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u043d\u0430 GPU Mali (<a href=\"https:\/\/github.com\/dfdgsdfg\" rel=\"noopener nofollow\">@dfdgsdfg<\/a>);<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b OpenGL ES 2 \u0438 \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0439 (<a href=\"https:\/\/github.com\/krll-kov\" rel=\"noopener nofollow\">@krll-kov<\/a>);<\/p>\n<\/li>\n<li>\n<p>\u043d\u0430 GPU PowerVR \u0441\u0435\u0440\u0438\u0438 B \u0434\u0432\u0438\u0436\u043e\u043a \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0441 Vulkan \u043d\u0430 OpenGL.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0413\u0440\u0430\u0444\u0438\u043a\u0430 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435:<\/strong> Windows \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 OpenGL ES 3 \u0438 \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 ES 2, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d (<a href=\"https:\/\/github.com\/flutter\/flutter\/pull\/191516\" rel=\"noopener nofollow\">PR #191516<\/a>). \u0422\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0443\u0442\u044f\u043c\u0438, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u043c\u0438 \u043d\u0435-ASCII \u0441\u0438\u043c\u0432\u043e\u043b\u044b (\u043a\u0438\u0440\u0438\u043b\u043b\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0438\u043c\u0435\u043d\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 Windows, \u044d\u0442\u043e \u043f\u0440\u043e \u0432\u0430\u0441), \u0442\u0435\u043a\u0441\u0442 \u0441\u0442\u0430\u043b \u0447\u0451\u0442\u0447\u0435, \u043a\u0430\u0434\u0440\u044b \u043a\u043e\u043f\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0440\u0435\u0436\u0435, \u0441\u0433\u043b\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043d\u0430 Windows \u0438 Linux \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<h4>\u0412\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b (embedders)<\/h4>\n<p>\u0414\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442 Flutter \u043d\u0430 \u043d\u0435\u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435 (\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0438, \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440\u044b, \u043f\u0440\u043e\u043c\u044b\u0448\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0430\u043d\u0435\u043b\u0438), \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u044b API Impeller \u0438 Vulkan:<\/p>\n<ul>\n<li>\n<p><strong>Vulkan external textures<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0434\u0432\u0438\u0436\u043e\u043a \u0432\u043d\u0435\u0448\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0443\u0440\u044b \u043a\u0430\u043a \u0434\u043b\u044f Impeller, \u0442\u0430\u043a \u0438 \u0434\u043b\u044f Skia (<a href=\"https:\/\/github.com\/flutter\/flutter\/pull\/188855\" rel=\"noopener nofollow\">PR #188855<\/a>, \u0430\u0432\u0442\u043e\u0440 <a class=\"mention\" href=\"\/users\/xiaowei-guan\">@xiaowei-guan<\/a>).<\/p>\n<\/li>\n<li>\n<p><code><strong>FlutterEngineNotifyLowMemoryWarning<\/strong><\/code> \u043e\u0447\u0438\u0449\u0430\u0435\u0442 \u043a\u044d\u0448 offscreen render target \u0432 Impeller, \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u043f\u0430\u043c\u044f\u0442\u0438 (<a href=\"https:\/\/github.com\/flutter\/flutter\/pull\/193497\" rel=\"noopener nofollow\">PR #193497<\/a>).<\/p>\n<\/li>\n<\/ul>\n<h4>iOS \u0438 macOS<\/h4>\n<p>\u042d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 \u043f\u043e\u0441\u043b\u0435 \u0432\u044b\u0445\u043e\u0434\u0430 Xcode 27 \u0438 iOS 27.<\/p>\n<h3>\u041a\u0430\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u043b\u0438 \u043e\u0442\u0437\u044b\u0432\u0447\u0438\u0432\u0435\u0435<\/h3>\n<p>Matej Knopp \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u043f\u043b\u0430\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u0434\u0440\u043e\u0432 \u043d\u0430 iOS, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u043a\u0430\u0441\u0430\u043d\u0438\u044f \u0438 \u0441\u0432\u0430\u0439\u043f\u044b \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0430\u0434\u0440 \u0440\u0430\u043d\u044c\u0448\u0435:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u0414\u0438\u0441\u043f\u043b\u0435\u0439<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0412\u044b\u0438\u0433\u0440\u044b\u0448<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">60 \u0413\u0446<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u043a\u043e\u043b\u043e 16 \u043c\u0441<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">120 \u0413\u0446 (ProMotion)<\/p>\n<\/td>\n<td>\n<p align=\"left\">\u043e\u043a\u043e\u043b\u043e 8 \u043c\u0441<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0423\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e iPhone 6s. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/flutter\/flutter\/issues\/191199\" rel=\"noopener nofollow\">issue #191199<\/a>. \u041a\u043e\u0434 \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f.<\/p>\n<h3>\u041e\u0442\u043b\u0430\u0434\u043a\u0430 \u043d\u0430 iOS 27<\/h3>\n<ul>\n<li>\n<p>CLI \u0441\u0430\u043c \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u043e\u0432\u043e\u0435 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e, \u0437\u0430\u0432\u0438\u0441\u0430\u043d\u0438\u044f \u043d\u0430 \u0431\u0435\u043b\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u0442;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0430\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0447\u0435\u0440\u0435\u0437 <code>flutter run<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>flutter screenshot<\/code> \u0441\u043d\u043e\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043d\u0430 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441 iOS 17 \u0438 \u043d\u043e\u0432\u0435\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>Swift Package Manager \u0432\u043c\u0435\u0441\u0442\u043e CocoaPods<\/h3>\n<p>Trunk CocoaPods \u0441\u0442\u0430\u043d\u0435\u0442 read-only \u0432 <strong>\u0434\u0435\u043a\u0430\u0431\u0440\u0435 2026 \u0433\u043e\u0434\u0430<\/strong>. Flutter 3.50 \u0432\u044b\u0432\u043e\u0434\u0438\u0442 \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u0435, \u0435\u0441\u043b\u0438 SPM \u043e\u0442\u043a\u043b\u044e\u0447\u0451\u043d. \u0412 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0431\u0443\u0434\u0443\u0449\u0438\u0445 \u0440\u0435\u043b\u0438\u0437\u043e\u0432 \u0444\u043b\u0430\u0433 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f SPM \u0438 fallback \u043d\u0430 CocoaPods \u0443\u0431\u0435\u0440\u0443\u0442 \u0441\u043e\u0432\u0441\u0435\u043c.<\/p>\n<h3>\u041f\u0440\u043e\u0449\u0430\u043d\u0438\u0435 \u0441 Intel Mac<\/h3>\n<p>\u041d\u0430 Intel-\u043c\u0430\u043a\u0430\u0445 Flutter \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u0438 CLI \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435 \u043d\u0430 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445. \u0415\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434 Apple Silicon, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435:<\/p>\n<pre><code class=\"bash\">flutter config --enable-macos-arm64-only<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h4>Android<\/h4>\n<h3>\u0421\u0442\u0440\u043e\u0436\u0435 \u0441 Intent \u0432 release-\u0441\u0431\u043e\u0440\u043a\u0430\u0445<\/h3>\n<p>\u0412 release-\u0440\u0435\u0436\u0438\u043c\u0435 Flutter \u0440\u0430\u043d\u044c\u0448\u0435 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u043b \u0438\u0437 extras \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e <code>Intent<\/code> \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043b\u0438\u044f\u043b\u0438 \u043d\u0430 \u0437\u0430\u043f\u0443\u0441\u043a \u0434\u0432\u0438\u0436\u043a\u0430, \u0438 \u044d\u0442\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0437\u043b\u043e\u0443\u043f\u043e\u0442\u0440\u0435\u0431\u0438\u0442\u044c. \u0422\u0435\u043f\u0435\u0440\u044c release-\u0441\u0431\u043e\u0440\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442 <code>route<\/code>, <code>dart_entrypoint<\/code> \u0438 <code>cached_engine_id<\/code>, \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0435 \u0438\u0437 extras \u0432\u043d\u0435\u0448\u043d\u0435\u0433\u043e <code>Intent<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u043e\u0442\u043a\u043b\u043e\u043d\u044f\u044e\u0442 runtime-\u0444\u043b\u0430\u0433\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u0432\u0440\u043e\u0434\u0435 <code>--dart-flags<\/code>, \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 <code>Intent<\/code> \u0438\u043b\u0438 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c release APK (<code>--use-application-binary<\/code>), \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0438\u0445 \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u044b\u0447\u043d\u044b\u0435 deep links \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u044e\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c. \u0412 debug-\u0440\u0435\u0436\u0438\u043c\u0435 Flutter \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0430\u0435\u0442 \u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 extras. \u0415\u0441\u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u043b\u0438 \u0444\u043b\u0430\u0433\u0438 \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0430 release-\u0441\u0431\u043e\u0440\u043a\u0435, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u0441\u044c \u043d\u0430 profile-\u0440\u0435\u0436\u0438\u043c \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<h3>Hybrid Composition++ (HCPP)<\/h3>\n<p>HCPP \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c \u0435\u0449\u0451 \u0432\u043e Flutter 3.44, \u0430 \u0432 beta \u0432\u043a\u043b\u044e\u0447\u0451\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 3.49.0-0.1.pre. \u0412 3.50:<\/p>\n<ul>\n<li>\n<p>motion events \u0432 <code>AndroidViewSurface<\/code> \u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0431\u0435\u0437 \u0431\u0443\u0444\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u043f\u043e\u0440\u044f\u0434\u043e\u043a layout \u0432 <code>RenderAndroidView<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u0435, \u043a\u043e\u0433\u0434\u0430 <code>FlutterEngine<\/code> \u0436\u0438\u0432\u0451\u0442 \u0434\u043e\u043b\u044c\u0448\u0435 <code>Activity<\/code> (Amaan Ansari, <a href=\"https:\/\/github.com\/amaan-0331\" rel=\"noopener nofollow\">@amaan-0331<\/a>).<\/p>\n<\/li>\n<\/ul>\n<p>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: Android 14 (API 34) \u0438 \u0432\u044b\u0448\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 Impeller \u043d\u0430 Vulkan. \u0415\u0441\u043b\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u044b, Flutter \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a \u043f\u0440\u0435\u0436\u043d\u0435\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438. \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435:<\/p>\n<pre><code class=\"bash\">flutter config --enable-hcpp<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e HCPP \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b, \u0438\u0449\u0438\u0442\u0435 \u0432 logcat \u0441\u0442\u0440\u043e\u043a\u0443 <code>Using HCPP platform view rendering strategy<\/code>.<\/p>\n<h3>Built-in Kotlin \u0434\u043b\u044f \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432<\/h3>\n<p>\u0410\u0432\u0442\u043e\u0440\u0430\u043c \u043f\u043b\u0430\u0433\u0438\u043d\u043e\u0432 \u0441 Android-\u043a\u043e\u0434\u043e\u043c \u043f\u043e\u0440\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Kotlin \u0432 AGP. \u0415\u0441\u043b\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c Kotlin Gradle Plugin, \u0434\u0430\u0436\u0435 \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 AGP, <a href=\"http:\/\/pub.dev\" rel=\"noopener nofollow\">pub.dev<\/a> \u0441\u043d\u0438\u0437\u0438\u0442 \u043e\u0446\u0435\u043d\u043a\u0443 \u043f\u0430\u043a\u0435\u0442\u0430, \u0430 \u043f\u043e\u0434 AGP 10 \u0441\u0431\u043e\u0440\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u0441\u043b\u0435 \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0443\u043a\u0430\u0436\u0438\u0442\u0435 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e Flutter \u0432 <code>pubspec.yaml<\/code> \u0438 \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 <code>CHANGELOG.md<\/code>:<\/p>\n<pre><code class=\"yaml\">environment:  flutter: \"&gt;=3.44.0\"<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><span class=\"sc-logo-wrapper icon-only\"><\/span><\/a><\/div><\/pre>\n<h3>DSL AGP 9 (opt-in)<\/h3>\n<p>Flutter Gradle Plugin \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u043d \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0445 API AGP 9. \u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 DSL \u043c\u043e\u0436\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 <strong>\u0432\u0441\u0435<\/strong> \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 Built-in Kotlin.<\/p>\n<h3>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u043d\u043e\u0432\u044b\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432<\/h3>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<th>\n<p align=\"left\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440<\/p>\n<\/th>\n<th>\n<p align=\"left\">\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435<\/p>\n<\/th>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Android Gradle Plugin<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.3.1<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Gradle<\/p>\n<\/td>\n<td>\n<p align=\"left\">9.5.0<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Kotlin Gradle Plugin<\/p>\n<\/td>\n<td>\n<p align=\"left\">2.4.20<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">Java (\u043c\u0438\u043d\u0438\u043c\u0443\u043c)<\/p>\n<\/td>\n<td>\n<p align=\"left\">17<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>flutter.compileSdkVersion<\/code> \/ <code>flutter.targetSdkVersion<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">API 36<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>flutter.minSdkVersion<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\">API 24<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h4>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0438 AI<\/h4>\n<ul>\n<li>\n<p><strong>\u0410\u0433\u0435\u043d\u0442-\u043f\u043b\u0430\u0433\u0438\u043d\u044b.<\/strong> \u041e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0434\u043b\u044f AI-\u0430\u0433\u0435\u043d\u0442\u043e\u0432 \u0432\u043a\u043b\u044e\u0447\u0430\u044e\u0442 skills, \u0433\u043e\u0442\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e MCP-\u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 Dart \u0438 Flutter \u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0434\u043b\u044f \u0430\u0433\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0440\u0430\u0432\u0438\u043b\u043e <code>flutter-hot-reload<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 <code>hot_reload<\/code> \u0438\u043b\u0438 <code>hot_restart<\/code> \u0447\u0435\u0440\u0435\u0437 MCP \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u0430\u0432\u043e\u043a \u0432 <code>lib\/<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Skills \u0432 \u043f\u0430\u043a\u0435\u0442\u0430\u0445.<\/strong> \u041f\u0430\u043a\u0435\u0442 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c skills \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 <code>skills\/<\/code>, \u043e\u043d\u0438 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 <code>dart run skills@ get<\/code>. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 <code>SKILL.md<\/code> \u0432 CI \u0435\u0441\u0442\u044c \u043b\u0438\u043d\u0442\u0435\u0440 <code>package:skills_lint<\/code>.<\/p>\n<\/li>\n<li>\n<p><strong>Analysis Server<\/strong> \u0443\u0441\u043a\u043e\u0440\u0438\u043b\u0441\u044f: \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0434\u0435\u0434\u0443\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u043e\u0432 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 workspace DevTools \u0438\u0437 16 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u0432 \u0441\u0442\u0430\u043b\u043e \u043d\u0430 <strong>57%<\/strong> \u0431\u044b\u0441\u0442\u0440\u0435\u0435 (\u0441 2,0 \u0434\u043e 0,9 \u0441).<\/p>\n<\/li>\n<li>\n<p><strong>DevTools<\/strong> \u0441\u0430\u043c \u043f\u0435\u0440\u0435\u0448\u0451\u043b \u043d\u0430 <code>material_ui<\/code> \u0438 <code>cupertino_ui<\/code>.<\/p>\n<\/li>\n<\/ul>\n<h4>\u042d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0430<\/h4>\n<ul>\n<li>\n<p><strong>Genkit Dart 1.0:<\/strong> \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u044c \u043e\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0434\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430, \u043f\u043e\u0442\u043e\u043a\u043e\u0432\u044b\u0435 flows, tool calling \u0438 \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u043a\u0430 \u0447\u0435\u0440\u0435\u0437 OpenTelemetry.<\/p>\n<\/li>\n<li>\n<p><strong>MediaPipe \u043d\u0430 <\/strong><a href=\"http:\/\/pub.dev\" rel=\"noopener nofollow\"><strong>pub.dev<\/strong><\/a><strong>:<\/strong> 20 \u0437\u0430\u0434\u0430\u0447 \u0434\u043b\u044f \u0437\u0440\u0435\u043d\u0438\u044f, \u0430\u0443\u0434\u0438\u043e \u0438 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043f\u043e\u0432\u0435\u0440\u0445 LiteRT \u0438 LiteRT-LM.<\/p>\n<\/li>\n<li>\n<p><strong>\u0411\u043e\u043b\u044c\u0448\u0435 \u043c\u0438\u043b\u043b\u0438\u043e\u043d\u0430 Flutter-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439<\/strong> \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043e \u0432 Google Play.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0435\u0434\u0438 \u043a\u0435\u0439\u0441\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430: Holafly (\u043c\u043e\u043d\u043e\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 \u0437\u0430 \u0442\u0440\u0438 \u043c\u0435\u0441\u044f\u0446\u0430, \u0431\u043e\u043b\u044c\u0448\u0435 2 \u043c\u043b\u043d \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u043c\u0435\u0441\u044f\u0446), Knowunity (Flutter + Go + Gemini, 8\u201310 \u043c\u043b\u043d \u0430\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u0443\u0447\u0435\u043d\u0438\u043a\u043e\u0432 \u0432 \u043c\u0435\u0441\u044f\u0446), Buzz, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Eloquent \u0438 Foresight \u043e\u0442 Google AI Edge.<\/p>\n<\/li>\n<li>\n<p>\u0423 Flutter \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f <strong>\u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 RFC<\/strong> (\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 <code>flutter\/rfc<\/code>): \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0438\u0442\u044c \u043a\u0440\u0443\u043f\u043d\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u043e\u0436\u043d\u043e \u043f\u043e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u0435.<\/p>\n<\/li>\n<\/ul>\n<h4>Breaking changes \u0438 deprecations<\/h4>\n<p>\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u043e\u043c\u0430\u0442\u044c\u0441\u044f \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u043f\u0440\u0435\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ul>\n<li>\n<p>deprecated <code>material.dart<\/code>, <code>cupertino.dart<\/code> \u0438 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u044b <code>flutter_localizations<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0441\u0442\u0440\u043e\u0433\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 <code>Intent<\/code> \u0432 release-\u0441\u0431\u043e\u0440\u043a\u0430\u0445 \u043d\u0430 Android;<\/p>\n<\/li>\n<li>\n<p><code>enabled<\/code> \u0432\u043c\u0435\u0441\u0442\u043e <code>onChanged: null<\/code> \u0432 <code>DropdownButtonFormField<\/code> (<code>material_ui<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u043c\u044f\u0433\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0434\u0435\u0444\u0438\u0441;<\/p>\n<\/li>\n<li>\n<p><code>WidgetSpan<\/code> \u0432 RTL-\u0442\u0435\u043a\u0441\u0442\u0435 \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0447\u0442\u0435\u043d\u0438\u044f;<\/p>\n<\/li>\n<li>\n<p><code>SafeArea<\/code> \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u044b\u0440\u0435\u0437\u044b \u0438 \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440 home \u043f\u0440\u0438 <code>viewport-fit=cover<\/code>;<\/p>\n<\/li>\n<li>\n<p>\u0443\u0434\u0430\u043b\u0435\u043d\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0435\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>ignoringSemantics<\/code> \u0443 <code>IgnorePointer<\/code>, <code>AbsorbPointer<\/code>, <code>SliverIgnorePointer<\/code> \u0438 \u0438\u0445 render-\u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432;<\/p>\n<\/li>\n<li>\n<p><code>computeDryBaseline<\/code> \u0432 <code>RenderProxyBox<\/code> \u0438 \u0440\u043e\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u0445 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 <code>null<\/code>, \u0435\u0441\u043b\u0438 \u0443 \u043f\u043e\u0442\u043e\u043c\u043a\u0430 \u043d\u0435\u0442 baseline (\u0440\u0430\u043d\u044c\u0448\u0435 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b assertion).<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/strong> <a href=\"https:\/\/docs.flutter.dev\/release\/breaking-changes\" rel=\"noopener nofollow\">Breaking changes<\/a>.<\/p>\n<h4>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h4>\n<p>Flutter 3.50 \u0441\u043b\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0440\u0435\u043b\u0438\u0437\u043e\u043c \u043e\u0434\u043d\u043e\u0439 \u0433\u0440\u043e\u043c\u043a\u043e\u0439 \u0444\u0438\u0447\u0438. \u0421\u043a\u043e\u0440\u0435\u0435 \u044d\u0442\u043e \u0433\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u043e\u0448\u0451\u043b \u0434\u043e \u0444\u0438\u043d\u0438\u0448\u0430: \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 interop \u0431\u0435\u0437 \u043a\u0430\u043d\u0430\u043b\u043e\u0432 \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c, Wasm \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0437\u0430 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u043c\u0438 Chromium, \u0430 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u044f\u0434\u0440\u0430 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b. \u0414\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0439\u0434\u0451\u0442 \u0441\u043f\u043e\u043a\u043e\u0439\u043d\u043e, \u043d\u043e \u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u0435 \u043d\u0430 <code>material_ui<\/code> \u0438 SPM \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0437\u0430\u0431\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u0437\u0430\u0440\u0430\u043d\u0435\u0435.<\/p>\n<p>\u0414\u043e\u043c\u0430\u0448\u043d\u0435\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p><code>flutter upgrade<\/code>;<\/p>\n<\/li>\n<li>\n<p><code>dart fix --apply --code=migrate_design_widgets<\/code> \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435;<\/p>\n<\/li>\n<li>\n<p><code>flutter build web --no-deprecated-js-interop<\/code>, \u0435\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0435\u0431;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c, \u0447\u0442\u043e iOS-\u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 SPM.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/1106888\/\">https:\/\/habr.com\/ru\/articles\/1106888\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0412\u044b\u0448\u0435\u043b Flutter 3.50, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u043b\u0438\u0437 2026 \u0433\u043e\u0434\u0430 \u043f\u043e \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u043e\u043c\u0443 \u0433\u0440\u0430\u0444\u0438\u043a\u0443 \u0440\u0435\u043b\u0438\u0437\u043e\u0432. \u0412\u0435\u0442\u043a\u0443 \u043e\u0442\u0440\u0435\u0437\u0430\u043b\u0438 6 \u043e\u043a\u0442\u044f\u0431\u0440\u044f, \u0432 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0430\u043b \u043e\u043d\u0430 \u043f\u043e\u043f\u0430\u043b\u0430 11 \u043d\u043e\u044f\u0431\u0440\u044f. \u0412\u043c\u0435\u0441\u0442\u0435 \u0441 \u043d\u0438\u043c \u0432\u044b\u0448\u0435\u043b Dart 3.14, \u0435\u043c\u0443 \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u0430 \u0441\u0442\u0430\u0442\u044c\u044f.\u0412 \u0440\u0435\u043b\u0438\u0437 \u0432\u043e\u0448\u043b\u043e \u0431\u043e\u043b\u044c\u0448\u0435 1200 \u043a\u043e\u043c\u043c\u0438\u0442\u043e\u0432 \u043e\u0442 188 \u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u043e\u0440\u043e\u0432, \u0438\u0437 \u043d\u0438\u0445 69 \u043f\u0440\u0438\u0441\u043b\u0430\u043b\u0438 \u0441\u0432\u043e\u0439 \u043f\u0435\u0440\u0432\u044b\u0439 PR.flutter upgrade\u041a\u043e\u0440\u043e\u0442\u043a\u043e \u043e \u0433\u043b\u0430\u0432\u043d\u043e\u043c\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435\u0427\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u043e\u0441\u044c\u041d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 interopFFIgen (Objective-C) \u0438 JNIgen (Java\/Kotlin) \u0441\u0442\u0430\u043b\u0438 stable, \u0443 Pigeon \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0440\u0435\u0436\u0438\u043c native interop (preview)WebWasm-\u0441\u0431\u043e\u0440\u043a\u0438 \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432 Safari 26.2+ \u0438 Firefox 147+ (\u0423\u0440\u0430!), \u043f\u043e\u044f\u0432\u0438\u043b\u0438\u0441\u044c \u0444\u043b\u0430\u0433 &#8212;web-content-hash \u0438 \u043f\u0440\u0435\u0432\u044c\u044e WebParagraph (CanvasKit \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 31% \u043c\u0435\u043d\u044c\u0448\u0435)\u0414\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c\u044b\u0412\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0435 material.dart \u0438 cupertino.dart \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b deprecated, flutter create \u0442\u0435\u043f\u0435\u0440\u044c \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0430 material_uiiOS\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430 \u043a\u0430\u0441\u0430\u043d\u0438\u0439 \u043c\u0435\u043d\u044c\u0448\u0435 \u043d\u0430 \u043e\u0434\u0438\u043d \u043a\u0430\u0434\u0440 (\u221216 \u043c\u0441 \u043d\u0430 60 \u0413\u0446, \u22128 \u043c\u0441 \u043d\u0430 120 \u0413\u0446), \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043e\u0442\u043b\u0430\u0434\u043a\u043e\u0439 \u043d\u0430 iOS 27AndroidRelease-\u0441\u0431\u043e\u0440\u043a\u0438 \u0441\u0442\u0440\u043e\u0436\u0435 \u043e\u0442\u043d\u043e\u0441\u044f\u0442\u0441\u044f \u043a Intent, \u0443\u043b\u0443\u0447\u0448\u0435\u043d HCPP, \u0435\u0441\u0442\u044c opt-in \u0434\u043b\u044f DSL AGP 9EngineSDF-\u0440\u0435\u043d\u0434\u0435\u0440\u0438\u043d\u0433 \u0432 Impeller \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435, texture arrays \u0432\u043e Flutter GPU, \u043c\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 OpenGL\u042d\u043c\u0431\u0435\u0434\u0434\u0435\u0440\u044bVulkan external textures \u0438 FlutterEngineNotifyLowMemoryWarning\u0427\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0415\u0441\u043b\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043c\u0430\u043b\u043e, \u0432\u043e\u0442 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442:iOS\/macOS: \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435 Swift Package Manager, \u0435\u0441\u043b\u0438 \u0435\u0449\u0451 \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0438\u043b\u0438. Trunk CocoaPods \u0441\u0442\u0430\u043d\u0435\u0442 read-only \u0432 \u0434\u0435\u043a\u0430\u0431\u0440\u0435 2026 \u0433\u043e\u0434\u0430.Material\/Cupertino: \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 dart fix &#8212;apply &#8212;code=migrate_design_widgets \u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0434\u0438\u0444\u0444.Android-\u043f\u043b\u0430\u0433\u0438\u043d\u044b: \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u0435 \u043d\u0430 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 Kotlin \u0432 AGP (Built-in Kotlin).Web: \u0441\u043e\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442 \u0441 &#8212;no-deprecated-js-interop \u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435, \u0447\u0442\u043e \u043c\u0435\u0448\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0443 \u043d\u0430 Wasm.Dart: \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0439\u0442\u0435 dart migrate &#8212;dry-run \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u043f\u0430\u043a\u0435\u0442\u0435 (\u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e Dart 3.14).\u041d\u0438\u0436\u0435 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u0443\u043d\u043a\u0442 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e.\u041f\u0440\u044f\u043c\u043e\u0439 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 interop \u0441\u0442\u0430\u043b \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u043c\u041e\u0431 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u043c. \u041a\u043e\u043c\u0430\u043d\u0434\u0430 Flutter \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043b\u0435\u0442 \u0432\u0435\u043b\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 direct native interop: Dart-\u043a\u043e\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c API \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u0431\u0435\u0437 platform channels. \u0412 3.50 \u044d\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u0430 \u0434\u043e\u0448\u043b\u0430 \u0434\u043e production:FFIgen \u0434\u043b\u044f Objective-C \u0441\u0442\u0430\u043b stable. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 C \u0432 \u043d\u0451\u043c \u0431\u044b\u043b\u0430 \u0438 \u0440\u0430\u043d\u044c\u0448\u0435.JNIgen \u0434\u043b\u044f Java \u0438 Kotlin \u0442\u043e\u0436\u0435 \u0441\u0442\u0430\u043b stable.Pigeon \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0440\u0435\u0436\u0438\u043c native interop \u0432 \u0441\u0442\u0430\u0442\u0443\u0441\u0435 preview. \u041f\u043e\u0434 \u043a\u0430\u043f\u043e\u0442\u043e\u043c \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043e\u0431\u0430 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430 \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 \u0442\u0438\u043f\u043e\u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0434\u043b\u044f iOS, macOS \u0438 Android.\u0427\u0435\u043c \u044d\u0442\u043e \u043b\u0443\u0447\u0448\u0435 platform channels? \u041a\u0430\u043d\u0430\u043b \u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u043e \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043a\u0430\u0436\u0434\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435, \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442 \u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 \u0433\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043d\u0430 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u0435. \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443:\u0432\u044b\u0437\u043e\u0432\u044b \u0431\u044b\u0432\u0430\u044e\u0442 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u043d\u044b\u043c\u0438;\u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u0444\u043e\u043d\u043e\u0432\u044b\u0445 \u0438\u0437\u043e\u043b\u044f\u0442\u043e\u0432;\u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u0441\u0447\u0435\u0437\u0430\u044e\u0442.\u041d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0441\u0432\u0435\u0436\u0435\u0433\u043e API iOS \u0438\u043b\u0438 Android \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0436\u0434\u0430\u0442\u044c, \u043f\u043e\u043a\u0430 \u043a\u0442\u043e-\u0442\u043e \u043e\u0431\u0435\u0440\u043d\u0451\u0442 \u0435\u0433\u043e \u0432 \u043f\u043b\u0430\u0433\u0438\u043d. \u0411\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043c\u043e\u0436\u043d\u043e \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c API \u043f\u0440\u044f\u043c\u043e \u0438\u0437 Dart. \u041c\u043e\u0436\u043d\u043e \u043e\u0436\u0438\u0434\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043b\u0430\u0433\u0438\u043d\u044b \u0441\u0442\u0430\u043d\u0443\u0442 \u0442\u043e\u043d\u044c\u0448\u0435: \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0431\u0438\u043d\u0434\u0438\u043d\u0433\u0438 \u043f\u043b\u044e\u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 Dart-API \u043f\u043e\u0432\u0435\u0440\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, shared_preferences \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0432\u0435\u0434\u0451\u043d \u043d\u0430 \u044d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434.\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u0438\u0442 \u0443\u0447\u0430\u0441\u0442\u043d\u0438\u043a\u043e\u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b Early Access: Jon Holtan, Rody Davis, Dominik Roszkowski, Alexander Thiele \u0438 Morgan McKenzie.\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435: \u043d\u043e\u0432\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 Native interop \u0441\u043e\u0431\u0440\u0430\u043b \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0434\u043b\u044f Android, iOS, macOS, Windows \u0438 Linux.WebWasm \u0432 Safari \u0438 Firefox\u0414\u043e \u044d\u0442\u043e\u0433\u043e \u0440\u0435\u043b\u0438\u0437\u0430 Flutter web \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 WebAssembly \u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0442\u043e\u043b\u044c\u043a\u043e \u0432 Chromium-\u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430\u0445: Chrome \u0438 Edge \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\u043e 137-\u0439 \u0432\u0435\u0440\u0441\u0438\u0438. \u0422\u0435\u043f\u0435\u0440\u044c Wasm \u043c\u043e\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0438 \u0432 Safari 26.2+ \u0438 Firefox 147+. \u041f\u043e \u0437\u0430\u043c\u0435\u0440\u0430\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0442\u044f\u0436\u0451\u043b\u044b\u0445 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u044d\u0442\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432\u0434\u0432\u043e\u0435 \u0432\u044b\u0448\u0435 FPS, \u0447\u0435\u043c JS-\u0441\u0431\u043e\u0440\u043a\u0430.\u041a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0430\u0441\u044c, \u043e\u043d\u0430 \u043f\u043e-\u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0441\u0440\u0430\u0437\u0443 \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430, Wasm \u0438 JS:flutter build web &#8212;wasm\u0412 Chrome \u0438 Edge Wasm \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043b\u044f Safari \u0438 Firefox \u0435\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u044f\u0432\u043d\u043e: \u0432 web\/flutter_bootstrap.js \u0434\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0434\u0432\u0438\u0436\u043a\u0438 webkit \u0438 gecko \u0432 wasmAllowList \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 _flutter.loader.load, \u0440\u044f\u0434\u043e\u043c \u0441 blink. \u041f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:{{flutter_js}}{{flutter_build_config}}_flutter.loader.load({  config: {    wasmAllowList: {      blink: true,  \/\/ Chrome, Edge      webkit: true, \/\/ Safari      gecko: true,  \/\/ Firefox    },  },});\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0442\u043e\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0446\u0438\u0438 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043b\u0443\u0447\u0448\u0435 \u0441\u0432\u0435\u0440\u0438\u0442\u044c \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439 \u043f\u043e Wasm. \u0411\u0440\u0430\u0443\u0437\u0435\u0440\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 allow-list \u0438\u043b\u0438 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438, \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0442 JS-\u0441\u0431\u043e\u0440\u043a\u0443.\u0425\u0435\u0448\u0438 \u0432 \u0438\u043c\u0435\u043d\u0430\u0445 \u0444\u0430\u0439\u043b\u043e\u0432: &#8212;web-content-hash\u041a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Flutter web-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u0434\u0430\u0432\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u043e\u043b\u044c\u043d\u043e\u0439 \u0442\u0435\u043c\u043e\u0439. \u041d\u043e\u0432\u044b\u0439 \u0444\u043b\u0430\u0433 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u0445\u0435\u0448 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0433\u043e \u0432 \u0438\u043c\u0435\u043d\u0430 JS-, Wasm-\u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0430\u0441\u0441\u0435\u0442\u043e\u0432 \u0438\u0437 build\/web\/assets\/**, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0441\u044b\u043b\u043a\u0438 \u0432 flutter_bootstrap.js:flutter build web &#8212;wasm &#8212;web-content-hash\u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u043c\u0435\u043b\u043e \u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0430\u0433\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435. \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0438 \u0438\u0437 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438:\u0424\u0430\u0439\u043b\u044bCache-Control\u0411\u0430\u043d\u0434\u043b\u044b \u0438 \u0430\u0441\u0441\u0435\u0442\u044b \u0441 \u0445\u0435\u0448\u0435\u043cmax-age=31536000, immutableindex.html, flutter_bootstrap.jsno-cache\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u043b\u044f nginx:location = \/index.html            { add_header Cache-Control &#171;no-cache&#187;; }location = \/flutter_bootstrap.js  { add_header Cache-Control &#171;no-cache&#187;; }location \/                        { add_header Cache-Control &#171;public, max-age=31536000, immutable&#187;; }\u0412\u043c\u0435\u0441\u0442\u0435 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f precache_manifest.json. \u0415\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a Workbox \u0438\u043b\u0438 \u043a \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c\u0443 service worker. \u041e\u043d \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0435 \u0442\u043e\u043a\u0435\u043d\u044b \u0438\u0437 flutter_service_worker.js.\u0410\u0443\u0434\u0438\u0442 \u0441\u0442\u0430\u0440\u043e\u0433\u043e JS interopdart:html, dart:js, dart:js_util \u0438 package:js \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u043c\u0438, \u043d\u0430 \u0441\u043c\u0435\u043d\u0443 \u0438\u043c \u043f\u0440\u0438\u0448\u043b\u0438 dart:js_interop \u0438 package:web. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0434\u0430\u044e\u0442 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 Wasm, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435\u0440\u0435\u0434\u043a\u043e \u043e\u043d\u0438 \u043f\u0440\u0438\u0445\u043e\u0434\u044f\u0442 \u0438\u0437 \u0442\u0440\u0430\u043d\u0437\u0438\u0442\u0438\u0432\u043d\u044b\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439.\u0427\u0442\u043e\u0431\u044b \u043d\u0430\u0439\u0442\u0438 \u0432\u0441\u0435 \u0442\u0430\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u0444\u043b\u0430\u0433, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a:flutter build web &#8212;no-deprecated-js-interopflutter run -d chrome &#8212;no-deprecated-js-interopflutter test &#8212;platform chrome &#8212;no-deprecated-js-interopWebParagraph: \u0432\u0451\u0440\u0441\u0442\u043a\u0430 \u0442\u0435\u043a\u0441\u0442\u0430 \u0441\u0438\u043b\u0430\u043c\u0438 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 (preview)\u0421\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 Chrome \u0441\u0434\u0435\u043b\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0430\u0441\u043a\u043b\u0430\u0434\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0430. \u041e\u043d \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d \u043d\u0430 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e\u043c Enhanced TextMetrics API: \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0435\u043a\u0441\u0442 \u0440\u0430\u0437\u043c\u0435\u0447\u0430\u0435\u0442 \u0441\u0430\u043c \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u0430 \u043d\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 CanvasKit \u0434\u0432\u0438\u0436\u043e\u043a. \u0427\u0442\u043e \u044d\u0442\u043e \u0434\u0430\u0451\u0442:CanvasKit \u0443\u043c\u0435\u043d\u044c\u0448\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0441 5,46 \u041c\u0411 \u0434\u043e 3,75 \u041c\u0411;\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0440\u0435\u0437\u0435\u0440\u0432\u043d\u044b\u0435 \u0448\u0440\u0438\u0444\u0442\u044b \u043f\u043e \u0441\u0435\u0442\u0438;\u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f \u00ab\u043a\u0432\u0430\u0434\u0440\u0430\u0442\u0438\u043a\u0438\u00bb;\u0446\u0432\u0435\u0442\u043d\u044b\u0435 \u044d\u043c\u043e\u0434\u0437\u0438 \u0440\u0435\u043d\u0434\u0435\u0440\u044f\u0442\u0441\u044f \u043d\u0430\u0442\u0438\u0432\u043d\u043e.\u041f\u043e\u043a\u0430 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u044c\u044e, \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043d\u0438\u043c \u043c\u043e\u0436\u043d\u043e \u0432 issue #172561.Material \u0438 Cupertino: \u043f\u0440\u043e\u0449\u0430\u043d\u0438\u0435 \u0441\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438\u041e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0434\u0438\u0437\u0430\u0439\u043d-\u0441\u0438\u0441\u0442\u0435\u043c \u043e\u0442 \u044f\u0434\u0440\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f. \u041f\u0430\u043a\u0435\u0442\u044b material_ui \u0438 cupertino_ui \u0432\u044b\u0448\u043b\u0438 \u0432 1.0 \u0435\u0449\u0451 \u0432\u043e Flutter 3.47, \u0430 \u0432 3.50 \u0441\u0434\u0435\u043b\u0430\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0448\u0430\u0433:package:flutter\/material.dart \u0438 package:flutter\/cupertino.dart \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u044b deprecated, \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0434\u0435\u043b\u0435\u0433\u0430\u0442\u0430\u043c\u0438 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0437 flutter_localizations;flutter create \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043f\u0440\u043e\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442 package:material_ui.Deprecated \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u043e, \u0441\u0442\u0430\u0440\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u041d\u043e \u043f\u0435\u0440\u0435\u0435\u0437\u0436\u0430\u0442\u044c \u0440\u0430\u043d\u043e \u0438\u043b\u0438 \u043f\u043e\u0437\u0434\u043d\u043e \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0432\u0441\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c. \u0414\u043b\u044f \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043a\u0441:dart fix &#8212;apply &#8212;code=migrate_design_widgets\u0412 \u0442\u0438\u043f\u0438\u0447\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u044b:\u0414\u041e\u041f\u041e\u0421\u041b\u0415import &#8216;package:flutter\/material.dart&#8217;;import &#8216;package:material_ui\/material_ui.dart&#8217;;import &#8216;package:flutter\/cupertino.dart&#8217;;import &#8216;package:cupertino_ui\/cupertino_ui.dart&#8217;;\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435: \u0435\u0441\u043b\u0438 \u0447\u0430\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0435\u0449\u0451 \u043d\u0435 \u043f\u0435\u0440\u0435\u0435\u0445\u0430\u043b\u0430, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u044b\u0439 MaterialUiCompatibilityBridge. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0435\u0441\u0442\u044c \u0432 \u043d\u043e\u0432\u043e\u043c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0435 \u043f\u043e \u043c\u0438\u0433\u0440\u0430\u0446\u0438\u0438.\u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0435 \u0441 \u044d\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0435\u0437\u0434\u043e\u043c: \u0443 DropdownButtonFormField \u0432 material_ui \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e enabled. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043b\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e, \u0430 \u043d\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0435\u0439 onChanged: null.Framework\u0421\u043a\u0440\u043e\u043b\u043b \u0438 \u0441\u043b\u0430\u0439\u0432\u0435\u0440\u044b\u042d\u0442\u043e\u0442 \u0440\u0430\u0437\u0434\u0435\u043b \u043f\u043e\u0447\u0442\u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0441\u0434\u0435\u043b\u0430\u043d \u0441\u0438\u043b\u0430\u043c\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430:SliverClipRect \u0438 SliverClipRRect \u043e\u0431\u0440\u0435\u0437\u0430\u044e\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043b\u0430\u0439\u0432\u0435\u0440\u0430, \u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u0441\u043e \u0441\u043a\u0440\u0443\u0433\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0443\u0433\u043b\u0430\u043c\u0438. \u041e\u043f\u0446\u0438\u044f clipOverlap \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0435 \u0437\u0430\u043a\u0440\u0435\u043f\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430\u043c\u0438. \u0410\u0432\u0442\u043e\u0440 \u2014 Emmanuel Lefebvre Dibon (@manu-sncf).itemExtentBuilder \u0432 ListView.separated. \u0420\u0430\u043d\u044c\u0448\u0435 \u0437\u0430\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043e\u0431\u044b\u0447\u043d\u043e\u043c ListView.builder. \u0410\u0432\u0442\u043e\u0440 \u2014 @Mairramer.ScrollPhysics.shouldUpdate \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0442\u043e\u0447\u043d\u0435\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0444\u0438\u0437\u0438\u043a\u0438 \u0441\u043a\u0440\u043e\u043b\u043b\u0430. \u0422\u043e\u0436\u0435 \u043e\u0442 @Mairramer.RawScrollbar.mouseCursor \u043c\u0435\u043d\u044f\u0435\u0442 \u043a\u0443\u0440\u0441\u043e\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430\u0434 \u043f\u043e\u043b\u0437\u0443\u043d\u043a\u043e\u043c \u0438 \u0434\u043e\u0440\u043e\u0436\u043a\u043e\u0439. \u0410\u0432\u0442\u043e\u0440 \u2014 Soroush Yousefpour (@gabrimatic).\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u044b Scrollable.ensureVisible, overscroll \u0432 SliverFillRemaining \u0438 \u043e\u0431\u0440\u0435\u0437\u043a\u0430 \u0432 TreeSliver.\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 itemExtentBuilder: \u0435\u0441\u043b\u0438 \u0432\u044b\u0441\u043e\u0442\u044b \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b \u0437\u0430\u0440\u0430\u043d\u0435\u0435, \u0434\u0432\u0438\u0436\u043a\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u0440\u044f\u0442\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442, \u0438 \u043f\u0440\u044b\u0436\u043a\u0438 \u043f\u043e \u0434\u043b\u0438\u043d\u043d\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0434\u0435\u0448\u0435\u0432\u043b\u0435.ListView.separated(  itemCount: messages.length,  itemExtentBuilder: (index, dimensions) =&gt;      messages[index].isHeader ? 48 : 72,  separatorBuilder: (_, __) =&gt; const Divider(height: 1),  itemBuilder: (context, index) =&gt; MessageTile(messages[index]),);\u0422\u0435\u043a\u0441\u0442 \u0438 \u0432\u0432\u043e\u0434TextInputType.numberWithOptions \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 password, \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0434\u043b\u044f PIN-\u043a\u043e\u0434\u043e\u0432 \u043d\u0430 Android. \u0410\u0432\u0442\u043e\u0440 \u2014 Alex Li (@AlexV525).\u041d\u043e\u0432\u0430\u044f \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430 \u0430\u0432\u0442\u043e\u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f AutofillHints.emailOTPCode \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u043d\u043e\u0440\u0430\u0437\u043e\u0432\u044b\u0435 \u043a\u043e\u0434\u044b \u0438\u0437 \u043f\u0438\u0441\u0435\u043c.\u041f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435 Hyphens \u0434\u043b\u044f \u043c\u044f\u0433\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u043e\u0432. \u041f\u0440\u0438 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0435 \u0441\u043b\u043e\u0432\u0430 \u043c\u044f\u0433\u043a\u0438\u0439 \u043f\u0435\u0440\u0435\u043d\u043e\u0441 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0434\u0435\u0444\u0438\u0441, \u0438 \u044d\u0442\u043e \u043e\u0434\u043d\u043e \u0438\u0437 breaking changes \u0440\u0435\u043b\u0438\u0437\u0430.\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d \u00ab\u043f\u0440\u044b\u0436\u043e\u043a\u00bb \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0438 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u043c\u0430\u0440\u043a\u0435\u0440\u0430 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f (Nicodemus Lin, @nicolinx).\u0418\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0430 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u0441\u0442\u0440\u0435\u043b\u043a\u0430\u043c\u0438 \u0432 \u043f\u043e\u043b\u044f\u0445 \u0441 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u043e \u0446\u0435\u043d\u0442\u0440\u0443 \u0438 \u043f\u043e \u043f\u0440\u0430\u0432\u043e\u043c\u0443 \u043a\u0440\u0430\u044e (Nickolas de Luca Alberton).\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 PageView \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0435\u0440\u0435\u043b\u0438\u0441\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043c\u0430\u0440\u043a\u0435\u0440\u044b \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u0432 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u043e\u043c LTR\/RTL-\u0442\u0435\u043a\u0441\u0442\u0435.TextField(  keyboardType: const TextInputType.numberWithOptions(password: true),  autofillHints: const [AutofillHints.emailOTPCode],  obscureText: true,);\u0418\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430placeholder \u0432 DecorationImage (Kishan Rathore, @rkishan516).FadeInImageTransition.fadeInOver (Anas Saifi, @anazr9).useLogicalSize \u0432 ResizeImage \u0438 useLogicalCacheSize \u0432 Image (Koji Wakamiya, @koji-1009).blendMode \u0432 RawImage (Ishaq Hassan, @ishaquehassan).\u041f\u043b\u0430\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 BoxBorder.HSVColor.lerp \u0438 HSLColor.lerp \u0442\u0435\u043f\u0435\u0440\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u0438\u0440\u0443\u044e\u0442 \u043e\u0442\u0442\u0435\u043d\u043e\u043a \u043f\u043e \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0439 \u0434\u0443\u0433\u0435 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0433\u043e \u043a\u0440\u0443\u0433\u0430. \u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043e\u0442 \u043a\u0440\u0430\u0441\u043d\u043e\u0433\u043e \u043a \u043f\u0443\u0440\u043f\u0443\u0440\u043d\u043e\u043c\u0443 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0447\u0435\u0440\u0435\u0437 \u0432\u0441\u044e \u0440\u0430\u0434\u0443\u0433\u0443.\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u0438&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-502850","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502850","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=502850"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/502850\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=502850"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=502850"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=502850"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}