{"id":345501,"date":"2023-02-16T09:04:30","date_gmt":"2023-02-16T09:04:30","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=345501"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2023-02-16T09:04:30","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=345501","title":{"rendered":"<span>\u041f\u043e\u0447\u0435\u043c\u0443 \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0433\u043e\u0434\u0430 \u2013 \u044d\u0442\u043e \u043a\u043e\u0434 \u0438\u0437 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u043b\u0438 \u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0433\u0440\u0443\u0441\u0442\u043d\u043e\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u00ab\u0427\u0451\u0440\u0442, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u0438 \u0432\u0430\u0448\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438 \u0431\u0435\u0437\u0432\u043e\u0437\u043c\u0435\u0437\u0434\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u00a0\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u0431\u043e\u0433\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0445?\u00bb\u00a0\u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e \u0438 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430, \u0434\u0430\u0431\u044b \u0443\u043a\u0440\u0430\u0441\u0438\u0442\u044c\u00a0\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u043e\u0434\u044b \u00abWeather Today\u00bb.<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/play-lh.googleusercontent.com\/sCzM99ufyAKjQJJwSi8K0Byn9lGADNofwOAB_56aUs6cy2VS7RKWb7zJD_20-iVYU7o=w600-h300-pc0xffffff-pd&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>Weather Today &#8212; Apps on Google Play<\/span><\/div>\n<p><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.Ruble.Pack.weather_today&amp;hl=en_US&amp;gl=EE\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">play.google.com<\/a><\/div>\n<\/div>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430<\/strong>: \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u043e\u0434\u044b. \u0418 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0438\u043d\u0442\u0440\u043e. \u0418 \u0447\u0442\u043e\u0431\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430, \u0430\u00a0\u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u00a0\u043b\u0438\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0421\u0440\u043e\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u00a0\u2014 2\u00a0\u043d\u0435\u0434\u0435\u043b\u0438.<\/p>\n<p>\u041d\u043e, \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u0435\u0434\u044c \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c, \u0438 \u043d\u0435\u00a0\u043d\u0430\u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043d\u0430\u00a0\u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435? \u0425\u0435\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442. \u0422\u0430\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442 \u00abweather_animation\u00bb.<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/pub.dev\/static\/hash-80r36pn7\/img\/pub-dev-icon-cover-image.png&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>weather_animation | Flutter Package<\/span><\/div>\n<p><a href=\"https:\/\/pub.dev\/packages\/weather_animation\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">pub.dev<\/a><\/div>\n<\/div>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16e\/d4d\/6c1\/16ed4d6c1e1341cc2c7699c17d583163.gif\" width=\"778\" height=\"438\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/16e\/d4d\/6c1\/16ed4d6c1e1341cc2c7699c17d583163.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u00a0\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442\u00a0\u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c\u00a0\u2014 \u044f \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u00a0flutter. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a: \u0432\u0437\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0430\u043a\u0435\u0442, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u00a0\u0432\u00a0\u043d\u0451\u043c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u00a0\u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>\u041d\u043e\u00a0\u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0442\u043e\u0433\u0434\u0430? \u041e\u0431\u043e\u00a0\u0432\u0441\u0451\u043c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<ul>\n<li>\n<p><a href=\"#chapter1\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 1. \u041d\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0447\u0443\u0436\u043e\u0433\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter2\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 2. \u0414\u0435\u043f\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter3\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 3. \u041d\u0430\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter4\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 4. \u0413\u043d\u0435\u0432 \u043e\u0442\u00a0\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0438\u043b\u0438\u00a0\u043d\u0435\u043e\u0431\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter5\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 5. \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0431\u043b\u0430\u0447\u043a\u0430 \u0438\u043b\u0438\u00a0\u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#final\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#links\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"chapter1\" id=\"chapter1\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 1. \u041d\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0447\u0443\u0436\u043e\u0433\u043e<\/h3>\n<p>\u041d\u0430 <a href=\"https:\/\/pub.dev\/\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a> \u044f \u043d\u0430\u0448\u0435\u043b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 <a href=\"https:\/\/pub.dev\/packages\/weather_widget\" rel=\"noopener noreferrer nofollow\">weather_widget<\/a>, \u0438 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0433\u043e\u0434\u0430, \u0432\u00a0\u043c\u0435\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043d\u0430\u00a0\u0432\u0437\u0433\u043b\u044f\u0434, \u0430\u00a0\u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00a0\u2014 \u043a\u043e\u0434 \u043d\u0430\u00a0flutter. \u0422\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043d\u0435\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u00a0\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0441\u044f \u043d\u0430\u00a0null safety. \u0415\u0441\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u0430\u043a\u0430\u044f\u2011\u043d\u0438\u043a\u0430\u043a\u0430\u044f, \u0434\u0430\u00a0\u0435\u0449\u0451 \u0438 \u0441\u00a0gif (!) \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430\u00a0\u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c! \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e\u00a0\u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c&#8230;<\/p>\n<blockquote>\n<p>\u0427\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e\u00a0\u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445\u00a0\u2014 \u0434\u0435\u043b\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u041d\u043e, \u0442\u0430\u043a\u043e\u0432 \u043f\u0443\u0442\u044c.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a \u0434\u0435\u043b\u043e \u043d\u0435\u00a0\u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u043a\u043e\u0434 \u0442\u0443\u0442, \u0441\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a, \u043d\u0435\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c \u043a\u043e\u0434\u043e\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u043e\u00a0\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c dart\/flutter. \u0427\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u0432\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<blockquote>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/pub.dev\/packages\/weather_widget\/versions\/1.0.6\" rel=\"noopener noreferrer nofollow\">v 1.0.6<\/a>, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 commit <a href=\"https:\/\/github.com\/carendule\/WeatherWidget\/commit\/d7c6e2531fb62851cb0d7acc9bfd301467009a47\" rel=\"noopener noreferrer nofollow\">on Oct 26, 2021<\/a> \u0432\u00a0master. \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u00a0\u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>\u0412\u00a0\u043f\u0430\u043f\u043a\u0435 <code>lib<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f <code>example<\/code>, \u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0422\u043e\u0442\u00a0\u0436\u0435 <code>example<\/code> \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u00a0\u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u043e\u043d \u0438 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <code>WeatherWidget.dart<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u0438 \u043d\u0435\u00a0\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d, \u043a\u0430\u043a <code>library<\/code>. \u0412\u00a0\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a\u043e \u0432\u0441\u0435\u043c\u0443, \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>weather_widget<\/code>, \u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c <code>lib\/weather_widget.dart<\/code>.<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u00a0pub.dev \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u044f \u0434\u0432\u0430 \u044d\u0442\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/690\/619\/9c4\/6906199c4ccfd1312ed8aca7654ae1a7.png\" width=\"873\" height=\"194\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/690\/619\/9c4\/6906199c4ccfd1312ed8aca7654ae1a7.png\"\/><figcaption><\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0412\u00a0\u0444\u0430\u0439\u043b\u0435 <code>pubspec.yaml<\/code> \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f\u00a0\u043b\u0438\u0448\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <code>cupertino_icons: ^1.0.3<\/code> \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u044f\u0432\u043d\u043e \u0442\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u0430. \u0422\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 <a href=\"https:\/\/github.com\/carendule\/WeatherWidget\/issues\/1\" rel=\"noopener noreferrer nofollow\">issue<\/a>:<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>Because every version of weather_widget depends on cupertino_icons ^0.1.2\u00a0and flutter_sun_set_rise_api depends on cupertino_icons ^1.0.0, weather_widget is forbidden.<\/p>\n<\/blockquote>\n<p>\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0430\u0432\u0442\u043e\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0430\u043a\u0435\u0442\u0430 <code>cupertino_icons<\/code> \u0432 <code>pubspec.yaml<\/code>, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 <code>import 'package:flutter\/cupertino.dart';<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 (\u041a\u0441\u0442\u0430\u0442\u0438 \u0434\u0430, android studio \u043e\u0447\u0435\u043d\u044c \u0432\u0440\u0435\u0434\u043d\u044b\u0439, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u043f\u0440\u043e\u0432\u0435\u043b \u0441\u00a0\u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>import 'package:flutter\/material.dart';<\/code>, \u0442\u043e \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u00a0cupertino).<\/p>\n<p>\u042f \u0443\u0436\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u00a0semantic versions, \u043e\u00a0\u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 TODO\u2011\u0448\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0438 \u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0438 \u0444\u0430\u0439\u043b\u0430 <code>analysis_options.yaml<\/code> \u0442\u0430\u043c \u043d\u0435\u0442). \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u043b, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u0438\u0442\u044c, \u043d\u043e\u00a0\u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0445\u043e\u0447\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451. \u0411\u043b\u0430\u0433\u043e, \u0438\u043c\u0435\u044e\u0449\u0430\u044f\u0441\u044f <em>Apache-2.0\u00a0license<\/em> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u00a0NOTICE.<\/p>\n<blockquote>\n<p>\u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u0447\u0443\u0434\u0435\u0441\u043d\u043e\u0439\u00a0\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u042f\u00a0\u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445\u00a0\u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0447\u0438\u0441\u0442\u043e. \u0410\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u044e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441\u043f\u043e\u0440\u043d\u043e), \u0438\u043c\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e (\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e) \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 gif (\u044d\u0442\u043e \u043c\u044b \u043b\u044e\u0431\u0438\u043c).<\/p>\n<\/blockquote>\n<p>\u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p><a class=\"anchor\" name=\"chapter2\" id=\"chapter2\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 2. \u0414\u0435\u043f\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>\u0418\u0437\u044b\u043c\u0430\u0435\u043c \u0432\u0438\u0434\u0436\u0435\u0442 \u0438 \u043a\u043b\u0430\u0434\u0435\u043c \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c (refactoring) \u043a\u043e\u0434, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f hot reload.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f\u00a0\u043b\u0435\u0433\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043a\u043e\u0434 \u043d\u0435 \u00abnull safety\u00bb. \u041c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>dart migrate<\/code>, \u043d\u043e\u00a0\u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<blockquote>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 \u00abnull safety\u00bb, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439\u00a0\u2014 <a href=\"https:\/\/habr.com\/ru\/post\/513466\/\" rel=\"noopener noreferrer nofollow\">Null safety \u0432\u00a0Dart<\/a>. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e dart \u043d\u0435\u00a0\u043d\u0438\u0436\u0435 2.12<\/p>\n<\/blockquote>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e:<\/p>\n<pre><code>environment:   sdk: \">=2.1.0 &lt;3.0.0\" <\/code><\/pre>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>.metadata<\/code>: \u0430\u0432\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b flutter \u0432\u0435\u0440\u0441\u0438\u0438 <code>v1.12.13+hotfix.8<\/code>, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0438\u043e\u0434\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/882\/4b5\/ff9\/8824b5ff924a391bf833023c3b75e6ea.png\" alt=\"\u0432 \u043f\u0430\u043a\u0435\u0442\u0435 weather_widget \u043d\u0435\u0442 \u043f\u043b\u0430\u0448\u043a\u0438 &quot;Null safety&quot;. \u0422\u0430\u043a\u0436\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0+1 \u0434\u043e 1.0.6 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d dispose \u0432 \u043f\u0430\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430). \" title=\"\u0432 \u043f\u0430\u043a\u0435\u0442\u0435 weather_widget \u043d\u0435\u0442 \u043f\u043b\u0430\u0448\u043a\u0438 &quot;Null safety&quot;. \u0422\u0430\u043a\u0436\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0+1 \u0434\u043e 1.0.6 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d dispose \u0432 \u043f\u0430\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430). \" width=\"1881\" height=\"1812\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/882\/4b5\/ff9\/8824b5ff924a391bf833023c3b75e6ea.png\"\/><figcaption>\u0432 \u043f\u0430\u043a\u0435\u0442\u0435 weather_widget \u043d\u0435\u0442 \u043f\u043b\u0430\u0448\u043a\u0438 &#171;Null safety&#187;. \u0422\u0430\u043a\u0436\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0+1 \u0434\u043e 1.0.6 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d dispose \u0432 \u043f\u0430\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430). <\/figcaption><\/figure>\n<p>\u0421\u0442\u0430\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0430 \u0447\u0442\u043e \u0436\u0435 \u0441\u043a\u0430\u0436\u0435\u0442 \u043b\u0438\u043d\u0442\u0435\u0440. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0438\u0439 \u043a \u043f\u0435\u0440\u0438\u043e\u0434\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 (<code>lint: ^1.1.1<\/code>), \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code> \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"yaml\">analyzer:   strong-mode:     implicit-casts: true<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f <code>dart analysis<\/code> \u0432\u0438\u0434\u0438\u043c:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/bdf\/9d3\/a58\/bdf9d3a5839528f8a46e84723a9e7b89.png\" width=\"999\" height=\"458\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/bdf\/9d3\/a58\/bdf9d3a5839528f8a46e84723a9e7b89.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"yaml\">analyzer:   strong-mode:     implicit-casts: true<\/code><\/pre>\n<p>\u0442\u043e \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (\u0438\u043c\u0435\u043d\u043d\u043e erros) \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442. \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<blockquote>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u00a0dynamic \u043a\u00a0\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u00a0\u0441\u0431\u043e\u044e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u00a0\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435, \u0442\u0440\u0435\u0431\u0443\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438\u00a0\u0438\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434.<\/p>\n<\/blockquote>\n<p>\u0412\u00a0dart \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0441\u0442\u0430\u0440\u0448\u0435 2.16\u00a0\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"yaml\">analyzer:   language:     strict-casts: false<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/dart.dev\/guides\/language\/analysis-options\" rel=\"noopener noreferrer nofollow\">Customizing static analysis<\/a>.<\/p>\n<blockquote>\n<p><em>\u0418\u0442\u043e\u0433<\/em>: \u0440\u0435\u0431\u044f\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u00a0\u043b\u0438\u043d\u0442\u0435\u0440. \u0412\u0430\u0448 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0439 \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0435\u0437\u0435\u0442, \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438 \u0432\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0433\u043e\u0434\u0430:)<\/p>\n<\/blockquote>\n<p>\u041c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0435\u00a0\u0432\u043e\u043b\u043d\u043e\u0432\u0430\u043b\u043e, \u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430. \u042f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0434\u043e\u0436\u0434\u0438\u043a\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/89e\/5a9\/940\/89e5a994020d7f64a560fece3dbb2631.png\" alt=\"\u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043e\u0431\u043b\u0430\u043a\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0434\u043e\u0436\u0434\u044f\u043c\u0438 \u0438 \u0444\u043e\u043d\u043e\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0434\u043e\u0436\u0434\u044c.\" title=\"\u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043e\u0431\u043b\u0430\u043a\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0434\u043e\u0436\u0434\u044f\u043c\u0438 \u0438 \u0444\u043e\u043d\u043e\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0434\u043e\u0436\u0434\u044c.\" width=\"1890\" height=\"10919\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/89e\/5a9\/940\/89e5a994020d7f64a560fece3dbb2631.png\"\/><figcaption>\u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043e\u0431\u043b\u0430\u043a\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0434\u043e\u0436\u0434\u044f\u043c\u0438 \u0438 \u0444\u043e\u043d\u043e\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0434\u043e\u0436\u0434\u044c.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 <s>\u0432\u044b\u043b\u0435\u0437\u0430\u0435\u0442 \u0438\u0437\u00a0\u0448\u0442\u0430\u043d\u043e\u0432<\/s> \u043d\u0435\u043e\u0431\u044a\u044f\u0442\u043d\u0430 \u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u0430 \u0437\u0430\u00a0\u0441\u043f\u043e\u0439\u043b\u0435\u0440. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\/\u043f\u043e\u0441\u043b\u0435? \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d <code>RainWidget<\/code> \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u043b\u0438 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u00a0\u0441\u0435\u0431\u044f \u043e\u0431\u043b\u0430\u043a\u0430? \u0410\u00a0\u0444\u043e\u043d? <s>\u0414\u044b\u043c\u0430 \u0431\u0435\u0437\u00a0\u043e\u0433\u043d\u044f<\/s> \u0414\u043e\u0436\u0434\u044f \u0431\u0435\u0437\u00a0\u043e\u0431\u043b\u0430\u043a\u0430 \u043d\u0435\u00a0\u0431\u044b\u0432\u0430\u0435\u0442? \u041a\u0430\u043a\u00a0\u043f\u043e\u00a0\u043c\u043d\u0435, \u0442\u0430\u043a\u0438\u00a0\u0431\u044b\u0432\u0430\u0435\u0442, \u0438 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0436\u0434\u044c \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u0434\u043e\u0436\u0434\u044f (\u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 (Single Responsibility Principle)). \u041f\u043e\u00a0\u043c\u043e\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u043a\u043e \u0441\u00a0\u0434\u043e\u0436\u0434\u0435\u043c, \u0442\u043e \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0437\u043e\u0432\u0451\u043c <code>RainOfCloudsWidget<\/code>, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u043b\u0430\u043a\u0430 (\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0438\u00a0\u0442.\u00a0\u0434.) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u00a0\u043a\u043b\u0430\u0441\u0441\u0435 <code>CloudWidget<\/code>. \u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u043e\u043d\u0430 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b <code>BackgroundWidget<\/code>\u00a0\u2014 \u043d\u0438 \u043a\u00a0\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u0434\u043e\u0436\u0434\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0442\u043e\u0434 <code>didUpdateWidget()<\/code>, \u0442.\u043a. \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0436\u0434\u044f <code>rainConfig<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0430\u0448\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u043c\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 (\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0435\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432). \u041e\u0434\u043d\u0430\u043a\u043e,\u00a0\u043b\u0438\u043d\u0442\u0435\u0440 dart \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c (\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <a href=\"https:\/\/dart-lang.github.io\/linter\/lints\/avoid_multiple_declarations_per_line.html\" rel=\"noopener noreferrer nofollow\">avoid_multiple_declarations_per_line<\/a>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f\u00a0\u043b\u0438\u043d\u0442\u0435\u0440\u0430 \u0432\u00a0\u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code>). \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c freezed \u0438 json.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0442\u0430\u043a, \u0432\u0438\u0434\u0436\u0435\u0442 \u0437\u0430\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c,\u00a0\u0431\u044b\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430.<\/p>\n<p><a class=\"anchor\" name=\"chapter3\" id=\"chapter3\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 3. \u041d\u0430\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442, \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c hot restart. \u041d\u043e, \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440. \u041a\u043e\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0431\u0435\u0437\u00a0\u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438. \u0418 \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430<\/strong>: \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0432\u00a0\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0440\u043e\u043a (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043d\u0435\u0434\u0435\u043b\u044f) \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0433\u043e\u0434\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0411\u044b\u043b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u0432\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7dc\/df0\/20f\/7dcdf020fb0d33b868b022383b6219a6.png\" alt=\"\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\" title=\"\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0441\u0446\u0435\u043d\" width=\"1399\" height=\"788\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7dc\/df0\/20f\/7dcdf020fb0d33b868b022383b6219a6.png\"\/><figcaption>\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0441\u0446\u0435\u043d<\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0434\u0443 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u043f\u043e\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430. \u0412\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0442\u0440\u0438 \u0441\u0435\u043a\u0446\u0438\u0438. \u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u0433\u043e\u0434\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430\u00a0\u2014 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u0433\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b (\u0432 realtime). \u041d\u0438\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0445\u043e\u043b\u0441\u0442\u0430; \u0441\u043b\u0435\u0432\u0430 \u043e\u0442\u00a0\u043d\u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d (aspect ratio), \u0441\u043f\u0440\u0430\u0432\u0430\u00a0\u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0435\u043a \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0433\u0434\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b (\u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u00abWeathunit\u00bb), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0430 \u0432\u00a0\u0441\u0446\u0435\u043d\u0435. \u0421\u043b\u0435\u0432\u0430 \u0440\u044f\u0434\u043e\u043c \u0441\u00a0\u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u00ab\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u00bb \u0435\u0441\u0442\u044c \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 presets\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0446\u0435\u043d. \u041d\u0438\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f toolbar\u00a0\u2014 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430\u00bb, \u00ab\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u00a0\u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u0433\u043e\u0434\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443\u00bb, \u00ab\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb (\u043f\u043e\u0437\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443), \u0438 \u0441\u0432\u0435\u0442\u043b\u0430\u044f\/\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f\/\u0442\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043e\u00a0\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438. \u0424\u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f: \u0441\u0442\u0435\u043a \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0443\u0433\u043e\u043b \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f92\/75d\/32b\/f9275d32b4512cdb1326460f247b52d8.gif\" width=\"1230\" height=\"782\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f92\/75d\/32b\/f9275d32b4512cdb1326460f247b52d8.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 &#171;Weathunit&#187; \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4a0\/b7c\/7e3\/4a0b7c7e39117f486cf5ab4c31a74657.png\" alt=\"\u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c \u0437\u0430 &quot;\u0440\u0432\u0430\u043d\u044b\u0439 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0440\u0430\u0439&quot;. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \" title=\"\u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c \u0437\u0430 &quot;\u0440\u0432\u0430\u043d\u044b\u0439 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0440\u0430\u0439&quot;. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. \" width=\"511\" height=\"149\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a0\/b7c\/7e3\/4a0b7c7e39117f486cf5ab4c31a74657.png\"\/><figcaption>\u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c \u0437\u0430 &#171;\u0440\u0432\u0430\u043d\u044b\u0439 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0440\u0430\u0439&#187;. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. <\/figcaption><\/figure>\n<ol>\n<li>\n<p>\u0422\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u00a0web \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043d\u0430\u0447\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0440\u043e\u0432\u043d\u043e \u0432\u00a0\u0442\u043e\u043c \u0432\u0438\u0434\u0435, \u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.\u00a0\u0411\u044b\u0432\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438 \u0441\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0445. \u041f\u043e\u0441\u043b\u0435 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0432\u00a0\u043a\u043e\u0434.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u044b 0.01, 0.1, 1, 10, 100.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0\u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438. \u0415\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u043b\u0433\u043e\u0433\u043e \u0443\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f, \u0447\u0442\u043e\u00a0\u0432\u0435\u0434\u0435\u0442 \u043a\u00a0\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c\u0443 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. (\u043f\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u044e \u043e\u00a0\u043d\u0435\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c)<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0437\u0443\u043d\u043e\u043a (Slider) \u0434\u043b\u044f\u00a0\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u041e\u043d \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043d\u043e\u043f\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0430. \u041f\u043e\u00a0\u043a\u043b\u0438\u043a\u0443 \u043d\u0430\u0448 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u00a0\u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u00a0\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0433\u043b\u0430\u0432\u0435.<\/p>\n<\/li>\n<\/ol>\n<hr\/>\n<p>&lt;<em>\u0420\u0435\u043a\u043b\u0430\u043c\u043d\u0430\u044f \u043f\u0430\u0443\u0437\u0430<\/em>>: \u0437\u0434\u0435\u0441\u044c \u043f\u0438\u0448\u0443 \u043e\u00a0\u0447\u0451\u043c\u2011\u0442\u043e \u0435\u0449\u0451\u00a0\u2014 <a href=\"https:\/\/t.me\/+JSkcGQ_Sh045Mzhi\" rel=\"noopener noreferrer nofollow\">TODO: change after<\/a> &lt;\/<em>\u0420\u0435\u043a\u043b\u0430\u043c\u043d\u0430\u044f \u043f\u0430\u0443\u0437\u0430<\/em>><\/p>\n<hr\/>\n<p>\u0413\u043b\u0430\u0432\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u00ab\u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0448\u0435\u0434\u0435\u0432\u0440\u00bb \u0438 \u043f\u043e\u043b\u044e\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u043c, \u043d\u043e\u00a0\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f\u00a0\u0431\u044b\u0441\u0442\u0440\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435. \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 ~60\u00a0\u0441\u0442\u0440\u043e\u043a \u043a\u043e\u0434\u0430; freezed \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u0435\u0442\u043e\u0434 <code>toString()<\/code> \u0432\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441\u00a0\u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438, \u0447\u0442\u043e\u00a0\u0438\u0433\u0440\u0430\u0435\u0442 \u0437\u0434\u0435\u0441\u044c \u043a\u043b\u044e\u0447\u0435\u0432\u0443\u044e \u0440\u043e\u043b\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e6b\/08a\/2d6\/e6b08a2d6964f2dfa764933014223f9f.png\" alt=\"\u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043a\u043d\u043e\u043f\u043a\u0443 &quot;\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434&quot;, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 build(). \" title=\"\u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043a\u043d\u043e\u043f\u043a\u0443 &quot;\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434&quot;, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 build(). \" width=\"850\" height=\"650\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e6b\/08a\/2d6\/e6b08a2d6964f2dfa764933014223f9f.png\"\/><figcaption>\u0412\u0435\u0441\u044c \u043a\u043e\u0434, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0439 \u0447\u0435\u0440\u0435\u0437 \u043a\u043d\u043e\u043f\u043a\u0443 &#171;\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434&#187;, \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 build(). <\/figcaption><\/figure>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c <code>dart format<\/code>, \u043d\u0430\u0436\u0430\u0432 <strong>Ctrl+Alt+L<\/strong> (\u0432 Android Studio), \u0447\u0442\u043e\u0431\u044b\u00a0\u043b\u0438\u0446\u0435\u0437\u0440\u0435\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p><code>WrapperScene<\/code>\u00a0\u2014 \u044d\u0442\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u2011\u043e\u0431\u0435\u0440\u0442\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0433\u043e\u0434\u043d\u043e\u0439 \u0441\u0446\u0435\u043d\u044b. \u041f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c \u0435\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0432\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u044d\u043a\u0440\u0430\u043d\u0430\/\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8f9\/165\/368\/8f9165368a53b36e66144414b6e9479f.png\" width=\"1479\" height=\"1358\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8f9\/165\/368\/8f9165368a53b36e66144414b6e9479f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438\u043c\u0435\u0435\u0442 \u043a\u0440\u0430\u0439\u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/937\/0d5\/fdb\/9370d5fdbba614f4d9db3ad50989d04c.png\" alt=\" \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442 \u043a\u043e\u0434, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e \u044d\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \" title=\" \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442 \u043a\u043e\u0434, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e \u044d\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \" width=\"902\" height=\"991\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/937\/0d5\/fdb\/9370d5fdbba614f4d9db3ad50989d04c.png\"\/><figcaption> \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0441\u0442 \u043a\u043e\u0434, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0435\u0437\u0430\u0442\u0435\u0439\u043b\u0438\u0432\u043e \u044d\u0442\u043e \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 <\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0438\u0451 \u0447\u0443\u0434\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043d\u043b\u0430\u0439\u043d\u00a0\u2014 <a href=\"https:\/\/packruble.github.io\/weather_animation\/\" rel=\"noopener noreferrer nofollow\">Weather configurator<\/a>. <\/p>\n<p>\u0421\u043b\u0430\u0432\u0430 <s>\u043d\u0435\u0431\u0435\u0441\u0430\u043c<\/s> \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c Stackoverflow: \u043f\u043e\u0441\u043b\u0435 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0433\u043e <a href=\"https:\/\/stackoverflow.com\/questions\/74597644\/unable-to-deploy-flutter-project-to-github-pages\" rel=\"noopener noreferrer nofollow\">bounty<\/a> \u044f \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e\u00a0\u0442\u043e\u043c, \u043a\u0430\u043a\u00a0\u043f\u0440\u0435\u043e\u0434\u043e\u043b\u0435\u0442\u044c \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u0438 \u0438 \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430\u00a0Github Pages.<\/p>\n<p><em>\u0412\u0430\u0448\u0430 \u043f\u043e\u043c\u043e\u0449\u044c:<\/em> \u043f\u043e\u043c\u043d\u0438\u0442\u0435,\u00a0\u0431\u044b\u043b\u0430 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e\u00a0\u0432\u043e\u043b\u0448\u0435\u0431\u043d\u043e\u0439 \u043a\u043d\u043e\u043f\u043e\u0447\u043a\u0435, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435? \u0422\u0430\u043a \u0432\u043e\u0442, \u0435\u0441\u0442\u044c \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0435 <a href=\"https:\/\/github.com\/PackRuble\/weather_animation\/issues\/3\" rel=\"noopener noreferrer nofollow\">issue<\/a>, \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443, \u043a\u043d\u043e\u043f\u043a\u0430 \u043d\u0435\u00a0\u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0430\u0441\u0442\u0438. \u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u0431\u043e\u0439? \u041f\u0440\u0438\u00a0\u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0445\/\u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u043e\u043b\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0441\u043d\u0435\u0436\u0438\u043d\u043e\u043a, \u043c\u044b \u0442\u0435\u0440\u044f\u0435\u043c \u043a\u00a0\u043d\u0438\u043c \u0434\u043e\u0441\u0442\u0443\u043f \u0438 \u043d\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u044d\u0442\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435. \u0415\u0441\u043b\u0438 \u043a\u0442\u043e \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c 100% \u043c\u043e\u0436\u043d\u043e \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u043d\u0435\u00a0\u0441\u0431\u0438\u0432 \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0446\u0435\u043d\u044b, \u043f\u0440\u043e\u0441\u044c\u0431\u0430 \u043e\u0442\u043a\u043b\u0438\u043a\u043d\u0443\u0442\u044c\u0441\u044f \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445.<\/p>\n<p><a class=\"anchor\" name=\"chapter4\" id=\"chapter4\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 4. \u0413\u043d\u0435\u0432 \u043e\u0442 \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0438\u043b\u0438 \u043d\u0435\u043e\u0431\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/h3>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0438\u0434\u0435\u044f: \u0443\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 (\u0441\u0435\u0439\u0447\u0430\u0441 \u0438\u0445 \u0431\u043e\u043b\u044c\u0448\u0435 60). \u042d\u0442\u0438 \u043f\u043e\u043b\u044f \u043d\u0443\u0436\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u0442\u044c \u0441\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u0430\u043c\u0438 (<code>Slider<\/code>, <code>ColorPicker<\/code>, <code>Switch<\/code> \u0438\u00a0\u0442.\u00a0\u0434.), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c. \u0418 \u0435\u0441\u043b\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432\u2011\u043f\u043e\u0433\u043e\u0434 \u0441\u0435\u0439\u0447\u0430\u0441 7\u00a0\u0438 \u0438\u0445 \u043b\u0435\u0433\u043a\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0434\u043d\u0438\u043c <code>Enum<\/code>&#8216;\u043e\u043c, \u0442\u043e \u0432\u043e\u0442 \u0441 \u00ab\u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c\u0438\u00bb \u043f\u043e\u043b\u044f\u043c\u0438 \u044d\u0442\u0438\u043c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u00a0\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c! \u0422\u0430\u043a \u044f \u0447\u0443\u0442\u044c \u043d\u0435\u00a0\u0443\u0433\u043e\u0434\u0438\u043b \u0432\u00a0\u043b\u043e\u0432\u0443\u0448\u043a\u0443 \u043f\u043e\u0434\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"https:\/\/api.dart.dev\/stable\/2.19.2\/dart-mirrors\/dart-mirrors-library.html\" rel=\"noopener noreferrer nofollow\">dart:mirrors library<\/a>.<\/p>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u00a0\u0431\u044b\u043b \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043f\u043e\u0434\u00a0\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u044f (reflection) \u0438 \u043e\u0434\u043d\u0430 \u0438\u0437\u00a0\u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439\u00a0\u2014 \u0441\u0430\u043c\u043e\u0430\u043d\u0430\u043b\u0438\u0437 (introspection), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432\u00a0dart. \u0422\u0430\u043a \u043c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u043e\u043b\u044f \u0444\u0430\u0439\u043b\u043e\u0432 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439 \u0432\u00a0\u0440\u0435\u0436\u0438\u043c\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u041d\u043e\u00a0\u043a\u043e\u0433\u0434\u0430 \u044f \u044d\u0442\u043e \u0442\u0440\u043e\u0433\u0430\u043b, \u043c\u043d\u0435\u00a0\u0431\u044b\u043b\u043e \u0442\u0430\u043a \u0431\u043e\u043b\u044c\u043d\u043e, \u0447\u0442\u043e\u00a0\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u0440\u0435\u0437\u0430\u0442\u044c\u0441\u044f flutter\u2011\u0431\u0430\u0431\u043e\u0447\u043a\u043e\u0439, \u0431\u043b\u0430\u0433\u043e \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u044d\u0442\u0438\u043c \u043d\u0435\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u00a0flutter. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u0435\u0441\u0442\u044c \u0435\u0449\u0451 <a href=\"https:\/\/pub.dev\/packages\/reflectable\" rel=\"noopener noreferrer nofollow\">reflectable<\/a> \u043f\u0430\u043a\u0435\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043a\u043e\u0434\u0430, \u0438 \u0435\u0441\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0435 <a href=\"https:\/\/github.com\/eernstg\/reflectable-flutter\" rel=\"noopener noreferrer nofollow\">\u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a> \u043f\u043e\u00a0\u0432\u043d\u0435\u0434\u0440\u0435\u043d\u0438\u044e \u0432\u00a0flutter.<\/p>\n<p>\u041d\u043e\u00a0\u044f \u0440\u0435\u0448\u0438\u043b \u043f\u043e\u0439\u0442\u0438 \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0443\u0442\u0451\u043c\u00a0\u2014 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/pub.dev\/packages\/json_serializable\" rel=\"noopener noreferrer nofollow\">json_serializable<\/a>. \u0427\u0435\u0440\u0435\u0437 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044e \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043a\u0430\u043a\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f <code>toJson()<\/code> \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0438\u0445 \u0432\u00a0\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435, \u0442\u0430\u043a \u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0443\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u0432\u00a0\u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u043a\u0443 <code>fromJson()<\/code>. \u042d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u043c\u044b\u0441\u043b\u044c\u044e, \u043d\u0430\u0441\u0442\u043e\u043b\u044c\u043a\u043e, \u0447\u0442\u043e\u00a0\u044f \u0442\u0430\u043a \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b.<\/p>\n<p>\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0432\u043e\u0437\u043d\u0438\u043a \u0446\u0435\u043b\u044b\u0439 \u0440\u044f\u0434 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2116\u00a01:<\/strong><\/p>\n<p>\u0414\u043b\u044f\u00a0\u043d\u0430\u0447\u0430\u043b\u0430, \u0445\u043e\u0447\u0443 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u00a0\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u0434\u0435\u043a\u0432\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u00ab\u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u00bb (\u0438\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u00ab\u043a\u043b\u0430\u0441\u0441\u044b\u00bb):<\/p>\n<pre><code class=\"dart\">enum SunConfigHelper&lt;T> { width&lt;double>(0.0, 360.0, 2000.0), blurSigma&lt;double>(0.0, 13.0, 36), isLeftLocation&lt;bool>(true, false, false), coreColor&lt;Color>(     Color(0xFFFFFFFF), Color.fromARGB(255, 255, 152, 0), Color(0xFFFFFFFF)), \/\/ midColor(...), \/\/ outColor(...), animMidMill&lt;int>(0, 1500, 10000); \/\/ animOutMill(...);  const SunConfigHelper(this.minValue, this.defValue, this.maxValue)  final T minValue; final T defValue; final T maxValue  \/\/ final double scale; \/\/ final String name; \/\/ final String description; \/\/ final double\/int\/...(enum with types) typeWidget\/typeValue; }<\/code><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0442\u043a\u0430: \u044d\u0442\u043e \u043d\u0435\u00a0\u0441\u0438\u043b\u044c\u043d\u043e \u043e\u0431\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u0435\u00a0\u0440\u0435\u0448\u0438\u0442 \u043d\u0430\u0448\u0443 \u0437\u0430\u0434\u0430\u0447\u0443.<\/p>\n<p>\u041c\u0438\u043d\u0443\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u00a0\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0435 \u043f\u043e\u043b\u044f \u0432\u00a0\u043c\u043e\u0434\u0435\u043b\u044f\u0445 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0439, \u043c\u044b \u043e\u0431\u044f\u0437\u0430\u043d\u044b \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0438 \u044d\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p>\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u044b \u0432\u0441\u0451 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u044b\u043c.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u043b\u044e\u0441\u044b:<\/p>\n<ul>\n<li>\n<p>\u043a\u043e\u0434 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0438\u043f\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d;<\/p>\n<\/li>\n<li>\n<p>\u0423\u00a0\u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439! \u042d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442, \u0447\u0442\u043e\u00a0Slider \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u00a0\u2014 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 min \u0438 max \u0438 \u0432\u0441\u0451. \u042d\u0442\u043e \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442 \u043e\u043f\u0430\u0441\u043d\u044b\u0435 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441\u00a0\u043e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. \u0410\u00a0\u0435\u0449\u0451 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 <code>scale<\/code> \u0434\u043b\u044f\u00a0\u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0434\u0435\u043b\u0435\u043d\u0438\u0439 (\u0438, \u043f\u043e\u00a0\u0441\u0443\u0442\u0438, \u0434\u0435\u0441\u044f\u0442\u0438\u0447\u043d\u0443\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c) \u0438 \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c;<\/p>\n<\/li>\n<li>\n<p>\u041d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 (<code>value is int<\/code> \u0438 <code>value as int<\/code>) \u0438 \u043c\u044b \u043f\u0440\u043e\u0449\u0435 \u0438 \u043d\u0430\u0434\u0435\u0436\u043d\u0435\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b (\u043f\u043e\u0441\u043b\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u043f\u043e\u0447\u0435\u043c\u0443);<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437\u0431\u0435\u0436\u0438\u043c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432 \u0432\u00a0web (\u044f \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0442\u0430\u043c dart \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432\u00a0js \u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0438\u0441\u043b\u043e <code>5.6<\/code> \u0442\u0438\u043f\u0430 <code>double<\/code> \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u0432 <code>int<\/code>, \u0435\u0441\u043b\u0438 \u0441\u0442\u0430\u043d\u0435\u0442 <code>5.0<\/code>).<\/p>\n<\/li>\n<\/ul>\n<p>\u041a\u0430\u043a\u00a0\u0432\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442\u0435,\u00a0\u0431\u044b\u043b\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u0434\u0440\u0443\u0433\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435\u00a0\u2014 \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c <code>ModelConfig.toJson()<\/code> \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u0435 \u043f\u043e\u043b\u044f \u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u0432\u0438\u0434\u0435 <code>Map&lt;String, dynamic><\/code>. \u0414\u0430\u043b\u0435\u0435, <code>dynamic<\/code> \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u043c \u0432\u00a0\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0442\u0438\u043f \u0438, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437\u00a0\u044d\u0442\u043e\u0433\u043e, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u2011\u043a\u0440\u0443\u0442\u0438\u043b\u043a\u0443. \u041a\u0430\u043a\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u044b \u043c\u0435\u043d\u044f\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c <code>.fromJson(newMap)<\/code>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c2f\/b12\/288\/c2fb1228800334e8ad1b52983d25ffe4.png\" alt=\"&quot;\u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439&quot; \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0437 \u043f\u0443\u0437\u044b\u0440\u044f \u043d\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0448\u044c. \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a.\" title=\"&quot;\u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439&quot; \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0437 \u043f\u0443\u0437\u044b\u0440\u044f \u043d\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0448\u044c. \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a.\" width=\"992\" height=\"1895\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c2f\/b12\/288\/c2fb1228800334e8ad1b52983d25ffe4.png\"\/><figcaption>&#171;\u043e\u0444\u0438\u0433\u0435\u043d\u043d\u044b\u0439&#187; \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0435\u0437 \u043f\u0443\u0437\u044b\u0440\u044f \u043d\u0435 \u0440\u0430\u0437\u0431\u0435\u0440\u0451\u0448\u044c. \u041d\u0435 \u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a.<\/figcaption><\/figure>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2116\u00a02:<\/strong><\/p>\n<p>\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043e \u043d\u0430\u00a0\u0442\u0438\u043f\u0435 \u043f\u043e\u043b\u044f \u0432\u00a0runtime. \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0434\u043b\u044f\u00a0\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0442\u0438\u043f\u00a0\u2014 <code>bool<\/code>, \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u00a0\u2014 true \u0438 false. \u0412\u0438\u0434\u0436\u0435\u0442 \u043c\u043e\u0436\u0435\u0442\u00a0\u0431\u044b\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u0435\u043b\u0435\u043c. \u0410\u00a0\u0432\u043e\u0442 <code>int<\/code> \u0438 <code>double<\/code> \u0443\u0436\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0448\u044c. \u041d\u0443\u0436\u043d\u044b \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u044b, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0446\u0435\u043d\u0430 \u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0448\u043a\u0430\u043b\u044b.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/00a\/8ea\/bc5\/00a8eabc58402b8518d8f6b3e5b36e40.png\" width=\"515\" height=\"615\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/00a\/8ea\/bc5\/00a8eabc58402b8518d8f6b3e5b36e40.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0425\u0435\u0445, \u0438 \u0432\u043e\u0442 \u043e\u043d\u0430, \u043b\u043e\u0432\u0443\u0448\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u043e\u00a0\u0442\u0438\u043f\u0430\u043c. \u0412\u0435\u0434\u044c \u0432\u00a0\u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u043e\u0433\u0443\u0442 \u043b\u0435\u0436\u0430\u0442\u044c \u043b\u044e\u0431\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u0418 \u044f \u043f\u0440\u0438\u043d\u044f\u043b \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0442\u043e \u044d\u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e <code>ColorPickerWidget<\/code>, \u0442.\u043a. \u043d\u0430\u00a0\u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u043d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0441\u00a0\u0442\u0438\u043f\u043e\u043c <code>String<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0435\u00a0\u0445\u0440\u0430\u043d\u0438\u043b\u0438\u00a0\u0431\u044b Color. \u0414\u0430, Color \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0432 <code>String<\/code>, \u0445\u043e\u0442\u044f \u043c\u043e\u0436\u043d\u043e\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c <code>int<\/code>. \u0417\u043d\u0430\u0439\u0442\u0435 \u043d\u0430\u0432\u0435\u0440\u043d\u044f\u043a\u0430, \u044d\u0442\u043e \u043e\u0442\u0432\u0440\u0430\u0442\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041d\u043e\u00a0\u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u00a0\u0442\u0438\u043f\u0430\u0445 \u044f \u043d\u0435\u00a0\u043f\u0440\u0438\u0434\u0443\u043c\u0430\u043b.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2116\u00a03:<\/strong><\/p>\n<p>\u0423\u00a0\u0432\u0441\u0435\u0445 <code>int<\/code> \u0438 <code>double<\/code> \u043f\u043e\u043b\u0435\u0439 \u0434\u043e\u043b\u0436\u043d\u044b\u00a0\u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b, \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u0446\u0435\u043d\u0430 \u0434\u0435\u043b\u0435\u043d\u0438\u044f. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u0430\u043d\u0430\u043b\u044c\u043d\u043e\u0435:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/1d7\/c36\/5d8\/1d7c365d815fb0ea1f95f613ec419ebd.png\" width=\"1265\" height=\"230\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/1d7\/c36\/5d8\/1d7c365d815fb0ea1f95f613ec419ebd.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Magic-click \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f:<\/p>\n<pre><code class=\"dart\">final oldMin = _min; _min -= (_max * 2).abs(); _max += (oldMin * 2).abs();   <\/code><\/pre>\n<p>\u0414\u0430, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u043b\u0435\u0442\u0435\u0442\u044c \u0442\u0430\u043a \u0432\u00a0\u043d\u0435\u0431\u0435\u0441\u0430, \u043d\u043e\u00a0\u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u044d\u0442\u043e \u043a\u043b\u0438\u043a \u044d\u0434\u0430\u043a \u043d\u0430 20, \u0434\u0430\u00a0\u0438 \u0433\u0440\u043e\u0437\u0438\u0442\u044c \u0431\u0443\u0434\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0435\u0440\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438.<\/p>\n<p><strong>\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2116\u00a04:<\/strong><\/p>\n<p>\u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430\u043c \u043d\u0443\u0436\u043d\u0430 \u0440\u0430\u0437\u043d\u0430\u044f \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c. \u0412\u043e\u2011\u043f\u0435\u0440\u0432\u044b\u0445, \u0447\u0442\u043e\u0431\u044b \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043d\u043e\u043f\u043e\u043a \u0441\u043b\u0430\u0439\u0434\u0435\u0440\u0430 (&lt;) \u2011- (>) \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u043b\u0430\u0441\u044c \u043d\u0430\u00a0\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u0429\u0435\u043b\u0447\u043e\u043a \u0438 \u0432\u043e\u0442 \u0443\u0436\u0435 \u0440\u0430\u0437\u0440\u044f\u0434\u043d\u043e\u0441\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 (\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e 0.01, 0.1, 1, 10, 100) \u0438 \u043d\u0430\u0448 \u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0435\u043d.<\/p>\n<p>\u0422\u0443\u0442 \u0442\u043e\u0436\u0435 \u043d\u044e\u0430\u043d\u0441:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/473\/5f8\/b1f\/4735f8b1f77223b07a3519f7b15a4fde.png\" width=\"872\" height=\"775\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/473\/5f8\/b1f\/4735f8b1f77223b07a3519f7b15a4fde.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0427\u0442\u043e\u0431\u044b \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0438\u0441\u043b\u043e \u0432 <code>String<\/code> \u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0447\u043a\u0438. \u041d\u043e\u00a0\u0432\u043e\u0442 \u0431\u0435\u0434\u0430, \u0432\u00a0web \u0432\u0441\u0451 \u043b\u043e\u043c\u0430\u0435\u0442\u0441\u044f. \u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 <code>double<\/code> \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u043b\u0441\u044f \u0432 <code>int<\/code> \u043c\u044b \u0432\u0435\u0440\u043d\u0451\u043c 1. \u0415\u0441\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u0435\u0435 <a href=\"https:\/\/dart.dev\/guides\/language\/numbers\" rel=\"noopener noreferrer nofollow\">\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e<\/a>, \u043e\u0431\u044a\u044f\u0441\u043d\u044f\u044e\u0449\u0435\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442.<\/p>\n<p>\u0411\u043e\u043d\u0443\u0441: \u0432\u00a0\u0441\u043b\u0430\u0439\u0434\u0435\u0440 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u043b\u044f\u00a0\u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u0433\u043e\u00a0\u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0433\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f (\u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0449\u0435\u043b\u043a\u0430\u0442\u044c).<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u0434\u0430\u043d\u0438\u0439, \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0dto\u2011\u0440\u0435\u0448\u0435\u043d\u0438\u0435\u00a0\u0431\u044b\u043b\u043e\u00a0\u0431\u044b \u043e\u0447\u0435\u043d\u044c \u043a\u0441\u0442\u0430\u0442\u0438, \u0438 \u0432\u00a0\u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0442\u0430\u043a \u0438 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u041d\u043e, \u0433\u043e\u0441\u043f\u043e\u0434\u0430, \u00ab\u0431\u044b\u0441\u0442\u0440\u043e, \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043d\u0435\u0434\u043e\u0440\u043e\u0433\u043e\u00bb\u00a0\u2014 \u043d\u0430\u00a0\u0432\u044b\u0431\u043e\u0440 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430.<\/p>\n<p><a class=\"anchor\" name=\"chapter5\" id=\"chapter5\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 5. \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0431\u043b\u0430\u0447\u043a\u0430 \u0438\u043b\u0438 \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/h3>\n<p>\u041d\u0443 \u0447\u0442\u043e\u00a0\u0436\u0435, \u043f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u00a0\u044f \u0438\u0437\u0443\u0447\u0438\u043b \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u043f\u043e\u00a0\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 <s>\u043d\u0430\u043c\u0443\u0447\u0430\u043b\u0441\u044f \u0441\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430<\/s>, \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u00a0\u043e\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442. \u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u043c\u0441\u044f \u0441\u00a0\u043d\u0435\u0439 \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043f\u043e\u043b\u0443\u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0445 \u043e\u0431\u043b\u0430\u0447\u043a\u043e\u0432:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9a2\/8a6\/b2d\/9a28a6b2da55381424fd035cfa136879.gif\" width=\"407\" height=\"407\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/9a2\/8a6\/b2d\/9a28a6b2da55381424fd035cfa136879.gif\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043d\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043f\u043e\u0441\u043b\u0435 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0437\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0442\u0430\u043a:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef0\/e0e\/633\/ef0e0e633797bdaf58c05fe2b158507a.png\" alt=\"\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u043e\u0441\u0442\u043e\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e CloudWidget'\u044b, \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b. \u0425\u043e\u0447\u0443 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0432\u0438\u0434\u0436\u0435\u0442 WrapperScene \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f const. \" title=\"\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u043e\u0441\u0442\u043e\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e CloudWidget'\u044b, \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b. \u0425\u043e\u0447\u0443 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0432\u0438\u0434\u0436\u0435\u0442 WrapperScene \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f const. \" width=\"1051\" height=\"2197\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ef0\/e0e\/633\/ef0e0e633797bdaf58c05fe2b158507a.png\"\/><figcaption>\u0432\u043d\u0438\u043c\u0430\u043d\u0438\u044f \u0443\u0434\u043e\u0441\u0442\u043e\u0435\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e CloudWidget&#8217;\u044b, \u0434\u0440\u0443\u0433\u0438\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0443\u043f\u0440\u043e\u0449\u0435\u043d\u044b. \u0425\u043e\u0447\u0443 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0432\u0438\u0434\u0436\u0435\u0442 WrapperScene \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f const. <\/figcaption><\/figure>\n<p>\u041d\u0430\u0447\u043d\u0451\u043c \u0441\u00a0\u043c\u043e\u0434\u0435\u043b\u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>CloudConfig<\/code>. \u0411\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/pub.dev\/packages\/freezed\" rel=\"noopener noreferrer nofollow\">freezed<\/a> \u0434\u043b\u044f\u00a0\u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0439 <code>toString<\/code>, <code>operator ==<\/code>, <code>hashCode<\/code> + \u043c\u0435\u0442\u043e\u0434 <code>copyWith()<\/code> \u0434\u043b\u044f\u00a0\u043b\u0435\u0433\u043a\u043e\u0433\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u0438 <a href=\"https:\/\/pub.dev\/packages\/json_serializable\" rel=\"noopener noreferrer nofollow\">json_serializable<\/a>, \u0447\u0442\u043e\u0431\u044b \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043e\u0434\u044b <code>fromJson()<\/code> \u0438 <code>toJson()<\/code>. \u041f\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438, \u0432\u0441\u0451 \u044d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f\u00a0\u043d\u0435\u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0441\u0442\u0438 (<code>@immutable<\/code>) \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438 \u043b\u0435\u0433\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0435\u0433\u043e \u043f\u043e\u043b\u0435\u0439 (\u0432 \u0442\u043e\u043c \u0447\u0438\u0441\u043b\u0435, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u00ab<em>\u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0430\u00a0\u0441\u0435\u0440\u0432\u0435\u0440<\/em>\/<em>\u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0432\u00a0\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u0431\u0434<\/em>\u00bb \u044d\u0442\u0438 \u043c\u043e\u0434\u0435\u043b\u0438). \u0412\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043c\u043e\u043d\u0441\u0442\u0440\u0443\u043e\u0437\u043d\u043e, \u043d\u043e\u00a0\u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0430\u0435\u0442 \u043d\u0430\u0441 \u043e\u0442\u00a0\u0448\u0430\u0431\u043b\u043e\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (boilerplate code).<\/p>\n<pre><code class=\"dart\">part 'cloud_config.freezed.dart'; part 'cloud_config.g.dart';  \/\/\/ Configuration of the Cloud. @freezed class CloudConfig with _$CloudConfig {   @JsonSerializable(converters: [ColorSerializer()])   const factory CloudConfig({     \/\/\/ Cloud size.     @Default(250.0) double size,      \/\/\/ The color of the cloud.     @Default(Color.fromARGB(170, 255, 255, 255)) Color color,      \/\/\/ Cloud icon. You can use a custom widget [widgetCloud].     @Default(Icons.cloud_rounded) @JsonKey(ignore: true) IconData icon,      \/\/\/ Specify the cloud widget. In this case, the fields [icon] and     \/\/\/ [color] be ignored.     @JsonKey(ignore: true) Widget? widgetCloud,      \/\/\/ The coordinate of cloud displacement along the x-axis (in pixels).     @Default(70.0) double x,      \/\/\/ The coordinate of cloud displacement along the x-axis (in pixels).     @Default(5.0) double y,      \/\/\/ The scale factor of the widget at the beginning of the animation.     @Default(1.0) double scaleBegin,      \/\/\/ The scale factor of the widget at the end of the animation.     @Default(1.1) double scaleEnd,      \/\/\/ Animation curve for [ScaleTransition].     @Default(Curves.fastOutSlowIn) @JsonKey(ignore: true) Curve scaleCurve,      \/\/\/ Offset of the widget along the X-axis during the slide animation (in pixels).     @Default(11.0) double slideX,      \/\/\/ Offset of the widget along the Y-axis during the slide animation (in pixels).     @Default(5.0) double slideY,      \/\/\/ Shift duration (in milliseconds).     @Default(2000) int slideDurMill,      \/\/\/ Animation curve for [SlideTransition].     @Default(Curves.fastOutSlowIn) @JsonKey(ignore: true) Curve slideCurve,   }) = _CloudConfig;    factory CloudConfig.fromJson(Map&lt;String, dynamic> json) =>       _$CloudConfigFromJson(json); }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<pre><code class=\"bash\">flutter pub run build_runner build<\/code><\/pre>\n<p>\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u0441\u044e \u043c\u043e\u0449\u044c \u043c\u0438\u043a\u0441\u0438\u043d\u0430 <code>_$CloudConfig<\/code>.<\/p>\n<p>\u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0445 \u0434\u0435\u0442\u0430\u043b\u0435\u0439.<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0440\u043e\u0447\u043a\u0430 <code>@JsonSerializable(converters: [ColorSerializer()])<\/code> \u0433\u043e\u0432\u043e\u0440\u0438\u0442, \u0447\u0442\u043e \u0442\u0430\u043c, \u0433\u0434\u0435 \u0435\u0441\u0442\u044c \u043f\u043e\u043b\u044f \u0442\u0438\u043f\u0430 <code>Color<\/code>, \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0435\u0440 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c <code>Color<\/code> \u0432 <code>String<\/code>  \u0438 \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442 (\u043d\u0435 \u0432 <code>int<\/code>, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043b\u0443\u0447\u0448\u0435):<\/p>\n<\/li>\n<\/ol>\n<pre><code class=\"dart\">\/\/\/ Convert [Color] to\/from json. class ColorSerializer implements JsonConverter&lt;Color, String> {   const ColorSerializer();    @override   Color fromJson(String json) => Color(int.parse(json));    @override   String toJson(Color color) => color.value.toString(); }<\/code><\/pre>\n<ol start=\"2\">\n<li>\n<p><code>@Default(&lt;\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435>)<\/code> \u044d\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044f. \u0415\u0441\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c null, \u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p><code>@JsonKey(ignore: true)<\/code> \u044d\u0442\u0430 \u0430\u043d\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u043c\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0440\u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f\u0445 <code>fromJson()\/toJson()<\/code> \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u043b\u0435.<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>\u0425\u043e\u0447\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u0415\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0430\u0433\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u00ab\u043f\u043e\u0434\u0433\u043e\u043d\u043a\u0430\u00bb \u043c\u043e\u0435\u0433\u043e \u043f\u0430\u043a\u0435\u0442\u0430 \u043f\u043e\u0434\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440. \u041d\u043e\u00a0\u0432\u0435\u0434\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0440\u043e\u0434\u0443\u043a\u0442 \u043c\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0437\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430. \u041d\u0435\u00a0\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u0442\u0430\u043a.<\/p>\n<\/blockquote>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c \u0433\u043e\u0442\u043e\u0432\u0430, \u0438 \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u0430\u043c\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442 \u043e\u0431\u043b\u0430\u043a\u0430:<\/p>\n<pre><code class=\"dart\">class CloudWidget extends StatefulWidget {   const CloudWidget({Key? key, this.cloudConfig = const CloudConfig()})       : super(key: key);    final CloudConfig cloudConfig;    @override   State&lt;CloudWidget> createState() => _CloudWidgetState(); }  class _CloudWidgetState extends State&lt;CloudWidget>     with TickerProviderStateMixin {   late final AnimationController controller;   late Animation&lt;double> scaleAnimation;   late Animation&lt;Offset> slideAnimation;    late CloudConfig _config;    @override   void initState() {...}    void _initAnimation() {...}    @override   Widget build(BuildContext context) {...}    @override   void didUpdateWidget(covariant CloudWidget oldWidget) {...}    @override   void dispose() {...} }<\/code><\/pre>\n<p>\u0427\u0442\u043e\u00a0\u0437\u0434\u0435\u0441\u044c \u0437\u0430\u00a0\u043f\u043e\u043b\u044f \u0438 \u043c\u0435\u0442\u043e\u0434\u044b?:<\/p>\n<ol>\n<li>\n<p><code>controller<\/code>\u00a0\u2014 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u0434\u043b\u044f\u00a0\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0418\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e \u043f\u043e\u043b\u0435 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0438 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438.<\/p>\n<\/li>\n<li>\n<p><code>scaleAnimation<\/code>\u00a0\u2014 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f\/\u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><code>slideAnimation<\/code>\u00a0\u2014 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043e\u0431\u043b\u0430\u043a\u0430.<\/p>\n<\/li>\n<li>\n<p><code>_config<\/code> \u043d\u0430\u0448\u0430 \u043c\u043e\u0434\u0435\u043b\u044c\u2011\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f. \u0418\u0437\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435 \u043f\u043e\u043b\u0435.<\/p>\n<\/li>\n<li>\n<p><code>initState()<\/code> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u2011\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<\/li>\n<li>\n<p><code>_initAnimation()<\/code> \u043c\u0435\u0442\u043e\u0434 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u043f\u043e\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 <code>CloudConfig _config<\/code>, \u0432\u043b\u0438\u044f\u044e\u0449\u0438\u0435 \u043d\u0430\u00a0\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e.<\/p>\n<\/li>\n<li>\n<p><code>build()<\/code> \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 (\u0433\u0440\u0443\u0431\u043e).<\/p>\n<\/li>\n<li>\n<p><code>didUpdateWidget()<\/code>\u00a0\u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0441\u044f\u043a\u0438\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u0430. \u0412\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u044b\u0439 <code>CloudConfig cloudConfig<\/code>, \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0438 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u044d\u0442\u043e\u0433\u043e \u043c\u0435\u0441\u0442\u0430 \u0432\u00a0\u0434\u0435\u0440\u0435\u0432\u0435 \u0434\u043b\u044f\u00a0\u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0441\u00a0\u0442\u0435\u043c\u00a0\u0436\u0435 <code>runtimeType<\/code> \u0438 <code>Widget.key<\/code>. \u0424\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u043e\u0431\u043d\u043e\u0432\u0438\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e <code>widget<\/code> \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>_CloudWidgetState<\/code> \u0434\u043b\u044f\u00a0\u0441\u0441\u044b\u043b\u043a\u0438 \u043d\u0430\u00a0\u043d\u043e\u0432\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442, \u0430\u00a0\u0437\u0430\u0442\u0435\u043c \u0432\u044b\u0437\u043e\u0432\u0435\u0442 \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0441\u00a0\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u043c \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u0432\u00a0\u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<li>\n<p><code>dispose()<\/code> \u043c\u0435\u0442\u043e\u0434 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u0431\u044a\u0435\u043a\u0442 (<code>CloudWidget<\/code>) \u0443\u0434\u0430\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0437\u00a0\u0434\u0435\u0440\u0435\u0432\u0430 \u043d\u0430\u0432\u0441\u0435\u0433\u0434\u0430.<\/p>\n<\/li>\n<\/ol>\n<p>\u041f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0440\u0430\u0441\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e:<\/p>\n<pre><code class=\"dart\">@override void initState() {   super.initState();   controller = AnimationController(vsync: this);   _initAnimation(); }  void _initAnimation() {   _config = widget.cloudConfig;   controller.duration = Duration(milliseconds: _config.slideDurMill);      scaleAnimation =       Tween(begin: _config.scaleBegin, end: _config.scaleEnd).animate(     CurvedAnimation(parent: controller, curve: _config.scaleCurve),   );   slideAnimation = Tween(     begin: Offset.zero,     end: Offset(_config.slideX \/ _config.size, _config.slideY \/ _config.size),   ).animate(CurvedAnimation(parent: controller, curve: _config.slideCurve));      controller.repeat(reverse: true); }<\/code><\/pre>\n<p>\u041f\u043e\u00a0\u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u0441\u0447\u0451\u0442\u0443, \u0432\u00a0\u043c\u0435\u0442\u043e\u0434\u0435 <code>_initAnimation()<\/code> \u043c\u044b \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u043e\u043b\u044f \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437\u00a0\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. <code>Tween<\/code>\u00a0\u2014 \u044d\u0442\u043e\u00a0\u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c, \u0430 <code>CurvedAnimation<\/code> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u0440\u0438\u0432\u0443\u044e \u043a\u00a0\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, <code>Curves.fastOutSlowIn<\/code>).<\/p>\n<p>\u041e\u0434\u0438\u043d \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430\u00a0\u0434\u0432\u0435 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. \u0412\u00a0\u043a\u043e\u043d\u0446\u0435 \u043c\u044b \u0437\u0430\u0446\u0438\u043a\u043b\u0438\u0432\u0430\u0435\u043c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e.<\/p>\n<pre><code class=\"dart\">@override void didUpdateWidget(covariant CloudWidget oldWidget) {   super.didUpdateWidget(oldWidget);   final oldConfig = oldWidget.cloudConfig;   final nowConfig = widget.cloudConfig;   \/\/ rebuild only what is used in the `build` method   if (oldConfig.x != nowConfig.x ||       oldConfig.y != nowConfig.y ||       oldConfig.icon != nowConfig.icon ||       oldConfig.color != nowConfig.color) {     _config = nowConfig;     return;   }   \/\/ rebuild all   if (oldConfig != nowConfig) {     _initAnimation();   } }<\/code><\/pre>\n<p>\u0422\u0430\u043a\u2011\u0442\u0430\u043a, \u043d\u0430\u0448\u0430 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430 \u2192 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434. \u0421\u0443\u0442\u044c \u0432\u00a0\u0442\u043e\u043c, \u0447\u0442\u043e\u00a0\u043c\u044b \u0445\u043e\u0442\u0438\u043c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c (\u0438 \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c) \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0438\u0437\u043c\u0435\u043d\u0438\u043b\u0438\u0441\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043d\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442. \u041a\u0430\u043a\u00a0\u0432\u0438\u0434\u0438\u043c, \u043e\u043d\u0430 \u043d\u0435\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442, \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u2011\u0438\u043a\u043e\u043d\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u044d\u0442\u043e <code>Icons.cloud_rounded<\/code>) \u0438 \u0435\u0451 \u0446\u0432\u0435\u0442\u0430.<\/p>\n<pre><code class=\"dart\">@override Widget build(BuildContext context) {   return Stack(     fit: StackFit.expand,     clipBehavior: Clip.none,     children: [       Positioned(         left: _config.x,         top: _config.y,         child: SlideTransition(           position: slideAnimation,           child: ScaleTransition(             scale: scaleAnimation,             child: _config.widgetCloud ??                 Icon(                   _config.icon,                   color: _config.color,                   size: _config.size,                 ),           ),         ),       ),     ],   ); }<\/code><\/pre>\n<p>\u0412\u0441\u0451 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e. <code>Stack<\/code> \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c\u0441\u044f \u0432\u00a0\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 \u0438 \u0441\u043f\u043e\u0437\u0438\u0446\u0438\u0446\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0438\u0434\u0436\u0435\u0442\u2011\u043e\u0431\u043b\u0430\u0447\u043a\u043e \u0432\u00a0\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435. \u0412\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e <code>CustomPainter<\/code> \u043d\u0435\u0442, \u0442.\u043a. \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f\u00a0\u043b\u0438\u0431\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0432\u0438\u0434\u0436\u0435\u0442,\u00a0\u043b\u0438\u0431\u043e \u0438\u043a\u043e\u043d\u043a\u0430.<\/p>\n<p>\u041d\u0443 \u0438 \u043d\u0435\u00a0\u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0443\u0442\u0438\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440, \u043a\u043e\u0433\u0434\u0430 \u0432\u0438\u0434\u0436\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f (\u0438\u043d\u0430\u0447\u0435, \u0434\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c, \u0443\u0442\u0435\u0447\u043a\u0430 \u043f\u0430\u043c\u044f\u0442\u0438):<\/p>\n<pre><code class=\"dart\">@override void dispose() {   controller.dispose();   super.dispose(); }<\/code><\/pre>\n<p>\u0412\u043e\u0442 \u0438 \u0432\u0441\u0451, \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d. \u0425\u043e\u0447\u0443 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e\u00a0\u0435\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c <code>useEffect<\/code> \u0438\u0437\u00a0\u043f\u0430\u043a\u0435\u0442\u0430 <a href=\"https:\/\/pub.dev\/packages\/flutter_hooks\" rel=\"noopener noreferrer nofollow\">flutter_hooks<\/a>, \u0442\u043e \u043a\u043e\u0434 \u0441\u043e\u043a\u0440\u0430\u0442\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u043f\u043e\u0440\u044f\u0434\u043e\u043a. \u0425\u0443\u043a <code>useEffect<\/code> \u044d\u043a\u0432\u0438\u0432\u0430\u043b\u0435\u043d\u0442\u0435\u043d <code>initState<\/code> + <code>didUpdateWidget<\/code> + <code>dispose<\/code>.<\/p>\n<p><a class=\"anchor\" name=\"final\" id=\"final\"><\/a><\/p>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0421\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u0434\u043e\u0448\u043b\u0430 \u043a\u00a0\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044e: \u0447\u0435\u0440\u0435\u0437 \u043c\u0435\u0441\u044f\u0446 \u043f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u044f \u0441\u043d\u043e\u0432\u0430\u00a0\u0431\u044b\u043b \u0441\u0447\u0430\u0441\u0442\u043b\u0438\u0432, \u0437\u0434\u043e\u0440\u043e\u0432 \u0433\u043e\u043b\u043e\u0432\u043e\u0439 \u0438 \u0442\u0435\u043b\u043e\u043c. \u0425\u043e\u0447\u0443 \u043d\u0430\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043e\u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u00a0\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u044c \u043d\u0435\u043e\u0431\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0410\u00a0\u0435\u0441\u043b\u0438 \u0443\u0436 \u0438 \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0442\u0430\u043a\u043e\u0435\u00a0\u2014 \u043d\u0435\u00a0\u043f\u043e\u0431\u043e\u044f\u0442\u044c\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 (\u0448\u0443\u0442\u043b\u0438\u0432\u043e):<\/p>\n<pre><code class=\"bash\">git switch --create other_solution last_stable_commit<\/code><\/pre>\n<p>\u0412\u0441\u0435\u0433\u043e \u0445\u043e\u0440\u043e\u0448\u0435\u0433\u043e! ( \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0432\u00a0\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0445\u00a0\u0431\u044b\u043b \u043a\u043e\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 )<\/p>\n<p><a class=\"anchor\" name=\"links\" id=\"links\"><\/a><\/p>\n<h3>\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a:<\/h3>\n<ol>\n<li>\n<p>\u00abweather_animation\u00bb \u043d\u0430\u00a0github\u00a0\u2014 <a href=\"https:\/\/github.com\/PackRuble\/weather_animation\" rel=\"noopener noreferrer nofollow\">Link<\/a><\/p>\n<\/li>\n<li>\n<p>\u00abweather_animation\u00bb \u043d\u0430\u00a0pub.dev\u00a0\u2014 <a href=\"https:\/\/pub.dev\/packages\/weather_animation\" rel=\"noopener noreferrer nofollow\">Link<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u043e\u043d\u043b\u0430\u0439\u043d\u00a0\u2014 <a href=\"https:\/\/packruble.github.io\/weather_animation\/\" rel=\"noopener noreferrer nofollow\">Link<\/a><\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u044d\u043a\u0440\u0430\u043d \u0432\u00a0\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438\u00a0\u2014 <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.Ruble.Pack.weather_today\" rel=\"noopener noreferrer nofollow\">Weather Today<\/a>. \u0421\u043e\u0431\u0438\u0440\u0430\u044e\u0441\u044c \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0440\u044f\u0434 \u0441\u0442\u0430\u0442\u0435\u0439 \u043e\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0445, \u0441\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\n<p> <!----> <!----><\/div>\n<p> <!----> <!----><br \/> \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\/717192\/\"> https:\/\/habr.com\/ru\/post\/717192\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u00ab\u0427\u0451\u0440\u0442, \u0433\u0434\u0435 \u0438\u0441\u043a\u0430\u0442\u044c \u044d\u0442\u0438 \u0432\u0430\u0448\u0438 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u0438 \u0431\u0435\u0437\u0432\u043e\u0437\u043c\u0435\u0437\u0434\u043d\u044b\u0435 \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0434\u043b\u044f\u00a0\u043a\u043e\u043c\u043c\u0435\u0440\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0438\u00a0\u043b\u0438\u0447\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u00a0\u0441\u0432\u043e\u0438\u0445 \u0431\u043e\u0433\u043e\u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0445 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u0445?\u00bb\u00a0\u2014 \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a, \u043d\u0435\u0443\u0434\u0430\u0447\u043d\u043e \u0438 \u043d\u0435\u0442\u0435\u0440\u043f\u0435\u043b\u0438\u0432\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u043f\u043e\u0438\u0441\u043a\u043e\u043c, \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0441\u00a0\u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430, \u0434\u0430\u0431\u044b \u0443\u043a\u0440\u0430\u0441\u0438\u0442\u044c\u00a0\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u043e\u0434\u044b \u00abWeather Today\u00bb.<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/play-lh.googleusercontent.com\/sCzM99ufyAKjQJJwSi8K0Byn9lGADNofwOAB_56aUs6cy2VS7RKWb7zJD_20-iVYU7o=w600-h300-pc0xffffff-pd&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>Weather Today &#8212; Apps on Google Play<\/span><\/div>\n<p><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.Ruble.Pack.weather_today&amp;hl=en_US&amp;gl=EE\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">play.google.com<\/a><\/div>\n<\/div>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430<\/strong>: \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u0433\u043e\u0434\u044b. \u0418 \u043f\u0440\u0438\u00a0\u043f\u0435\u0440\u0432\u043e\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0435 \u0438\u043d\u0442\u0440\u043e. \u0418 \u0447\u0442\u043e\u0431\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u00a0\u0431\u044b\u043b\u0430, \u0430\u00a0\u043d\u0435\u00a0\u043f\u0440\u043e\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0418 \u0432\u0441\u0451 \u044d\u0442\u043e \u043f\u0440\u0438\u044f\u0442\u043d\u043e\u00a0\u043b\u0438\u0441\u0442\u0430\u043b\u043e\u0441\u044c. \u0421\u0440\u043e\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u00a0\u2014 2\u00a0\u043d\u0435\u0434\u0435\u043b\u0438.<\/p>\n<p>\u041d\u043e, \u043d\u0435\u043b\u044c\u0437\u044f \u0432\u0435\u0434\u044c \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c, \u0438 \u043d\u0435\u00a0\u043d\u0430\u0433\u043e\u0440\u043e\u0434\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0432\u0435\u043b\u043e\u0441\u0438\u043f\u0435\u0434 \u043d\u0430\u00a0\u0442\u0430\u043a\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435? \u0425\u0435\u0445. \u041a\u043e\u043d\u0435\u0447\u043d\u043e, \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u043a\u0435\u0442. \u0422\u0430\u043a \u0438 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u0430\u00a0\u0441\u0432\u0435\u0442 \u00abweather_animation\u00bb.<\/p>\n<div class=\"embed_link\">\n<div class=\"embed__thumb\" style=\"background-image: url(&quot;https:\/\/pub.dev\/static\/hash-80r36pn7\/img\/pub-dev-icon-cover-image.png&quot;);\"><\/div>\n<div class=\"embed__caption\">\n<div class=\"embed__caption-title\"><span>weather_animation | Flutter Package<\/span><\/div>\n<p><a href=\"https:\/\/pub.dev\/packages\/weather_animation\" target=\"_blank\" rel=\"noopener noreferrer nofollow\" class=\"embed__caption-link\">pub.dev<\/a><\/div>\n<\/div>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u041d\u0430\u00a0\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442\u00a0\u0431\u044b\u043b\u0430 \u0435\u0449\u0451 \u043e\u0434\u043d\u0430 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044c\u00a0\u2014 \u044f \u043d\u0435\u00a0\u043f\u043e\u043d\u0438\u043c\u0430\u043b, \u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0432\u00a0flutter. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0442\u0430\u043a: \u0432\u0437\u044f\u0442\u044c \u043a\u0430\u043a\u043e\u0439\u2011\u043d\u0438\u0431\u0443\u0434\u044c \u0438\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043f\u0430\u043a\u0435\u0442, \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f, \u043a\u0430\u043a\u00a0\u0432\u00a0\u043d\u0451\u043c \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f, \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u0432\u00a0\u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u0435.<\/p>\n<p>\u041d\u043e\u00a0\u043f\u043e\u0447\u0435\u043c\u0443 \u043f\u043e\u044f\u0432\u0438\u043b\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u043f\u0430\u043a\u0435\u0442 \u0442\u043e\u0433\u0434\u0430? \u041e\u0431\u043e\u00a0\u0432\u0441\u0451\u043c \u043f\u043e\u00a0\u043f\u043e\u0440\u044f\u0434\u043a\u0443.<\/p>\n<h2>\u0421\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435<\/h2>\n<ul>\n<li>\n<p><a href=\"#chapter1\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 1. \u041d\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0447\u0443\u0436\u043e\u0433\u043e<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter2\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 2. \u0414\u0435\u043f\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter3\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 3. \u041d\u0430\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter4\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 4. \u0413\u043d\u0435\u0432 \u043e\u0442\u00a0\u0440\u0435\u0444\u043b\u0435\u043a\u0441\u0438\u0438 \u0438\u043b\u0438\u00a0\u043d\u0435\u043e\u0431\u0434\u0443\u043c\u0430\u043d\u043d\u044b\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#chapter5\" rel=\"noopener noreferrer nofollow\">\u0413\u043b\u0430\u0432\u0430 5. \u041e\u0442\u0440\u0438\u0446\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u0440\u043e\u0441\u0442 \u043e\u0431\u043b\u0430\u0447\u043a\u0430 \u0438\u043b\u0438\u00a0\u043a\u0430\u043a\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#final\" rel=\"noopener noreferrer nofollow\">\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#links\" rel=\"noopener noreferrer nofollow\">\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0441\u044b\u043b\u043e\u043a<\/a><\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"chapter1\" id=\"chapter1\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 1. \u041d\u0435\u043f\u0440\u0438\u043d\u044f\u0442\u0438\u0435 \u0447\u0443\u0436\u043e\u0433\u043e<\/h3>\n<p>\u041d\u0430 <a href=\"https:\/\/pub.dev\/\" rel=\"noopener noreferrer nofollow\">pub.dev<\/a> \u044f \u043d\u0430\u0448\u0435\u043b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043f\u0440\u043e\u0435\u043a\u0442\u00a0\u2014 <a href=\"https:\/\/pub.dev\/packages\/weather_widget\" rel=\"noopener noreferrer nofollow\">weather_widget<\/a>, \u0438 \u043d\u0430\u0447\u0430\u043b \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f. \u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0430\u043d\u0438\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u043f\u043e\u0433\u043e\u0434\u0430, \u0432\u00a0\u043c\u0435\u0440\u0443 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f \u0438 \u043f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043d\u0430\u00a0\u0432\u0437\u0433\u043b\u044f\u0434, \u0430\u00a0\u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c\u00a0\u2014 \u043a\u043e\u0434 \u043d\u0430\u00a0flutter. \u0422\u043e, \u0447\u0442\u043e\u00a0\u043d\u0443\u0436\u043d\u043e, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e, \u043a\u043e\u0434\u043e\u0432\u0430\u044f \u0431\u0430\u0437\u0430 \u043d\u0435\u00a0\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u043b\u0430\u0441\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0432\u0443\u0445 \u043b\u0435\u0442 \u0438 \u043f\u0440\u043e\u0435\u043a\u0442 \u043d\u0435\u00a0\u043f\u043e\u043b\u0430\u0433\u0430\u043b\u0441\u044f \u043d\u0430\u00a0null safety. \u0415\u0441\u0442\u044c \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u043a\u0430\u043a\u0430\u044f\u2011\u043d\u0438\u043a\u0430\u043a\u0430\u044f, \u0434\u0430\u00a0\u0435\u0449\u0451 \u0438 \u0441\u00a0gif (!) \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439, \u0438 \u0434\u0430\u0436\u0435 \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u043d\u0430\u00a0\u043a\u0438\u0442\u0430\u0439\u0441\u043a\u043e\u043c! \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e\u00a0\u043f\u043e\u0434\u00a0\u043a\u0430\u043f\u043e\u0442\u043e\u043c&#8230;<\/p>\n<blockquote>\n<p>\u0427\u0438\u0442\u0430\u0442\u0435\u043b\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u0438\u0442, \u0447\u0442\u043e\u00a0\u043e\u0431\u0443\u0447\u0430\u0442\u044c\u0441\u044f \u043d\u0430\u00a0\u043d\u0435\u043f\u043e\u043d\u044f\u0442\u043d\u043e \u043a\u0430\u043a\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430\u0445\u00a0\u2014 \u0434\u0435\u043b\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435. \u041d\u043e, \u0442\u0430\u043a\u043e\u0432 \u043f\u0443\u0442\u044c.<\/p>\n<\/blockquote>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0441\u0440\u0430\u0437\u0443 \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a \u0434\u0435\u043b\u043e \u043d\u0435\u00a0\u043f\u043e\u0439\u0434\u0435\u0442 \u0438 \u043a\u043e\u0434 \u0442\u0443\u0442, \u0441\u043a\u0430\u0436\u0435\u043c \u0442\u0430\u043a, \u043d\u0435\u00a0\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u00a0\u0442\u043e\u043b\u044c\u043a\u043e \u043c\u043e\u0438\u043c \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430\u043c \u043a\u043e\u0434\u043e\u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f, \u043d\u043e\u00a0\u0438 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u044b\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f\u043c dart\/flutter. \u0427\u0442\u043e\u0431\u044b \u043d\u0435\u00a0\u0431\u044b\u0442\u044c \u0433\u043e\u043b\u043e\u0441\u043b\u043e\u0432\u043d\u044b\u043c, \u0432\u043e\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b:<\/p>\n<blockquote>\n<p>\u041d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 <a href=\"https:\/\/pub.dev\/packages\/weather_widget\/versions\/1.0.6\" rel=\"noopener noreferrer nofollow\">v 1.0.6<\/a>, \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 commit <a href=\"https:\/\/github.com\/carendule\/WeatherWidget\/commit\/d7c6e2531fb62851cb0d7acc9bfd301467009a47\" rel=\"noopener noreferrer nofollow\">on Oct 26, 2021<\/a> \u0432\u00a0master. \u0417\u0434\u0435\u0441\u044c \u0438 \u0434\u0430\u043b\u0435\u0435 \u0432\u0441\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u0441\u00a0\u044d\u0442\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439.<\/p>\n<\/blockquote>\n<ol>\n<li>\n<p>\u0412\u00a0\u043f\u0430\u043f\u043a\u0435 <code>lib<\/code> \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f <code>example<\/code>, \u0447\u0435\u0433\u043e \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c. \u0422\u043e\u0442\u00a0\u0436\u0435 <code>example<\/code> \u043f\u0440\u043e\u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d \u0432\u00a0\u043a\u043e\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0430\u043c \u043e\u043d \u0438 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c).<\/p>\n<\/li>\n<li>\n<p>\u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u0432\u00a0\u043e\u0434\u043d\u043e\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u043c \u0444\u0430\u0439\u043b\u0435 <code>WeatherWidget.dart<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0435\u0449\u0451 \u0438 \u043d\u0435\u00a0\u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d, \u043a\u0430\u043a <code>library<\/code>. \u0412\u00a0\u0434\u043e\u0431\u0430\u0432\u043e\u043a \u043a\u043e \u0432\u0441\u0435\u043c\u0443, \u0435\u0441\u0442\u044c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u0438 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0435\u0441\u043b\u0438 \u043f\u0430\u043a\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f <code>weather_widget<\/code>, \u0442\u043e \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u0444\u0430\u0439\u043b \u043f\u0430\u043a\u0435\u0442\u0430 \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c <code>lib\/weather_widget.dart<\/code>.<\/p>\n<p>\u0418\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043f\u0430\u043a\u0435\u0442\u043e\u0432 \u0432\u00a0pub.dev \u043f\u0435\u0440\u0435\u0432\u0430\u0440\u0438\u0432\u0430\u044f \u0434\u0432\u0430 \u044d\u0442\u0438\u0445 \u043f\u0443\u043d\u043a\u0442\u0430, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0432\u043e\u0442 \u0447\u0442\u043e:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<\/li>\n<li>\n<p>\u0412\u00a0\u0444\u0430\u0439\u043b\u0435 <code>pubspec.yaml<\/code> \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442\u0441\u044f\u00a0\u043b\u0438\u0448\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438. \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c <code>cupertino_icons: ^1.0.3<\/code> \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u044f\u0432\u043d\u043e \u0442\u0430\u043c \u043d\u0435\u00a0\u043d\u0443\u0436\u043d\u0430. \u0422\u0430\u043a\u043e\u0433\u043e \u0440\u043e\u0434\u0430 <a href=\"https:\/\/github.com\/carendule\/WeatherWidget\/issues\/1\" rel=\"noopener noreferrer nofollow\">issue<\/a>:<\/p>\n<\/li>\n<\/ol>\n<blockquote>\n<p>Because every version of weather_widget depends on cupertino_icons ^0.1.2\u00a0and flutter_sun_set_rise_api depends on cupertino_icons ^1.0.0, weather_widget is forbidden.<\/p>\n<\/blockquote>\n<p>\u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e\u00a0\u0430\u0432\u0442\u043e\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u0435\u0440\u0441\u0438\u044e \u043f\u0430\u043a\u0435\u0442\u0430 <code>cupertino_icons<\/code> \u0432 <code>pubspec.yaml<\/code>, \u0432\u043c\u0435\u0441\u0442\u043e \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u0432\u043e\u043e\u0431\u0449\u0435 \u0443\u0431\u0440\u0430\u0442\u044c \u043e\u0442\u0442\u0443\u0434\u0430.<\/p>\n<p>\u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 <code>import 'package:flutter\/cupertino.dart';<\/code> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432\u00a0\u043f\u0440\u043e\u0435\u043a\u0442\u0435 (\u041a\u0441\u0442\u0430\u0442\u0438 \u0434\u0430, android studio \u043e\u0447\u0435\u043d\u044c \u0432\u0440\u0435\u0434\u043d\u044b\u0439, \u0438 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u044b \u043f\u0440\u043e\u0432\u0435\u043b \u0441\u00a0\u043d\u0438\u043c \u043c\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <code>import 'package:flutter\/material.dart';<\/code>, \u0442\u043e \u043e\u043d \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u043e\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u0437\u00a0cupertino).<\/p>\n<p>\u042f \u0443\u0436\u0435 \u043d\u0435\u00a0\u0431\u0443\u0434\u0443 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u043e\u00a0semantic versions, \u043e\u00a0\u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 TODO\u2011\u0448\u043a\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0443\u0436\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b, \u0438 \u043e\u00a0\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0441\u0430\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430 (\u043b\u0438\u043d\u0442\u0435\u0440 \u043d\u0438\u043a\u0442\u043e \u043d\u0435\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0438 \u0444\u0430\u0439\u043b\u0430 <code>analysis_options.yaml<\/code> \u0442\u0430\u043c \u043d\u0435\u0442). \u0412\u00a0\u043e\u0431\u0449\u0435\u043c, \u044f \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u043e\u0434\u0443\u043c\u044b\u0432\u0430\u043b, \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043a\u043e\u043d\u0442\u0440\u0438\u0431\u044c\u044e\u0442\u0438\u0442\u044c, \u043d\u043e\u00a0\u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e\u00a0\u0445\u043e\u0447\u0443 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u043e\u043e\u0431\u0449\u0435 \u0432\u0441\u0451. \u0411\u043b\u0430\u0433\u043e, \u0438\u043c\u0435\u044e\u0449\u0430\u044f\u0441\u044f <em>Apache-2.0\u00a0license<\/em> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438, \u043a\u043e\u043d\u0435\u0447\u043d\u043e, \u044f \u0443\u043a\u0430\u0437\u0430\u043b \u0430\u0432\u0442\u043e\u0440\u0430 \u0432\u00a0NOTICE.<\/p>\n<blockquote>\n<p>\u041d\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e\u00a0\u0436\u0435\u043b\u0430\u043d\u0438\u044f \u043a\u0440\u0438\u0442\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043a\u0435\u0442 \u0441\u00a0\u0442\u0430\u043a\u043e\u0439 \u0447\u0443\u0434\u0435\u0441\u043d\u043e\u0439\u00a0\u043b\u0438\u0446\u0435\u043d\u0437\u0438\u0435\u0439. \u042f\u00a0\u043b\u0438\u0448\u044c \u043e\u0431\u0440\u0430\u0449\u0430\u044e \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0445\u00a0\u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430\u0447\u0438\u0441\u0442\u043e. \u0410\u00a0\u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0434\u0447\u0435\u0440\u043a\u0438\u0432\u0430\u044e, \u0447\u0442\u043e\u00a0\u043f\u0440\u043e\u0435\u043a\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0441\u043f\u043e\u0440\u043d\u043e), \u0438\u043c\u0435\u043b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e (\u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u043c\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e) \u0438 \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0435 gif (\u044d\u0442\u043e \u043c\u044b \u043b\u044e\u0431\u0438\u043c).<\/p>\n<\/blockquote>\n<p>\u0411\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u0451 \u0438 \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e.<\/p>\n<p><a class=\"anchor\" name=\"chapter2\" id=\"chapter2\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 2. \u0414\u0435\u043f\u0440\u0435\u0441\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435<\/h3>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u0442\u0430\u043a:<\/p>\n<ol>\n<li>\n<p>\u0418\u0437\u044b\u043c\u0430\u0435\u043c \u0432\u0438\u0434\u0436\u0435\u0442 \u0438 \u043a\u043b\u0430\u0434\u0435\u043c \u0432\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u00a0\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435. \u0415\u0441\u043b\u0438 \u0447\u0442\u043e\u2011\u0442\u043e \u043d\u0435\u00a0\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u043a\u043e\u0434 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0413\u043b\u0443\u0431\u043e\u043a\u043e \u043f\u0435\u0440\u0435\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c (refactoring) \u043a\u043e\u0434, \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u044f hot reload.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u0434\u043b\u044f\u00a0\u043b\u0435\u0433\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438<\/p>\n<\/li>\n<\/ol>\n<p>\u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430\u00a0\u0442\u043e, \u0447\u0442\u043e\u00a0\u043a\u043e\u0434 \u043d\u0435 \u00abnull safety\u00bb. \u041c\u044b \u043c\u043e\u0433\u043b\u0438\u00a0\u0431\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 <code>dart migrate<\/code>, \u043d\u043e\u00a0\u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043c \u0438\u043d\u0430\u0447\u0435.<\/p>\n<blockquote>\n<p>\u0427\u0442\u043e\u0431\u044b \u0443\u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e\u00a0\u0442\u0430\u043a\u043e\u0435 \u00abnull safety\u00bb, \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u044c\u0442\u0435\u0441\u044c \u0441\u00a0\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0451\u0439\u00a0\u2014 <a href=\"https:\/\/habr.com\/ru\/post\/513466\/\" rel=\"noopener noreferrer nofollow\">Null safety \u0432\u00a0Dart<\/a>. \u0427\u0442\u043e\u0431\u044b \u043f\u0440\u043e\u0435\u043a\u0442 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044e, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e dart \u043d\u0435\u00a0\u043d\u0438\u0436\u0435 2.12<\/p>\n<\/blockquote>\n<p>\u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e:<\/p>\n<pre><code>environment:   sdk: \">=2.1.0 &lt;3.0.0\" <\/code><\/pre>\n<p>\u0415\u0449\u0451 \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043b\u0435\u0437\u043d\u0430\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 <code>.metadata<\/code>: \u0430\u0432\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b flutter \u0432\u0435\u0440\u0441\u0438\u0438 <code>v1.12.13+hotfix.8<\/code>, \u0447\u0442\u043e \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u043e\u043c\u0443 \u043f\u0435\u0440\u0438\u043e\u0434\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u0432 \u043f\u0430\u043a\u0435\u0442\u0435 weather_widget \u043d\u0435\u0442 \u043f\u043b\u0430\u0448\u043a\u0438 &#171;Null safety&#187;. \u0422\u0430\u043a\u0436\u0435, \u043a\u0440\u0438\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430 \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 1.0.0+1 \u0434\u043e 1.0.6 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e (\u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d dispose \u0432 \u043f\u0430\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432 \u0438 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u043e \u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430). <\/figcaption><\/figure>\n<p>\u0421\u0442\u0430\u043b\u043e \u043e\u0447\u0435\u043d\u044c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0430 \u0447\u0442\u043e \u0436\u0435 \u0441\u043a\u0430\u0436\u0435\u0442 \u043b\u0438\u043d\u0442\u0435\u0440. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u043c \u0442\u0430\u043a\u043e\u0432\u043e\u0439, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0438\u0439 \u043a \u043f\u0435\u0440\u0438\u043e\u0434\u0443 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0430\u043a\u0435\u0442\u0430 (<code>lint: ^1.1.1<\/code>), \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0432 \u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code> \u043e\u0434\u043d\u0443 \u0441\u0442\u0440\u043e\u0447\u043a\u0443 \u043a\u043e\u0434\u0430:<\/p>\n<pre><code class=\"yaml\">analyzer:   strong-mode:     implicit-casts: true<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f <code>dart analysis<\/code> \u0432\u0438\u0434\u0438\u043c:<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u043c\u044b \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u043c \u043d\u0435\u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<pre><code class=\"yaml\">analyzer:   strong-mode:     implicit-casts: true<\/code><\/pre>\n<p>\u0442\u043e \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 (\u0438\u043c\u0435\u043d\u043d\u043e erros) \u0438\u0441\u0447\u0435\u0437\u043d\u0443\u0442. \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<blockquote>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 true \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u0440\u0443\u0435\u0442, \u0447\u0442\u043e\u00a0\u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0432\u044b\u0432\u043e\u0434\u0430 \u0442\u0438\u043f\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u00a0\u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u044f\u0432\u043d\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043e\u0442\u00a0dynamic \u043a\u00a0\u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c\u0443 \u0442\u0438\u043f\u0443, \u0447\u0442\u043e\u00a0\u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u00a0\u0441\u0431\u043e\u044e \u0432\u043e\u00a0\u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u042d\u0442\u043e\u0442 \u0440\u0435\u0436\u0438\u043c \u0441\u043e\u043e\u0431\u0449\u0430\u0435\u0442 \u043e\u00a0\u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0448\u0438\u0431\u043a\u0435, \u0442\u0440\u0435\u0431\u0443\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u044f\u0432\u043d\u043e\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438\u043b\u0438\u00a0\u0438\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434.<\/p>\n<\/blockquote>\n<p>\u0412\u00a0dart \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u0441\u0442\u0430\u0440\u0448\u0435 2.16\u00a0\u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0430\u043a\u0442\u0438\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<pre><code class=\"yaml\">analyzer:   language:     strict-casts: false<\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/dart.dev\/guides\/language\/analysis-options\" rel=\"noopener noreferrer nofollow\">Customizing static analysis<\/a>.<\/p>\n<blockquote>\n<p><em>\u0418\u0442\u043e\u0433<\/em>: \u0440\u0435\u0431\u044f\u0442\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u00a0\u043b\u0438\u043d\u0442\u0435\u0440. \u0412\u0430\u0448 \u043a\u043e\u0434 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0435\u0439 \u0438, \u0435\u0441\u043b\u0438 \u043f\u043e\u0432\u0435\u0437\u0435\u0442, \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0439 \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438 \u0432\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u043e\u043b\u0433\u043e\u0434\u0430:)<\/p>\n<\/blockquote>\n<p>\u041c\u0435\u043d\u044f \u044d\u0442\u043e \u0432\u0441\u0451 \u043d\u0435\u00a0\u0432\u043e\u043b\u043d\u043e\u0432\u0430\u043b\u043e, \u0438\u0431\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0447\u0442\u043e\u00a0\u0443\u0433\u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043f\u043e\u043d\u044f\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0440\u0430\u0431\u043e\u0442\u044b \u043a\u043e\u0434\u0430. \u042f \u043f\u043e\u043f\u044b\u0442\u0430\u043b\u0441\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u00a0\u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u0430 \u0434\u043e\u0436\u0434\u0438\u043a\u0430:<\/p>\n<details class=\"spoiler\">\n<summary>\u041e\u0447\u0435\u043d\u044c \u0434\u043b\u0438\u043d\u043d\u044b\u0439 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043a\u043e\u0434\u0430<\/summary>\n<div class=\"spoiler__content\">\n<figure class=\"full-width\"><figcaption>\u0431\u044b\u043b\u043e \u0434\u0432\u0430 \u043e\u0431\u043b\u0430\u043a\u0430 \u0441 \u0434\u0432\u0443\u043c\u044f \u0434\u043e\u0436\u0434\u044f\u043c\u0438 \u0438 \u0444\u043e\u043d\u043e\u043c, \u0430 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043e\u0434\u0438\u043d \u0434\u043e\u0436\u0434\u044c.<\/figcaption><\/figure>\n<\/p>\n<\/div>\n<\/details>\n<p>\u0414\u0430, \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 <s>\u0432\u044b\u043b\u0435\u0437\u0430\u0435\u0442 \u0438\u0437\u00a0\u0448\u0442\u0430\u043d\u043e\u0432<\/s> \u043d\u0435\u043e\u0431\u044a\u044f\u0442\u043d\u0430 \u0438 \u0441\u043f\u0440\u044f\u0442\u0430\u043d\u0430 \u0437\u0430\u00a0\u0441\u043f\u043e\u0439\u043b\u0435\u0440. \u041d\u043e\u00a0\u043a\u0430\u043a\u00a0\u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0434\u043e\/\u043f\u043e\u0441\u043b\u0435? \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0437\u0432\u0430\u043d <code>RainWidget<\/code> \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u043b\u0438 \u043e\u043d \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432\u00a0\u0441\u0435\u0431\u044f \u043e\u0431\u043b\u0430\u043a\u0430? \u0410\u00a0\u0444\u043e\u043d? <s>\u0414\u044b\u043c\u0430 \u0431\u0435\u0437\u00a0\u043e\u0433\u043d\u044f<\/s> \u0414\u043e\u0436\u0434\u044f \u0431\u0435\u0437\u00a0\u043e\u0431\u043b\u0430\u043a\u0430 \u043d\u0435\u00a0\u0431\u044b\u0432\u0430\u0435\u0442? \u041a\u0430\u043a\u00a0\u043f\u043e\u00a0\u043c\u043d\u0435, \u0442\u0430\u043a\u0438\u00a0\u0431\u044b\u0432\u0430\u0435\u0442, \u0438 \u0432\u00a0\u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u043e\u0436\u0434\u044c \u0434\u043e\u043b\u0436\u0435\u043d\u00a0\u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c \u0434\u043e\u0436\u0434\u044f (\u044d\u0442\u043e \u0432\u0435\u0434\u044c \u043f\u0440\u043e\u00a0\u043f\u0440\u0438\u043d\u0446\u0438\u043f \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438 (Single Responsibility Principle)). \u041f\u043e\u00a0\u043c\u043e\u0435\u0439 \u043b\u043e\u0433\u0438\u043a\u0435, \u0435\u0441\u043b\u0438 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u043b\u0430\u043a\u043e \u0441\u00a0\u0434\u043e\u0436\u0434\u0435\u043c, \u0442\u043e \u0432\u0438\u0434\u0436\u0435\u0442 \u043d\u0430\u0437\u043e\u0432\u0451\u043c <code>RainOfCloudsWidget<\/code>, \u043f\u0440\u0438\u00a0\u044d\u0442\u043e\u043c \u0432\u0441\u044e \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u043b\u0430\u043a\u0430 (\u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e \u0438\u00a0\u0442.\u00a0\u0434.) \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043c \u0432\u00a0\u043a\u043b\u0430\u0441\u0441\u0435 <code>CloudWidget<\/code>. \u0422\u043e\u00a0\u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u043a\u0430\u0441\u0430\u0435\u0442\u0441\u044f \u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0444\u043e\u043d\u0430 \u0432\u0441\u0435\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b <code>BackgroundWidget<\/code>\u00a0\u2014 \u043d\u0438 \u043a\u00a0\u0447\u0435\u043c\u0443 \u044d\u0442\u043e \u0432\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u0435 \u0434\u043e\u0436\u0434\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d \u043c\u0435\u0442\u043e\u0434 <code>didUpdateWidget()<\/code>, \u0442.\u043a. \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u0434\u043e\u0436\u0434\u044f <code>rainConfig<\/code> \u043c\u043e\u0436\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c\u0441\u044f \u0438 \u0432\u00a0\u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043d\u0430\u0448\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430\u00a0\u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0435\u0440\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u0430 \u043c\u043e\u0434\u0435\u043b\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. \u041f\u0440\u0438\u0437\u043d\u0430\u044e\u0441\u044c, \u043c\u043d\u0435 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432\u00a0\u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0435 (\u0438 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u044d\u0442\u043e \u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0435\u0439 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432). \u041e\u0434\u043d\u0430\u043a\u043e,\u00a0\u043b\u0438\u043d\u0442\u0435\u0440 dart \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442 \u044d\u0442\u043e\u0433\u043e \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c (\u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 <a href=\"https:\/\/dart-lang.github.io\/linter\/lints\/avoid_multiple_declarations_per_line.html\" rel=\"noopener noreferrer nofollow\">avoid_multiple_declarations_per_line<\/a>, \u0434\u043e\u0431\u0430\u0432\u0438\u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0434\u043b\u044f\u00a0\u043b\u0438\u043d\u0442\u0435\u0440\u0430 \u0432\u00a0\u0444\u0430\u0439\u043b <code>analysis_options.yaml<\/code>). \u0412\u00a0\u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0434\u043b\u044f\u00a0\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438, \u044d\u0442\u043e \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. \u041f\u043e\u0441\u043b\u0435 \u044f \u043e\u0431\u044a\u044f\u0441\u043d\u044e, \u0437\u0430\u0447\u0435\u043c \u0437\u0434\u0435\u0441\u044c freezed \u0438 json.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u00a0\u0432\u0441\u0435\u043c\u0443 \u043a\u043e\u0434\u0443 \u0440\u0430\u0441\u043a\u0438\u0434\u0430\u043d\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u00a0\u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0422\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432\u00a0\u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<\/ol>\n<p>\u0418 \u0442\u0430\u043a, \u0432\u0438\u0434\u0436\u0435\u0442 \u0437\u0430\u00a0\u0432\u0438\u0434\u0436\u0435\u0442\u043e\u043c,\u00a0\u0431\u044b\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d \u043f\u043e\u043b\u043d\u044b\u0439 \u0440\u0435\u0444\u0430\u043a\u0442\u043e\u0440\u0438\u043d\u0433 \u043a\u043e\u0434\u0430.<\/p>\n<p><a class=\"anchor\" name=\"chapter3\" id=\"chapter3\"><\/a><\/p>\n<h3>\u0413\u043b\u0430\u0432\u0430 3. \u041d\u0430\u0442\u043e\u0440\u0433\u043e\u0432\u044b\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430<\/h3>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u044f \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0441\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u043a\u0435\u0442, \u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044e \u043d\u0430\u0448\u0438\u0445 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c hot restart. \u041d\u043e, \u043f\u043e\u0441\u043b\u0435 \u043d\u0435\u0434\u043e\u043b\u0433\u0438\u0445 \u0440\u0430\u0437\u043c\u044b\u0448\u043b\u0435\u043d\u0438\u0439 \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u0434\u0435\u043b\u0435\u0439 \u043f\u0440\u0438\u043d\u044f\u043b\u0441\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440. \u041a\u043e\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u0438\u0441\u0430\u043b \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b \u0441\u0432\u043e\u044e \u0440\u0430\u0431\u043e\u0442\u0443, \u0431\u0435\u0437\u00a0\u0434\u043e\u043b\u0433\u043e\u0441\u0440\u043e\u0447\u043d\u043e\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438. \u0418 \u044d\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c.<\/p>\n<p><strong>\u0417\u0430\u0434\u0430\u0447\u0430<\/strong>: \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0432\u00a0\u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0439 \u0441\u0440\u043e\u043a (\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c, \u043d\u0435\u0434\u0435\u043b\u044f) \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0433\u043e\u0434\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443 \u043d\u0430\u00a0\u043e\u0441\u043d\u043e\u0432\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0438 \u0441\u0440\u0430\u0437\u0443 \u0432\u0438\u0434\u0435\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0411\u044b\u043b \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u00a0\u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c\u0438, \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c\u044b\u043c\u0438 \u0432\u00a0\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442\u00a0\u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0433\u043e\u0441\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0438 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438.<\/p>\n<figure class=\"full-width\"><figcaption>\u0432\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0441\u0446\u0435\u043d<\/figcaption><\/figure>\n<p>\u041f\u0440\u043e\u0432\u0435\u0434\u0443 \u043a\u0440\u0430\u0442\u043a\u0438\u0439 \u044d\u043a\u0441\u043a\u0443\u0440\u0441 \u043f\u043e\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440\u0430. \u0412\u0441\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430\u00a0\u0442\u0440\u0438 \u0441\u0435\u043a\u0446\u0438\u0438. \u0421\u043b\u0435\u0432\u0430 \u043d\u0430\u043f\u0440\u0430\u0432\u043e:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u0433\u043e\u0434\u043d\u0430\u044f \u0441\u0446\u0435\u043d\u0430\u00a0\u2014 \u044d\u0442\u043e \u043c\u0435\u0441\u0442\u043e, \u0433\u0434\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435 \u0433\u043e\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0430\u0448\u0435\u0439 \u043f\u043e\u0433\u043e\u0434\u043d\u043e\u0439 \u043a\u0430\u0440\u0442\u0438\u043d\u044b (\u0432 realtime). \u041d\u0438\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f \u0444\u043e\u0440\u043c\u0430 \u0434\u043b\u044f\u00a0\u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0445\u043e\u043b\u0441\u0442\u0430; \u0441\u043b\u0435\u0432\u0430 \u043e\u0442\u00a0\u043d\u0435\u0451 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u043e\u043d (aspect ratio), \u0441\u043f\u0440\u0430\u0432\u0430\u00a0\u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u0431\u0440\u043e\u0441\u0430 \u043f\u043e\u0437\u0438\u0446\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0442\u0435\u043a \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0445 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432, \u0433\u0434\u0435 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c, \u0443\u0434\u0430\u043b\u044f\u0442\u044c, \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0430\u0448\u0438 \u043f\u043e\u0433\u043e\u0434\u043d\u044b\u0435 \u0432\u0438\u0434\u0436\u0435\u0442\u044b (\u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0430\u043a\u043e\u0439 \u044f \u043d\u0430\u0437\u044b\u0432\u0430\u044e \u00abWeathunit\u00bb), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u0440\u0443\u0433 \u043d\u0430\u00a0\u0434\u0440\u0443\u0433\u0430 \u0432\u00a0\u0441\u0446\u0435\u043d\u0435. \u0421\u043b\u0435\u0432\u0430 \u0440\u044f\u0434\u043e\u043c \u0441\u00a0\u043a\u043d\u043e\u043f\u043a\u043e\u0439 \u00ab\u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0432\u0438\u0434\u0436\u0435\u0442\u0430\u00bb \u0435\u0441\u0442\u044c \u0442\u0430\u043a \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0435 presets\u00a0\u2014 \u043d\u0430\u0431\u043e\u0440 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0441\u0446\u0435\u043d. \u041d\u0438\u0436\u0435 \u0438\u043c\u0435\u0435\u0442\u0441\u044f toolbar\u00a0\u2014 \u043a\u043d\u043e\u043f\u043a\u0438 \u00ab\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043a\u043e\u0434\u0430\u00bb, \u00ab\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u00a0\u0432\u0435\u0441\u044c \u044d\u043a\u0440\u0430\u043d \u043f\u043e\u0433\u043e\u0434\u043d\u0443\u044e \u0441\u0446\u0435\u043d\u0443\u00bb, \u00ab\u0441\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb (\u043f\u043e\u0437\u0436\u0435 \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443), \u0438 \u0441\u0432\u0435\u0442\u043b\u0430\u044f\/\u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0430\u044f\/\u0442\u0435\u043c\u043d\u0430\u044f \u0442\u0435\u043c\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0442\u043e\u0440 \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432. \u0412\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u0432\u043e\u00a0\u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0432\u0438\u0434\u0436\u0435\u0442 \u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b, \u043d\u0430\u0431\u043b\u044e\u0434\u0430\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u00a0\u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0435\u043a\u0446\u0438\u0438. \u0424\u043e\u043d \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f: \u0441\u0442\u0435\u043a \u0446\u0432\u0435\u0442\u043e\u0432 \u0438 \u0443\u0433\u043e\u043b \u043d\u0430\u0447\u0430\u043b\u0430 \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0430.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0421\u043b\u0430\u0439\u0434\u0435\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 &#171;Weathunit&#187; \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<figure class=\"\"><figcaption>\u0438\u0437\u0432\u0438\u043d\u044f\u044e\u0441\u044c \u0437\u0430 &#171;\u0440\u0432\u0430\u043d\u044b\u0439 \u043a\u0440\u0430\u0441\u043d\u044b\u0439 \u043a\u0440\u0430\u0439&#187;. \u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442. <\/figcaption><\/figure>\n<ol>\n<li>\n<p>\u0422\u0438\u043f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412\u00a0web \u0447\u0438\u0441\u043b\u0430 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u044b \u0438\u043d\u0430\u0447\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442\u00a0\u0431\u044b\u0442\u044c \u043d\u044e\u0430\u043d\u0441\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438 \u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<\/div>\n<\/div>\n<\/div>\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-345501","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345501","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=345501"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/345501\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=345501"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=345501"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=345501"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}