{"id":320323,"date":"2021-03-26T15:00:58","date_gmt":"2021-03-26T15:00:58","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=320323"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=320323","title":{"rendered":"\u041a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0438 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043b\u044f Flutter"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0447\u0438\u043a\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c. \u0423\u0436 \u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435 &#8212; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043c, \u0447\u0435\u043c \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435. \u041c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0435 &#8212; \u0435\u0441\u043b\u0438 \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u043c\u043e\u0436\u0435\u0448\u044c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0441, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442 &#8212; \u0442\u043e \u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044f &#171;\u043d\u0430\u043f\u043e\u043a\u0430\u0437&#187; \u0441\u0432\u043e\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b &#8212; \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0445 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u043a\u0440\u0430\u0441\u0438\u0442\u044c. \u0421\u043c\u0430\u0437\u0430\u0442\u044c \u0446\u0435\u043f\u044c. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044e \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441\u0430 (\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u043c\u0435\u043d\u044f, \u043d\u0435\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0445 \u0441\u043b\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043d\u044b\u0445 \u0434\u0435\u043b \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u043e Flutter?<\/h4>\n<p>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 &#8212; \u0441 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a>. \u0411\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 &#8212; \u0441 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u041a\u0441\u0442\u0430\u0442\u0438 &#8212; \u0432\u043e\u0442 <a href=\"https:\/\/flutter.dev\/docs\/development\/packages-and-plugins\/developing-packages\" rel=\"noopener noreferrer nofollow\">\u043e\u043d\u0430<\/a>. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u0432\u043e Flutter \/ Dart \u043f\u0430\u043a\u0435\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e &#8212; \u043f\u0430\u043a\u0435\u0442 (Dart package)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d (Plugin package)<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0443 \u043d\u0438\u0445 \u0442\u0430\u043a\u0438\u0435: \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e Dart-\u043a\u043e\u0434 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 Flutter. \u041f\u043b\u0430\u0433\u0438\u043d\u044b &#8212; \u044d\u0442\u043e \u043f\u0430\u043a\u0435\u0442\u044b, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u0441\u0432\u044f\u0437\u044c \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c Java \/ Kotlin, Objective-C \/ Swift \u0438 \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u043e\u0440, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0438 C++ \/ \u0421 \/ etc, \u0442\u0430\u043a \u043a\u0430\u043a Flutter \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 \u0437\u0435\u043c\u043b\u0438 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043e\u0432. \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0442\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0448\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0448\u044c \u0442\u0435 \u0436\u0435 \u043f\u043b\u044e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 FFI. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e &#8212; \u043a \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u043b\u0438. \u0414\u0430\u043b\u0435\u0435 &#8212; \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c &#8212; <strong>\u043f\u0430\u043a\u0435\u0442<\/strong>, \u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u044b.<\/p>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u043d\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 &#8212; \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041a\u0430\u043a \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0442\u0430 \u0436\u0435 \u0434\u043e\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">flutter create --template=package my_package_name # or flutter create --template=plugin my_plugin_name<\/code><\/pre>\n<p>\u042f \u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 IDE, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043c, \u043a\u0442\u043e \u0441\u0438\u0434\u0438\u0442 \u043d\u0430 Android Studio \/ IDEA, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/55b\/446\/2d8\/55b4462d8635170cba61ce2e9d218861.png\" width=\"1160\" height=\"1034\"><figcaption><\/figcaption><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c Flutter \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b (\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e &#8212; \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/9212-flutter\" rel=\"noopener noreferrer nofollow\">Flutter<\/a> + <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6351-dart\" rel=\"noopener noreferrer nofollow\">Dart<\/a> \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d8\/273\/a10\/7d8273a101b0f6141b4a4acb7d6b5454.png\" width=\"2356\" height=\"1522\"><figcaption><\/figcaption><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#8212; Plugin \/ Package (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447)<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/880\/ad9\/dc9\/880ad9dc9f9a430beacf7f83f48a204d.png\" width=\"2356\" height=\"1562\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u043d, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/p>\n<h3>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0430\u043a\u0435\u0442 &#8212; \u043a\u0430\u043a \u0435\u0433\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c?<\/h3>\n<p>\u041d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u0441\u044c, \u043a\u043e\u0432\u0431\u043e\u0439! \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0449\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>\u0422\u0432\u043e\u0439 <em>\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 (\u043f\u043e\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a>)<\/p>\n<\/li>\n<li>\n<p>\u0422\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f-\u0431\u044b \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>CHANGELOG.md<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b\u0438\u043a <code>LICENCE<\/code> \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d<\/p>\n<\/li>\n<li>\n<p><code>pubspec.yaml<\/code> \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u043d\u0430 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439 \u043f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u043d\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h4>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0412\u0441\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>\/\/\/<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0442\u0432\u043e\u0435\u0439 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"dart\">\/\/\/ Describes a one cell of animated text:   \/\/\/ We change \"100\" to \"250\"   \/\/\/ Then, we have 3 animated tokens in not reversed flow:   \/\/\/  1th  2th 3th   \/\/\/ | 2 | 5 | _ |   \/\/\/ | 1 | 0 | 0 |   \/\/\/ | _ | _ | _ |   class AnimatedToken {     AnimatedToken({     @required this.top,     @required this.center,     @required this.bottom,     @required this.direction,     @required this.topSize,     @required this.centerSize,     @required this.bottomSize,     this.axisY,     this.axisYOld,     this.axisX,     this.axisXTween,     this.opacity,     this.opacityOld,     });        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String top;        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String center;        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String bottom;        \/\/\/ Describes in which direction this token will move     final Direction direction;        \/\/\/ Size of top letter     final Size topSize;        \/\/\/ Size of center letter     final Size centerSize;        \/\/\/ Size of bottom letter     final Size bottomSize;        \/\/\/ Animation in Y axis for new letter     Animation&lt;double&gt; axisY;        \/\/\/ Animation in Y axis for old letter     Animation&lt;double&gt; axisYOld;        \/\/\/ Animation in X axis for the same letter (old == new)     Animation&lt;double&gt; axisX;        Tween&lt;double&gt; axisXTween;        \/\/\/ If token is Direction.bottom - opacity ween will be from     \/\/\/ If Direction.top - 0 -&gt; 1   Animation&lt;double&gt; opacity;        \/\/\/ If token is Direction.bottom - opacity ween will be from     \/\/\/ If Direction.top - 0 -&gt; 1   Animation&lt;double&gt; opacityOld;        @override     String toString() =&gt; '''AnimatedToken {    \t\ttop: $top -&gt; $topSize    \t\tcenter: $center -&gt; $centerSize    \t\tbottom: $bottom -&gt; $bottomSize    \t\tdirection: $direction    }''';   }<\/code><\/pre>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438 \u0441\u0430\u043c\u043e\u043c\u0443, \u0441\u043f\u0443\u0441\u0442\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0447\u0442\u043e \u0442\u0443\u0442 \u043a \u0447\u0435\u043c\u0443, \u043d\u043e \u043e\u043d\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438 \u044e\u0437\u0435\u0440\u0430\u043c \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u043e\u0439 \u0436\u0435 IDEA \/ AS \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u043a\u043e\u0434\u0443 \u043f\u043e \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0440\u0430 (\u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0432 VSCode).<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d16\/6d4\/946\/d166d4946ee8290a43ea53a52ca6e13e.png\" width=\"1684\" height=\"356\"><figcaption><\/figcaption><\/figure>\n<p>\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>dart fmt<\/code> &#8212; \u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0435\u0440 \u043a\u043e\u0434\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <a href=\"https:\/\/pub.dev\/packages\/pedantic\" rel=\"noopener noreferrer nofollow\">pedantic<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/pub.dev\/packages\/effective_dart\" rel=\"noopener noreferrer nofollow\">effective_dart<\/a> (\u043b\u0438\u0447\u043d\u043e \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e pedantic, \u0442.\u043a. \u043e\u043d \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438). \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u043d\u0435\u043c \u043d\u0430\u0448\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"vbscript\">include: package:pedantic\/analysis_options.yaml<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u043e\u0434, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \/ \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043b\u0438\u043d\u0442\u0435\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 <a href=\"https:\/\/dart-lang.github.io\/linter\/lints\/index.html\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442<\/a> \u0438 <a href=\"https:\/\/dart.dev\/guides\/language\/analysis-options\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442<\/a> \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u041a \u0441\u043b\u043e\u0432\u0443, \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043b\u0438\u043d\u0442\u0435\u0440\u0430, \u043d\u043e \u0438 \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u044f\u0437\u044b\u043a\u0430 (\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438). \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 \u0431\u043b\u043e\u043a\u0435:<\/p>\n<pre><code class=\"vbscript\">include: package:pedantic\/analysis_options.yaml      analyzer:     strong-mode:       implicit-dynamic: false       implicit-casts: false     errors:       todo: ignore       mixin_inherits_from_not_object: ignore       sdk_version_async_exported_from_core: ignore       missing_required_param: error       division_optimization: error       must_call_super: error       always_put_required_named_parameters_first: error       avoid_positional_boolean_parameters: error       unnecessary_await_in_return: error       invalid_use_of_protected_member: error       # ...    linter:     rules:     # ...<\/code><\/pre>\n<p>\u0412\u043e\u0442 <a href=\"https:\/\/github.com\/dart-lang\/sdk\/blob\/3c55d8bb3ebaeddab2f1d577c4371ed149075242\/pkg\/analyzer\/lib\/error\/error.dart\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a> \u0435\u0441\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \/ \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u043a, \u0441\u043b\u043e\u0432\u043d\u043e \u0442\u044b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u0430\u043d\u044c\u044f\u043a &#8212; \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 warning&#8217;\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a <code>@protected<\/code> \u043f\u043e\u043b\u044f\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0442\u0432\u043e\u0439 \u043a\u043e\u0434, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0437\u0430\u0441\u0438\u044f\u0435\u0442 &#8212; \u0442\u044b \u0443\u0432\u0438\u0434\u0438\u0448\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u043b\u044e\u0441 &#8212; \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IDE \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0433\u0434\u0435-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0432\u0430 \u043f\u0440\u043e\u0431\u0435\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0444\u0438\u0433\u0443\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u0432\u0438\u0441\u0438\u0442 \u043d\u0435 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1ae\/f02\/b8b\/1aef02b8b222413d81295d4b785c79f0.png\" width=\"2992\" height=\"2282\"><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0438\u0436\u0435:<\/p>\n<p>1. \u0421\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/83d\/eb4\/bf9\/83deb4bf937ef5d959db0b4bcfe89510.png\" width=\"1588\" height=\"450\"><figcaption><\/figcaption><\/figure>\n<p>2. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u044d\u0442\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 example \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u043e, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0432\u043e\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/259\/7db\/53e\/2597db53ec25fff21ca15f4c78b559a5.png\" width=\"1590\" height=\"498\"><figcaption><\/figcaption><\/figure>\n<p>3. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0421 \u044d\u0442\u0438\u043c \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 Web &#8212; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0431\u0430\u043b\u043b\u044b \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0422\u0430\u043a\u0436\u0435, \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e &#8212; \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 Flutter 2 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u043e\u0431 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435, \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0442\u043e\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0441 null-safety (\u043f\u0440\u0438 Dart &gt;= 2.12)<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0e0\/64c\/781\/0e064c781ed7ce2b399b651f2dc3b281.png\" width=\"1578\" height=\"256\"><figcaption><\/figcaption><\/figure>\n<p>4. \u041f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0435\u0440\u0430<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d8e\/20e\/823\/d8e20e82358bece7254aee8555fdff1b.png\" width=\"1582\" height=\"542\"><figcaption><\/figcaption><\/figure>\n<p>5. \u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 &#8212; \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 &#8212; \u043a\u0430\u043a \u043c\u043e\u0442\u0438\u0432\u0430\u0442\u043e\u0440 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/eb1\/5eb\/db9\/eb15ebdb9737343949c1134509c7a2d3.png\" width=\"1596\" height=\"872\"><figcaption><\/figcaption><\/figure>\n<h4>Changelog<\/h4>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438) \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"vbscript\">## [1.1.0] - Add opacity sub-animation for tokens and curves manipulation   ## [1.0.1] - Add demo gif and update readme   ## [1.0.0] - First release<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<h4>License<\/h4>\n<p>\u0412\u0441\u0435 \u0442\u043e\u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e. \u0418\u0434\u0435\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 &#8212; <a href=\"https:\/\/docs.github.com\/en\/github\/creating-cloning-and-archiving-repositories\/licensing-a-repository#detecting-a-license\" rel=\"noopener noreferrer nofollow\">\u0441\u044e\u0434\u0430<\/a>. \u0418\u0449\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e, \u0431\u0435\u0440\u0435\u043c \u0435\u0435 \u0442\u0435\u043a\u0441\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e.<\/p>\n<h4>Pubspec<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/dart.dev\/tools\/pub\/pubspec\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a> \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 (\u0432 \u043d\u0435\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044f):<\/p>\n<pre><code class=\"vbscript\">name: anitex   description: Anitex is a implicitly animated text widget, which animates on passed text changes   version: 1.2.0      repository: https:\/\/github.com\/alphamikle\/anitex   homepage: https:\/\/github.com\/alphamikle\/anitex      environment:     sdk: \"&gt;=2.7.0 &lt;3.0.0\"     flutter: \"&gt;=1.17.0 &lt;2.0.0\"      dependencies:     flutter:     sdk: flutter      dev_dependencies:     flutter_test:     sdk: flutter     pedantic: ^1.9.2      flutter:<\/code><\/pre>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/h4>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">pub publish<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<pre><code class=\"bash\">... ... Package validation found the following potential issue: * .\/CHANGELOG.md doesn't mention current version (2.0.0).   Consider updating it with notes on this version prior to publication.  Publishing is forever; packages cannot be unpublished. Policy details are available at https:\/\/pub.dev\/policy  Package has 1 warning.. Do you want to publish anitex 2.0.0 (y\/N)? <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043e\u0442\u0447\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0441\u0435 \u043e\u043a &#8212; \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u0430\u043a\u0435\u0442\u043e\u043c, \u0430 \u0437\u043d\u0430\u0447\u0438\u0442 \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u0434\u043d\u043e\u0437\u043d\u0430\u0447\u043d\u043e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043f\u043e\u044d\u0442\u043e\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u0440\u0443\u043a\u0430 \u043d\u0435 \u0441\u043e\u0440\u0432\u0430\u043b\u0430\u0441\u044c, \u043d\u0430\u0436\u0430\u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e <code>y<\/code> &#8212; \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439<\/p>\n<pre><code class=\"bash\">pub publish --dry-run<\/code><\/pre>\n<p>\u041e\u043d\u0430 \u043f\u043e\u043a\u0430\u0436\u0435\u0442 \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043b\u0438\u0431\u043e \u0438\u0445 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u0435, \u043a\u0430\u043a \u0442\u0443\u0442:<\/p>\n<pre><code class=\"bash\">... ... Package has 0 warnings.<\/code><\/pre>\n<p>\u0418 \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u0443\u0432\u0438\u0434\u0438\u0448\u044c \u0437\u0430\u0432\u0435\u0442\u043d\u044b\u0435 <code>0 warnings<\/code> &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u043c\u043e\u0436\u043d\u043e \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442. \u041a\u0430\u043a\u0438\u0435 \u0435\u0449\u0435 \u0435\u0441\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b? \u041d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a> (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 Google). \u0410 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0442\u0435\u0431\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0443\u0436\u0435 \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438.<\/p>\n<h4>\u042d\u0442\u043e \u043d\u0430\u0432\u0435\u0447\u043d\u043e<\/h4>\n<p>\u0414\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043d\u0438\u043a\u0442\u043e \u0438 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0442\u0432\u043e\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c (\u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435 \u0442\u0430\u043a), \u0433\u0443\u0433\u043b \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438\u0437 pub.dev (\u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443, \u043d\u043e \u044f \u043d\u0435 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b). \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0442\u044b \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u043b \u043e\u0448\u0438\u0431\u043a\u0443 &#8212; \u0442\u043e \u0442\u044b \u043c\u043e\u0436\u0435\u0448\u044c \u043f\u043e\u043c\u0435\u0442\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u043a\u0430\u043a &#171;\u041d\u0435\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0439&#187;. \u0423 \u043d\u0435\u0433\u043e \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u044f\u0440\u043a\u0430\u044f \u043f\u043b\u0430\u0448\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0431\u0443\u0434\u0435\u0442 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0432\u0441\u0435\u043c \u0442\u0432\u043e\u0438\u043c \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0444\u0430\u043d\u0430\u0442\u0430\u043c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0442\u0432\u043e\u0435\u0433\u043e \u0443\u043c\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0437\u0430\u0439\u0442\u0438 \u0435\u0449\u0435 \u0434\u0430\u043b\u044c\u0448\u0435 \u0438 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <em>Unlisted<\/em> &#8212; \u043e\u043d \u0432\u044b\u043f\u0430\u0434\u0435\u0442 \u0438\u0437 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0441\u043a\u0430, \u043d\u043e \u043f\u043e \u043f\u0440\u0435\u0436\u043d\u0435\u043c\u0443 \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u043f\u0440\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0438\u0441\u043a\u0435 &#8212; \u044d\u0442\u043e \u043d\u0435\u0447\u0442\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c \u0438 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u0430\u0434\u043c\u0438\u043d\u043a\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0432\u043e\u0438\u043c\u0438 \u043f\u0430\u043a\u0435\u0442\u0430\u043c\u0438 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e publisher &#8212; \u043d\u0435\u043a\u043e\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0435 \u043b\u0438\u0446\u043e, \u043e\u0442 \u0438\u043c\u0435\u043d\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0443\u0442 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u043f\u0430\u043a\u0435\u0442\u044b. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438 \/ \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0439, \u043d\u043e \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0441\u043e\u0431\u044b\u0445 \u043f\u0440\u043e\u0444\u0438\u0442\u043e\u0432 \u043d\u0435 \u0434\u0430\u0435\u0442 (\u0434\u0430\u0435\u0442 \u043b\u044b\u0447\u043a\u0443). \u0415\u0449\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0438\u043a\u0443\u043f\u0438\u0442\u044c \u0434\u043e\u043c\u0435\u043d \u0432 <strong>.dev<\/strong> \u0437\u043e\u043d\u0435 <em>(\u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u043d\u0435\u0439)<\/em>, \u043a \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 publisher \u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u044f\u0437\u0430\u043d.<\/p>\n<h3>\u0427\u0442\u043e \u0435\u0449\u0435?<\/h3>\n<p>\u041f\u0430\u043a\u0435\u0442 \u0442\u044b \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043b &#8212; \u0441\u043e\u0431\u0440\u0430\u043b 110 \u0438\u043b\u0438 130 \u0431\u0430\u043b\u043b\u043e\u0432, \u043d\u043e \u0435\u0433\u043e \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442&#8230; \u0422\u0443\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435 &#8212; \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435. \u041c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u0440\u0438\u0432\u043e\u0434\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u044f \u0432 \u0434\u0435\u0442\u0430\u043b\u044f\u0445, \u043f\u043e\u0447\u0435\u043c\u0443 \u043e\u043d \u043b\u0443\u0447\u0448\u0435 \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u041d\u0430 \u0440\u0435\u0441\u0443\u0440\u0441\u0435 \u043d\u0430 \u0431\u0443\u043a\u0432\u0443 <strong>M<\/strong> \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u043f\u043b\u0430\u043d\u0430. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0447\u0430\u0442\u044c, \u0445\u043e\u0442\u044f \u0431\u044b, \u0441 \u043a\u043e\u043b\u043b\u0435\u0433 \u0438\u043b\u0438, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u0432 \u0441\u0435\u0431\u0435 \u0438 \u0441\u0432\u043e\u0435\u043c \u0440\u0435\u0448\u0435\u043d\u0438\u0438 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432 \u0440\u0430\u0431\u043e\u0447\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u041f\u043e\u0441\u043b\u0435 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043f\u044b\u0442\u0430\u0442\u044c \u0443\u0434\u0430\u0447\u0443 \u0438 \u043f\u043e\u0434\u0430\u0442\u044c\u0441\u044f, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8212; <a href=\"https:\/\/github.com\/Solido\/awesome-flutter\" rel=\"noopener noreferrer nofollow\">\u0441\u044e\u0434\u0430<\/a>. \u042d\u0442\u043e \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 open source \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0434\u043b\u044f Flutter, \u0438 \u0442\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0438 \u0442\u0432\u043e\u0439 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442!<\/p>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<p>\u0418\u0445 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u043c\u043d\u043e\u0433\u043e &#8212; \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u0432 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u0435 Flutter \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u0430 \u0441\u0430\u043c\u0430 \u0438\u0434\u0435\u044f \u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0447\u0435\u043d\u044c \u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u0430, \u0438, \u043a\u0430\u043a \u043f\u043e \u043c\u043d\u0435 &#8212; <em>\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430<\/em>, \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0443\u043c\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0442\u0440\u0443\u0434\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438 \u0431\u0443\u0434\u0435\u0442 \u0432\u0435\u0441\u044c\u043c\u0430 \u0441\u043f\u0440\u0430\u0432\u0435\u0434\u043b\u0438\u0432\u044b\u043c &#8212; \u0432\u043d\u0435\u0441\u0442\u0438 \u0438 \u0441\u0432\u043e\u044e \u043b\u0435\u043f\u0442\u0443. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u0438 \u0442\u0435\u0431\u0435, \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u0434\u0440\u0443\u0433 &#8212; \u043d\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0438\u0437 open source \u043a\u043e\u043c\u044c\u044e\u043d\u0438\u0442\u0438, \u043d\u043e\u0432\u044b\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0432 \u043f\u043e\u0438\u0441\u043a\u0435 \u0440\u0430\u0431\u043e\u0442\u044b (\u043c\u043d\u043e\u0433\u0438\u0435 HR&#8217;\u044b \u0438\u0449\u0443\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0432 \u0443\u0436\u0435 \u0438 \u043d\u0430 GitHub), \u0434\u0430 \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0441\u0435\u0431\u044f, \u043a\u0430\u043a \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430.<\/p>\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\/post\/548594\/\"> https:\/\/habr.com\/ru\/post\/548594\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<p>\u0414\u0443\u043c\u0430\u044e, \u043c\u043d\u043e\u0433\u0438\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0447\u0438\u043a\u0438 \u0445\u043e\u0442\u044f \u0431\u044b \u0440\u0430\u0437 \u0432 \u0436\u0438\u0437\u043d\u0438 \u0445\u043e\u0442\u0435\u043b\u0438 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c\u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c. \u0423\u0436 \u0442\u043e\u0447\u043d\u043e \u0432\u0441\u0435 &#8212; \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043c, \u0447\u0435\u043c \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435. \u041c\u043e\u0435 \u043c\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 \u044d\u0442\u043e\u0442 \u0441\u0447\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a\u043e\u0435 &#8212; \u0435\u0441\u043b\u0438 \u0442\u044b \u0434\u0435\u043b\u0430\u0435\u0448\u044c \u0447\u0442\u043e-\u0442\u043e \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u0438 \u043c\u043e\u0436\u0435\u0448\u044c \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u044d\u0442\u0438\u043c \u043c\u043e\u0433\u043b\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u0435 \u0441, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u0442\u0440\u0443\u0434\u043e\u0437\u0430\u0442\u0440\u0430\u0442 &#8212; \u0442\u043e \u0434\u0435\u043b\u0430\u0439 \u044d\u0442\u043e. \u041a \u0442\u043e\u043c\u0443 \u0436\u0435, \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u044f &#171;\u043d\u0430\u043f\u043e\u043a\u0430\u0437&#187; \u0441\u0432\u043e\u0438 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u044b &#8212; \u0442\u0430\u043a \u0438\u043b\u0438 \u0438\u043d\u0430\u0447\u0435, \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0438\u0445 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u043a\u0440\u0430\u0441\u0438\u0442\u044c. \u0421\u043c\u0430\u0437\u0430\u0442\u044c \u0446\u0435\u043f\u044c. \u0410 \u0437\u043d\u0430\u0447\u0438\u0442 \u0438 \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u0430\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0431\u043e\u043b\u0435\u0435 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c. \u041d\u0435 \u0431\u0443\u0434\u0443 \u0443\u0433\u043b\u0443\u0431\u043b\u044f\u0442\u044c\u0441\u044f \u0432 \u0444\u0438\u043b\u043e\u0441\u043e\u0444\u0438\u044e \u043e\u043f\u0435\u043d-\u0441\u043e\u0440\u0441\u0430 (\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u0435 \u043c\u0435\u043d\u044f, \u043d\u0435\u043b\u044e\u0431\u0438\u0442\u0435\u043b\u0438 \u0430\u043d\u0433\u043b\u0438\u0439\u0441\u043a\u0438\u0445 \u0441\u043b\u043e\u0432, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u043f\u043e \u0440\u0443\u0441\u0441\u043a\u0438), \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043a \u0434\u0435\u043b\u0443.<\/p>\n<h4>\u0421 \u0447\u0435\u0433\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u043f\u0443\u0442\u044c \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434\u043d\u044b\u0445 \u0434\u0435\u043b \u043c\u0430\u0441\u0442\u0435\u0440\u0430 \u0432\u043e Flutter?<\/h4>\n<p>\u041a\u0440\u0430\u0442\u043a\u0438\u0439 \u043e\u0442\u0432\u0435\u0442 &#8212; \u0441 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a>. \u0411\u043e\u043b\u0435\u0435 \u0434\u043b\u0438\u043d\u043d\u044b\u0439 &#8212; \u0441 \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u0441 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439. \u041a\u0441\u0442\u0430\u0442\u0438 &#8212; \u0432\u043e\u0442 <a href=\"https:\/\/flutter.dev\/docs\/development\/packages-and-plugins\/developing-packages\" rel=\"noopener noreferrer nofollow\">\u043e\u043d\u0430<\/a>. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 &#8212; \u0432\u043e Flutter \/ Dart \u043f\u0430\u043a\u0435\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e &#8212; \u043f\u0430\u043a\u0435\u0442 (Dart package)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043b\u0430\u0433\u0438\u043d (Plugin package)<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0442\u043b\u0438\u0447\u0438\u044f \u0443 \u043d\u0438\u0445 \u0442\u0430\u043a\u0438\u0435: \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0442\u043e\u043b\u044c\u043a\u043e Dart-\u043a\u043e\u0434 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 Flutter. \u041f\u043b\u0430\u0433\u0438\u043d\u044b &#8212; \u044d\u0442\u043e \u043f\u0430\u043a\u0435\u0442\u044b, \u0438\u043c\u0435\u044e\u0449\u0438\u0435 \u0441\u0432\u044f\u0437\u044c \u0441 \u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c Java \/ Kotlin, Objective-C \/ Swift \u0438 \u0441 \u043d\u0435\u0434\u0430\u0432\u043d\u0438\u0445 \u043f\u043e\u0440, \u043f\u043e\u0436\u0430\u043b\u0443\u0439, \u0441\u044e\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0438 C++ \/ \u0421 \/ etc, \u0442\u0430\u043a \u043a\u0430\u043a Flutter \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0441\u0442\u0443\u043f\u0438\u043b \u043d\u0430 \u0437\u0435\u043c\u043b\u0438 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043e\u0432. \u0415\u0441\u0442\u044c \u0435\u0449\u0435 \u0442\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u0446\u0438\u0438, \u043a\u043e\u0433\u0434\u0430 \u0442\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0448\u044c \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u043a\u0430\u043a \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0448\u044c \u0442\u0435 \u0436\u0435 \u043f\u043b\u044e\u0441\u044b \u0447\u0435\u0440\u0435\u0437 FFI. \u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e &#8212; \u043a \u043f\u043b\u0430\u0433\u0438\u043d\u0430\u043c. \u041d\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0432 \u0440\u0430\u0437\u0440\u0435\u0437\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u044d\u0442\u043e \u043d\u0435 \u0438\u0433\u0440\u0430\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u043e\u043b\u0438. \u0414\u0430\u043b\u0435\u0435 &#8212; \u043e\u0431\u0430 \u044d\u0442\u0438\u0445 \u0442\u0438\u043f\u0430 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0441\u043b\u043e\u0432\u043e\u043c &#8212; <strong>\u043f\u0430\u043a\u0435\u0442<\/strong>, \u0431\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u043f\u043e\u0434\u0442\u0438\u043f\u044b.<\/p>\n<p>\u041d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u043d\u0442\u0440\u043e \u043f\u0440\u043e\u0432\u0435\u043b\u0438 &#8212; \u0438\u0434\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435. \u041a\u0430\u043a \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0442\u0430 \u0436\u0435 \u0434\u043e\u043a\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<pre><code class=\"bash\">flutter create --template=package my_package_name # or flutter create --template=plugin my_plugin_name<\/code><\/pre>\n<p>\u042f \u0436\u0435 \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0441\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044f\u043c\u0438 IDE, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0442\u0435\u043c, \u043a\u0442\u043e \u0441\u0438\u0434\u0438\u0442 \u043d\u0430 Android Studio \/ IDEA, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<ol>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0435\u043c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"2\">\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c Flutter \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043e\u0441\u043d\u043e\u0432\u044b (\u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u043e &#8212; \u0432\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/9212-flutter\" rel=\"noopener noreferrer nofollow\">Flutter<\/a> + <a href=\"https:\/\/plugins.jetbrains.com\/plugin\/6351-dart\" rel=\"noopener noreferrer nofollow\">Dart<\/a> \u043f\u043b\u0430\u0433\u0438\u043d\u044b<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<ol start=\"3\">\n<li>\n<p>\u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0442\u0438\u043f \u043f\u0440\u043e\u0435\u043a\u0442\u0430 &#8212; Plugin \/ Package (\u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0441\u0432\u043e\u0438\u0445 \u0437\u0430\u0434\u0430\u0447)<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041e\u0442\u043b\u0438\u0447\u043d\u043e. \u041f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u043d, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435?<\/p>\n<h3>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0430\u043a\u0435\u0442 &#8212; \u043a\u0430\u043a \u0435\u0433\u043e \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c?<\/h3>\n<p>\u041d\u0435 \u0442\u043e\u0440\u043e\u043f\u0438\u0441\u044c, \u043a\u043e\u0432\u0431\u043e\u0439! \u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442, \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u043c\u043d\u0438\u0442\u044c \u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0449\u0430\u0445:<\/p>\n<ul>\n<li>\n<p>\u0422\u0432\u043e\u0439 <em>\u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439<\/em> \u043f\u0430\u043a\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u0442\u0430\u043a\u043e\u0432\u044b\u043c \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430 (\u043f\u043e\u043a\u0430 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a>)<\/p>\n<\/li>\n<li>\n<p>\u0422\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0445\u043e\u0442\u044f-\u0431\u044b \u043a\u0430\u043a\u0438\u043c-\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u043a \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0443 \u043a\u043e\u0434\u0430<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0444\u0430\u0439\u043b\u0435 <code>CHANGELOG.md<\/code><\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c\u0441\u044f &#8212; \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u0431\u043e\u0442\u043b\u0438\u0432\u043e \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u0432 \u043a\u043e\u0440\u0435\u043d\u044c \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0444\u0430\u0439\u043b\u0438\u043a <code>LICENCE<\/code> \u0441 \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d<\/p>\n<\/li>\n<li>\n<p><code>pubspec.yaml<\/code> \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<\/li>\n<li>\n<p>\u0412\u0441\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u044b \u043d\u0430 <a href=\"https:\/\/pub.dev\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a><\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439 \u043f\u0440\u043e\u0439\u0434\u0435\u043c\u0441\u044f \u043f\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u043d\u0435 \u043f\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h4>\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430<\/h4>\n<p>\u0412\u0441\u0435 \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0446\u0435\u043d\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f\u043c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0438\u0445 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u0432\u043e\u0435\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435<\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <code>\/\/\/<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0433\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0442\u0432\u043e\u0435\u0439 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<pre><code class=\"dart\">\/\/\/ Describes a one cell of animated text:   \/\/\/ We change \"100\" to \"250\"   \/\/\/ Then, we have 3 animated tokens in not reversed flow:   \/\/\/  1th  2th 3th   \/\/\/ | 2 | 5 | _ |   \/\/\/ | 1 | 0 | 0 |   \/\/\/ | _ | _ | _ |   class AnimatedToken {     AnimatedToken({     @required this.top,     @required this.center,     @required this.bottom,     @required this.direction,     @required this.topSize,     @required this.centerSize,     @required this.bottomSize,     this.axisY,     this.axisYOld,     this.axisX,     this.axisXTween,     this.opacity,     this.opacityOld,     });        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String top;        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String center;        \/\/\/ | top |     \/\/\/ | center |   \/\/\/ | bottom |   final String bottom;        \/\/\/ Describes in which direction this token will move     final Direction direction;        \/\/\/ Size of top letter     final Size topSize;        \/\/\/ Size of center letter     final Size centerSize;        \/\/\/ Size of bottom letter     final Size bottomSize;        \/\/\/ Animation in Y axis for new letter     Animation&lt;double&gt; axisY;        \/\/\/ Animation in Y axis for old letter     Animation&lt;double&gt; axisYOld;        \/\/\/ Animation in X axis for the same letter (old == new)     Animation&lt;double&gt; axisX;        Tween&lt;double&gt; axisXTween;        \/\/\/ If token is Direction.bottom - opacity ween will be from     \/\/\/ If Direction.top - 0 -&gt; 1   Animation&lt;double&gt; opacity;        \/\/\/ If token is Direction.bottom - opacity ween will be from     \/\/\/ If Direction.top - 0 -&gt; 1   Animation&lt;double&gt; opacityOld;        @override     String toString() =&gt; '''AnimatedToken {    \t\ttop: $top -&gt; $topSize    \t\tcenter: $center -&gt; $centerSize    \t\tbottom: $bottom -&gt; $bottomSize    \t\tdirection: $direction    }''';   }<\/code><\/pre>\n<p>\u041d\u0435 \u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c, \u0447\u0442\u043e \u0442\u0430\u043a\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438 \u0441\u0430\u043c\u043e\u043c\u0443, \u0441\u043f\u0443\u0441\u0442\u044f \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0432\u0440\u0435\u043c\u044f, \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c \u0447\u0442\u043e \u0442\u0443\u0442 \u043a \u0447\u0435\u043c\u0443, \u043d\u043e \u043e\u043d\u0430 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0438 \u044e\u0437\u0435\u0440\u0430\u043c \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0442\u043e\u0439 \u0436\u0435 IDEA \/ AS \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a \u043a\u043e\u0434\u0443 \u043f\u043e \u043d\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044e \u043a\u0443\u0440\u0441\u043e\u0440\u0430 (\u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u0432 VSCode).<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0416\u0435\u043b\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>dart fmt<\/code> &#8212; \u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0435\u0440 \u043a\u043e\u0434\u0430, \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u043c\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438<\/p>\n<p>\u0422\u0443\u0442 \u0432\u0441\u0435 \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <a href=\"https:\/\/pub.dev\/packages\/pedantic\" rel=\"noopener noreferrer nofollow\">pedantic<\/a> \u0438\u043b\u0438 <a href=\"https:\/\/pub.dev\/packages\/effective_dart\" rel=\"noopener noreferrer nofollow\">effective_dart<\/a> (\u043b\u0438\u0447\u043d\u043e \u044f \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u044e pedantic, \u0442.\u043a. \u043e\u043d \u0431\u043e\u043b\u0435\u0435 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438). \u0417\u0430\u0442\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code> \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0432 \u043d\u0435\u043c \u043d\u0430\u0448\u0443 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c:<\/p>\n<pre><code class=\"vbscript\">include: package:pedantic\/analysis_options.yaml<\/code><\/pre>\n<p>\u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u044f \u0432 \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u043a\u043e\u0434, \u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0442\u044c \/ \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043b\u0438\u043d\u0442\u0435\u0440\u0430. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0433\u0443\u0442 <a href=\"https:\/\/dart-lang.github.io\/linter\/lints\/index.html\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442<\/a> \u0438 <a href=\"https:\/\/dart.dev\/guides\/language\/analysis-options\" rel=\"noopener noreferrer nofollow\">\u044d\u0442\u043e\u0442<\/a> \u0440\u0435\u0441\u0443\u0440\u0441\u044b. \u041a \u0441\u043b\u043e\u0432\u0443, \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u043b\u0438\u043d\u0442\u0435\u0440\u0430, \u043d\u043e \u0438 \u043e\u0431\u0449\u0438\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u044f\u0437\u044b\u043a\u0430 (\u0441 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438). \u0414\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0432 \u0431\u043b\u043e\u043a\u0435:<\/p>\n<pre><code class=\"vbscript\">include: package:pedantic\/analysis_options.yaml      analyzer:     strong-mode:       implicit-dynamic: false       implicit-casts: false     errors:       todo: ignore       mixin_inherits_from_not_object: ignore       sdk_version_async_exported_from_core: ignore       missing_required_param: error       division_optimization: error       must_call_super: error       always_put_required_named_parameters_first: error       avoid_positional_boolean_parameters: error       unnecessary_await_in_return: error       invalid_use_of_protected_member: error       # ...    linter:     rules:     # ...<\/code><\/pre>\n<p>\u0412\u043e\u0442 <a href=\"https:\/\/github.com\/dart-lang\/sdk\/blob\/3c55d8bb3ebaeddab2f1d577c4371ed149075242\/pkg\/analyzer\/lib\/error\/error.dart\" rel=\"noopener noreferrer nofollow\">\u0442\u0443\u0442<\/a> \u0435\u0441\u0442\u044c \u0432\u0435\u0441\u044c \u043f\u0435\u0440\u0435\u0447\u0435\u043d\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \/ \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c. \u041c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0432\u0441\u0435 \u0442\u0430\u043a, \u0441\u043b\u043e\u0432\u043d\u043e \u0442\u044b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 \u043c\u0430\u043d\u044c\u044f\u043a &#8212; \u043c\u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 warning&#8217;\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438, \u0438 \u043d\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u0432 \u043a\u043e\u0434\u0435 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a <code>@protected<\/code> \u043f\u043e\u043b\u044f\u043c \u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e\u0433\u043e \u0442\u0432\u043e\u0439 \u043a\u043e\u0434, \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e, \u0437\u0430\u0441\u0438\u044f\u0435\u0442 &#8212; \u0442\u044b \u0443\u0432\u0438\u0434\u0438\u0448\u044c \u0432\u0441\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0442\u043e\u0438\u0442 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0437\u0430\u0431\u043b\u0430\u0433\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e. \u041f\u043b\u044e\u0441 &#8212; \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c IDE \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0435 \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0442\u044c \u0431\u0435\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0433\u0434\u0435-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043b \u0434\u0432\u0430 \u043f\u0440\u043e\u0431\u0435\u043b\u0430 \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0444\u0438\u0433\u0443\u0440\u043d\u0430\u044f \u0441\u043a\u043e\u0431\u043a\u0430 \u0432\u0438\u0441\u0438\u0442 \u043d\u0435 \u043d\u0430 \u0442\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0443\u0436\u043d\u043e \u0432\u0441\u0435\u0433\u043e-\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0442\u0430\u043a\u0438\u0445 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0439 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u0435\u0435.<\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0446\u0435\u043d\u043a\u0430 \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043d\u0438\u0436\u0435:<\/p>\n<p>1. \u0421\u043e\u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>2. \u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430. \u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0432 \u044d\u0442\u043e\u043c \u043f\u0443\u043d\u043a\u0442\u0435 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u043c-\u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0441\u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c \u0432 \u043f\u0430\u043f\u043a\u0435 example \u0442\u0432\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u0442\u044c \u0432 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0442\u043e, \u043a\u0430\u043a \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u0432\u043e\u0438\u043c \u043f\u0430\u043a\u0435\u0442\u043e\u043c<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>3. \u041f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0432\u0441\u0435\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c. \u0421 \u044d\u0442\u0438\u043c \u0442\u043e\u0436\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 &#8212; \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 Web &#8212; \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0431\u0430\u043b\u043b\u044b \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u0422\u0430\u043a\u0436\u0435, \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e &#8212; \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 Flutter 2 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c, \u0438 \u0434\u043b\u044f \u0442\u0430\u043a\u0438\u0445 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0442\u0435\u043f\u0435\u0440\u044c \u0435\u0441\u0442\u044c \u043f\u043e\u043c\u0435\u0442\u043a\u0430 \u043e\u0431 \u0438\u0445 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0435. \u0410 \u0442\u0430\u043a\u0436\u0435, \u0442\u0430\u043a\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u044b \u0441\u0442\u043e\u0438\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u0441 null-safety (\u043f\u0440\u0438 Dart &gt;= 2.12)<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>4. \u041f\u0440\u043e\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0442\u0435\u0440\u0430<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>5. \u041d\u0443 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 &#8212; \u0441\u0432\u0435\u0436\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 &#8212; \u043a\u0430\u043a \u043c\u043e\u0442\u0438\u0432\u0430\u0442\u043e\u0440 \u0445\u043e\u0442\u044f \u0431\u044b \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0432\u043e\u0439 \u043f\u0430\u043a\u0435\u0442<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<h4>Changelog<\/h4>\n<p>\u041a\u0430\u0436\u0434\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043a\u0435\u0442\u0430 (\u0438 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438) \u0434\u043e\u043b\u0436\u043d\u043e \u0441\u043e\u043f\u0440\u043e\u0432\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"vbscript\">## [1.1.0] - Add opacity sub-animation for tokens and curves manipulation   ## [1.0.1] - Add demo gif and update readme   ## [1.0.0] - First release<\/code><\/pre>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u0443 \u0441\u0432\u0435\u0440\u0445\u0443 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043d\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 \u0438 \u0432\u0441\u0435 \u0431\u0443\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e.<\/p>\n<h4>License<\/h4>\n<p>\u0412\u0441\u0435 \u0442\u043e\u0436\u0435 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u043e. \u0418\u0434\u0435\u043c, \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 &#8212; <a href=\"https:\/\/docs.github.com\/en\/github\/creating-cloning-and-archiving-repositories\/licensing-a-repository#detecting-a-license\" rel=\"noopener noreferrer nofollow\">\u0441\u044e\u0434\u0430<\/a>. \u0418\u0449\u0435\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0443\u044e \u043b\u0438\u0446\u0435\u043d\u0437\u0438\u044e, \u0431\u0435\u0440\u0435\u043c \u0435\u0435 \u0442\u0435\u043a\u0441\u0442, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u0435\u0431\u044f \u043a\u0430\u043a \u0430\u0432\u0442\u043e\u0440\u0430 \u0438 \u0433\u043e\u0442\u043e\u0432\u043e.<\/p>\n<h4>Pubspec<\/h4>\n<p>\u041c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u044c\u0441\u044f \u0441 <a href=\"https:\/\/dart.dev\/tools\/pub\/pubspec\" rel=\"noopener noreferrer nofollow\">\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0435\u0439<\/a> \u043a \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u043e\u043d\u0444\u0438\u0433\u0443 \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 (\u0432 \u043d\u0435\u043c \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u044b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044f):<\/p>\n<pre><code class=\"vbscript\">name: anitex   description: Anitex is a implicitly animated text widget, which animates on passed text changes   version: 1.2.0      repository: https:\/\/github.com\/alphamikle\/anitex   homepage: https:\/\/github.com\/alphamikle\/anitex      environment:     sdk: \"&gt;=2.7.0 &lt;3.0.0\"     flutter: \"&gt;=1.17.0 &lt;2.0.0\"      dependencies:     flutter:     sdk: flutter      dev_dependencies:     flutter_test:     sdk: flutter     pedantic: ^1.9.2      flutter:<\/code><\/pre>\n<h4>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438<\/h4>\n<p>\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<pre><code class=\"bash\">pub publish<\/code><\/pre>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043a\u0440\u0430\u0442\u043a\u043e\u0433\u043e \u043e\u0442\u0447\u0435\u0442\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a\u043e\u0433\u043e:<\/p>\n<pre><code class=\"bash\">... ... Package validation found the following potential issue: * .\/CHANGELOG.md doesn't mention current version (2.0.0).   Consider updating it with notes on this version prior to publication.  Publishing is forever; packages cannot be unpublished. Policy details are available at https:\/\/pub.dev\/policy  Package has 1 warning.. Do you want to publish anitex 2.0.0 (y\/N)? <\/code><\/pre>\n<p>\u0422\u0443\u0442 \u043f\u043e\u043a\u0430\u0437\u0430\u043d \u043e\u0442\u0447\u0435\u0442, \u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u0432\u0441\u0435 \u043e\u043a &#8212; \u0435\u0441\u0442\u044c<\/p>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-320323","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320323","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=320323"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/320323\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=320323"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=320323"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=320323"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}