{"id":445573,"date":"2025-01-21T15:13:04","date_gmt":"2025-01-21T15:13:04","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=445573"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=445573","title":{"rendered":"<span>\u0422\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0430\u0439\u0434 \u043f\u043e \u0441\u0442\u043e\u0440\u0438\u0441 \u0438\u043b\u0438 \u043a\u0430\u043a \u043c\u044b \u043f\u043e\u0432\u044b\u0441\u0438\u043b\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u0432 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0432 9 \u0440\u0430\u0437<\/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>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0424\u0430\u043b\u044c\u0437\u0430\u043d, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0432 <a href=\"https:\/\/m2.ru\">\u041c2<\/a>. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u041c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u0440\u043e\u0449\u0435, \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0438\u0446\u0430 (B2C) \u0438 \u0440\u0438\u0435\u043b\u0442\u043e\u0440\u044b (B2B2C). \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0430\u0439\u0434 \u0434\u043b\u044f android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u043e\u0440\u0438\u0441 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c: Compose, MVVM, Coroutines flow \u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.\u00a0<\/p>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c: \u043f\u043e\u0447\u0435\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0438\u0441\u0430\u043b \u0444\u0438\u0447\u0443, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0447\u0442\u043e \u043d\u0438 \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c, \u043d\u0438 \u0432 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0433\u0430\u0439\u0434\u043b\u0430\u0439\u043d\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0441 \u043d\u0443\u043b\u044f \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0434\u0430\u043b\u0435\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b. \u0418 \u0437\u0430\u0442\u0435\u043c \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.\u00a0 <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f01\/c9c\/f51\/f01c9cf519fa43264176f3e332b8f576.png\" width=\"700\" height=\"393\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f01\/c9c\/f51\/f01c9cf519fa43264176f3e332b8f576.png\"\/><\/figure>\n<p>\u041f\u0440\u043e\u0448\u0443 \u043d\u0435 \u0441\u0443\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e, \u044d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u0448\u0435 \u0432\u0438\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u0447\u0438. \u0424\u0438\u0447\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e. <\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438: <\/p>\n<p>1. <a href=\"#list\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>2. <a href=\"#list2\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0444\u0438\u0447\u0435: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>3. <a href=\"#list3\">\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0435\u0432\u044c\u044e<\/a> <br \/>4. <a href=\"#list4\">\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>5. <a href=\"#list5\">\u0418\u0442\u043e\u0433<\/a> <\/p>\n<p><a class=\"anchor\" name=\"list\" id=\"list\"><\/a><\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441\u00a0<\/h3>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0441\u0442\u043e\u0440\u0438\u0441. \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0446\u0441\u0435\u0442\u0438 \u2014 \u00ab\u200e\u043d\u0435\u043b\u044c\u0437\u044f\u0433\u0440\u0430\u043c\u00bb\u200e. \u042d\u0442\u0430 \u0444\u0438\u0447\u0430 \u0441\u0442\u0430\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0438 \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u043e\u0439 \u0434\u043b\u044f \u0434\u043e\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. <\/p>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u044b\u043b\u0430 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c \u0441 \u0431\u0430\u043d\u043d\u0435\u0440\u0430\u043c\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/4a7\/322\/dfd\/4a7322dfd023089378be4e860a02d04b.png\" alt=\"\u0441\u043a\u0440\u0438\u043d \u0441 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c\u044e\" title=\"\u0441\u043a\u0440\u0438\u043d \u0441 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c\u044e\" width=\"1280\" height=\"678\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/4a7\/322\/dfd\/4a7322dfd023089378be4e860a02d04b.png\"\/><\/p>\n<div><figcaption>\u0441\u043a\u0440\u0438\u043d \u0441 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c\u044e<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0431\u0430\u043d\u043d\u0435\u0440\u044b \u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u0443\u044e \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u2014\u00a0 \u0434\u0430\u043b\u0435\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432 \u0440\u0430\u0437\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u0442\u043e\u0440\u0438\u0441. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0442\u0435 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u043e\u0440\u0438\u0441, \u0438 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041e \u043a\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0440\u0435\u0447\u044c:<\/p>\n<p>\u2014 \u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<br \/>\u2014 \u0420\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u0430\u043a\u0446\u0438\u0438 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\u044b, \u0438\u0432\u0435\u043d\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u0442\u0430\u0442\u044c\u0438<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438:<\/p>\n<p><strong>1) \u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/strong> <br \/>\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, sdk \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441?<\/p>\n<p><strong>\u041f\u043b\u044e\u0441\u044b:<\/strong><\/p>\n<p>\u2014 \u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p><strong>\u041c\u0438\u043d\u0443\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041b\u044e\u0431\u044b\u0435 \u0431\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0430\u0448\u0438\u043c\u0438. \u0415\u0441\u043b\u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0433\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u043b\u0435\u0442\u0438\u0442 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u0432\u0430\u0448\u0430. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 \u0432 \u0441\u0442\u043e\u0440\u0430\u0445, \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0431\u0430\u0433\u0430\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<br \/> \u2014 \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0436\u0435\u0441\u0442\u043a\u043e\u0441\u0442\u044c \u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0415\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439\/\u0444\u0438\u043a\u0441\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0432\u0441\u0435. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0437\u0430\u043a\u0440\u044b\u0442. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u043c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0438\u0441\u043e\u043c \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0410 \u043e\u0434\u0438\u043d \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0435\u0435 \u043f\u043e\u0441\u044b\u043b\u043e\u0432 \u2014 \u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0435.<br \/> \u2014 \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u0438\u043d\u0443\u0441 \u2014 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b. \u041f\u0440\u0438\u043a\u0438\u043d\u0443\u043b\u0438 \u043f\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c \u2014 \u043d\u0435\u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u043d\u0430\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 2.4 \u043c\u043b\u043d \u0432 \u0433\u043e\u0434 \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u0447\u0438.<\/p>\n<p><strong>2) \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <br \/><\/strong>\u041f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f: \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438 \u043d\u0430\u0431\u0440\u0435\u0439\u043d\u0448\u0442\u043e\u0440\u043c\u0438\u043b\u0438 \u0438\u0434\u0435\u0438 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<p><strong>\u041f\u043b\u044e\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u041f\u043b\u044e\u0441\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2014 \u0432\u0441\u0435 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u041c\u044b \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c, \u043c\u0435\u043d\u044f\u0435\u043c \u043a\u0430\u043a \u0438 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0442\u0438\u043c, \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<br \/>\u2014 \u041d\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<p><strong>\u041c\u0438\u043d\u0443\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0432\u0440\u0435\u043c\u044f \u0438 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u0447\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f, \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044f\u0441\u044c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0431\u0430\u0433\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u044d\u0442\u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u043f\u043b\u044e\u0441\u044b, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u043e\u0441\u0442\u0430 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, \u043a\u0430\u043a \u044d\u0442\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/10c\/9ba\/872\/10c9ba872859b4cc0988168c3a0e9e44.png\" width=\"1280\" height=\"678\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10c\/9ba\/872\/10c9ba872859b4cc0988168c3a0e9e44.png\"\/><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430 View \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u043e \u0437\u0430\u0442\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0444\u0438\u0447\u0443, \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043d\u0430 Compose, \u0438 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043c. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 View \u043c\u044b \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0441\u0432\u0430\u0439\u043f\u043e\u0432) \u0438 \u043a\u043e\u0434\u0430 (\u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c\/\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u043a\u043e\u0434, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u043d\u0430 View, \u0431\u044b\u043b\u043e \u0434\u043e\u0440\u043e\u0433\u043e). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c. \u041d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0442\u044c \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/939\/41f\/2cc\/93941f2cc31c231e9d52c1a13056fd01.png\" width=\"600\" height=\"450\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/939\/41f\/2cc\/93941f2cc31c231e9d52c1a13056fd01.png\"\/><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043f\u0430\u0440\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 Compose, \u044f \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u043b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u043b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. <a href=\"https:\/\/developer.android.com\/compose\">Compose<\/a> \u2014 \u044d\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041e\u043d \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 UI: preview, lie edit \u0438 \u0442. \u0434. \u042d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441 View. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0447\u0438 Compose \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a HorizontalPager, LinearProgressIndicator, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 (\u0438  \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e) \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e  UI. \u0412\u0437\u0432\u0435\u0441\u0438\u0432 \u0432\u0441\u0435 \u0437\u0430 \u0438 \u043f\u0440\u043e\u0442\u0438\u0432, \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p><a class=\"anchor\" name=\"list2\" id=\"list2\"><\/a><\/p>\n<h3>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0444\u0438\u0447\u0435: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0442\u043e\u0440\u0438\u0441 <\/h3>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/96f\/95e\/77d\/96f95e77de3cacb312816ad780b3a711.png\" width=\"1000\" height=\"584\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/96f\/95e\/77d\/96f95e77de3cacb312816ad780b3a711.png\"\/><\/figure>\n<p>\u0424\u0438\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u0438\u0441. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u043c\u043a\u0430. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043f\u0435\u0440\u0432\u044b\u0439 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434) \u2014 \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439, \u0438 \u0440\u0430\u043c\u043a\u0430 \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442. \u041f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u0438\u0441. \u0421\u0442\u043e\u0440\u0438\u0441 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0430\u0439\u0434\u043e\u0432. \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0438\u0447\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e64\/df7\/9b8\/e64df79b83bcf9a6f9d70073fb14254a.png\" width=\"1280\" height=\"678\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e64\/df7\/9b8\/e64df79b83bcf9a6f9d70073fb14254a.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a68\/90b\/aee\/a6890baee2752cb509c4cd8d32a0a57c.gif\" width=\"1280\" height=\"678\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a68\/90b\/aee\/a6890baee2752cb509c4cd8d32a0a57c.gif\"\/><\/figure>\n<p><strong>\u041a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0432\u044c\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435, \u0430 \u0441\u0442\u043e\u0440\u0438\u0441 \u2014\u00a0\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c.\u00a0<\/p>\n<\/li>\n<\/ul>\n<h3>1) \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u043b\u0430\u0439\u0434\u0430\u043c \u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<ul>\n<li>\n<p><strong>\u0422\u0430\u043f \u0432\u043b\u0435\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0441\u043b\u0430\u0439\u0434\u0443 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0422\u0430\u043f \u0432\u043f\u0440\u0430\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2) \u0421\u0432\u0430\u0439\u043f\u044b<\/h3>\n<ul>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0432\u043b\u0435\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0432\u043f\u0440\u0430\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437:<\/strong> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<h3>3) \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/h3>\n<ul>\n<li>\n<p><strong>\u0414\u043e\u043b\u0433\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435:<\/strong> \u043f\u0430\u0443\u0437\u0430 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043b\u0430\u0439\u0434\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043d\u043e\u043f\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u043e\u0440\u0438\u0441:<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>4) \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0441\u0442\u0438\u0441\u044c <strong>\u0441\u0432\u043e\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u044b \u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <strong>\u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0440\u0438\u044d\u043b\u0442\u043e\u0440\u043e\u0432<\/strong> \u0438 <strong>\u043f\u0430\u0440\u0442\u043d\u0451\u0440\u043e\u0432 (\u0430\u0433\u0435\u043d\u0442\u0441\u0442\u0432 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438)<\/strong>, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0438\u0446\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441, \u0441\u0435\u043a\u0446\u0438\u044f \u0441 \u0438\u0445 \u043f\u0440\u0435\u0432\u044c\u044e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0430.<\/p>\n<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"list3\" id=\"list3\"><\/a><\/p>\n<h3>\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0435\u0432\u044c\u044e<\/h3>\n<p>\u0411\u0435\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043b\u044f web \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0430 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0438\u0447\u0443 \u2014 \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u043e \u044d\u0442\u0430 \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u043d\u0430\u0441  \u2014 \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430. <\/p>\n<p><strong>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/strong> <\/p>\n<p>\u2014 \u0415\u0441\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 data source \u2014 use case \u2014 view model. <\/p>\n<p>\u2014\u00a0Data source \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 (\u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u043a\u0435\u043d\u0434, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b \u0438 \u0441\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 API \u0431\u044d\u043a\u0430).\u00a0 <\/p>\n<p>\u2014\u00a0\u0412\u043e \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0432 presentation \u043c\u043e\u0434\u0435\u043b\u044c. \u041e\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430 \u0437\u0430 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441. \u0412\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043a\u043e\u0434\u0430 \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043a presentation \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<pre><code>@Parcelize data class UiStories(    val id: String,    @DrawableRes val previewImageRes: Int,    @StringRes val previewTitleRes: Int,    val slides: List&lt;UiSlide&gt;,    val previewBackgroundColor: ULong = Colors.systemOnWhiteStrong.value,    val current: Boolean = false,    val shown: Boolean = false ) : Parcelable   sealed class StoriesType {      data class Content(val content: UiStories) : StoriesType()      data object Fake : StoriesType() } <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 UiStories:\u00a0<\/p>\n<ul>\n<li>\n<p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id \u0441\u0442\u043e\u0440\u0438\u0441<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043a\u0441\u0442<\/p>\n<\/li>\n<li>\n<p>url \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u043d\u0438\u0439 \u0444\u043e\u043d \u0434\u043b\u044f \u043f\u0440\u0435\u0432\u044c\u044e<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0441urrent \u2014 \u044d\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441, shown \u2014 \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441, \u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0440\u0430\u043c\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e. \u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 StoriesType, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441 \u043e\u0442 \u0444\u0435\u0439\u043a\u043e\u0432\u043e\u0439. \u0424\u0435\u0439\u043a\u043e\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u044d\u0442\u043e \u043d\u0430\u0448\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0432\u0430\u0439\u043f\u043e\u0432 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 compose pager \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u044d\u0442\u043e\u0433\u043e. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0438 \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c.\u00a0\u00a0 <\/p>\n<pre><code>@Parcelize data class UiSlide(    val backgroundColor: Long,    @DrawableRes val imageRes: Int,    @StringRes val titleRes: Int,    @StringRes val subtitleRes: Int,    val buttonVisible: Boolean,    @StringRes val buttonText: Int,    val buttonColorsULong: ButtonColorsULong,    val progressState: ProgressState = ProgressState.START,    val current: Boolean = false,    val progress: Float = 0f ) : Parcelable {      enum class ProgressState {        REFRESHED, START, RESUME, PAUSE, COMPLETE    } } <\/code><\/pre>\n<p>\u0421\u043b\u0430\u0439\u0434 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0437\u0430\u0434\u043d\u0435\u0433\u043e \u0444\u043e\u043d\u0430.<\/p>\n<p>progressState \u2014 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c:<\/p>\n<ol>\n<li>\n<p>REFRESHED \u2014 \u0441\u043b\u0430\u0439\u0434 \u043f\u0435\u0440\u0435\u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f: \u043f\u0440\u0438 \u0442\u0430\u043f\u0435 \u0432\u043b\u0435\u0432\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0441\u043b\u0430\u0439\u0434\u0435 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u0430\u043d\u043d\u044b\u0439 \u0441\u043b\u0430\u0439\u0434 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0449\u0435\u043d.<\/p>\n<\/li>\n<li>\n<p>START \u2014 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>RESUME \u2014 \u0441\u043b\u0430\u0439\u0434 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>PAUSE \u2014 \u043f\u0430\u0443\u0437\u0430, \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430\u0436\u0430\u043b \u043d\u0430 \u0441\u043b\u0430\u0439\u0434 \u0438 \u043d\u0435 \u0443\u0431\u0438\u0440\u0430\u0435\u0442 \u043f\u0430\u043b\u0435\u0446.<\/p>\n<\/li>\n<li>\n<p>COMPLETE \u2014 \u0441\u043b\u0430\u0439\u0434 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u043b\u0441\u044f.<\/p>\n<\/li>\n<\/ol>\n<p>current \u2014 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0441\u043e \u0441\u0442\u043e\u0440\u0438\u0441, progress \u2014 \u0447\u0438\u0441\u043b\u043e\u0432\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043e\u0442 0 (0% \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0448\u043a\u0430\u043b\u044b) \u0434\u043e 1 (100% \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0448\u043a\u0430\u043b\u044b).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u043c\u043a\u0443 \u0438\u043b\u0438 \u043d\u0435\u0442, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441. \u0414\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u044e\u0431\u043e\u0435 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0432\u0430\u043c key-value \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c shared preferences, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0449\u0438\u0439\u0441\u044f \u0432 android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435. \u0418\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0439 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442 \u2014 \u044d\u0442\u043e id. <\/p>\n<pre><code>class StoriesShownRepositoryImpl(    private val keyValueStorage: KeyValueStorage ) : StoriesShownRepository {      private val shownStoriesMap = mutableMapOf&lt;String, MutableStateFlow&lt;Set&lt;String&gt;&gt;&gt;()      override suspend fun set(userId: String, storiesId: String) {        if (userId.isEmpty()) return        val ids = keyValueStorage.getStringSet(STORIES_SHOWN_KEY + userId).toMutableSet()        ids.add(storiesId)        keyValueStorage.putStringSet(STORIES_SHOWN_KEY + userId, ids)        getFlow(userId).emit(ids)    }      override fun observe(userId: String): Flow&lt;Set&lt;String&gt;&gt; =        if (userId.isEmpty()) {            flowOf(emptySet())        } else {            getFlow(userId).asStateFlow()        }      private fun getFlow(userId: String): MutableStateFlow&lt;Set&lt;String&gt;&gt; =        shownStoriesMap[userId] ?: createFlow(userId)      private fun createFlow(userId: String): MutableStateFlow&lt;Set&lt;String&gt;&gt; =        MutableStateFlow(keyValueStorage.getStringSet(STORIES_SHOWN_KEY + userId)).also {            shownStoriesMap[userId] = it        } } <\/code><\/pre>\n<p>\u0418\u0442\u0430\u043a, \u0432\u0441\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u2014 \u043a\u043b\u0430\u0434\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u0438\u0437 id \u0432 shared preferences \u0447\u0435\u0440\u0435\u0437 set \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 get. \u0412 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0443 \u043e\u0434\u043d\u043e\u0433\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0447\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0438, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u043d \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u0441\u0442\u043e\u0440\u0438\u0441 \u0432 \u043e\u0434\u043d\u043e\u0439, \u0442\u043e \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u043e\u043d\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439. \u0427\u0442\u043e\u0431\u044b \u044d\u0442\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0438\u0447\u044c, \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u0438\u043c \u043d\u0430\u0448 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439: \u0442\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0438 \u0445\u0440\u0430\u043d\u0438\u043c \u0432 \u043c\u043e\u0434\u0435\u043b\u0438 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e, \u043a\u0430\u043a\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u044b, \u0438 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u043a \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e \u0438 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0435 \u043f\u0440\u0435\u0432\u044c\u044e.<\/p>\n<p>\u041a\u043e\u0434 \u044e\u0437\u043a\u0435\u0439\u0441\u043e\u0432 \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044e id \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441 \u0438 \u044e\u0437\u043a\u0435\u0439\u0441 \u0434\u043b\u044f \u0438\u0445 \u0441\u0435\u0442\u0442\u0438\u043d\u0433\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0435 \u0431\u0443\u0434\u0443, \u0442\u0430\u043a \u043a\u0430\u043a \u044d\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0440\u043e\u043a\u0441\u0438 \u0432 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439. \u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0448\u0438\u0445 \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<pre><code>val STORIES = listOfNotNull(    if (isToggleEnabled(FeatureToggle.FIND_PROFESSIONAL)) findProf() else null,    indexOfMood(),    promo(),    earnWithPrimary() )   private fun promo() = UiStories(    id = PROMO_STORIES_ID,    previewImageRes = R.drawable.ic_stories_preview_promo,    previewTitleRes = R.string.stories_promo_preview_title,    slides = listOf(        UiSlide(            backgroundColor = BRAND_M2_PURPLE_COLOR,            imageRes = R.drawable.img_stories_promo,            titleRes = R.string.stories_promo_title,            subtitleRes = R.string.stories_promo_subtitle,            buttonVisible = true,            buttonColorsULong = ButtonColors.orangeBrand.map(),            buttonText = R.string.stories_promo_button_text        )    ) )   private fun earnWithPrimary() = UiStories(    id = EARN_WITH_PRIMARY_ID,    previewImageRes = R.drawable.ic_stories_earn_with_primary,    previewTitleRes = R.string.stories_earn_preview_title,    slides = listOf(        UiSlide(            backgroundColor = ADDITIONAL_M2_MINT_COLOR,            imageRes = R.drawable.img_earn_with_primary,            titleRes = R.string.stories_earn_title,            subtitleRes = R.string.stories_earn_subtitle,            buttonVisible = true,            buttonColorsULong = ButtonColors.white.map(),            buttonText = R.string.stories_earn_button_text        )    ) )   private fun indexOfMood() = UiStories(    id = INDEX_OF_MOOD_ID,    previewImageRes = R.drawable.ic_stories_index_of_mood,    previewTitleRes = R.string.stories_index_preview_title,    slides = listOf(        UiSlide(            backgroundColor = BRAND_M2_BLUE_COLOR,            imageRes = R.drawable.img_index_of_mood,            titleRes = R.string.stories_index_title,            subtitleRes = R.string.stories_index_subtitle,            buttonVisible = true,            buttonColorsULong = ButtonColors.white.map(),            buttonText = R.string.stories_index_button_text        )    ) )   private fun findProf() = UiStories(    id = FIND_PROF_ID,    previewImageRes = R.drawable.ic_service_find_professional,    previewTitleRes = R.string.stories_find_prof_preview_title,    previewBackgroundColor = Colors.brandM2Purple3.value,    slides = listOf(        UiSlide(            backgroundColor = BRAND_M2_BLUE_COLOR,            imageRes = R.drawable.img_find_prof_story,            titleRes = R.string.stories_find_prof_title,            subtitleRes = R.string.stories_find_prof_subtitle,            buttonVisible = true,            buttonColorsULong = ButtonColors.white.map(),            buttonText = R.string.stories_find_prof_button_text        )    ) ) <\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<pre><code>private fun observeStories(userId: String, userRole: RoleType) {    observeShownStoriesUseCase(userId)        .flowOn(dispatchers.io())        .onEach { shownStoriesIds -&gt;            val stories = getStories(userRole, shownStoriesIds)            setState { stories(stories) }        }        .catch {            emit(emptySet())        }        .launchSerially(SHOWN_STORIES_TAG) }   private suspend fun getStories(    userRole: RoleType,    shownStoriesIds: Set&lt;String&gt; ): List&lt;UiStories&gt; {    if (!userRole.isRealtorOrProfessional()) return emptyList()    val stories = STORIES.toMutableList()      val registrationDate = withContext(dispatchers.io()) {        try {            getUserPersonalDataUseCase().registrationDate        } catch (expected: Exception) {            logger.error(expected)            Date()        }    }    if (userRole != RoleType.PROFESSIONAL || registrationDate &lt;= REGISTRATION_DATE_THRESHOLD) {        stories.removeIf { it.id == PROMO_STORIES_ID }    }      return stories.map {        it.copy(shown = shownStoriesIds.contains(it.id))    } } <\/code><\/pre>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a id \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043b\u044f \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0440\u0430\u043c\u043a\u0438. \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0434\u0430\u0442\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u043c \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u0438\u0437\u043d\u0430\u043a: \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430\/\u043d\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430. \u0417\u0430\u0442\u0435\u043c \u043c\u044b\u00a0\u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0435\u0439\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u043c \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442. \u041d\u0435 \u0431\u0443\u0434\u0435\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0442\u0435\u0439\u0442\u0435 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u0414\u0430\u043b\u0435\u0435 \u0432\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0435 \u043c\u044b \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0448\u0438 \u043f\u0440\u0435\u0432\u044c\u044e:<\/p>\n<pre><code>if (vitrineState.stories.isNotEmpty()) {    StoriesPreviewList(        userId = vitrineState.userId,        stories = vitrineState.stories,        onClick = { id -&gt; viewModel.openStoriesScreen(id) }    ) }  @Composable fun StoriesPreviewList(    userId: String,    stories: List&lt;UiStories&gt;,    onClick: (String) -&gt; Unit ) {    val scrollState = rememberSaveable(        inputs = arrayOf(userId),        saver = ScrollState.Saver    ) {        ScrollState(initial = 0)    }      Row(        modifier = Modifier            .horizontalScroll(scrollState)            .padding(start = 14.dp, top = 14.dp, end = 14.dp, bottom = 16.dp),        horizontalArrangement = Arrangement.spacedBy(4.dp)    ) {        stories.forEach { story -&gt;            StoriesPreview(stories = story, onClick = onClick)        }    } } <\/code><\/pre>\n<p>\u0417\u0434\u0435\u0441\u044c \u043c\u043e\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c, \u0447\u0442\u043e scrollState \u0443 \u043d\u0430\u0441 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u0438 \u0435\u0441\u043b\u0438 \u043e\u043d \u0435\u0433\u043e \u0441\u043c\u0435\u043d\u0438\u0442, \u0442\u043e \u0441\u043a\u0440\u043e\u043b\u043b \u200e\u043e\u0431\u043d\u0443\u043b\u0438\u0442\u0441\u044f\u200e.<\/p>\n<pre><code>@Composable fun StoriesPreview(stories: UiStories, onClick: (String) -&gt; Unit) {    val interactionSource = remember { MutableInteractionSource() }      Column(        modifier = Modifier.clickable(            interactionSource = interactionSource,            indication = null,            onClick = {                onClick(stories.id)            }        )    ) {        Box(            modifier = Modifier                .size(84.dp)                .run {                    if (stories.shown) {                        this                    } else {                        border(                            width = 1.dp,                            color = Colors.systemOnWhiteBlue,                            shape = Shapes.roundedCorners6                        )                    }                }                .padding(2.dp)                .clip(shape = Shapes.roundedCorners4)        ) {            Image(                painter = painterResource(id = stories.previewImageRes),                contentDescription = null,                modifier = Modifier                    .size(80.dp)                    .background(color = Color(stories.previewBackgroundColor))            )        }        Spacer(modifier = Modifier.height(6.dp))        Text(            modifier = Modifier                .padding(horizontal = 2.dp)                .width(80.dp),            text = stringResource(id = stories.previewTitleRes),            color = Colors.systemOnWhiteStrong,            style = TextStyles.caption2Regular,            textAlign = TextAlign.Center        )    } } <\/code><\/pre>\n<p><a class=\"anchor\" name=\"list4\" id=\"list4\"><\/a><\/p>\n<h3>\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<p> \u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043a \u044d\u043a\u0440\u0430\u043d\u0443 \u0441\u0430\u043c\u0438\u0445 \u0441\u0442\u043e\u0440\u0438\u0441. \u0418 \u043d\u0430\u0447\u043d\u0435\u043c \u043c\u044b \u0441 \u0441\u0435\u0440\u0434\u0446\u0430 \u044d\u0442\u043e\u0433\u043e \u044d\u043a\u0440\u0430\u043d\u0430 \u2014\u00a0 \u044d\u0442\u043e \u0441\u0442\u0435\u0439\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u0442\u043e\u0440\u0438\u0441. <\/p>\n<pre><code>data class StoriesState(    val duration: Int,    val storiesType: List&lt;StoriesType&gt; ) {      val currentStories =        (storiesType.first { it is StoriesType.Content &amp;&amp; it.content.current } as StoriesType.Content)            .content    val currentStoriesIndex =        storiesType.indexOfFirst { it is StoriesType.Content &amp;&amp; it.content.current }    private val slides = currentStories.slides    val currentSlide = slides.first { it.current }    val currentSlideIndex = slides.indexOfFirst { it.current }    val slidesCount = slides.size      fun nextSlide(newSlideIndex: Int): StoriesState =        progress(progressState = UiSlide.ProgressState.COMPLETE, progress = 1f)            .progress(                progressState = UiSlide.ProgressState.START,                progress = 0f,                newSlideIndex = newSlideIndex            )            .currentSlide(newSlideIndex)      fun refreshSlide(): StoriesState =        progress(progressState = UiSlide.ProgressState.REFRESHED, progress = 0f)      fun previousSlide(newSlideIndex: Int): StoriesState =        progress(progressState = UiSlide.ProgressState.START, progress = 0f)            .progress(                progressState = UiSlide.ProgressState.START,                progress = 0f,                newSlideIndex = newSlideIndex            )            .currentSlide(newSlideIndex)      fun finish(): StoriesState =        progress(progressState = UiSlide.ProgressState.COMPLETE, progress = 1f)      fun nextStories(newStoriesIndex: Int, newSlideIndex: Int): StoriesState =        progress(progressState = UiSlide.ProgressState.START, progress = 0f)            .progress(                progressState = UiSlide.ProgressState.START,                progress = 0f,                newStoriesIndex = newStoriesIndex,                newSlideIndex = newSlideIndex            )            .currentStory(newStoriesIndex)      fun previousStories(newStoriesIndex: Int, newSlideIndex: Int): StoriesState =        progress(progressState = UiSlide.ProgressState.START, progress = 0f)            .progress(                progressState = UiSlide.ProgressState.START,                progress = 0f,                newStoriesIndex = newStoriesIndex,                newSlideIndex = newSlideIndex            )            .currentStory(newStoriesIndex)      fun pause(): StoriesState =        progress(            progressState = UiSlide.ProgressState.PAUSE, progress = currentSlide.progress        )      fun resume(progress: Float = currentSlide.progress): StoriesState =        progress(progressState = UiSlide.ProgressState.RESUME, progress = progress)      private fun currentSlide(newCurrentIndex: Int): StoriesState =        copy(            storiesType = storiesType.mapIndexed { storiesIndex, uiStories -&gt;                if (storiesIndex == currentStoriesIndex &amp;&amp; uiStories is StoriesType.Content) {                    uiStories.copy(                        content = uiStories.content.copy(                            slides = uiStories.content.slides.mapIndexed { slideIndex, uiSlide -&gt;                                uiSlide.copy(current = slideIndex == newCurrentIndex)                            }                        )                    )                } else {                    uiStories                }            }        )      private fun currentStory(newStoriesIndex: Int): StoriesState =        copy(            storiesType = storiesType.mapIndexed { index, uiStories -&gt;                if (uiStories is StoriesType.Content) {                    uiStories.copy(                        content = uiStories.content.copy(current = index == newStoriesIndex)                    )                } else {                    uiStories                }            }        )      private fun progress(        progressState: UiSlide.ProgressState,        progress: Float,        newStoriesIndex: Int = currentStoriesIndex,        newSlideIndex: Int = currentSlideIndex    ): StoriesState =        copy(            storiesType = storiesType.mapIndexed { storiesIndex, uiStories -&gt;                if (storiesIndex == newStoriesIndex &amp;&amp; uiStories is StoriesType.Content) {                    uiStories.copy(                        content = uiStories.content.copy(                            slides = uiStories.content.slides.mapIndexed { slideIndex, uiSlide -&gt;                                if (slideIndex == newSlideIndex) {                                    uiSlide.copy(progressState = progressState, progress = progress)                                } else {                                    uiSlide                                }                            }                        )                    )                } else {                    uiStories                }            }        )      companion object {          fun initial(durationInSec: Int, stories: List&lt;UiStories&gt;, storiesId: String): StoriesState =            StoriesState(                duration = durationInSec * 1000,                storiesType = stories.map { uiStories -&gt;                    uiStories.copy(                        slides = uiStories.slides.mapIndexed { slideIndex, uiSlide -&gt;                            uiSlide.copy(current = slideIndex == 0)                        },                        current = uiStories.id == storiesId                    )                }.addFakeStories()            )          private fun List&lt;UiStories&gt;.addFakeStories(): List&lt;StoriesType&gt; {            val list = this.map {                StoriesType.Content(it)            } as List&lt;StoriesType&gt;            return list.toMutableList().apply {                add(0, StoriesType.Fake)                add(StoriesType.Fake)            }        }    } } <\/code><\/pre>\n<p>\u0423 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043f\u043e\u043b\u044f:\u00a0duration \u2014 \u044d\u0442\u043e \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430, stories \u2014 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u043e\u0440\u0438\u0441. \u0412\u0441\u0435 \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u043f\u043e\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0442\u0435\u0439\u0442\u0430 \u2014 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441. \u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u0439\u0442 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f initial. \u0421\u0442\u043e\u0440\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043d\u0430\u0436\u0430\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c, \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 (\u0447\u0435\u0440\u0435\u0437 id). \u0422\u0430\u043a\u0436\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u043c.<\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0440\u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u2014 currentSlide\/Stories \u0438 progress. currentStories \u0437\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441, slide \u2014 \u0441\u043b\u0430\u0439\u0434 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441, progress \u2014 \u043f\u043e \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441\/\u0441\u043b\u0430\u0439\u0434\u0443 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 progressState \u0438 progress, \u0438\u043d\u0430\u0447\u0435 \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u0441\u0442\u043e\u0440\u0438\u0441\/\u0441\u043b\u0430\u0439\u0434 \u0431\u0443\u0434\u0443\u0442 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 (\u0434\u043b\u044f pause, resume, refreshed).<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0441\u043b\u0430\u0439\u0434, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043c\u044b \u0441\u0442\u0430\u0432\u0438\u043c \u0435\u043c\u0443 progress state complete \u0438 progress = 1. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0432 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u044d\u0442\u0438\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0414\u043b\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0436\u0435 \u0441\u043b\u0430\u0439\u0434\u0430 \u043d\u0430\u0434\u043e \u0432\u044b\u0441\u0442\u0430\u0432\u0438\u0442\u044c start \u0438 0. \u0415\u0449\u0435 \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434 \u043d\u0430 \u043d\u043e\u0432\u044b\u0439. \u0412\u043e\u043e\u0431\u0449\u0435 \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0439 \u0431\u0438\u0437\u043d\u0435\u0441\u0430, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435. \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0443\u0436\u043d\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0440\u0438\u0441, \u043d\u043e \u0438 \u0441\u043b\u0430\u0439\u0434, \u0442\u0430\u043a \u043a\u0430\u043a \u0443 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0435\u0441\u0442\u044c \u0441\u0432\u043e\u0439 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u043a\u043e\u0434 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<pre><code>class StoriesViewModel(    stories: List&lt;UiStories&gt;,    storiesId: String,    storiesConfig: StoriesConfig,    private val userId: String,    private val setStoriesShownUseCase: SetStoriesShownUseCase,    private val router: Router,    private val oneClickDealScreenFactory: OneClickDealScreenFactory,    private val analytics: Analytics,    private val aboutFindProfScreenFactory: AboutFindProfScreenFactory ) : StatefulViewModel&lt;StoriesState&gt;(    StoriesState.initial(        durationInSec = storiesConfig.getDuration().toInt(),        stories = stories,        storiesId = storiesId    ) ) {      fun setStoriesShown(page: Int) {        when (val storiesType = stateFlow.value.storiesType[page]) {            is StoriesType.Content -&gt; {                launch(                    block = {                        withContext(dispatchers.io()) {                            setStoriesShownUseCase(                                userId = userId,                                storiesId = storiesType.content.id                            )                        }                    }                )            }            StoriesType.Fake -&gt; {}        }    }      fun back() {        router.back()    }      fun setNextSlide() {        with(stateFlow.value) {            val nextSlideIndex = currentSlideIndex + 1            if (slidesCount == nextSlideIndex) {                setNextStories()            } else {                analytics.send(                    CoreMainStoriesTap(                        id = currentStories.id,                        page = nextSlideIndex + 1                    )                )                setState { nextSlide(nextSlideIndex) }            }        }    }      fun setPreviousSlide() {        with(stateFlow.value) {            if (currentSlideIndex == 0) {                val contentOnly = storiesType.filterIsInstance&lt;StoriesType.Content&gt;()                val currentIndex = contentOnly.indexOfFirst { it.content.current }                if (currentIndex == 0) {                    analytics.send(                        CoreMainStoriesTap(                            id = currentStories.id,                            page = 0                        )                    )                    setState { refreshSlide() }                } else {                    setPreviousStories()                }            } else {                val previousSlideIndex = currentSlideIndex - 1                analytics.send(                    CoreMainStoriesTap(                        id = currentStories.id,                        page = previousSlideIndex + 1                    )                )                setState { previousSlide(previousSlideIndex) }            }        }    }      private fun setNextStories() {        with(stateFlow.value) {            val newStoriesIndex = currentStoriesIndex + 1            when (val storiesType = storiesType[newStoriesIndex]) {                is StoriesType.Content -&gt; {                    val storiesId = storiesType.content.id                    val slideIndex = storiesType.content.slides.indexOfFirst { it.current }                    analytics.send(                        CoreMainStoriesTap(                            id = storiesId,                            page = slideIndex + 1                        )                    )                    setState {                        nextStories(newStoriesIndex = newStoriesIndex, newSlideIndex = slideIndex)                    }                }                StoriesType.Fake -&gt; {                    setState { finish() }                    back()                }            }        }    }      private fun setPreviousStories() {        with(stateFlow.value) {            val newStoriesIndex = currentStoriesIndex - 1            when (val storiesType = storiesType[newStoriesIndex]) {                is StoriesType.Content -&gt; {                    val storiesId = storiesType.content.id                    val slideIndex = storiesType.content.slides.indexOfFirst { it.current }                    analytics.send(                        CoreMainStoriesTap(                            id = storiesId,                            page = slideIndex + 1                        )                    )                    setState {                        previousStories(newStoriesIndex = newStoriesIndex, newSlideIndex = slideIndex)                    }                }                StoriesType.Fake -&gt; {                    setState { finish() }                    back()                }            }        }    }      fun setPaused() {        setState { pause() }    }      fun setResumed() {        with(stateFlow.value) {            val validStates = listOf(                UiSlide.ProgressState.START,                UiSlide.ProgressState.PAUSE,                UiSlide.ProgressState.REFRESHED            )            if (currentSlide.progressState !in (validStates)) return            setState { resume() }        }    }      fun setStories(page: Int) {        with(stateFlow.value) {            when {                page &gt; currentStoriesIndex -&gt; {                    setNextStories()                }                  page &lt; currentStoriesIndex -&gt; {                    setPreviousStories()                }                  else -&gt; {                }            }        }    }      fun setProgress(progress: Float) {        if (stateFlow.value.currentSlide.progressState != UiSlide.ProgressState.RESUME) return        setState { resume(progress) }    }      fun openOneClickDeal() {        router.openScreen(            screen = oneClickDealScreenFactory.create(source = OneClickDealSource.STORIES),            replace = true        )    }      fun openFindProf() {        router.openScreen(            screen = aboutFindProfScreenFactory.create(),            replace = true)    }      fun sendCoreMainStoriesButtonTapEvent(id: String, index: Int) {        analytics.send(CoreMainStoriesButtonTap(id = id, page = index + 1))    } } <\/code><\/pre>\n<h3>1) \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0441\u0442\u0435\u0439\u0442 (initial), \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u0443\u0434\u0435\u043b\u0435\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f\u043c \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438 \u0438 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<h3>2) \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u0430\u0439\u0434\u0430\u043c\u0438<\/h3>\n<h3>a. setNextSlide<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0432 \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0430 \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u2014 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 nextSlide \u0434\u043b\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u0442\u0435\u0439\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>b. setPreviousSlide<\/h3>\n<ul>\n<li>\n<p>\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442, \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434 \u043f\u0435\u0440\u0432\u044b\u043c:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441, \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434 \u0437\u0430\u043d\u043e\u0432\u043e.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u2014 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>3) \u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<h3>a. setNextStories<\/h3>\n<ul>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f, \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>b. setPreviousStories<\/h3>\n<ul>\n<li>\n<p>\u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0435\u0440\u0432\u0430\u044f, \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0412 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>4) \u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f<\/h3>\n<h3>a. resume<\/h3>\n<ul>\n<li>\n<p><strong>\u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438<\/strong>:<\/p>\n<ul>\n<li>\n<p>\u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441, \u043a\u0440\u043e\u043c\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435\u043c \u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f\u0445:<\/p>\n<ul>\n<li>\n<p>start (\u0438\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435),<\/p>\n<\/li>\n<li>\n<p>pause (\u043f\u0430\u0443\u0437\u0430),<\/p>\n<\/li>\n<li>\n<p>refreshed (\u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0437\u0430\u043f\u0443\u0441\u043a \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>b. setStories<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u0445 \u0438 \u0442\u0430\u043f\u0430\u0445 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0441\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u0438.<\/p>\n<\/li>\n<li>\n<p>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u043e\u0442 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u2014 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u043e\u043c\u0435\u0440 \u043c\u0435\u043d\u044c\u0448\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u2014 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0440\u0430\u0432\u0435\u043d \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u2014 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u0430\u044f \u043f\u0440\u0438\u0447\u0438\u043d\u0430: \u0432\u044b\u0437\u043e\u0432 \u0434\u0432\u0443\u0445 launchedEffect).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>5) \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u043e\u043c<\/h3>\n<h3>a. setProgress<\/h3>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u043c\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u043f\u0440\u0435\u0449\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441:<\/p>\n<ul>\n<li>\n<p>\u042d\u0442\u043e \u043f\u0440\u0435\u0434\u043e\u0442\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>6) \u041e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c<\/h3>\n<ul>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430:<\/p>\n<ul>\n<li>\n<p>\u0422\u0430\u043f\u044b \u0438 \u0442\u0430\u0439\u043c\u0430\u0443\u0442\u044b \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044e\u0442 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u043b\u0430\u0439\u0434\u0430\/\u0441\u0442\u043e\u0440\u0438\u0441, \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0441 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u044e.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0441\u0442\u0435\u0439\u0442 \u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0435\u0442 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0434\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>7) \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435<\/h3>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u0432\u043d\u0435 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438, \u044d\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u043c\u0443 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044e:<\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0441\u0431\u043e\u0439 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u2014 \u0441\u0442\u0440\u043e\u0433\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u0441\u0442\u0435\u0439\u0442\u043e\u0432 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre><code>@OptIn(ExperimentalFoundationApi::class) @Suppress(\"LongMethod\") @Composable private fun StoriesContent(    stateFlow: StateFlow&lt;StoriesState&gt;,    onToolbarClick: () -&gt; Unit,    onButtonClick: (String, Int) -&gt; Unit,    onPaused: () -&gt; Unit,    onResumed: () -&gt; Unit,    onPrevious: () -&gt; Unit,    onNext: () -&gt; Unit,    onProgress: (Float) -&gt; Unit ) {    AppMaterialTheme {        val storiesState = stateFlow.collectAsStateWithLifecycle().value        val pagerState =            rememberPagerState(                pageCount = { storiesState.storiesType.size },                initialPage = storiesState.currentStoriesIndex            )          \/\/ \u0441\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u0440\u0438\u0441, \u0441\u043b\u0430\u0439\u0434\u0430 \u043f\u0440\u0438 \u0442\u0430\u043f\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0438\u0445 \u0437\u0430\u043f\u0443\u0441\u043a        LaunchedEffect(            storiesState.currentStoriesIndex,            storiesState.currentSlideIndex,            pagerState.isScrollInProgress        ) {            if (storiesState.currentStoriesIndex != pagerState.currentPage) {                pagerState.animateScrollToPage(storiesState.currentStoriesIndex)            }              if (pagerState.isScrollInProgress) {                onPaused()            } else {                onResumed()            }        }          \/\/ \u0441\u043c\u0435\u043d\u0430 \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435        LaunchedEffect(pagerState) {            snapshotFlow {                pagerState.currentPage            }.collect {                viewModel.setStoriesShown(it)                \/\/ \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u0435\u0439\u0442\u0430 \u0432\u043c \u0438 pager'\u0430                viewModel.setStories(it)            }        }          val screenWidthDp = LocalConfiguration.current.screenWidthDp.dp        val screenWidthPx = with(LocalDensity.current) { screenWidthDp.toPx() }          val screenHeightDp = LocalConfiguration.current.screenHeightDp.dp        val screenHeightPx = with(LocalDensity.current) { screenHeightDp.toPx() }          val offsetY = remember { Animatable(0f) }        val scope = rememberCoroutineScope()          HorizontalPager(            state = pagerState,            modifier = Modifier                .fillMaxSize()                .background(ComposeColor.Black)                .offset { IntOffset(0, offsetY.value.roundToInt()) }                .pointerInput(Unit) {                    detectTapGestures(                        onPress = {                            onPaused()                            \/\/ \u0436\u0434\u0435\u043c tap up \u0441\u043e\u0431\u044b\u0442\u0438\u0435 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f, \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043d\u0435 \u0441\u043c\u043e\u0442\u0440\u0438\u043c                            tryAwaitRelease()                            onResumed()                        },                        onTap = { offset -&gt;                            if (offset.x &lt; screenWidthPx \/ 2) {                                onPrevious()                            } else {                                onNext()                            }                        }                    )                }                .pointerInput(Unit) {                    detectVerticalDragGestures(                        onDragStart = {},                        onDragEnd = {                            if (offsetY.value != 0f) {                                val ratio = screenHeightPx \/ offsetY.value                                if (ratio &lt;= RATIO_TO_DISMISS) {                                    scope.launch {                                        offsetY.animateTo(                                            targetValue = screenHeightPx,                                            animationSpec = spring(                                                dampingRatio = Spring.DampingRatioLowBouncy,                                                stiffness = StiffnessLow                                              )                                        )                                    }                                    viewModel.back()                                } else {                                    scope.launch {                                        offsetY.animateTo(                                            targetValue = 0f,                                            animationSpec = spring(                                                dampingRatio = Spring.DampingRatioLowBouncy,                                                stiffness = StiffnessLow                                            )                                        )                                    }                                }                            }                        },                        onDragCancel = {},                        onVerticalDrag = { _, dragAmount -&gt;                            val newOffset = offsetY.value + dragAmount                            if (newOffset &gt;= 0) {                                scope.launch {                                    offsetY.snapTo(newOffset)                                }                            }                        }                    )                }        ) { preloadedStoriesIndex -&gt;            HorizontalPagerContent(                pagerState,                preloadedStoriesIndex,                storiesState,                onToolbarClick,                onButtonClick,                onNext,                onProgress            )        }    } } <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e StoriesContent.<\/p>\n<h3>1) \u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430<\/h3>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c rememberPageState, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438 \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430. \u0412 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f: <\/p>\n<ul>\n<li>\n<p>\u041e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0438\u043d\u0434\u0435\u043a\u0441 \u0441\u0442\u043e\u0440\u0438\u0441, \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0435\u0441\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u0441 \u043b\u044e\u0431\u043e\u0433\u043e \u043f\u0440\u0435\u0432\u044c\u044e.<\/p>\n<\/li>\n<\/ul>\n<p><strong>LaunchedEffect \u0434\u043b\u044f \u0442\u0430\u043f\u043e\u0432<\/strong><\/p>\n<ul>\n<li>\n<p>\u041e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430 \u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u0438 \u0442\u0430\u043f\u0435.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0437-\u0437\u0430 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u043a\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0435\u0441\u0442\u044c \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0438 \u0442\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0435\u0449\u0451 \u043d\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0430:<\/p>\n<ul>\n<li>\n<p><strong>\u0422\u0430\u043f:<\/strong> \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u043b\u0430\u0439\u0434, \u0437\u0430\u0442\u0435\u043c \u0441\u0442\u043e\u0440\u0438\u0441, \u0437\u0430\u0442\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<li>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 \u0441 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u044e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c animateScrollToPage.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2) \u0424\u0443\u043d\u043a\u0446\u0438\u044f setResumed<\/h3>\n<p> \u042d\u0442\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441\/\u0441\u043b\u0430\u0439\u0434\u043e\u0432. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0432 \u0434\u0432\u0443\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445: <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0438\u043b\u0438 \u0441\u043b\u0430\u0439\u0434\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438 \u0441\u043d\u044f\u0442\u0438\u0438 \u0441 \u043f\u0430\u0443\u0437\u044b.<\/p>\n<\/li>\n<\/ul>\n<p> \u041d\u043e <strong>\u0442\u043e\u043b\u044c\u043a\u043e \u0442\u043e\u0433\u0434\u0430, \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 \u0438 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u044b<\/strong>. <\/p>\n<h3>3) \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0441\u0432\u0430\u0439\u043f\u043e\u0432<\/h3>\n<p><strong>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 LaunchedEffect<\/strong> \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u0442 \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u0430\u0439\u043f\u044b: <\/p>\n<ul>\n<li>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0442\u0435\u043c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e \u0441 ViewModel \u0447\u0435\u0440\u0435\u0437 setStories.<\/p>\n<\/li>\n<\/ul>\n<p>\u0417\u0434\u0435\u0441\u044c <strong>setResumed \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f<\/strong>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043d\u0430\u0448\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043b\u043e\u0433\u0438\u043a\u0430 \u043f\u0430\u0443\u0437\u044b \u0438 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0443\u0436\u0435 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432 detectTapGestures: <\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u0438 \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043d\u0430 \u043f\u0430\u0443\u0437\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0436\u0435\u0441\u0442 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0451\u0442\u0441\u044f \u043a\u0430\u043a \u0441\u0432\u0430\u0439\u043f, \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<h3>4) \u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 HorizontalPager<\/h3>\n<p>\u0414\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0436\u0435\u0441\u0442\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 detectTapGestures. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u0430\u0439\u043f\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. <\/p>\n<h3>detectTapGestures: \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b<\/h3>\n<ul>\n<li>\n<p>\u0414\u0432\u0430 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0430: onPress \u0438 onTap.<\/p>\n<ul>\n<li>\n<p><strong>onPress:<\/strong> \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442, \u0435\u0441\u043b\u0438 \u043f\u0430\u043b\u0435\u0446 \u0443\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435.<\/p>\n<ul>\n<li>\n<p>\u0421\u0442\u0430\u0432\u0438\u0442 \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430 \u043f\u0430\u0443\u0437\u0443.<\/p>\n<\/li>\n<li>\n<p>\u0416\u0434\u0451\u0442, \u043f\u043e\u043a\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u0442 \u044d\u043a\u0440\u0430\u043d (tryAwaitRelease()).<\/p>\n<\/li>\n<li>\n<p>\u0412\u043e\u0437\u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>onTap:<\/strong> \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e\u043c \u043d\u0430\u0436\u0430\u0442\u0438\u0438.<\/p>\n<ul>\n<li>\n<p>\u042d\u043a\u0440\u0430\u043d \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0437\u043e\u043d\u044b:<\/p>\n<ul>\n<li>\n<p>\u041b\u0435\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0430\u0432\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>5) \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u0441\u0432\u0430\u0439\u043f\u043e\u0432<\/h3>\n<p> \u0420\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0432 detectVerticalDragGestures: <\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0435\u043d \u0441\u0432\u0430\u0439\u043f \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437 (\u0434\u043b\u044f \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441).<\/p>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0432 onDragEnd:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0434\u043e\u0441\u0442\u0438\u0433\u043b\u043e \u043b\u0438 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 (offsetY) \u043f\u043e\u0440\u043e\u0433\u0430 \u0437\u0430\u043a\u0440\u044b\u0442\u0438\u044f (\u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0447\u0435\u0440\u0435\u0437 RATIO_TO_DISMISS).<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0434\u0430:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0432\u043d\u0438\u0437.<\/p>\n<\/li>\n<li>\n<p>\u042d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u043d\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u043d\u0442\u0435\u043d\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0432 onVerticalDrag:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0432\u0430\u0439\u043f\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0432\u0430\u0439\u043f \u0438\u0434\u0451\u0442 \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437, \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u043c offsetY, \u0447\u0442\u043e\u0431\u044b \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0441\u0434\u0432\u0438\u0433\u0430 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u043b\u0430\u0441\u044c \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f preloadedStoriesIndex. \u042f \u0435\u0433\u043e \u043d\u0435 \u0437\u0440\u044f \u0442\u0430\u043a \u043d\u0430\u0437\u0432\u0430\u043b, \u0442\u0430\u043a \u043a\u0430\u043a \u0431\u0435\u0441\u0448\u043e\u0432\u043d\u043e\u0433\u043e \u0441\u0432\u0430\u0439\u043f\u0430 \u043c\u0435\u0436\u0434\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0441\u043f\u0438\u0441\u043a\u0430 pager \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u043d\u0430\u0442\u044c \u0438 \u043f\u0440\u043e\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 (\u0432\u0438\u0434\u0438\u043c\u043e\u0439). \u042d\u0442\u043e \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0443\u0432\u0438\u0434\u0435\u0442\u044c \u043d\u0438\u0436\u0435: <\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0bb\/bb9\/ea4\/0bbbb9ea487f1858df40c8d3d918c2a0.gif\" alt=\"gif \u0438\u0437 \u0433\u0443\u0433\u043b\u0430 https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/pager#horizontalpager\" title=\"gif \u0438\u0437 \u0433\u0443\u0433\u043b\u0430 https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/pager#horizontalpager\" width=\"1280\" height=\"678\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/0bb\/bb9\/ea4\/0bbbb9ea487f1858df40c8d3d918c2a0.gif\"\/><\/p>\n<div><figcaption>gif \u0438\u0437 \u0433\u0443\u0433\u043b\u0430 <a href=\"https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/pager#horizontalpager\">https:\/\/developer.android.com\/develop\/ui\/compose\/layouts\/pager#horizontalpager<\/a><\/figcaption><\/div>\n<\/figure>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043f\u043e\u043c\u0438\u043c\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u0439 (\u0432\u0438\u0434\u0438\u043c\u043e\u0439) \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b 4, \u043c\u044b \u0442\u0430\u043a\u0436\u0435 \u0432\u0438\u0434\u0438\u043c \u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b 3 \u0438 5. \u0422\u0430\u043a \u0432\u043e\u0442 \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440, \u0447\u0442\u043e \u043d\u0430\u043c \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f, \u2014 \u043d\u0435 \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430, \u0430 <strong>\u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u0430\u044f<\/strong>. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u043c \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0430 \u043d\u0430\u0448\u0435\u043c\u0443 \u0433\u043b\u0430\u0437\u0443, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0439, \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u043e\u0432 \u0438 \u0442.\u0434., \u0445\u043e\u0442\u044f \u0438 \u043d\u0443\u0436\u043d\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u041e\u043d\u0430 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0438\u0436\u0435 \u0432 \u043a\u043e\u0434\u0435. \u041e\u0434\u043d\u0430\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0441\u0447\u0435\u0442\u0430\u043c\u0438, \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0443 \u043d\u0430\u0441 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c. \u041f\u043e \u0441\u0443\u0442\u0438, \u043a\u0430\u043a \u0438 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e \u043a\u043b\u0438\u043d\u0443, View \u2014 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u0430\u044f, \u0430 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c, \u0438 \u0442\u0430\u043c \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0438 \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u043e \u0431\u043e\u043a\u0430\u043c \u0443 \u043d\u0430\u0441 \u043e\u0442\u0440\u0438\u0441\u0443\u044e\u0442\u0441\u044f, \u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u044f\u0442\u0441\u044f, \u0438 \u0442\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0441\u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u0430:<\/p>\n<pre><code>@OptIn(ExperimentalFoundationApi::class) @Suppress(\"LongMethod\") @Composable private fun HorizontalPagerContent(    pagerState: PagerState,    preloadedStoriesIndex: Int,    storiesState: StoriesState,    onToolbarClick: () -&gt; Unit,    onButtonClick: (String, Int) -&gt; Unit,    onNext: () -&gt; Unit,    onProgress: (Float) -&gt; Unit ) {    \/\/ preloadedStoriesIndex - \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u0438\u0437 pager'\u0430 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u043a    \/\/ \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 pre-fetcher (\u043c\u0431 != \u0432\u0438\u0434\u0438\u043c\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435)    val storyType = storiesState.storiesType[preloadedStoriesIndex]    if (storyType is StoriesType.Content) {        val preloadedStory = storyType.content        val preloadedSlide = preloadedStory.slides.first { it.current }        val preloadedSlideIndex = preloadedStory.slides.indexOfFirst { it.current }          Column(            modifier = Modifier                .fillMaxSize()                .background(ComposeColor(preloadedSlide.backgroundColor))                .statusBarsPadding()                .navigationBarsPadding()                .graphicsLayer {                    val pageOffset = pagerState.getOffsetFractionForPage(preloadedStoriesIndex)                    val offScreenRight = pageOffset &lt; 0f                    val interpolated = FastOutLinearInEasing.transform(pageOffset.absoluteValue)                    rotationY =                        interpolated * if (offScreenRight) ROTATION_DEGREES else -ROTATION_DEGREES                      transformOrigin = TransformOrigin(                        pivotFractionX = if (offScreenRight) 0f else 1f,                        pivotFractionY = .5f                    )                }        ) {            Stepper(                storiesIndex = preloadedStoriesIndex,                slides = preloadedStory.slides,                duration = storiesState.duration,                onNext = onNext,                onProgress = onProgress            )            Header(onToolbarClick)            Illustration(                imageRes = preloadedSlide.imageRes,                modifier = Modifier.weight(1f)            )            TitleAndDescription(                titleRes = preloadedSlide.titleRes,                subtitleRes = preloadedSlide.subtitleRes            )            if (preloadedSlide.buttonVisible) {                Button(                    modifier = Modifier                        .fillMaxWidth()                        .padding(horizontal = 16.dp, vertical = 24.dp),                    buttonStyle = ButtonStyle.xLargeStyle,                    buttonColors = preloadedSlide.buttonColorsULong.map(),                    title = stringResource(id = preloadedSlide.buttonText),                    onClick = {                        onButtonClick(preloadedStory.id, preloadedSlideIndex)                    }                )            }        }    } } <\/code><\/pre>\n<p><strong>\u041b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0442\u0438\u043f\u043e\u043c \u0441\u0442\u043e\u0440\u0438\u0441 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439<\/strong><\/p>\n<ul>\n<li>\n<p><strong>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0442\u0438\u043f\u0430 \u0441\u0442\u043e\u0440\u0438\u0441<\/strong><\/p>\n<ul>\n<li>\n<p>\u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c, \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u043a\u043e\u043d\u0442\u0435\u043d\u0442:<\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 <strong>\u0431\u0435\u0437 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430<\/strong>, \u0435\u0451 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p>\u0412\u0430\u0436\u043d\u043e: \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441 \u0438\u043b\u0438 \u0441\u043b\u0430\u0439\u0434 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 <strong>\u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430<\/strong>, \u0430 \u043d\u0435 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u043e\u0431\u0443\u0441\u043b\u043e\u0432\u043b\u0435\u043d\u043e \u0440\u0430\u0431\u043e\u0442\u043e\u0439 <strong>prefetcher\u2019\u0430<\/strong> \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0437\u0430\u0440\u0430\u043d\u0435\u0435. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0441\u0442\u043e\u0440\u0438\u0441, \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u043e\u043c, \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0432\u043e \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438. <\/p>\n<ul>\n<li>\n<p><strong>\u0411\u0435\u0441\u0448\u043e\u0432\u043d\u044b\u0439 \u043f\u0435\u0440\u0435\u0445\u043e\u0434<\/strong><\/p>\n<ul>\n<li>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u043f\u0440\u0435\u0434\u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0441\u0442\u043e\u0440\u0438\u0441, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043c\u0435\u0436\u0434\u0443 \u043d\u0438\u043c\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043b\u0430\u0432\u043d\u043e:<\/p>\n<ul>\n<li>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u0430 \u0434\u0440\u0443\u0433\u0430\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0432\u0438\u0434\u0438\u043c\u043e\u0439 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430 50%), \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 currentPage.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 LaunchedEffect, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 \u0438 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0410\u043d\u0438\u043c\u0430\u0446\u0438\u044f \u0441\u0432\u0430\u0439\u043f\u0430<\/strong><\/p>\n<ul>\n<li>\n<p>\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u043e\u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f graphicsLayer:<\/p>\n<ul>\n<li>\n<p><strong>rotationY<\/strong>: \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0432\u0440\u0430\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043e\u0441\u0438.<\/p>\n<ul>\n<li>\n<p>\u0427\u0435\u043c \u0434\u0430\u043b\u044c\u0448\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u0432\u0430\u0439\u043f\u0430\u0435\u0442 \u0441\u0442\u043e\u0440\u0438\u0441, \u0442\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0443\u0433\u043e\u043b \u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e ROTATION_DEGREES(\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 45 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432).<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>transformOrigin<\/strong>: \u0437\u0430\u0434\u0430\u0451\u0442 \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0446\u0435\u043d\u0442\u0440\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e \u043e\u0441\u044f\u043c X \u0438 Y \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p> \u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0447\u0430\u0441\u0442\u044c, \u043e\u0442\u0432\u0435\u0447\u0430\u044e\u0449\u0443\u044e \u0437\u0430 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0443 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441\u0442\u043e\u0440\u0438\u0441: <\/p>\n<pre><code>private const val INITIAL_ANIMATION_VALUE = 0f private const val TARGET_ANIMATION_VALUE = 1f private val STEPPER_TRACK_COLOR = Color(0x52FFFFFF)   @Composable fun Stepper(    storiesIndex: Int,    slides: List&lt;UiSlide&gt;,    duration: Int,    onNext: () -&gt; Unit,    onProgress: (Float) -&gt; Unit ) {    Row(        modifier = Modifier            .fillMaxWidth()            .padding(horizontal = 16.dp, vertical = 14.dp),        horizontalArrangement = Arrangement.spacedBy(4.dp)    ) {        slides.forEach {            LinearProgressIndicator(                progress = { it.progress },                modifier = Modifier                    .weight(1f)                    .height(4.dp)                    .clip(Shapes.roundedCorners8),                color = Colors.systemWhite,                trackColor = STEPPER_TRACK_COLOR,                strokeCap = StrokeCap.Butt,                gapSize = 0.dp,                drawStopIndicator = {}            )        }    }      Progress(        storiesIndex = storiesIndex,        slides = slides,        duration = duration,        onNext = onNext,        onProgress = onProgress    ) }   @Composable private fun Progress(    storiesIndex: Int,    slides: List&lt;UiSlide&gt;,    duration: Int,    onNext: () -&gt; Unit,    onProgress: (Float) -&gt; Unit ) {    val slideIndex = slides.indexOfFirst { it.current }    val slide = slides[slideIndex]    val progressAnimatable = remember(slideIndex, storiesIndex) {        Animatable(INITIAL_ANIMATION_VALUE)    }    val progressState = slide.progressState      LaunchedEffect(keys = arrayOf(slideIndex, storiesIndex, progressState)) {        when (progressState) {            UiSlide.ProgressState.START, UiSlide.ProgressState.REFRESHED -&gt; {            }              UiSlide.ProgressState.RESUME -&gt; {                progressAnimatable.snapTo(slide.progress)                  val durationMillis = (TARGET_ANIMATION_VALUE - slide.progress) * duration                progressAnimatable.animateTo(                    targetValue = TARGET_ANIMATION_VALUE,                    animationSpec = tween(                        durationMillis = durationMillis.toInt(),                        easing = LinearEasing                    )                ) {                    onProgress(value)                }                onNext()            }              UiSlide.ProgressState.PAUSE -&gt; {                progressAnimatable.stop()            }              UiSlide.ProgressState.COMPLETE -&gt; {                progressAnimatable.snapTo(TARGET_ANIMATION_VALUE)            }        }    } } <\/code><\/pre>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c LinearProgressIndicator \u2014 \u044d\u0442\u043e \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u0430\u044f \u0432\u044c\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u043c\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u044f\u043c\u0438. \u0412 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043c\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0435\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u043d\u0434\u0435\u043a\u0441\u0430 \u0441\u043b\u0430\u0439\u0434\u0430, \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441 \u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430. \u041a\u0430\u043a \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c\u0441\u044f, \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f: \u0437\u0430\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u0430\u044f \u0447\u0430\u0441\u0442\u044c, \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0435\u0435\u0441\u044f \u0432\u0440\u0435\u043c\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 (\u0432 \u043c\u0438\u043b\u043b\u0438\u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445), \u043f\u043e\u0441\u043b\u0435 \u0447\u0435\u0433\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u043f\u043b\u0430\u0432\u043d\u0430\u044f \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f.<\/p>\n<p>\u0424\u0443\u043d\u043a\u0446\u0438\u044f animateTo \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u044d\u0442\u0443 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044e, \u0438 \u0435\u0451 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0439\u0434\u0435\u0442 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0432 LaunchedEffect. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u043b\u0431\u044d\u043a onProgress, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0435\u0433\u043e \u0432 \u0441\u0442\u0435\u0439\u0442 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u044b \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430. \u041a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e (TARGET_ANIMATION_VALUE = 1), \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044f onNext, \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u044e\u0449\u0430\u044f \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043b\u0430\u0439\u0434 \u0438\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u043e\u0434\u0445\u043e\u0434 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u043b\u0430\u0432\u043d\u043e\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0443\u0435\u043c\u043e\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432, \u0447\u0442\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u043a\u043e\u0434 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043e\u043f\u0438\u0448\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u043d\u044b\u0439 detectTapGestures:<\/p>\n<pre><code>\/** * \u0421\u0432\u043e\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f [androidx.compose.foundation.gestures.detectTapGestures], \u0438\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439: * - \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 requireUnconsumed = false \u0432 `awaitFirstDown`, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u0432\u0430\u0439\u043f * \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430 (\u043f\u043e\u043a\u0430 1\u044b\u0439 \u043d\u0435 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439) * - \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438 `onDoubleTap`, `onLongPress` \u0438\u0437-\u0437\u0430 \u043d\u0435\u043d\u0430\u0434\u043e\u0431\u043d\u043e\u0441\u0442\u0438 * - \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432\u044b\u0437\u043e\u0432 `consumeUntilUp` \u043f\u0440\u0438 \u043e\u0442\u043c\u0435\u043d\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f tap-up, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0430\u0441\u044c * \u043f\u0430\u0443\u0437\u0430, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f - \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 *\/ suspend fun PointerInputScope.detectTapGestures(    onPress: suspend PressGestureScope.(Offset) -&gt; Unit = NoPressGesture,    onTap: ((Offset) -&gt; Unit)? = null ) = coroutineScope {    val pressScope = PressGestureScopeImpl(this@detectTapGestures)    awaitEachGesture {        val down = awaitFirstDown(requireUnconsumed = false)        down.consume()        launch {            pressScope.reset()        }        if (onPress !== NoPressGesture) launch {            pressScope.onPress(down.position)        }        val longPressTimeout = viewConfiguration.longPressTimeoutMillis        var upOrCancel: PointerInputChange? = null        try {            \/\/ wait for first tap up or long press            upOrCancel = withTimeout(longPressTimeout) {                waitForUpOrCancellation()            }            if (upOrCancel == null) {                consumeUntilUp()                launch {                    pressScope.cancel() \/\/ tap-up was canceled                }            } else {                upOrCancel.consume()                launch {                    pressScope.release()                }            }        } catch (_: PointerEventTimeoutCancellationException) {            consumeUntilUp()            launch {                pressScope.release()            }        }          if (upOrCancel != null) {            onTap?.invoke(upOrCancel.position)        }    } }   private val NoPressGesture: suspend PressGestureScope.(Offset) -&gt; Unit = { }   private suspend fun AwaitPointerEventScope.consumeUntilUp() {    do {        val event = awaitPointerEvent()        event.changes.fastForEach { it.consume() }    } while (event.changes.fastAny { it.pressed }) }   private class PressGestureScopeImpl(    density: Density ) : PressGestureScope, Density by density {    private var isReleased = false    private var isCanceled = false    private val mutex = Mutex(locked = false)      \/**     * Called when a gesture has been canceled.     *\/    fun cancel() {        isCanceled = true        mutex.unlock()    }      \/**     * Called when all pointers are up.     *\/    fun release() {        isReleased = true        mutex.unlock()    }      \/**     * Called when a new gesture has started.     *\/    suspend fun reset() {        mutex.lock()        isReleased = false        isCanceled = false    }      override suspend fun awaitRelease() {        if (!tryAwaitRelease()) {            throw GestureCancellationException(\"The press gesture was canceled.\")        }    }      override suspend fun tryAwaitRelease(): Boolean {        if (!isReleased &amp;&amp; !isCanceled) {            mutex.lock()            mutex.unlock()        }        return isReleased    } } <\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0434\u0430\u0432\u0430\u0439\u0442\u0435 \u043f\u043e\u0433\u043e\u0432\u043e\u0440\u0438\u043c \u043f\u0440\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043a\u0430\u0441\u0430\u043d\u0438\u0439. \u0423 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u0440\u0438 \u043a\u0430\u0441\u0430\u043d\u0438\u0438 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043f\u0430\u0443\u0437\u0430, \u0438 \u043e\u043d\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0442\u044c\u0441\u044f \u0434\u043e \u0442\u0435\u0445 \u043f\u043e\u0440, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0443\u0449\u0435\u043d \u043f\u0430\u043b\u0435\u0446<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439\/\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0432\u0430\u0439\u043f\u044b<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u0438 \u043e\u043d\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 detectTapGestures <strong>\u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0434 \u043d\u0430\u0448\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f<\/strong>, \u0442\u0430\u043a \u043a\u0430\u043a\u00a0 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0441\u0432\u0430\u0439\u043f\u0430 \u0442\u0430\u043f \u0431\u0443\u0434\u0435\u0442 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043f\u0440\u0435\u0440\u0432\u0430\u043d\u043d\u044b\u043c, \u0430 \u043f\u0430\u0443\u0437\u0430 \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u0441\u044f.<\/p>\n<p>\u0415\u0449\u0435 \u043e\u0434\u043d\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e Compose <strong>\u043d\u0435 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u0435\u0442\u0435\u043a\u0442\u043e\u0432<\/strong>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e.<\/p>\n<p>\u00a0<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/269\/a23\/805\/269a23805ee275ef77d7913e7851e19f.png\" width=\"700\" height=\"394\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/269\/a23\/805\/269a23805ee275ef77d7913e7851e19f.png\"\/><\/figure>\n<p>\u041d\u0430\u0448 \u0432\u0438\u0434\u043e\u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0439 detectTapGestures \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e. <\/p>\n<p><strong>\u0427\u0435\u043c \u0438\u043c\u0435\u043d\u043d\u043e: <\/strong><\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u043b\u0438\u0447\u0438\u0435\u043c uncomsumed = false. \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0441\u0432\u0430\u0439\u043f \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430. \u041a\u043e\u0433\u0434\u0430 \u0441\u0432\u0430\u0439\u043f\u043d\u0443\u043b\u0438 \u043e\u0434\u0438\u043d \u0440\u0430\u0437, \u0438 \u0441\u0432\u0430\u0439\u043f \u043d\u0435 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430, \u043c\u044b \u0441\u0440\u0430\u0437\u0443 \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0442\u043e\u0440\u043e\u0439, \u0438\u043d\u0430\u0447\u0435 \u0432\u0442\u043e\u0440\u043e\u0439 \u0441\u0432\u0430\u0439\u043f \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u0443\u0435\u0442\u0441\u044f.<\/p>\n<\/li>\n<li>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438 onDoubleTap, onLongPress, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432\u044b\u0437\u043e\u0432 consumeUntilUp \u043f\u0440\u0438 \u043e\u0442\u043c\u0435\u043d\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f tap-up, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u0445 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u043b\u0430\u0441\u044c \u043f\u0430\u0443\u0437\u0430, \u0430 \u043f\u043e\u0441\u043b\u0435 \u0438\u0445 \u043e\u043a\u043e\u043d\u0447\u0430\u043d\u0438\u044f \u2014 \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0430\u043a \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0437\u0430\u043c\u0435\u0442\u0438\u0442\u044c, detectVerticalDragGestures \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439, \u0442\u0430\u043a \u043a\u0430\u043a \u043d\u0430\u043c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0435\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0438 \u0431\u043b\u043e\u043a\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0436\u0435\u0441\u0442\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441\u00a0 \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u043c\u0438, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0435 detectTapGestures.<\/p>\n<p><strong>\u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438:<\/strong><\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ffb\/0b1\/fc2\/ffb0b1fc2c7156518d24b7d8ffddfcae.png\" width=\"953\" height=\"714\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ffb\/0b1\/fc2\/ffb0b1fc2c7156518d24b7d8ffddfcae.png\"\/><\/figure>\n<p>\u041f\u0435\u0440\u0432\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438  \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u043e \u0437\u0430\u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 \u0438 \u043d\u0430\u0448\u0435\u0439 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<p><strong>\u041f\u0435\u0440\u0432\u043e\u0435<\/strong> \u2014 \u044d\u0442\u043e \u0442\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u0443\u0437\u043e\u0432\u0441\u043a\u0438\u0439 \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0443\u044e (\u0432\u0438\u0434\u0438\u043c\u0443\u044e) \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443, \u043d\u043e \u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0437\u0430 \u043d\u0435\u0439. \u0412\u0430\u0436\u043d\u043e \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u0438\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c, \u043e\u0436\u0438\u0434\u0430\u044f, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u0441\u0442\u0430\u043d\u0443\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438. \u0418\u043d\u0430\u0447\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u043e\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u044f \u0432 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u044f\u0445. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u0438\u0434\u0438\u043c\u0430\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u043b\u0430 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0447\u0442\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u043b\u043e \u043f\u043e\u0434\u0435\u0440\u0433\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430. \u0422\u043e \u0436\u0435 \u0431\u044b\u043b\u043e \u0438 \u0441\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435\u0439 \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435.<\/p>\n<p><strong>\u0412\u0442\u043e\u0440\u043e\u0435<\/strong> \u2014 \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043c\u0435\u0436\u0434\u0443 \u0441\u0432\u0430\u0439\u043f\u0430\u043c\u0438 \u0438 \u0442\u0430\u043f\u0430\u043c\u0438. \u0418\u0445 \u043a\u043e\u043b\u043b\u0431\u044d\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. \u0415\u0441\u043b\u0438 \u0441 \u0442\u0430\u043f\u0430\u043c\u0438 \u0432\u0441\u0435 \u0431\u044b\u043b\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e, \u0442\u043e \u0441\u043e \u0441\u0432\u0430\u0439\u043f\u0430\u043c\u0438 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0442\u0430\u043a \u043a\u0430\u043a \u043a\u043e\u043b\u0431\u044d\u043a\u0438 \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0442\u0430\u043f\u0430 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u043b\u043b\u0431\u044d\u043a onNext, \u0437\u0430\u0442\u0435\u043c setNextSlide \u043d\u0430\u0448\u0435\u0439 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u0442\u0435\u0439\u0442\u0443 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u0430\/\u0441\u0442\u043e\u0440\u0438\u0441. \u041f\u043e\u0441\u043b\u0435 \u044d\u0442\u043e\u0433\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f LaunchedEffect, \u0433\u0434\u0435 \u043c\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0435 (\u0437\u0430\u043e\u0434\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u044f \u0435\u0433\u043e \u0441\u0442\u0435\u0439\u0442) \u0447\u0435\u0440\u0435\u0437 animateScrollToPage. \u0422\u043e \u0435\u0441\u0442\u044c \u0438\u0434\u0435\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430: \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u2014 \u043f\u0435\u0439\u0434\u0436\u0435\u0440. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0435 \u043c\u044b \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u0435\u043d\u044f\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430 (LaunchedEffect \u0441 currentPage), \u0438 \u0443\u0436\u0435 \u0432\u0434\u043e\u0433\u043e\u043d\u043a\u0443 \u0430\u043a\u0442\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 setStories, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 \u0443\u0436\u0435 \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 setNextStories. \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u0443\u0442 \u0446\u0435\u043f\u043e\u0447\u043a\u0430: \u043f\u0435\u0439\u0434\u0436\u0435\u0440 \u2014 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c.<\/p>\n<p>\u041f\u043e \u043f\u0440\u0438\u0447\u0438\u043d\u0435 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043a\u043e\u043b\u0431\u044d\u043a\u043e\u0432, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u0442\u043e\u0440\u0438\u0441 \u043c\u043e\u0433\u043b\u0430 \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c\u0441\u044f \u0438\u0437-\u0437\u0430 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e progress state \u043d\u0435 \u0443\u0441\u043f\u0435\u043b \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 resume, \u0438\u043b\u0438 \u0431\u044b\u043b\u0438 \u043c\u043e\u0440\u0433\u0430\u043d\u0438\u044f \u0441\u0442\u0435\u043f\u043f\u0435\u0440\u0430 \u0438\u0437-\u0437\u0430 \u043a\u043e\u043d\u0444\u043b\u0438\u043a\u0442\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u044c\u044e \u0438 animatable.<\/p>\n<p><strong>\u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432 2 \u0432\u0435\u0449\u0430\u0445: <\/strong><\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441\/\u0441\u043b\u0430\u0439\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438, \u043d\u0435 \u043f\u0435\u0439\u0434\u0436\u0435\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u041e\u0442\u0440\u0438\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c, \u043d\u043e \u043d\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441, \u043f\u043e\u043a\u0430 \u043e\u043d\u0438 \u043d\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0432\u0438\u0434\u0438\u043c\u044b\u043c\u0438 \u2014 \u044d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u043b\u043e\u0441\u044c \u0437\u0430 \u0441\u0447\u0435\u0442 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0432\u044b\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043d\u0438\u044f progress state \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043b\u0430\u0439\u0434\u0430.<\/p>\n<\/li>\n<\/ol>\n<p><strong>\u0422\u0440\u0435\u0442\u044c\u044f<\/strong> \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u2014 \u044d\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0436\u0435\u0441\u0442\u043e\u0432 \u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0431\u0438\u0437\u043d\u0435\u0441-\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c\u0438.<\/p>\n<ol>\n<li>\n<p>\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 detectTapGestures \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043d\u0435 \u0434\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u0435\u0439 \u0434\u043b\u044f \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u0443\u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043e\u0442 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e workaround \u0432 \u0432\u0438\u0434\u0435 \u043a\u043e\u043f\u0438\u043f\u0430\u0441\u0442\u044b \u0444\u0430\u0439\u043b\u0430 TapGestureDetector.<\/p>\n<\/li>\n<\/ol>\n<ol start=\"2\">\n<li>\n<p>Pager \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0432 \u0441\u0432\u0430\u0439\u043f\u044b \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445 \u2014 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c, \u043a\u0430\u043a \u043e\u0431\u043e\u0439\u0442\u0438 \u044d\u0442\u043e \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 . \u0411\u044b\u043b \u0432\u044b\u0431\u043e\u0440 \u043c\u0435\u0436\u0434\u0443 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430 \u00ab\u0441 \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043e\u043c\u00bb \u0438 \u00ab\u0431\u0435\u0437\u00bb, \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0441 \u00ab\u043c\u043e\u043a\u043e\u0432\u044b\u043c\u00bb \u043d\u0430\u0431\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0435\u0440\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u043a\u0430\u0436\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0441 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0439 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0447\u0435\u0442\u043a\u043e \u0432\u044b\u0434\u0435\u043b\u044f\u0435\u043c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u0441\u0442\u043e\u0440\u0438\u0441, \u043e\u0434\u043d\u0430\u043a\u043e \u044d\u0442\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u0441\u0442\u0435\u0439\u0442. \u0412\u0442\u043e\u0440\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u0442\u0435\u0439\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u044b\u043c, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0442\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u00ab\u043c\u043e\u043a\u043e\u0432\u0430\u044f\u00bb, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 mock: boolean \u0432 \u043a\u043b\u0430\u0441\u0441\u0435 UiStories, \u0447\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043b\u0430\u043a\u043e\u043d\u0438\u0447\u043d\u043e.<\/p>\n<\/li>\n<\/ol>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0430\u0446\u0438\u044f \u043f\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0444\u0438\u0447\u0438:\u00a0 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u044c\u0442\u0435 \u043f\u043b\u0430\u043d \u043f\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u0438\u0441, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u044b\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043d\u0442\u0435\u043d\u0442\u043d\u043e\u0433\u043e \u0433\u043e\u043b\u043e\u0434\u0430. \u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u043f\u043b\u0430\u043d \u043e\u0442 \u043c\u0430\u0440\u043a\u0435\u0442\u0438\u043d\u0433\u0430 \u043f\u043e \u043d\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044e \u0445\u043e\u0442\u044f \u0431\u044b \u043d\u0430 3 \u043c\u0435\u0441\u044f\u0446\u0430, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u0442 \u2014 \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u043a\u0430 \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0444\u0438\u0447\u0443, \u0438\u043d\u0430\u0447\u0435 \u0441\u0442\u043e\u043b\u043a\u043d\u0435\u0442\u0435\u0441\u044c \u0441 \u0442\u0435\u043c, \u0447\u0442\u043e \u0444\u0438\u0447\u0430 \u2014 \u0433\u043e\u0442\u043e\u0432\u0430, \u0430 \u043d\u043e\u0432\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0435\u0442.<\/p>\n<p><a class=\"anchor\" name=\"list5\" id=\"list5\"><\/a><\/p>\n<h3>\u0427\u0442\u043e \u0432 \u0438\u0442\u043e\u0433\u0435<\/h3>\n<p>\u0412\u043e\u0437\u044c\u043c\u0435\u043c \u0437\u0430 \u043f\u0440\u0438\u043c\u0435\u0440 \u043d\u0430\u0448\u0443 \u0441\u0442\u043e\u0440\u0438\u0441 \u00ab\u041c2\u041f\u0440\u043e \u041d\u043e\u0432\u043e\u0441\u0442\u0440\u043e\u0439\u043a\u0438\u00bb \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u0440\u0438\u0435\u043b\u0442\u043e\u0440\u043e\u0432 \u043f\u043e \u0437\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430 \u043f\u0440\u043e\u0434\u0430\u0436\u0435 \u043d\u043e\u0432\u043e\u0441\u0442\u0440\u043e\u0435\u043a. \u0421\u0440\u0430\u0432\u043d\u0438\u043c \u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0441 \u0431\u0430\u043d\u043d\u0435\u0440\u043e\u043c. \u041c\u044b \u0432\u0437\u044f\u043b\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0431\u0430\u043d\u043d\u0435\u0440\u0443 \u0437\u0430 8 \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435, \u0430 \u043f\u043e \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u0432\u0441\u0435\u0433\u043e \u0437\u0430 2.5 \u043c\u0435\u0441\u044f\u0446\u0430.<\/p>\n<blockquote>\n<p>\u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u00a0\u0434\u0430\u0436\u0435 \u0442\u0430\u043a <strong>\u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u0435\u0432\u0437\u043e\u0448\u043b\u0430 \u0431\u0430\u043d\u043d\u0435\u0440 \u043f\u043e\u00a0\u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0432 39\u00a0\u0440\u0430\u0437, \u0430\u00a0\u043f\u043e\u00a0\u043a\u043b\u0438\u043a\u0430\u043c\u00a0\u2014 \u0432 8.5\u00a0\u0440\u0430\u0437<\/strong>.<\/p>\n<\/blockquote>\n<p>\u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043e \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u0438 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430\u0441\u044c, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0431\u044b\u043b\u0430 \u0440\u0435\u0448\u0435\u043d\u0430. <\/p>\n<p>\u0422\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430 \u0445\u043e\u0440\u043e\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u0430 \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u043b\u0430\u0441\u044c, \u043c\u044b \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0435 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u0435 \u0438\u0434\u0435\u0438 \u0441\u0442\u043e\u0440\u0438\u0441. \u0418\u0445 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u0434\u0435\u0442 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u0443\u0436\u0435 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043b\u0438 \u043d\u043e\u0432\u0443\u044e \u0444\u0438\u0447\u0443 \u2014 \u0441\u043e\u0446\u0441\u0435\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u043e\u0432 \u0440\u044b\u043d\u043a\u0430 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438. \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0438\u0441\u043a \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u043e\u0432 \u0432 \u0441\u0444\u0435\u0440\u0435 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u043f\u0430\u0440\u0442\u043d\u0435\u0440\u0441\u0442\u0432\u0430. \u0421\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043d\u0430\u0434 UX \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u044b\u0439 \u0444\u043e\u043d \u0441 overlay \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0435\u0439 (\u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u044d\u043a\u0440\u0430\u043d) \u043f\u0440\u0438 \u0441\u0432\u0430\u0439\u043f\u0430\u0445 \u0432\u043d\u0438\u0437 \u0438 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445. \u0422\u0430\u043a\u0436\u0435 \u0432 \u043f\u043b\u0430\u043d\u0430\u0445 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0430\u043a\u0442\u0438\u0432 \u0441 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c\u0438, \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0435 \u0432\u0438\u0434\u0435\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043e\u043a. \u0415\u0449\u0435 \u0432 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0435\u0441\u0442\u044c \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u044e\u0430\u043d\u0441 \u2014 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u0441\u0442\u043e\u0440\u0438\u0441, \u0435\u0441\u043b\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0432\u0430\u0439\u043f \u0432\u043b\u0435\u0432\u043e \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u0438 \u0432\u043f\u0440\u0430\u0432\u043e \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0442\u043e \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0442\u043e\u0433\u043e, \u043e\u0442\u043f\u0443\u0441\u0442\u0438\u043b \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u0430\u043b\u0435\u0446 \u0438\u043b\u0438 \u043d\u0435\u0442, \u043f\u043e \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044e\u00a0\u0441\u0432\u0430\u0439\u043f\u0430 \u0432 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 \u044d\u043a\u0440\u0430\u043d\u0430 (\u043a\u043e\u0433\u0434\u0430 \u0444\u0435\u0439\u043a\u043e\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0442\u0430\u043d\u0435\u0442 \u0432\u0438\u0434\u0438\u043c\u043e\u0439), \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0430\u0434 \u044d\u0442\u0438\u043c \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c. \u0412\u043e\u043e\u0431\u0449\u0435 \u043c\u044b \u0441\u0435\u0439\u0447\u0430\u0441 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u043c \u043a\u043e\u0434\u043e\u0432\u0443\u044e \u0431\u0430\u0437\u0443 \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0447\u0438 \u0438 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u0430\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0441\u0432\u044f\u0437\u0438, \u0447\u0442\u043e\u0431\u044b \u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c.\u00a0<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0434\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f \u043f\u043e\u043c\u043e\u0433\u043b\u0430 \u0432\u0430\u043c \u043f\u043e\u043d\u044f\u0442\u044c, \u043a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438. \u041d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e \u044d\u0442\u043e \u043b\u0438\u0448\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0446\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e, \u0438 \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u043e. \u0410 \u0432\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0432 \u0441\u0432\u043e\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438? \u0421 \u043a\u0430\u043a\u0438\u043c\u0438 \u0442\u0440\u0443\u0434\u043d\u043e\u0441\u0442\u044f\u043c\u0438 \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c? \u041f\u043e\u043c\u043e\u0433\u043b\u0438 \u043b\u0438 \u043e\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0436\u0435\u043b\u0430\u0435\u043c\u044b\u0435 \u0431\u0438\u0437\u043d\u0435\u0441-\u0437\u0430\u0434\u0430\u0447\u0438? \u041f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0432 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u0445, \u0441\u043d\u0438\u043c\u0435\u043c \u0437\u0430\u0432\u0435\u0441\u0443 \u0442\u0430\u0439\u043d\u044b \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043f\u0440\u043e\u0441\u0443, \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c. \u0418\u043b\u0438 \u043c\u043e\u0436\u0435\u0442 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e \u043c\u043e\u0435\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430? \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0448\u0438\u043c \u043e\u0442\u0437\u044b\u0432\u0430\u043c\/\u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c. \u0411\u043e\u043b\u044c\u0448\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u2014 \u0431\u043e\u043b\u044c\u0448\u0435 \u043e\u043f\u044b\u0442\u0430 &#8212; \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 \u0434\u043b\u044f android-\u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430. \u0423\u0441\u043f\u0435\u0445\u043e\u0432 \u0432\u0430\u043c \u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0442\u043e\u0440\u0438\u0441. \u0421\u043f\u0430\u0441\u0438\u0431\u043e \u0437\u0430 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435!<\/p>\n<\/p>\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\/articles\/874438\/\"> https:\/\/habr.com\/ru\/articles\/874438\/<\/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>\u041f\u0440\u0438\u0432\u0435\u0442! \u041c\u0435\u043d\u044f \u0437\u043e\u0432\u0443\u0442 \u0412\u043b\u0430\u0434\u0438\u0441\u043b\u0430\u0432 \u0424\u0430\u043b\u044c\u0437\u0430\u043d, \u044f \u0440\u0430\u0431\u043e\u0442\u0430\u044e android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u043c \u0432 <a href=\"https:\/\/m2.ru\">\u041c2<\/a>. \u041d\u0430\u0448\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u2014 \u043e\u043d\u043b\u0430\u0439\u043d-\u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0443 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432 \u0441 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u044c\u044e. \u041c\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u043c \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u0441\u0434\u0435\u043b\u043a\u0438 \u043f\u0440\u043e\u0449\u0435, \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0438 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u0435\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u2014 \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0438\u0446\u0430 (B2C) \u0438 \u0440\u0438\u0435\u043b\u0442\u043e\u0440\u044b (B2B2C). \u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u2014 \u0442\u0435\u0445\u043d\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0430\u0439\u0434 \u0434\u043b\u044f android-\u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u044f\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0432\u043d\u0435\u0434\u0440\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0441\u0442\u043e\u0440\u0438\u0441 \u0443 \u0441\u0435\u0431\u044f \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c: Compose, MVVM, Coroutines flow \u0438 \u043f\u0440\u0430\u0432\u0438\u043b \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b.\u00a0<\/p>\n<h3>\u0421 \u0447\u0435\u0433\u043e \u0432\u0441\u0435 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c: \u043f\u043e\u0447\u0435\u043c\u0443 \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u044c\u044e<\/h3>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0438\u0441\u0430\u043b \u0444\u0438\u0447\u0443, \u044f \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0441\u044f \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439, \u0447\u0442\u043e \u043d\u0438 \u0432 \u0440\u0443\u0441\u0441\u043a\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c, \u043d\u0438 \u0432 \u0430\u043d\u0433\u043b\u043e\u044f\u0437\u044b\u0447\u043d\u043e\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u0435 \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0433\u0430\u0439\u0434\u043b\u0430\u0439\u043d\u0430 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0441 \u043d\u0443\u043b\u044f \u043d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435 \u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0434\u0430\u043b\u0435\u0435 \u0432 \u043a\u043e\u0434\u0435 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u043f\u043e\u0434\u0441\u0432\u0435\u0447\u0438\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u043c\u043e\u043c\u0435\u043d\u0442\u044b. \u0418 \u0437\u0430\u0442\u0435\u043c \u044f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0441 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u043e\u043c \u0438 \u0441\u0430\u043c\u043e\u043c\u0443 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0441\u0442\u0430\u0442\u044c\u044e.\u00a0 <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u0440\u043e\u0448\u0443 \u043d\u0435 \u0441\u0443\u0434\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u0433\u043e, \u044d\u0442\u043e \u043c\u043e\u044f \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0430\u0442\u044c\u044f. \u0425\u043e\u0447\u0443 \u043f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u2014 \u043d\u0435 \u043b\u0443\u0447\u0448\u0435\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u0430\u0442\u044c, \u0430 \u0441\u043a\u043e\u0440\u0435\u0435 \u043d\u0430\u0448\u0435 \u0432\u0438\u0434\u0435\u043d\u0438\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u0447\u0438. \u0424\u0438\u0447\u0430 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0431\u0443\u0434\u0443 \u0440\u0430\u0434 \u0432\u0430\u0448\u0438\u043c \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043e\u043f\u044b\u0442\u043e\u043c \u0438 \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c \u043f\u043e \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u044e. <\/p>\n<p>\u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0438\u0437\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438 \u044f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u0435\u0435 \u043d\u0430 \u0431\u043b\u043e\u043a\u0438: <\/p>\n<p>1. <a href=\"#list\">\u041f\u043e\u0447\u0435\u043c\u0443 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>2. <a href=\"#list2\">\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0444\u0438\u0447\u0435: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>3. <a href=\"#list3\">\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0435\u0432\u044c\u044e<\/a> <br \/>4. <a href=\"#list4\">\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/a><br \/>5. <a href=\"#list5\">\u0418\u0442\u043e\u0433<\/a> <\/p>\n<p><a class=\"anchor\" name=\"list\" id=\"list\"><\/a><\/p>\n<h3>\u041f\u043e\u0447\u0435\u043c\u0443 \u0432\u043e\u043e\u0431\u0449\u0435 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441\u00a0<\/h3>\n<p>\u041d\u0430 \u0440\u044b\u043d\u043a\u0435 \u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u0430\u043a \u0441\u0442\u043e\u0440\u0438\u0441. \u0417\u0430 \u043e\u0441\u043d\u043e\u0432\u0443 \u043c\u044b \u0432\u0437\u044f\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0434\u043d\u043e\u0439 \u043d\u0435\u0431\u0435\u0437\u044b\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u0441\u043e\u0446\u0441\u0435\u0442\u0438 \u2014 \u00ab\u200e\u043d\u0435\u043b\u044c\u0437\u044f\u0433\u0440\u0430\u043c\u00bb\u200e. \u042d\u0442\u0430 \u0444\u0438\u0447\u0430 \u0441\u0442\u0430\u043b\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0438 \u0443\u0437\u043d\u0430\u0432\u0430\u0435\u043c\u043e\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u043a\u043e\u0439 \u0434\u043b\u044f \u0434\u043e\u043d\u0435\u0441\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u0435\u0439 \u0438 \u043f\u0440\u043e\u0434\u0432\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438. <\/p>\n<p>\u0420\u0430\u043d\u044c\u0448\u0435 \u0443 \u043d\u0430\u0441 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0431\u044b\u043b\u0430 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c \u0441 \u0431\u0430\u043d\u043d\u0435\u0440\u0430\u043c\u0438, \u043e\u0442\u043a\u0443\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0441\u043a\u0440\u0438\u043d \u0441 \u043a\u0430\u0440\u0443\u0441\u0435\u043b\u044c\u044e<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0431\u044b\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0431\u0430\u043d\u043d\u0435\u0440\u044b \u0434\u0430\u0432\u0430\u043b\u0438 \u043e\u0447\u0435\u043d\u044c \u043d\u0438\u0437\u043a\u0443\u044e \u043a\u043e\u043d\u0432\u0435\u0440\u0441\u0438\u044e \u2014\u00a0 \u0434\u0430\u043b\u0435\u0435 \u0432\u044b \u0443\u0432\u0438\u0434\u0438\u0442\u0435, \u0447\u0442\u043e \u043e\u043d\u0438 \u0432 \u0440\u0430\u0437\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u0441\u0442\u043e\u0440\u0438\u0441. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u044d\u0442\u043e \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u0444\u043e\u0440\u043c\u0430\u0442, \u0438 \u043c\u043d\u043e\u0433\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0435 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438 \u0440\u0435\u0448\u0430\u044e\u0442 \u0442\u0435 \u0436\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u043e\u0440\u0438\u0441, \u0438 \u044d\u0442\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<p>\u041e \u043a\u0430\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u0440\u0435\u0447\u044c:<\/p>\n<p>\u2014 \u0418\u043d\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043e\u0431 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438<br \/>\u2014 \u0420\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u0440\u043e \u0430\u043a\u0446\u0438\u0438 \u0438 \u043d\u043e\u0432\u043e\u0441\u0442\u0438: \u043f\u0440\u043e\u043c\u043e\u043a\u043e\u0434\u044b, \u0438\u0432\u0435\u043d\u0442\u044b, \u0430\u043d\u0430\u043b\u0438\u0442\u0438\u043a\u0430, \u0441\u0442\u0430\u0442\u044c\u0438<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0438:<\/p>\n<p><strong>1) \u0413\u043e\u0442\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/strong> <br \/>\u041f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0433\u043e\u0442\u043e\u0432\u043e\u0435 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, sdk \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441?<\/p>\n<p><strong>\u041f\u043b\u044e\u0441\u044b:<\/strong><\/p>\n<p>\u2014 \u042d\u043a\u043e\u043d\u043e\u043c\u0438\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u041d\u0435 \u043d\u0443\u0436\u043d\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0442\u044c, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u044e\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u0438 \u043d\u0430\u0447\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p><strong>\u041c\u0438\u043d\u0443\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u0417\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0447\u0443\u0436\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u041b\u044e\u0431\u044b\u0435 \u0431\u0430\u0433\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0432 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0435, \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0432\u0430\u0448\u0438\u043c\u0438. \u0415\u0441\u043b\u0438 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u0431\u0430\u0433\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u043b\u0435\u0442\u0438\u0442 \u0438\u0437 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d \u043d\u0435 \u0441\u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u044d\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u0430 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u0435\u0442, \u0447\u0442\u043e \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u0432\u0430\u0448\u0430. \u041a\u0430\u043a \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435, \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0434\u043f\u043e\u0440\u0442\u0438\u0442\u044c \u043e\u0446\u0435\u043d\u043a\u0443 \u0432 \u0441\u0442\u043e\u0440\u0430\u0445, \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u043f\u043e \u0431\u0430\u0433\u0430\u043c \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u0438 \u0435\u043c\u0443 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u0436\u0434\u0430\u0442\u044c \u0438\u0441\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432 \u043d\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438.<br \/> \u2014 \u0422\u0430\u043a\u0436\u0435 \u044d\u0442\u043e \u0436\u0435\u0441\u0442\u043a\u043e\u0441\u0442\u044c \u0432 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u0445. \u041c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043a\u0430\u0441\u0442\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434 \u0441\u0432\u043e\u0438 \u043d\u0443\u0436\u0434\u044b \u0438 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u044b \u043a\u043e\u043d\u0442\u0440\u0430\u043a\u0442\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u0434\u0435\u0442 \u043d\u0430\u0440\u0443\u0436\u0443 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u0415\u0441\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043d\u0443\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u2014 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0439\/\u0444\u0438\u043a\u0441\u043e\u0432 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u0432\u043e\u0432\u0441\u0435. \u0422\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c: \u043a\u043e\u0434 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043e\u0442 \u043d\u0430\u0441 \u0437\u0430\u043a\u0440\u044b\u0442. \u0421\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e, \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u0434 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442: \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u043c, \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u043c \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u043c, \u0447\u0442\u043e \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u0430\u0437\u0438\u0441\u043e\u043c \u0447\u0438\u0441\u0442\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b. \u0410 \u043e\u0434\u0438\u043d \u0438\u0437 \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u0435\u0435 \u043f\u043e\u0441\u044b\u043b\u043e\u0432 \u2014 \u0443\u0431\u0440\u0430\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u0432\u043d\u0435\u0448\u043d\u0435\u0435.<br \/> \u2014 \u0415\u0449\u0435 \u043e\u0434\u0438\u043d \u043c\u0438\u043d\u0443\u0441 \u2014 \u0434\u0435\u043d\u0435\u0436\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b. \u041f\u0440\u0438\u043a\u0438\u043d\u0443\u043b\u0438 \u043f\u043e \u0444\u0438\u043d\u0430\u043d\u0441\u0430\u043c \u2014 \u043d\u0435\u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u043d\u0430\u0441\u0447\u0438\u0442\u0430\u043b\u0438 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 2.4 \u043c\u043b\u043d \u0432 \u0433\u043e\u0434 \u043d\u0430 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0442\u0430\u043a\u043e\u0439 \u0444\u0438\u0447\u0438.<\/p>\n<p><strong>2) \u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. <br \/><\/strong>\u041f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u043c \u0434\u0432\u0438\u0433\u0430\u0442\u044c\u0441\u044f \u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u0443 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f: \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u0438 \u043d\u0430\u0431\u0440\u0435\u0439\u043d\u0448\u0442\u043e\u0440\u043c\u0438\u043b\u0438 \u0438\u0434\u0435\u0438 \u043f\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438.\u00a0<\/p>\n<p><strong>\u041f\u043b\u044e\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u041f\u043b\u044e\u0441\u044b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u2014 \u0432\u0441\u0435 \u0442\u043e, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043e \u0432\u044b\u0448\u0435. \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c, \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438, \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430. \u041c\u044b \u0435\u0433\u043e \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u043c, \u043c\u0435\u043d\u044f\u0435\u043c \u043a\u0430\u043a \u0438 \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0445\u043e\u0442\u0438\u043c, \u043f\u043e\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0442\u0435\u0441\u0442\u0430\u043c\u0438.<br \/>\u2014 \u041d\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0442\u0440\u0430\u0442 \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u0438.<\/p>\n<p><strong>\u041c\u0438\u043d\u0443\u0441\u044b:<br \/><\/strong><br \/> \u2014 \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0432\u0440\u0435\u043c\u044f \u0438 \u043a\u043e\u043c\u043f\u0435\u0442\u0435\u043d\u0446\u0438\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0430 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0444\u0438\u0447\u0438. \u0412 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f, \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u043d\u0443\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u0441 \u043d\u0443\u043b\u044f, \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u044f\u0441\u044c \u0441 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c\u0438 \u043d\u044e\u0430\u043d\u0441\u0430\u043c\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0444\u0438\u043a\u0441\u0438\u0442\u044c \u0431\u0430\u0433\u0438 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u0438 \u044d\u0442\u0438 \u043c\u0438\u043d\u0443\u0441\u044b \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0432 \u043f\u043b\u044e\u0441\u044b, \u0432\u0435\u0434\u044c \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0444\u0435\u0441\u0441\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u043e\u0441\u0442\u0430 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, \u043a\u0430\u043a \u044d\u0442\u0430.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u043d\u0430 View \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438. \u041d\u043e \u0437\u0430\u0442\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0440\u0435\u0448\u0438\u043b\u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u0443\u044e \u0444\u0438\u0447\u0443, \u0443\u0436\u0435 \u043f\u0435\u0440\u0435\u0448\u043b\u0438 \u043d\u0430 Compose, \u0438 \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434 \u0441\u0442\u0430\u043b\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 \u043d\u0435\u043c. \u041f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430 View \u043c\u044b \u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u043e\u043d\u043e \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u043b\u043e\u0441\u044c \u043d\u0430\u043c \u0441 \u0442\u043e\u0447\u043a\u0438 \u0437\u0440\u0435\u043d\u0438\u044f \u0434\u0438\u0437\u0430\u0439\u043d\u0430, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u0441\u0432\u0430\u0439\u043f\u043e\u0432) \u0438 \u043a\u043e\u0434\u0430 (\u043f\u0435\u0440\u0435\u0434\u0435\u043b\u044b\u0432\u0430\u0442\u044c\/\u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c \u0443\u0441\u0442\u0430\u0440\u0435\u0432\u0448\u0438\u0439 \u043a\u043e\u0434, \u0434\u0430 \u0435\u0449\u0435 \u0438 \u043d\u0430 View, \u0431\u044b\u043b\u043e \u0434\u043e\u0440\u043e\u0433\u043e). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u0442\u0430\u043b\u043e \u0434\u043b\u044f \u043d\u0430\u0441 \u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c. \u041d\u043e\u0432\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0431\u044b\u0442\u044c \u043d\u0430 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0442\u0435\u043a\u0435, \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0431\u0438\u0437\u043d\u0435\u0441 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c \u0438 \u0432 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u043c \u0440\u0430\u0437\u0432\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c\u0441\u044f. <\/p>\n<figure class=\"full-width\"><\/figure>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0432 \u043f\u0430\u0440\u0443 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a \u043d\u0430 Compose, \u044f \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u043b, \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u0438\u043b \u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441\u043e\u0433\u043b\u0430\u0441\u043d\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f\u043c. <a href=\"https:\/\/developer.android.com\/compose\">Compose<\/a> \u2014 \u044d\u0442\u043e \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u0435\u0442 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434. \u041e\u043d \u0441\u043e\u043a\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u044f \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 UI: preview, lie edit \u0438 \u0442. \u0434. \u042d\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0438 \u0440\u0435\u0448\u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u043d\u0435\u0433\u043e \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u0442\u0430\u0440\u043e\u0433\u043e \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u0441 View. \u0412 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 \u043d\u0430\u0448\u0435\u0439 \u0444\u0438\u0447\u0438 Compose \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u00ab\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438\u00bb, \u0442\u0430\u043a\u0438\u0435 \u043a\u0430\u043a HorizontalPager, LinearProgressIndicator, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u2014 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043c\u0435\u043d\u044c\u0448\u0435 \u043a\u043e\u0434\u0430 (\u0438  \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e) \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u043d\u0443\u0436\u043d\u043e\u0433\u043e  UI. \u0412\u0437\u0432\u0435\u0441\u0438\u0432 \u0432\u0441\u0435 \u0437\u0430 \u0438 \u043f\u0440\u043e\u0442\u0438\u0432, \u044f \u0440\u0435\u0448\u0438\u043b \u0432\u0441\u0435-\u0442\u0430\u043a\u0438 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p><a class=\"anchor\" name=\"list2\" id=\"list2\"><\/a><\/p>\n<h3>\u0422\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0444\u0438\u0447\u0435: \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u044b \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0442\u043e\u0440\u0438\u0441 <\/h3>\n<figure class=\"full-width\"><\/figure>\n<p>\u0424\u0438\u0447\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0432\u044c\u044e \u0438 \u0441\u0430\u043c\u0438 \u0441\u0442\u043e\u0440\u0438\u0441. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0435\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u043e\u043a\u0440\u0443\u0433 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0440\u0430\u043c\u043a\u0430. \u041a\u043e\u0433\u0434\u0430 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043b \u043f\u0435\u0440\u0432\u044b\u0439 (\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434) \u2014 \u0441\u0442\u043e\u0440\u0438\u0441 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439, \u0438 \u0440\u0430\u043c\u043a\u0430 \u0438\u0441\u0447\u0435\u0437\u0430\u0435\u0442. \u041f\u043e \u043d\u0430\u0436\u0430\u0442\u0438\u044e \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0442\u043e\u0440\u0438\u0441. \u0421\u0442\u043e\u0440\u0438\u0441 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u0430\u0439\u0434\u043e\u0432. \u0414\u0430\u043d\u043d\u0430\u044f \u0444\u0438\u0447\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u043c \u0438 \u0443\u0434\u043e\u0431\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0441\u0442\u0438 \u043e \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438\u0432\u043b\u0435\u043a\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0430\u0443\u0434\u0438\u0442\u043e\u0440\u0438\u044e.<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\"><\/figure>\n<p><strong>\u041a\u0430\u043a\u0438\u0435 \u0443 \u043d\u0430\u0441 \u0431\u044b\u043b\u0438 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f:<\/strong><\/p>\n<ul>\n<li>\n<p>\u041f\u0440\u0435\u0432\u044c\u044e \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0430 \u043f\u0435\u0440\u0432\u043e\u043c \u044d\u043a\u0440\u0430\u043d\u0435, \u0430 \u0441\u0442\u043e\u0440\u0438\u0441 \u2014\u00a0\u043d\u0430 \u0432\u0442\u043e\u0440\u043e\u043c.\u00a0<\/p>\n<\/li>\n<\/ul>\n<h3>1) \u041d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u044f \u043f\u043e \u0441\u043b\u0430\u0439\u0434\u0430\u043c \u0438 \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<ul>\n<li>\n<p><strong>\u0422\u0430\u043f \u0432\u043b\u0435\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u044b\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043d\u043e \u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u043f\u0435\u0440\u0432\u043e\u043c\u0443 \u0441\u043b\u0430\u0439\u0434\u0443 \u043f\u0435\u0440\u0432\u043e\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0422\u0430\u043f \u0432\u043f\u0440\u0430\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0441\u043b\u0430\u0439\u0434<\/strong>, \u043d\u043e \u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h3>2) \u0421\u0432\u0430\u0439\u043f\u044b<\/h3>\n<ul>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0432\u043b\u0435\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0432\u043f\u0440\u0430\u0432\u043e:<\/strong><\/p>\n<ul>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043d\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u044d\u0442\u043e <strong>\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u043e\u0440\u0438\u0441<\/strong>, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u043c \u044d\u043a\u0440\u0430\u043d.<\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><strong>\u0421\u0432\u0430\u0439\u043f \u0441\u0432\u0435\u0440\u0445\u0443 \u0432\u043d\u0438\u0437:<\/strong> \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441.<\/p>\n<\/li>\n<\/ul>\n<h3>3) \u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/h3>\n<ul>\n<li>\n<p><strong>\u0414\u043e\u043b\u0433\u043e\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u0435:<\/strong> \u043f\u0430\u0443\u0437\u0430 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0435\u043c \u0441\u043b\u0430\u0439\u0434\u0435.<\/p>\n<\/li>\n<li>\n<p><strong>\u041a\u043d\u043e\u043f\u043a\u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u0441\u0442\u043e\u0440\u0438\u0441:<\/strong> \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043f\u043e \u0432\u043d\u0435\u0448\u043d\u0435\u0439 \u0441\u0441\u044b\u043b\u043a\u0435.<\/p>\n<\/li>\n<\/ul>\n<h3>4) \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u0438\u0441<\/h3>\n<ul>\n<li>\n<p>\u041f\u0440\u0438 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043e\u043b\u0436\u043d\u0430 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c\u0441\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0439.\u00a0<\/p>\n<\/li>\n<li>\n<p>\u0414\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0430\u0439\u0434\u0430 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043d\u0444\u0438\u0433.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0440\u043e\u0444\u0438\u043b\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0432\u0435\u0441\u0442\u0438\u0441\u044c <strong>\u0441\u0432\u043e\u044f \u0438\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0441\u043b\u0430\u0439\u0434\u044b \u0438 \u0441\u0442\u043e\u0440\u0438\u0441 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043d\u044b.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430 \u0434\u0430\u043d\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f <strong>\u0447\u0430\u0441\u0442\u043d\u044b\u0445 \u0440\u0438\u044d\u043b\u0442\u043e\u0440\u043e\u0432<\/strong> \u0438 <strong>\u043f\u0430\u0440\u0442\u043d\u0451\u0440\u043e\u0432 (\u0430\u0433\u0435\u043d\u0442\u0441\u0442\u0432 \u043d\u0435\u0434\u0432\u0438\u0436\u0438\u043c\u043e\u0441\u0442\u0438)<\/strong>, \u0441 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0444\u0438\u0437\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043b\u0438\u0446\u0430 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c.<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0441\u0442\u043e\u0440\u0438\u0441, \u0441\u0435\u043a\u0446\u0438\u044f \u0441 \u0438\u0445 \u043f\u0440\u0435\u0432\u044c\u044e \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u0430.<\/p>\n<\/p>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"list3\" id=\"list3\"><\/a><\/p>\n<h3>\u041a\u0430\u043a \u043c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u043f\u0440\u0435\u0432\u044c\u044e<\/h3>\n<p>\u0411\u0435\u043a\u0435\u043d\u0434\u0430 \u0434\u043b\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442. \u0422\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u043d\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u043e\u0440\u0438\u0441 \u0434\u043b\u044f web \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043a\u0430\u043d\u0430\u043b\u043e\u0432, \u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0431\u0435\u043a\u0435\u043d\u0434\u0430 \u043f\u043e\u0434 \u0434\u0430\u043d\u043d\u0443\u044e \u0444\u0438\u0447\u0443 \u2014 \u044d\u0442\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0442\u043e \u044d\u0442\u0430 \u0438\u0434\u0435\u044f \u0434\u043b\u044f \u043d\u0430\u0441  \u2014 \u043d\u0435\u0446\u0435\u043b\u0435\u0441\u043e\u043e\u0431\u0440\u0430\u0437\u043d\u0430. <\/p>\n<p><strong>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<\/strong> <\/p>\n<p>\u2014 \u0415\u0441\u0442\u044c \u0434\u043e\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0434\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 data source \u2014 use case \u2014 view model. <\/p>\n<p>\u2014\u00a0Data source \u043f\u0435\u0440\u0435\u0434\u0430\u0435\u0442 \u0437\u0430\u0445\u0430\u0440\u0434\u043a\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u043e\u0440\u0438\u0441 (\u0435\u0441\u043b\u0438 \u0432\u0434\u0440\u0443\u0433 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0431\u0435\u043a\u0435\u043d\u0434, \u0442\u043e \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0433\u043e\u0442\u043e\u0432\u044b \u0438 \u0441\u043c\u0435\u043d\u0438\u043c \u0438\u0445 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 API \u0431\u044d\u043a\u0430).\u00a0 <\/p>\n<p>\u2014\u00a0\u0412\u043e \u0432\u044c\u044e \u043c\u043e\u0434\u0435\u043b\u0438 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043c\u0430\u043f\u043f\u0438\u043d\u0433 \u0432 presentation \u043c\u043e\u0434\u0435\u043b\u044c. \u041e\u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u0430 \u0437\u0430 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u0440\u0438\u0441. \u0412\u0441\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0438 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u043a\u043e\u0434\u0430 \u043c\u044b \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0441\u0440\u0430\u0437\u0443 \u043a presentation \u043c\u043e\u0434\u0435\u043b\u0438.<\/p>\n<pre><code>@Parcelize data class UiStories(    val id: String,    @DrawableRes val previewImageRes: Int,    @StringRes val previewTitleRes: Int,    val slides: List&lt;UiSlide&gt;,    val previewBackgroundColor: ULong = Colors.systemOnWhiteStrong.value,    val current: Boolean = false,    val shown: Boolean = false ) : Parcelable   sealed class StoriesType {      data class Content(val content: UiStories) : StoriesType()      data object Fake : StoriesType() } <\/code><\/pre>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u043e\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 UiStories:\u00a0<\/p>\n<ul>\n<li>\n<p>\u0423\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439 id \u0441\u0442\u043e\u0440\u0438\u0441<\/p>\n<\/li>\n<li>\n<p>\u0422\u0435\u043a\u0441\u0442<\/p>\n<\/li>\n<li>\n<p>url \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u043d\u0438\u0439 \u0444\u043e\u043d \u0434\u043b\u044f \u043f\u0440\u0435\u0432\u044c\u044e<\/p>\n<\/li>\n<li>\n<p>\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u043b\u0430\u0439\u0434\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430<\/p>\n<\/li>\n<\/ul>\n<p>\u0441urrent \u2014 \u044d\u0442\u043e \u0442\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u0440\u043e\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u043c\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441, shown \u2014 \u0443\u0436\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441, \u043e\u043d\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u0430 \u0434\u043b\u044f \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u043a\u0438 \u0440\u0430\u043c\u043a\u0438 \u043d\u0430 \u043f\u0440\u0435\u0432\u044c\u044e. \u0422\u0430\u043a\u0436\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 StoriesType, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c \u0440\u0435\u0430\u043b\u044c\u043d\u0443\u044e \u0441\u0442\u043e\u0440\u0438\u0441 \u043e\u0442 \u0444\u0435\u0439\u043a\u043e\u0432\u043e\u0439. \u0424\u0435\u0439\u043a\u043e\u0432\u0430\u044f \u0441\u0442\u043e\u0440\u0438\u0441 \u2014 \u044d\u0442\u043e \u043d\u0430\u0448\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043e\u043d\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u0441\u0432\u0430\u0439\u043f\u043e\u0432 \u043d\u0430 \u043a\u0440\u0430\u0439\u043d\u0438\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0445, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u0440\u044b\u0442\u044c \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441, \u0442\u0430\u043a \u043a\u0430\u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 compose pager \u043d\u0435 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u044d\u0442\u043e\u0433\u043e. \u041f\u043e \u0441\u0443\u0442\u0438, \u044d\u0442\u043e \u043f\u0443\u0441\u0442\u044b\u0448\u043a\u0430, \u043f\u0435\u0440\u0435\u0445\u043e\u0434 \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0431\u0443\u0434\u0435\u0442 \u0441\u0438\u0433\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u043a\u043e\u043d\u0442\u0435\u043d\u0442 \u043a\u043e\u043d\u0447\u0438\u043b\u0441\u044f, \u0438 \u044d\u043a\u0440\u0430\u043d \u0441\u0442\u043e\u0440\u0438\u0441 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043a\u0440\u044b\u0442\u044c.\u00a0\u00a0 <\/p>\n<pre><code>@Parcelize data class UiSlide(    val backgroundColor: Long,    @DrawableRes val imageRes: Int,    @StringRes val titleRes: Int,    @StringRes val subtitleRes: Int,    val buttonVisible: Boolean,    @StringRes val buttonText: Int,    val buttonColorsULong: ButtonColorsULong,    val progressState: ProgressState = ProgressState.START,    val current: Boolean = false,    val progress: Float = 0f ) : Parcelable {      enum class ProgressState {        REFRESHED, START, RESUME, PAUSE, COMPLETE    } } <\/code><\/pre>\n<p>\u0421\u043b\u0430\u0439\u0434 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437<\/p>\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-445573","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445573","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=445573"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/445573\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=445573"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=445573"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=445573"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}