<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/">
  <channel>
    <language>ru</language>
    <title>Flutter</title>
    <description/>
    <link>https://tproger.ru/tag/flutter</link>
    <atom:link href="https://tproger.ru/tag/flutter/feed" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Sun, 04 Oct 2026 01:46:42 GMT</lastBuildDate>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>12</sy:updateFrequency>
    <image>
      <title>Flutter</title>
      <link>https://tproger.ru</link>
      <url>https://tproger.ru/apple-touch-icon.png</url>
    </image>
    <item>
      <title>Локализация через Enum, неожиданный Дзен, быстрее только телепатия</title>
      <link>https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat</link>
      <comments>https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Самир Гёзалов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat</guid>
      <description><![CDATA[<p>Надоело плодить JSON/ARB файлы при локализации Flutter-приложения? Автор делился личным опытом и показал, как элегантно настроить локализацию через Enum без внешних зависимостей, генераторов кода и боли в рантайме.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/lokalizaciya-cherez-enum-neozhidannyj-dzen-bystree-tolko-telepat">Локализация через Enum, неожиданный Дзен, быстрее только телепатия</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Алгоритмы и структуры данных]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Массивы и строки]]></category>
      <category><![CDATA[Красивый хак]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[JSON]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 04 Jun 2026 04:45:17 GMT</pubDate>
      <content:encoded><![CDATA[<p>Решил давеча добавить локализацию в свое приложение на Flutter. Задачка-то простая: пара кнопок, пару десятков переменных. Казалось бы, делов на пять минут. Но Flutter «из коробки» сразу попытался всучить мне какую-то дичь в виде ARB и JSON файлов. Хмм, из прошлого с такими реализациями лишь печаль, так что…</p><h2>Попытка №1. Путь в лоб: Классы и интерфейсы</h2><p>Самый очевидный способ - создать родительский класс с переменными, а языки сделать его наследниками. Но это просто… фиаско. Даже если не писать from/toJson, процесс выглядит так:</p><ol><li>Объявил переменную в родителе.</li><li>Прописал её в конструкторе.</li><li>Повторил то же самое для всех дочерних классов (всех языков).</li></ol><p>Если бы я работал на аутсорсе в Индии и мне платили за количество строк кода - это был бы идеальный вариант. Но я хотел, чтобы одной строки при объявлении было достаточно.</p><h2>Попытка №2. Стандарт (ARB/JSON)</h2><p>Я поплевался, но решил попробовать - «стандарт» всё-таки. Мало ли, может чего поменялось за годы. Вроде всё завелось, но сам процесс… это боль. Бегать по разным файлам, чтобы добавить одну строчку - так себе удовольствие.</p><p>Почему я от него окончательно отказался? Когда данных становится реально много (десятки языков, тысячи строк), ты попадаешь в ловушку: тебе нужно эту махину либо целиком держать в памяти, либо постоянно подгружать и парсить. Ради смены одного слова на кнопке заставлять девайс ворочать тяжелые JSON-ы в рантайме - так себе затея для производительности.</p><h2>Попытка №3. Таблицы и костыли</h2><p>Подумал: «Окей, почему бы не подтянуть старый добрый CSV или вообще закинуть всё в табличку?». И тут официальный пакет локализации сказал: «Извини, мужик, тут наши полномочия всё».</p><p>Ну, я тоже не пальцем деланный. Решил припахать нейросеть, чтобы она написала мне собственный генератор. Флоу получился такой:</p><ol><li>Добавляю строку в таблицу.</li><li>Запускаю генератор.</li><li>Он лепит «родительский» файл.</li><li>После Freezed генерит toJson, fromJson…</li></ol><p>Короче, весело не было. Мало того, я понимал: если языков станет много, мне придется добавлять их все разом и единовременно, иначе в рантайме всё начнет плеваться ошибками. Плюс та же проблема с памятью: таблица - это структура, которую надо парсить и хранить.</p><h2>Красный флаг для программиста</h2><p>Но главная проблема даже не в этом. Необходимость запускать генератор после добавления каждой переменной - это для любого программиста красный флаг.</p><p>Что происходит на практике? Когда ты пишешь код и тебе нужно добавить одну несчастную строку, тебе лень (читать: нехочется выходить из потока творения) запускать весь этот цикл с генерацией. Ты просто её хардкодишь в надежде «потом скопом всё добавлю одним махом». А «потом» наступает тогда, когда уже весь проект завален хардкодом, и вычищать его - то еще удовольствие. Даже нейросетки с такими запросами помогают не с первого раза, и с сомнительной эффективностью.</p><p>Нутром чуял - флоу неправильный. В итоге я пришел к тому, что называю идеальной локализацией.</p><h2>Эволюция лени: почему Enum победил интерфейсы</h2><p>Я начал мучить нейросеть разными вариантами реализации. Для меня в первую очередь был важен флоу работы: мне было тупо лень писать больше одной строки кода, чтобы добавить переменную.</p><p>Моя философия проста: строку захардкодить - моментально. Добавление даже одной строки в другом файле требует доп. действий. НО, если действий минимум, то кодер поймет, что выигрыш во времени сейчас мизерный против больших потерь в будущем, и исправно добавит строку в правильное место. Этого не произойдет, если для добавления строки нужно «отчитаться» в десяти местах.</p><h2>Попытка №4. Рекорды (Records)</h2><p>Присматривался к рекордам. С ними удобно: не нужно писать конструкторы. Но есть подвох: как только ты добавил переменную в один язык, компилятор тут же сходит с ума и требует добавить её во все остальные прямо сейчас. Никакой гибкости и возможности оставить «на потом».</p><h2>Идеальный костыль: Enum</h2><p>В итоге я пришел к самому, казалось бы, «неправильному» способу, который оказался идеальным. Enum. Само название намекает на перечисления и цифры, но оказалось, что хранить в нем буквы и целые фразы - это лучший путь для локализации.</p><p>Знаете, мне моё решение так понравилось, что я пошел к нейросетям и проверил его со всех сторон. Все модели  остались в полном восторге. Под это дело я даже подготовил монументальную «нейро-статью» на полтора часа внимательного чтения, со всеми графиками, бенчмарками и анализом производительности.</p><p>Но потом я заглянул в правила Хабра, прислушался к голосу разума и понял: никто не хочет читать полтора часа сухой статистики. Лучше я просто расскажу вам свою историю «от первого лица», как я докатился до такой жизни. Ну, а если вы совсем уж фанаты цифр - просто скормите этот текст любой нейронке, она вам перескажет всё в лучших академических тонах с графиками на любой вкус.</p><p>А здесь мы будем говорить по делу.</p><p>Ниже я выкатываю сам код. Код тут не для зубрежки, а лишь чтобы указать направление / идею. Самая большая прелесть этой системы в том, что она оставляет гигантское пространство для любого типа реализации. Это архитектурный каркас, который чертовски сложно сломать. Главное — уловить принцип.</p><h2>Реализация</h2><p>Принцип разделения:</p><ul><li>enum Strings → типизированный контракт (что существует).</li><li>translator → источник данных (откуда берётся текст).</li></ul><p>Структура файлов - минимальная. Никаких внешних зависимостей:</p><h2>Ядро - strings.dart</h2><p>Весь контракт локализации в одном enum. Два режима - хардкод switch и серверный кеш - за одним и тем же</p><p>. Даже сообщения об ошибках локализации — сами локализованы:</p><h2>Список языков - languages_enum.dart</h2><p>Каждый язык - самодостаточная единица: знает свой код, название, направление текста и как себя загрузить:</p><p>Хотите грузить с сервера? Одна строка + loader. И</p><p>- тоже одна строка, потому что</p><p>уже является registry:</p><h2>Переводчик - i18n/russian.dart</h2><p>Как это выглядит в жизни (и почему я перестал хардкодить) Я намеренно не привожу здесь код оберток виджетов или конкретных стейт-менеджеров. Всё это - чистая «вкусовщина». Для работы системы нужен лишь элементарный вещатель событий (Notifier), повешенный на метод смены языка.</p><p>Но главное - это мой ежедневный флоу. Сейчас, чтобы добавить строку в UI, я просто вызываю нужный мне ключ: Strings.someKey(). Без контекста, везде.</p><p>А если ключа еще нет? Я тупо иду в Strings и добавляю одну строчку в Enum. Всё.</p><p>Благодаря дефолтному конструктору, приложению абсолютно плевать, что у меня там еще 100 языков не переведены. Оно компилируется и работает здесь и сейчас. А дальше в дело вступают гит-хуки: при комите нейросетка сама подхватывает изменения и заполняет недостающие поля в переводчиках.</p><p>Знаете, какое самое странное чувство? Мне сейчас реально проще и быстрее завести переменную в локализации, чем хардкодить строку в коде. Кажется, это и есть признак здоровой архитектуры - когда делать «правильно» становится физически удобнее, чем делать «быстро» и криво.</p><p>Собственно если в кратце это все о чем я хотел рассказать. Если тема зайдет или кто-то сам не сможет допереть, как прикрутить это к своей архитектуре - пишите в комментариях, разберемся.</p><p>Надеюсь, мой опыт сэкономит вам пару литров нервных клеток. Всех благ и чистого кода без «магических строк»!</p>]]></content:encoded>
    </item>
    <item>
      <title>Toyota открыла исходный код игрового движка Fluorite для Flutter-разработчиков</title>
      <link>https://tproger.ru/news/toyota-otkryla-ishodnyj-kod-igrovogo-dvizhka-fluorite-dlya-flutter</link>
      <comments>https://tproger.ru/news/toyota-otkryla-ishodnyj-kod-igrovogo-dvizhka-fluorite-dlya-flutter?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/toyota-otkryla-ishodnyj-kod-igrovogo-dvizhka-fluorite-dlya-flutter</guid>
      <description><![CDATA[<p>Toyota открыла код 3D-движка Fluorite для Flutter: Dart-first архитектура, C++ ECS-ядро и графика Filament для игр и UI</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/toyota-otkryla-ishodnyj-kod-igrovogo-dvizhka-fluorite-dlya-flutter">Toyota открыла исходный код игрового движка Fluorite для Flutter-разработчиков</a>»</p>]]></description>
      <category><![CDATA[C++]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 10 Feb 2026 02:03:53 GMT</pubDate>
      <content:encoded><![CDATA[<p>Компания Toyota <a href="https://fosdem.org/2026/schedule/event/7ZJJWW-fluorite-game-engine-flutter/" rel="nofollow">представила</a> Fluorite — 3D-движок, ориентированный на разработчиков, которые работают с Flutter и Dart. И все это open-source!</p><p>Компания позиционирует Fluorite как универсальную платформу для интерактивных приложений. Причем речь не только об играх, но даже об автомобильных интерфейсах.</p><h2>Движок на Flutter, но с С++ под капотом</h2><p>Ключевая идея Fluorite — «Dart-first» архитектура. Логика пишется на Dart и напрямую интегрируется с экосистемой Flutter: виджеты, Hot Reload, Widget Inspector и пакеты из pub.dev работают так же, как в обычных приложениях.</p><p>При этом производительность обеспечивается не Flutter-рендерингом. Вся тяжелая часть скрыта в высокоэффективном ECS-ядре на C++, которое отвечает за симуляцию, сцену и взаимодействие объектов.</p><p>Такой подход позволяет запускать проекты на мобильных устройствах, десктопе, embedded-платформах и даже консолях без переписывания движка под каждую цель.</p><h2>Графика уровня AAA за счет Filament</h2><p>Для рендеринга Fluorite использует Filament — 3D-движок Google с поддержкой физически корректного освещения (PBR). Это дает современное качество картинки без необходимости писать собственный рендерер или жертвовать производительностью ради кроссплатформенности.</p><p>По словам команды, связка Flutter + Filament позволяет разделить ответственность: UI и взаимодействие остаются на Flutter, а графика и сцена — на специализированном движке.</p><h2>Чем Fluorite отличается от конкурентов</h2><p>Главное отличие — ориентация на Flutter-разработчиков. Движок не требует изучать отдельный язык или редактор: сцены, логика и интерфейс живут в привычном стеке.</p><p>За счет этого итерации быстрее, а входной порог ниже, чем у традиционных игровых движков.</p><p>Toyota подчеркивает, что Fluorite — open-source проект и его дальнейшее развитие во многом зависит от сообщества. Судя по архитектуре, компания делает ставку на то, что интерактивные 3D-приложения станут таким же обычным сценарием для Flutter, как мобильные и веб-интерфейсы.</p>]]></content:encoded>
    </item>
    <item>
      <title>Apple выпустила Swift SDK для написания Android-приложений — спустя 11 лет после релиза языка</title>
      <link>https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka</link>
      <comments>https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Булат Яббаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka</guid>
      <description><![CDATA[<p>Apple выпустила Swift SDK для Android — теперь на Swift можно писать нативные Android-приложения и переносить код между платформами</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/news/apple-vypustila-swift-sdk-dlya-napisaniya-android-prilozhenij---spustya-11-let-posle-reliza-yazyka">Apple выпустила Swift SDK для написания Android-приложений — спустя 11 лет после релиза языка</a>»</p>]]></description>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[macOS]]></category>
      <category><![CDATA[Objective-C]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[iPhone]]></category>
      <category><![CDATA[Новости]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 27 Oct 2025 04:06:16 GMT</pubDate>
      <content:encoded><![CDATA[<p>Apple неожиданно открыла новую страницу в истории Swift.</p><p>Компания <a href="https://www.swift.org/blog/nightly-swift-sdk-for-android/">представила</a> <b>официальный Swift SDK для Android</b>, позволяющий писать нативные Android-приложения на фирменном языке, изначально созданном для iOS и macOS.</p><h2>От iPhone до Android</h2><p>Swift появился в 2014 году как альтернатива Objective-C — более безопасный, современный и лаконичный язык для экосистемы Apple.</p><p>За 11 лет он вырос из «внутреннего» инструмента в многофункциональную платформу, на которой создают <b>облачные сервисы, десктопные приложения для Windows и даже прошивки для микроконтроллеров</b>.</p><p>Теперь Swift впервые официально выходит за пределы «яблочной экосистемы. Превью-версия SDK для Android доступна уже сегодня — в составе Swift-инсталлятора для Windows или отдельно для macOS и Linux.</p><figure><img src="https://media.tproger.ru/user-uploads/111041/2025-10-27/9d4f131a-7f10-47c1-a75b-3180cfe12892.jpeg" alt="" /></figure><h2>Как это работает</h2><p>Новый SDK — результат многомесячной работы <b>Swift Android Workgroup</b>, открытого сообщества, куда может присоединиться любой разработчик. С его помощью можно:</p><ul><li>собирать <b>нативные Android-приложения</b> на Swift;</li><li><b>переносить существующие Swift-пакеты</b> — более 25% уже совместимы с Android;</li><li><b>интегрировать Swift-код с Java</b> через проект <b>swift-java</b>, автоматически генерирующий безопасные биндинги между языками.</li></ul><p>Apple <a href="https://www.swift.org/documentation/articles/swift-sdk-for-android-getting-started.html">опубликовала</a> подробное руководство <i>«Getting Started»</i> и примеры кода, демонстрирующие полный цикл разработки Android-приложений на Swift.</p><h2>Что это значит для экосистемы</h2><p>Релиз открывает дорогу к кроссплатформенным приложениям без использования Flutter, Kotlin Multiplatform или React Native.</p><p>Теперь компании смогут писать бизнес-логику один раз на Swift и использовать ее и в iOS-, и в Android-версиях.</p><p>Эксперты отмечают, что шаг Apple может <b>снизить барьеры между мобильными экосистемами</b> и ускорить развитие open-source сообщества Swift.</p><h2>Что дальше</h2><p>По словам участников проекта, впереди — создание полноценного Android-Toolchain, улучшение совместимости со средами разработки и официальное внедрение CI-сборок.</p><p>Разработчики уже готовят документ с видением будущего Swift на Android, который определит приоритеты и стратегию развития.</p><p><i>«Swift вырос из языка для iOS в универсальный инструмент для всего программного мира. Теперь он будет жить и в Android-экосистеме»</i>, — говорится в сообщении разработчиков.</p>]]></content:encoded>
    </item>
    <item>
      <title>Разбираем condition_builder для условных выражений</title>
      <link>https://tproger.ru/articles/condition-builder-dlya-uslovnogo</link>
      <comments>https://tproger.ru/articles/condition-builder-dlya-uslovnogo?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дмитрий Назаров]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/condition-builder-dlya-uslovnogo</guid>
      <description><![CDATA[<p>В чем польза condition_builder? Разбираемся в утилите и применяем на практике.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/condition-builder-dlya-uslovnogo">Разбираем condition_builder для условных выражений</a>»</p>]]></description>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[HR]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 01 Jul 2025 14:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Если вы разработчик Flutter, то знаете, как часто свойства виджетов — цвета, отступы, метки и стили — зависят от множества условий во время выполнения. Это часто приводит к вложенным тернарным операторам или запутанным цепочкам if / else, которые быстро превращаются в кошмар для поддержки.</p><p>Но существуeт более простой и понятный способ выражения многосторонней условной логики непосредственно в ваших виджетах. Это <a href="https://pub.dev/packages/condition_builder">condition_builder</a>, небольшая утилита для написания условных выражений в коде.</p><h2>Проблемы с вложенными условиями</h2><p>Представим, что необходимо изменить цвет фона виджета в зависимости от того, отключен он, выбран или находится в обычном состоянии. Ваш типичный подход может выглядеть следующим образом:</p><p>Это хорошо работает с двумя-тремя условиями, но по мере усложнения логики пользовательского интерфейса тернарные цепочки становится трудно читать, сложнее отлаживать и легче ломать.</p><p>Более того, по мере масштабирования вашего приложения условия могут начать появляться в разных местах, что затрудняет поддержание единообразия.</p><h3>Решение с использованием condition_builder</h3><p><a href="https://pub.dev/packages/condition_builder">condition_builder</a> позволяет декларативно описывать условную логику и объединять несколько условий в цепочки в понятном и читаемом стиле:</p><p>Разбираем :</p><ol><li>вызовы <b>.on(condition, value)</b> вызывает каждый <b>.on() </b>и добавляет условие и соответствующее ему значение.</li><li>Вызов <b>.build() </b>оценивает условия по порядку и возвращает значение для первого истинного условия.<br /></li><li>Дополнительное условие: укажите значение по умолчанию с помощью <b>build(orElse: () =&gt; defaultValue)</b>, если ни одно из условий не соответствует действительности.<br /></li><li>Защита от ошибок: если вы не предусмотрели запасной вариант, ни одно из условий не выполняется, возникает ошибка — никаких скрытых ошибок!<br /></li></ol><h2>Почему важен порядок</h2><p>Порядок, в котором вы добавляете условия, имеет решающее значение: побеждает первое подходящее условие. Это дает вам четкий контроль и гарантирует предсказуемость и ясность вашей логики.</p><h3>Преимущества с первого взгляда</h3><ul><li>Более чистый код: больше никаких вложенных тернарных операторов.</li></ul><ul><li>Улучшенная читаемость: ваши условия хорошо видны.</li></ul><ul><li>Упрощенное обслуживание: легко изменять условия, не разбираясь в сложных выражениях.</li></ul><ul><li>Декларативный стиль: ваш код пользовательского интерфейса читается как логичный поток.</li></ul><ul><li>Безопасные значения по умолчанию: предотвращают бессимптомные сбои, выявляя пропущенные резервные варианты.</li></ul><h2>Заключение</h2><p>condition_builder —  это простой, но мощный инструмент, который воплощает в себе дух декларативного UI-кодирования. Он избавляет вас от путаницы вложенных условных операторов и позволяет сосредоточиться на создании элегантных, удобных в обслуживании виджетов Flutter. При использовании его ваш код интерфейса станет чище, понятнее и проще для восприятия.</p>]]></content:encoded>
    </item>
    <item>
      <title>Push-уведомления: от базовых принципов до омниканальных систем</title>
      <link>https://tproger.ru/articles/puwi-na-vse-platformy--kak-rabotaet-novyj-rossijskij-servis-multipushed</link>
      <comments>https://tproger.ru/articles/puwi-na-vse-platformy--kak-rabotaet-novyj-rossijskij-servis-multipushed?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/puwi-na-vse-platformy--kak-rabotaet-novyj-rossijskij-servis-multipushed</guid>
      <description><![CDATA[<p>Рассказываем, как push-уведомления помогают бизнесу доставлять пользователям сообщения с 99.9% вероятностью и как работают изнутри.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/puwi-na-vse-platformy--kak-rabotaet-novyj-rossijskij-servis-multipushed">Push-уведомления: от базовых принципов до омниканальных систем</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[Браузеры]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Rust]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Firebase]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 May 2025 13:09:11 GMT</pubDate>
      <content:encoded><![CDATA[<p>Push-уведомления стали неотъемлемой частью цифровых продуктов, позволяя приложениям и сайтам оперативно взаимодействовать с пользователями. Они информируют о новостях, обновлениях или событиях в реальном времени, повышая удержание аудитории и конверсию. В отличие от email или SMS, пуши не требуют открытия отдельного приложения и появляются прямо на экране устройства, что делает их эффективным инструментом для маркетинга, уведомлений о транзакциях или системных алертах.</p><p>Рассмотрим, в чем особенность пушей и почему командам стоит к ним присмотреться.</p><h2>Почему сначала пуши, а потом СМСки</h2><p>Казалось бы, мы уже настолько привыкли к пушам из приложений, что СМСки кажутся прошлым веком. Однако многие компании продолжают ими пользоваться — это в какой-то степени логично, поскольку не все устанавливают приложения. Но часто бывает и такое, что бизнес в принципе не стал внедрять подобную функцию.</p><p>А зря: во-первых, СМС — всегда сильная зависимость от оператора связи. Пуши же — более гибкая опция, поскольку при их отправке используются ваши собственные каналы связи. Плюс стоимость отправки push-уведомлений значительно ниже, чем у СМС, при этом данные шифруются, а значит, злоумышленники не смогут украсть важные коды.</p><p>После 2022 года выбор сервисов для push-уведомлений стал сложнее из-за санкций. Долгое время компании пользовались и по инерции продолжают пользоваться сервисом Firebase Cloud Messaging от Google, но сейчас этот канал не может быть единственным для отправки push, так как могут возникнуть определенные санкционные риски и для бизнеса, а также другие проблемы:</p><ul><li>Одноразовые коды и другие уведомления — чувствительная информация. Зарубежные сервисы передают данные за пределы России, что может быть рискованно.</li><li>Условно-бесплатные аналоги, такие как FCM, не гарантируют доставку и не предоставляют аналитику.</li><li>Некоторые сервисы вовсе заблокированы в России, а другие не работают в Китае, где многие сейчас ведут бизнес.</li></ul><h2>Как работают push-уведомления: техническая основа</h2><p>Push-уведомления основаны на клиент-серверной архитектуре, где сервер отправляет данные на устройство через специализированные сервисы. Процесс начинается с регистрации: при запуске приложения устройство генерирует токен (device token) и отправляет его на сервер разработчика. Этот токен используется для маршрутизации сообщений.</p><p>Доставка происходит через платформо-зависимые сервисы:</p><ul><li>APNs (Apple Push Notification service): Для iOS и macOS, требует сертификата от Apple и поддерживает богатые уведомления с изображениями и действиями.</li><li>FCM (Firebase Cloud Messaging): Для Android, кросс-платформенный сервис от Google, интегрируется с другими каналами.</li><li>HPK (Huawei Push Kit): Альтернатива для устройств Huawei, особенно актуальна в регионах без Google Services.</li><li>RuStore и Aurora: Российские аналоги для Android, ориентированные на локальный рынок и совместимые с санкционными ограничениями.</li></ul><p>Для веб-приложений используются Web Push Notifications на базе Service Workers и протокола Push API, совместимого с браузерами Chrome, Firefox и Edge. Сообщения шифруются с помощью VAPID (Voluntary Application Server Identification) для аутентификации отправителя.</p><p>Модель Pub/Sub (Publish/Subscribe) лежит в основе масштабируемых систем: издатели публикуют сообщения в топики, а подписчики (устройства) получают их асинхронно. Это позволяет обрабатывать миллионы подключений без перегрузок. WebSocket или long-polling обеспечивают постоянное соединение для минимальной задержки – часто менее 0,1 секунды.</p><p>Вызовы включают:</p><ul><li>Оффлайн-доставку: Если устройство выключено или без интернета, сообщение может потеряться; ретраи (повторные попытки) и каскадирование (переключение на альтернативные каналы) решают эту проблему.</li><li>Географические ограничения: Сервисы вроде FCM могут блокироваться в некоторых странах, требуя омниканальных подходов.</li><li>Безопасность: Уведомления с чувствительными данными (коды аутентификации) нуждаются в end-to-end шифровании, чтобы предотвратить перехват.</li><li>Пользовательский контроль: Пользователи могут отключать пуши, поэтому важно соблюдать регуляции вроде GDPR или 152-ФЗ, избегая спама.</li></ul><p>Преимущества пушей над SMS: низкая стоимость (почти нулевая для больших объемов), мгновенная доставка, поддержка мультимедиа (изображения, кнопки действий) и аналитика (открытия, клики).</p><h2>Омниканальность и лучшие практики внедрения</h2><p>Омниканальные системы объединяют несколько каналов в единую платформу, обеспечивая доставку независимо от устройства или региона. Это включает каскад: если основной канал (например, собственный WebSocket) недоступен, система переключается на FCM или APNs. Такие подходы достигают 99,9% доставки, с ретраями и мониторингом.</p><p>При выборе системы учитывайте:</p><ul><li>Масштабируемость: Поддержка высоких нагрузок, как во время пиковых событий (распродажи, новости).</li><li>Аналитика: Реал-тайм отчеты о доставке, конверсии и отказах для оптимизации кампаний.</li><li>Кастомизация: Deeplink для перехода в конкретный раздел приложения, добавление изображений, ссылок или персонализированного контента.</li><li>Интеграция: REST API и SDK для популярных фреймворков (React Native, Flutter), чтобы внедрение заняло минимум времени.</li><li>Соответствие регуляциям: Локализация данных, сертификаты безопасности (PCI DSS, ФСТЭК) для работы с финансовыми или государственными данными.</li></ul><p>Лучшие практики: сегментируйте аудиторию по поведению, тестируйте A/B-варианты сообщений, интегрируйте с CRM для персонализации. Для бизнеса в e-commerce пуши идеальны для напоминаний о корзине, в банках – для транзакций, в медиа – для новостей.</p><h2>MULTIPUSHED как пример омниканальной платформы</h2><p>В качестве примера рассмотрим российскую систему <a href="https://multipushed.ru">MULTIPUSHED</a> от МУЛЬТИФАКТОР, ориентированную на доставку уведомлений в условиях санкций и локальных требований. Она использует SaaS-модель с инфраструктурой в дата-центрах Tier3 (DataLine, Selectel, LinxCloud), защищенной от DDoS через NGENIX.</p><p>Архитектура включает Pub для приема сообщений по HTTPS API, Broker для распределения и Router для маршрутизации по каналам: собственный PUSHED, APNs, FCM, HPK, RuStore, Aurora. Sub-серверы поддерживают WebSocket Secure для онлайн-доставки, с каскадированием для оффлайн-случаев.</p><p>Процесс: устройство регистрируется, получает токен; отправитель передает сообщение Pub; система маршрутизирует и подтверждает доставку. Совместима с iOS, Android, Aurora, РОСА МОБАЙЛ, KasperskyOS и веб. SDK для Android, iOS, React Native, Flutter, Aurora и Web упрощают интеграцию.</p><p>Функции: аналитика в реальном времени, кастомизация (deeplink, изображения), глобальная доставка (включая Китай и регионы РФ). Сообщения шифруются, соответствует 152-ФЗ и PCI DSS, внесена в реестр российского ПО.</p><h2>Итоговые рекомендации</h2><p>Push-уведомления эволюционируют в сторону омниканальности, чтобы преодолевать платформенные барьеры и обеспечивать надежность. Для бизнеса это инструмент роста вовлеченности, но успех зависит от баланса между частотой и релевантностью.</p><p>При внедрении тестируйте на реальных сценариях, мониторьте метрики и адаптируйте под регуляции – это минимизирует риски и максимизирует отдачу.</p>]]></content:encoded>
    </item>
    <item>
      <title>Это не шутка: чем «Аврора» уже круче Android</title>
      <link>https://tproger.ru/articles/smewno--gde-aurora-uzhe-obognala-android</link>
      <comments>https://tproger.ru/articles/smewno--gde-aurora-uzhe-obognala-android?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Денис Кудерин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/smewno--gde-aurora-uzhe-obognala-android</guid>
      <description><![CDATA[<p>«Аврора» уверенно выходит из тени Android: где российская мобильная ОС уже впереди, а где ей ещё предстоит догонять — разбор Tproger.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/smewno--gde-aurora-uzhe-obognala-android">Это не шутка: чем «Аврора» уже круче Android</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Linux]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Безопасность]]></category>
      <category><![CDATA[Производительность]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Samsung]]></category>
      <category><![CDATA[Мессенджер]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Xiaomi]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Смартфоны]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Wed, 07 May 2025 14:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>С 2023 года российские гаджеты на ОС Аврора стали активно внедрять в государственные IT-системы, чтобы заменить Android и iOS. Правда, в айтишных кругах она вызывает споры: она защищена и номинально считается российской, но при этом построена на ядре Linux и технологиях Nokia. Сейчас уже умеет запускать привычные приложения для Android.</p><p>В нашей статье разберем, чем система реально хороша, где еще сырая — и сможет ли она стать полноценной заменой Android в российских реалиях.</p><h2>Что за ОС Аврора — главное</h2><p>Когда по причине санкций возникла опасность, что смартфоны российских граждан в один прекрасный момент могут превратиться в кирпичи, работа над отечественным аналогом ОС, которая неторопливо велась с 2016 года, существенно ускорилась. К 2023 году продукты с ОС Аврора поступили в розничную продажу. Это были мобильные устройства под брендом Fplus — смартфоны, планшеты и карманные компьютеры. Приобрести их мог любой желающий, но в первую очередь устройства были рассчитаны на государственный сектор и корпоративное применение.</p><p>Аврора разработана на базе Sailfish OS, финской операционки от компании Jolla (наследницы Nokia), и изначально заточена под нужды корпораций, которым важна безопасность и независимость.</p><p>Создатели Авроры не стали изобретать велосипед, но сместили акценты. Если оригинальная система позиционировалась как альтернатива Android для всех желающих, то российская версия сразу была жестко ориентирована на безопасность и управляемость.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/7557940d-2f20-482c-9531-d28b1bd4027f.png" alt="" /></figure><p>Федеральная служба по техническому надзору (ФСТЭК) выдала сертификат соответствия, что автоматически открыло двери в госзакупки. Но путь от нишевой разработки до полноценной экосистемы оказался сложнее, чем ожидалось.</p><p>В отличие от iOS и Android, ориентированных на массовый потребительский рынок, Aurora создана с другими целями. Ее принципиальные отличия от указанных платформ заключаются в следующем:</p><ul><li>Это закрытая система. Исходный код недоступен для свободного изучения — в отличие от того же AOSP (открытой базы Android). Это одновременно и плюс, поскольку сложнее найти уязвимости, и минус, так как сообщество не может просто взять и доработать систему. Такой подход резко контрастирует с философией открытости, которую пропагандируют Google и другие ИТ-корпорации. Однако для госструктур, где каждый лишний наблюдатель — потенциальная угроза, подобная изоляция выглядит логичной.</li><li>Архитектура. Аврора построена на принципах модульности: компоненты можно обновлять или заменять по отдельности, не меняя всю систему. Это удобно для корпоративных сценариев, где важно кастомизировать ОС под конкретные задачи — например, отключить камеру у сотрудников, работающих с секретными документами, или жестко привязать устройство к корпоративному VPN. В Android подобные настройки требуют либо глубокой модификации системы, либо использования специализированных решений для повышения безопасности вроде Samsung Knox.</li><li>Экосистема. В Aurora все приложения пишутся строго на QML (для интерфейсов) и C++/JavaScript (для логики), а с недавних пор добавилась поддержка Flutter. Google Play тут нет, но есть RuStore, а также предустановленные сервисы вроде Р7-Офис и VK Мессенджера + корпоративные решения для РЖД или «Аэрофлота». При этом разработчики активно работают над совместимостью с Android-приложениями через контейнерные технологии, пока что с переменным успехом.</li></ul><p>Аврора разрабатывалась с расчетом на разнородные аппаратные платформы, включая российские процессоры Эльбрус и Байкал. Это еще одно отличие от конкурентов, в частности, от iOS, которая работает только с железом Apple.</p><h2>Для кого это сделано</h2><p>Пока основными пользователями Авроры остаются госучреждения и крупный бизнес. Например, <a href="https://3dnews.ru/1117507/rosstat-otpravil-na-skladi-320-tis-planshetov-i-ne-uvidel-v-etom-problemi#:~:text=%D0%92%D0%BE%20%D0%B2%D1%80%D0%B5%D0%BC%D1%8F%20%D0%92%D1%81%D0%B5%D1%80%D0%BE%D1%81%D1%81%D0%B8%D0%B9%D1%81%D0%BA%D0%BE%D0%B9%20%D0%BF%D0%B5%D1%80%D0%B5%D0%BF%D0%B8%D1%81%D0%B8%20%D0%BD%D0%B0%D1%81%D0%B5%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F,%D0%BD%D0%B0%20442%2C3%20%D0%BC%D0%BB%D0%BD%20%D1%80%D1%83%D0%B1.">Росстат закупил 19 тысяч планшетов</a> на этой ОС для переписи населения, а позже эти устройства разошлись по разным министерствам. В 2023 году в розницу вышли смартфоны Fplus — аппараты с ценником в диапазоне от 24 до 43 тыс. руб. Продажи можно назвать скромными, но цель тут не конкуренция с Xiaomi, а отработка технологий в «боевых» условиях.</p><p>В 2024 году большая часть государственных структур перешла на устройства с Aurora OS для работы с ГИС (государственными информационными системами). <a href="https://auroraos.ru/tpost/t9o7ykdhn1-rzhd-perevel-vseh-provodnikov-na-rossiis">РЖД обязала сотрудников</a> использовать устройства с отечественным ПО — для этого даже закупили партии гаджетов. На ОС Аврора работают терминалы МВД и пилотное оборудование для медицинских нужд.</p><p>Сейчас Аврора уже выходит за рамки смартфонов и КПК: тестируются версии для ТВ, роутеров и даже автомобилей. В 2025 году показали новый прототип для ноутбуков — видимо, чтобы чиновники могли печатать на клавиатуре без риска утечки данных в облачные платформы. Особый интерес представляет программа Аврора+  — разработчики обещают, что это будет унифицированная среда для самых разных устройств: от медицинского оборудования до умных светофоров.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/34a1837c-8800-4b70-bc26-ed29afa5a205.png" alt="" /></figure><p>Производители выпускают несколько типов гаджетов с предустановленной Aurora OS. Среди них можно выделить защищенные смартфоны Aquarius, которые поставляются в государственные учреждения, и промышленные планшеты Fplus T800, применяемые в корпоративном секторе. Также доступны специализированные решения, например, платежные терминалы, проходящие пилотные испытания в банковской сфере.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/641e16cc-7991-4bf1-a65c-fd740d2ef745.png" alt="" /></figure><p>Совместимость с Android-приложениями возможна из-за технологии Avroid — собственной разработки Aurora. Ее особенность — использование контейнеризации вместо полной эмуляции, что позволяет запускать приложения в изолированной среде, сохраняя приемлемый уровень производительности и контроль безопасности.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/a5b81a79-c846-4d31-a251-6f725e49824f.png" alt="" /></figure><p>Однако, как отмечается в технической документации, технология имеет определенные ограничения. Например, не поддерживаются приложения, требующие глубокой интеграции с системой. В 2024 году через Avroid было доступно около 1 500 проверенных Android-приложений, наиболее востребованных в корпоративной среде.</p><h2>В каких местах Aurora конкурирует на равных или опережает Android</h2><p>Никто не станет спорить с тем, что в массовом потребительском сегменте Аврора пока остается нишевым продуктом. В плане популярности и востребованности соревноваться с Android отечественное решение просто не в состоянии. Однако в некоторых направлениях Aurora OS предлагает уникальные решения. Причем преимущества российской ОС проявляются не только в традиционно сильных для нее сферах безопасности, но и в довольно неожиданных аспектах.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/4d25eb83-206e-49ca-b9e9-695c1a8186cc.png" alt="" /></figure><p>Мы рассмотрим каждый пункт в подробностях и приведем примеры реального превосходства отечественного продукта.</p><h3>Безопасность как концепт</h3><p>Даже на официальном сайте Аврора представлена как защищенная ОС с мобильной инфраструктурой, устойчивой к санкционным рискам. И это чистая правда. В отличие от Android, где безопасность — это по сути набор заплаток на уязвимом ядре, здесь защита встроена в архитектуру.</p><p>Например, механизм доверенной загрузки проверяет цифровую подпись каждого компонента — от загрузчика до системных библиотек. Попытка модифицировать систему приводит к блокировке.</p><p>Для корпоративных пользователей реализована полноценная работа с электронной подписью прямо из системы — без дополнительных токенов и настроек. В банках, внедривших Aurora, время на подписание договоров и документов через встроенный криптопровайдер сокращается в несколько раз.</p><h3>Оптимизированная архитектура без балласта</h3><p>Отсутствие необходимости поддерживать миллионы устройств и тонны legacy-кода позволило создать более стройную архитектуру. На практике это означает, что Aurora потребляет на 30-40% меньше оперативной памяти на аналогичном железе.</p><p>Особенно заметна разница на устройствах с отечественными процессорами. В тестах планшетов на процессорах Эльбрус Aurora демонстрирует плавность интерфейса, которой сложно добиться на Android даже с более мощными мобильными системами Snapdragon на кристалле Qualcomm.</p><h3>Энергоэффективность как приоритет</h3><p>В отличие от Android, где фоновые сервисы Google и производителей съедают заряд батареи, Aurora реализует агрессивную оптимизацию энергопотребления. В полевых испытаниях устройства работали на 20-25% дольше в аналогичных условиях использования.</p><p>Особенно ценна эта особенность для промышленного применения — например, в устройствах мониторинга, которые должны работать неделями без подзарядки. При этом система сохраняет работоспособность при экстремальных температурах от -40°C до +60°C благодаря тому, что устройства изначально создавались с учетом суровых климатических условий использования.</p><h3>Глубокая интеграция с госсистемами</h3><p>Aurora — это единственная мобильная ОС, где Госуслуги, СБИС и другие государственные сервисы работают не как сторонние приложения, а как полноценная часть системы. Например, электронная подпись документов реализована на уровне ОС, а не через отдельное приложение.</p><p>В одном из региональных МФЦ (Нижегородская область) после перехода на Aurora скорость обработки документов увеличилась на 15% просто потому, что система понимает российские форматы дат, номеров и других данных непосредственно из коробки.</p><h3>Предсказуемая система обновлений</h3><p>В Android мир обновлений — это лотерея, где сроки и доступность апдейтов зависят от производителя устройства. Aurora предлагает централизованную систему с гарантированной поддержкой каждого гаджета в течение 5 лет.</p><p>Для корпоративных клиентов это означает возможность планировать жизненный цикл устройств на годы вперед. В РЖД, где развернуто несколько тысяч устройств с Aurora, ИТ-отдел сократил расходы на обновление парка на 40% благодаря этой предсказуемости.</p><h3>Встроенные корпоративные инструменты</h3><p>То, что в Android требует покупки дополнительных MDM-решений (специальных программ для управления корпоративными устройствами), в Aurora доступно в заводской сборке.</p><p>Что может администратор:</p><ul><li>создавать изолированные профили для разных задач;</li><li>управлять правами доступа к функциям устройства;</li><li>дистанционно развертывать политики безопасности;</li><li>контролировать целостность системы на всех устройствах.</li></ul><p>В банках внедрение Aurora позволит сократить расходы на мобильных администраторов — многие функции управления станут доступны без дополнительного ПО.</p><h3>Гибкость для специализированных решений</h3><p>Aurora легко адаптируется под узкоспециализированные задачи.</p><p>Несколько примеров:</p><ul><li>терминалы для нефтяников с ударопрочным корпусом и возможностью работы в перчатках;</li><li>медицинские устройства с поддержкой специализированных датчиков;</li><li>промышленные планшеты с интерфейсами для устаревшего оборудования.</li></ul><p>На кастомизацию под такие задачи обычно требуется в 2-3 раза меньше времени, чем при работе с Android. При этом нет необходимости модифицировать ядро системы — все делается через стандартные инструменты разработки.</p><h3>Локализация, которая учитывает реалии</h3><p>В Aurora русский язык — не просто перевод интерфейса, а полноценная основа системы.</p><p>Это проявляется в поддержке всех особенностей русского языка, интеграции с национальными стандартами, учете российских норм документооборота и адаптации под местные бизнес-процессы.</p><p>Например, система корректно обрабатывает склонение ФИО во всех падежах — проблема, с которой до сих пор сталкиваются многие Android-приложения.</p><h3>Независимость от внешних факторов</h3><p>Архитектура Aurora изначально проектировалась с учетом возможных ограничений:</p><ul><li>все критически важные сервисы имеют отечественные аналоги;</li><li>система может работать в полностью изолированных сетях;</li><li>обновления распространяются через российскую инфраструктуру;</li><li>нет зависимостей от зарубежных сервисов.</li></ul><p>Если определенные международные сервисы прекратят работу в России, устройства на Aurora продолжат функционировать без ограничений.</p><h3>Производительность в специализированных сценариях</h3><p>При выполнении задач, важных для корпоративного сектора, Aurora регулярно обходит Android в тестах:</p><ul><li>обработка больших массивов данных — на 15-20% быстрее;</li><li>криптографические операции — в 2-3 раза эффективнее;</li><li>параллельная работа с документами — меньше задержек;</li><li>длительные сессии работы — стабильнее производительность.</li></ul><p>Особенно заметна разница на устройствах с российскими процессорами, где оптимизация Aurora проявляется наиболее ярко. Справедливости ради отметим, что в потребительских задачах (игры, видео) Android быстрее на 20-25%.</p><h3>Экосистема для профессиональных разработчиков</h3><p>Хотя магазин приложений Aurora пока не может соперничать с Google Play по количеству программ, для корпоративных нужд предлагаются:</p><ul><li>современные инструменты разработки (Flutter, Qt);</li><li>простые механизмы портирования Android-приложений;</li><li>система сертификации для защищенных решений;</li><li>поддержка российских криптоалгоритмов на уровне API.</li></ul><p>Например, разработка корпоративного мессенджера с шифрованием занимает вдвое меньше времени, чем для Android.</p><h3>Поддержка отечественного железа</h3><p>Aurora демонстрирует лучшую оптимизацию для российских процессоров по сравнению с Android. В тестах на Эльбрусах и Байкалах разница в производительности достигает 30-40% в пользу отечественной ОС.</p><p>Система также поддерживает промышленные компьютеры и контроллеры, устаревшее оборудование, специализированные аппаратные модули и устройства с повышенными требованиями к безопасности. Это делает Aurora предпочтительным выбором для проектов импортозамещения в госсекторе и промышленности.</p><p>Но главное преимущество Aurora — это не отдельные функции, а целостная концепция. Система создавалась не затем, чтобы угнаться за Android, а чтобы решать конкретные задачи российских пользователей и предприятий. И судя по темпам развития, у нее есть все шансы не просто догнать, но и перегнать зарубежные аналоги в ключевых для нашей страны сферах.</p><h2>Проблемы и перспективы ОС Aurora</h2><p>Основное препятствие для массового внедрения Aurora — ограниченность программной экосистемы. Несмотря на наличие RuStore, количество качественных приложений остается критически малым. В середине 2024 года на официальном сайте было представлено <a href="https://auroraos.ru/page30588774.html">несколько сотен нативных приложений</a>, при этом многие из них — узкоспециализированные решения для госсектора.</p><figure><img src="https://media.tproger.ru/user-uploads/113565/2025-04-22/d971dea9-f021-4fc0-809e-50201fb86008.png" alt="" /></figure><p>Механизм совместимости с Android-приложениями через Авроид Платформу демонстрирует существенные ограничения в производительности. Тесты показывают падение скорости выполнения операций на 40-60% по сравнению с нативными Android-устройствами аналогичной конфигурации. Особенно заметны проблемы при работе с графически насыщенными приложениями.</p><p>Аппаратная платформа также вызывает вопросы. Большинство доступных устройств используют устаревшие процессорные решения, что ограничивает пользовательский опыт. Например, флагманский смартфон Aquarius AQ27 на базе Aurora оснащен процессором, эквивалентным по мощности Snapdragon 730G, который появился на рынке еще в 2019 году.</p><p><a href="https://auroraos.ru/tpost/hx0jhujaf1-avrora-tsentr-obnovilas-do-versii-520">Свежие анонсы</a> разработчиков свидетельствуют о смене стратегического курса. Представленный в конце 2024 года гибридный режим работы — это первая попытка выйти за рамки мобильной ОС. Техническая документация указывает на использование адаптивного интерфейса, который динамически изменяет элементы управления в зависимости от подключенных устройств.</p><p>Согласно <a href="https://auroraos.ru/">дорожной карте разработчиков</a>, ключевые этапы развития платформы запланированы до 2027 года. В официальных материалах ОМП указано, что полноценная поддержка Android-приложений (без потери производительности) ожидается не ранее 2026 года, а расширение экосистемы до 3000+ нативных приложений должно быть достигнуто к концу того же года. Для массовой адаптации потребуется дополнительное время: по оценкам специалистов — это еще от 2 до 3 лет.</p><p>Желаем Авроре удачи, а читаем про мобильную разработку <a href="https://t.me/+Fb6_4ek5P6gzOTcy">здесь</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Большой гайд по мобильной разработке от Tproger: полезные статьи, практики и советы</title>
      <link>https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety</link>
      <comments>https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety</guid>
      <description><![CDATA[<p>Делимся нашими статьями про мобильную разработку: iOS, Android, Flutter, SwiftUI, Jetpack Compose, публикация в сторах и советы по доступности — всё в одном месте.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bolwoj-gajd-po-mobilnoj-razrabotke-ot-tproger--poleznye-stati--praktiki-i-sovety">Большой гайд по мобильной разработке от Tproger: полезные статьи, практики и советы</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Дизайн интерфейсов и UX]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 02 May 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Мечтаете сделать своё приложение, но не знаете, с чего начать? Или уже пилите продукт, но хочется сильнее прокачаться в Android или iOS? Мы собрали для вас подборку самых полезных и актуальных статей по мобильной разработке от Tproger.</p><p>Сначала — немного базы: теории, языков, платформ. Потом — инструменты, практические гайды и даже ошибки, которых стоит избегать. Сохраняйте, чтобы не потерять!</p><h2>Немного базы</h2><p>Статьи, которые помогут разобраться, с чего начать и куда двигаться:</p><p><a href="https://tproger.ru/articles/pervye-wagi-v-mobilnoj-razrabotke-s-flutter"><b>Первые шаги в мобильно</b>й разработке с <b>Flutter</b></a> — Здесь обзор фреймворка Flutter: настройка окружения, создание первого приложения и особенности виджетов.</p><p><a href="https://tproger.ru/articles/sozdayom-mobilnoe-prilozhenie-s-nulya--ot-idei-do-publikacii-v-app-store-i-google-play">Создаём мобильное приложение с нуля: от идеи до публикации в App Store и Google Play</a> — Делимся полным циклом создания: дизайн, разработка, тестирование, релиз.</p><p><a href="https://tproger.ru/articles/introduction-to-mobile-development">Введение в мобильную разработку для Android: с каких языков начать изучение?</a> — Рассматриваем, с каких языков программирования начать путь в Android-разработке и почему.</p><p><a href="https://tproger.ru/articles/8-jazykov-programmirovanija-dlja-android-razrabotchika">8 языков программирования для Android-разработчика</a> — Перечисляем восемь языков программирования, которые стоит рассмотреть Android-разработчику. Изучаем плюсы, минусы, области применения, особенности.</p><p><a href="https://tproger.ru/articles/kak-stat-android-razrabotchikom-s-nulja-dorozhnaja-karta">Дорожная карта по Android-разработке с нуля</a> — Пошаговое руководство для тех, кто хочет освоить Android-разработку с нуля: от установки среды до публикации.</p><p><a href="https://tproger.ru/articles/osnovy-swiftui-dlya-ios-razrabotchikov">Основы SwiftUI для iOS-разработчиков</a> — Изучаем базовые возможности SwiftUI: декларативная верстка интерфейсов, примеры кода и сокращение сроков разработки.</p><p><a href="https://tproger.ru/articles/nachalo-raboty-v-android-studio-i-pervyj-prostoj-proekt">Начало работы в Android Studio и первый простой проект</a> — Пошаговое руководство по началу работы в Android Studio и созданию первого простого проекта. Учимся пользоваться инструментом с нуля.</p><h2>Практика, инструменты и тонкости</h2><p>Когда разобрались с базой — идём дальше и погружаемся в инструменты и реальные задачи:</p><p><a href="https://tproger.ru/articles/rabota-s-animaciej-v-android-razbiraem-motionlayout">Работа с анимацией в Android: разбираем MotionLayout</a> — Рассказываем, как использовать MotionLayout для создания сложных анимаций в Android-приложениях. С примерами!</p><p><a href="https://tproger.ru/articles/jetpack-compose-i-kotlin--kak-razrabatyvat-sovremennye-ui">Jetpack Compose и Kotlin: как разрабатывать современные UI</a> — Показываем, как разрабатывать современные пользовательские интерфейсы с помощью Jetpack Compose и языка Kotlin. Делимся, как использовать в проектах.</p><p><a href="https://tproger.ru/articles/java-vs-kotlin">Java vs Kotlin для Android-разработки: ответы «за» и «против»</a> — Сравниваем Java и Kotlin для Android-разработки: плюсы, минусы и рекомендации по выбору.</p><p><a href="https://tproger.ru/articles/bojlerplejt-na-fastlane-dlja-integracii-obnovlenij-ci-cd-android-prilozhenij">Бойлерплейт Fastlane для быстрого обновления Android-приложений</a> — Показываем, как использовать Fastlane для автоматизации обновлений Android-приложений, даем рекомендации по применению.</p><p><a href="https://tproger.ru/articles/kak-uderzhat-polzovatelya-v-prilozhenii-s-pomoshhyu-dostupnosti">Accessibility для всех: как удержать пользователя в приложении с помощью доступности</a> — Объясняем, как внедрение accessibility улучшает пользовательский опыт и помогает удержать аудиторию.</p><h2>Про рост, релиз и продвижение</h2><p>Когда всё работает — пора думать про рост, релиз и продвижение:</p><p><a href="https://tproger.ru/articles/kak-dobavit-prilozhenie-v-google-play">Как добавить приложение в Google Play</a> — Объясняем, как подготовить и опубликовать приложение в Google Play: от регистрации до релиза.</p><p><a href="https://tproger.ru/articles/5-glavnyh-oshibok-v-aso-app-store-optimization">5 главных ошибок в ASO — App Store Optimization</a> — Разбираем пять распространенных ошибок в App Store Optimization и как их избежать. Что нужно делать, чтобы не слить продвижение.</p><p><a href="https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie">От идеи к успеху: как создать популярное мобильное приложение</a> — Рассказываем, как пройти путь от идеи до успешного мобильного приложения: планирование, разработка, тестирование и продвижение.</p><p>Не забудьте сохранить, чтобы не искать потом по всему интернету!</p><p>Большая подборка по <a href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">React</a> — уже на сайте.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>Большой гайд по React от Tproger: топовые статьи и инструменты</title>
      <link>https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty</link>
      <comments>https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty</guid>
      <description><![CDATA[<p>Гайд по реакт. Топовые статьи и инструменты. React для новичков. Делимся теорией и практическими рейсами. Tproger. </p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/bolwoj-gajd-po-react-ot-tproger--topovye-stati-i-instrumenty">Большой гайд по React от Tproger: топовые статьи и инструменты</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Практика]]></category>
      <category><![CDATA[Windows]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[TypeScript]]></category>
      <category><![CDATA[Навыки]]></category>
      <category><![CDATA[Django]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Redux]]></category>
      <category><![CDATA[Фронтенд]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Пет-проект]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 01 May 2025 10:00:04 GMT</pubDate>
      <content:encoded><![CDATA[<p>Внутри этого гайда — самые топовые статьи от Tproger, c помощью которых вы сможете прокачать свои навыки: от базовых паттернов до сложных анимаций и бэка. Сначала немного разберемся в теории, а потом — перейдем к практике и реальным проектам, которые реализовали наши читатели. Не забудьте сохранить гайд!</p><h2>Немного базы</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-05-05/08ef6c61-544e-4c5a-91dc-d0d4d3200357.jpg" alt="" /></figure><p>В этих статьях рассказываем о том, что нужно знать новичкам и не только.</p><ul><li><a href="https://tproger.ru/articles/reactjs-na-izi--chto-realno-nuzhno-znat-frontend-razrabotchiku-v-2025-godu">ReactJS на изи: что реально нужно знать фронтенд-разработчику в 2025 году</a> — помогаем новичкам войти войти и показываем опытным разработчикам, что они могли упустить.</li><li><a href="https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-1">Какие есть паттерны в React и для чего они нужны: часть 1</a> и <a href="https://tproger.ru/articles/kakie-est-patterny-v-react-i-dlya-chego-oni-nuzhny--chast-2">Какие есть паттерны в React и для чего они нужны: часть 2</a> — здесь объясняем популярные архитектурные паттерны в React, когда и зачем их применять.</li><li><a href="https://tproger.ru/articles/luchwie-biblioteki-dlya-animacij-na-react">7 библиотек для анимаций на React / Tproger</a> — собрали актуальные библиотеки для анимации в React; сравнение, демо и рекомендации.</li><li><a href="https://tproger.ru/translations/mistakes-junior-react-developers-make">Типичные ошибки джунов, использующих React</a> — показываем типичные ошибки junior-разработчиков в React, рассказываем, как писать чище и стабильнее.</li><li><a href="https://tproger.ru/articles/podgotovka-okruzhenija-react-prilozhenija-vscode-prettier-eslint-stylelint-husky">Подготовка окружения React-приложения: VSCode, Prettier, ESLint, Stylelint, Husky</a> — рассказываем, как начать работу с приложениями на Реакте и что должно быть на рабочем столе.</li><li><a href="https://tproger.ru/articles/react-native-protiv-flutter--chto-luchwe">React Native против Flutter: что лучше</a> (для общего развития) — сравниваем популярные фреймворки для кроссплатформенной разработки; плюсы, минусы и рекомендации.</li><li><a href="https://tproger.ru/articles/deeplink-v-react-native--polnoe-rukovodstvo">Deeplink в React Native: Полное руководств для новичков</a> — рассказываем, что такое deeplink и как их писать на Реакте.</li></ul><h2>Практикуемся</h2><figure><img src="https://media.tproger.ru/user-uploads/102593/2025-05-05/d2d4a20e-2de7-46d4-8b4d-bbf28558d7e6.jpg" alt="" /></figure><ul><li><a href="https://tproger.ru/articles/js--dran-and-drop--delaem-podvizhnye-bloki">Современный Drag and Drop в React с помощью dndkit: создаем перетаскиваемое меню</a> — здесь о том, как сделать меню, кнопки и все с помощью dndkit.</li><li><a href="https://tproger.ru/translations/django-react-webapp">Пишем приложение с бэкендом на Django и фронтендом на React</a> — рассказываем, как создать REST API на Джанго, добавить React и объединить это в один проект.</li><li><a href="https://tproger.ru/articles/sozdanie-todo-list-beskonechnoj-vlozhennosti-react-typescript-mobx">Создание ToDo-листа бесконечной вложенности на React, TypeScript и MobX</a> — пошагово создаем вложенные задачи в ToDo-приложении, используем MobX, React и TypeScript.</li><li><a href="https://tproger.ru/articles/sozdanie-typing-test-prilozheniya-na-react-typescript-redux-toolkit">Создание Typing Test приложения на React + TypeScript + Redux Toolkit</a> — учимся создавать приложение для проверки скорости набора текста, используем Redux Toolkit.</li><li><a href="https://tproger.ru/articles/najdi-oshibku-v-react-komponente-funkcionalnoe-karri">Найди ошибку в React-компоненте: Функциональное Карри</a> — практический кейс: ищем ошибку в React и заодно изучаем каррирование функций.</li><li><a href="https://tproger.ru/articles/windows-application-on-react">Создание приложений для Windows на React Native</a> — разбираем, как запускать и разрабатывать React Native-приложения под Windows, примеры и инструменты.</li><li><a href="https://tproger.ru/articles/recharts-optimization">Оптимизация графиков Recharts</a> — ускоряем отрисовку графиков на React с помощью Recharts, практика, кейсы и улучшения.</li><li><a href="https://tproger.ru/articles/your-first-app-in-react-native">Как разработать своё первое приложение на React Native</a> — инструкция по созданию первого мобильного приложения на React Native, от идеи до запуска.</li><li><a href="https://tproger.ru/articles/pet-proekt-na-react-kak-my-ozvuchivali-internet">Пет-проект на React. Как мы «озвучивали» интернет</a> — история реализации проекта с Web Speech API и React. Учим браузер говорить.</li></ul><p>Кстати, похожий гайд мы уже делали — про Python. Можно заценить <a href="https://tproger.ru/articles/bolwoj-gajd-po-python-ot-tproger--topovye-instrumenty-dlya-raznyh-napravlenij">здесь</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Low-code и No-code: 10 задач программиста, которые они точно решат</title>
      <link>https://tproger.ru/articles/low-code-i-no-code--10-zadach-programmista--kotorye-oni-tochno-rewat</link>
      <comments>https://tproger.ru/articles/low-code-i-no-code--10-zadach-programmista--kotorye-oni-tochno-rewat?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Татьяна Жукова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/low-code-i-no-code--10-zadach-programmista--kotorye-oni-tochno-rewat</guid>
      <description><![CDATA[<p>Low-code и no-code — не просто модный тренд, а мощные инструменты, которые уже сегодня решают задачи программистов: от создания MVP и автоматизации процессов до админок и найма. Разбираем 10 кейсов, где без кода — быстрее и эффективнее.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/low-code-i-no-code--10-zadach-programmista--kotorye-oni-tochno-rewat">Low-code и No-code: 10 задач программиста, которые они точно решат</a>»</p>]]></description>
      <category><![CDATA[API]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Работа]]></category>
      <category><![CDATA[Microsoft]]></category>
      <category><![CDATA[Боты]]></category>
      <category><![CDATA[Базы данных]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Визуализация]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[QA]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Notion]]></category>
      <category><![CDATA[Low-code]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 25 Apr 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Что, если часть типичных задач программиста можно решить без единой строчки кода или хотя бы почти без неё? Именно это предлагают платформы с низким и нулевым кодом — инструменты, которые позволяют создавать рабочие приложения, автоматизировать процессы и выполнять интеграцию с минимальными усилиями.</p><p>В последние годы интерес к таким решениям <a href="https://sberbusiness.live/publications/ne-tolko-ii-shest-trendov-v-tekhnologiiakh-i-innovatsiiakh">растёт</a> — и не только со стороны бизнес-пользователей, но и со стороны самих разработчиков. Почему? Потому что писать код для создания формы обратной связи или автоматической выгрузки уже давно не круто — это просто неэффективно.</p><p>В этой статье мы разберём 10 реальных задач, которые вполне может (и должен) решить программист, используя low-code и no-code. Без лишнего героизма, но с пониманием того, что ручной подход всё ещё важнее конструктора.</p><h2>Автоматизация рутинных задач</h2><p>Каждый разработчик хотя бы раз в жизни писал скрипт для автоматической отправки отчёта или обновления Google-таблицы. А потом поддерживал его, когда «что-то пошло не так». Low-code и no-code инструменты позволяют избавиться от этого класса задач почти полностью.</p><p>Сценарии могут быть самыми разными: от автоматического создания задач в нужной системе управления проектами при получении заявки с сайта до копирования данных между таблицами или CRM.</p><p>Для этого есть целая экосистема решений:</p><ul><li>Zapier (больше недоступен в РФ), Pyrus — простейшие визуальные сценарии из «если → то».</li><li>n8n — low-code альтернатива Zapier с гибкой логикой и возможностью писать код внутри узлов.</li><li>Bardeen (недоступен в РФ), Automate.io (принадлежит Notion), Pipedream и другие — в зависимости от задач и бюджета.</li></ul><p>Почему это стоит использовать даже разработчику?</p><ul><li>Это быстро. На то, что раньше требовало 2-3 часа кода, теперь уходит 10 минут.</li><li>Сценарий виден на визуальной схеме, не надо вспоминать, где лежит скрипт.</li><li>Почти все популярные сервисы уже имеют готовые интеграции.</li></ul><p>Когда не стоит: Если нужна высокая надёжность, работа с внутренними API без внешнего доступа или продвинутая логика — лучше писать код. Но в 80% бытовых задач проще и быстрее собрать автоматизацию в визуальном редакторе.</p><h2>Создание MVP без кода</h2><p>Идея горит, ресурсы ограничены, время поджимает — знакомо? В таких условиях no-code и low-code инструменты позволяют запустить рабочий прототип продукта за считаные дни, а иногда и часы.</p><p>Представим, что вы хотите проверить гипотезу подписки на свой образовательный контент (кстати, вот <a href="https://t.me/textonprod">школа IT-авторов</a>) или сделать внутренний инструмент для команды. Все эти задачи можно решить без строки кода с помощью платформ вроде:</p><ul><li>Tilda, Webflow — сайты и лендинги с адаптивной версткой.</li><li>Glide, Adalo (недоступен в РФ), Thunkable — мобильные приложения на базе таблиц и визуальных блоков.</li><li>Bubble (недоступен в РФ), Appgyver, FlutterFlow — более сложные web-приложения с логикой, авторизацией и базой данных.</li><li>Airtable (недоступен в РФ), Notion (недоступен в РФ), Coda (недоступен в РФ) — базы данных и CRM, которые легко превращаются в интерфейсы.</li></ul><p>Почему это работает?</p><ul><li>Вы быстрее доходите до обратной связи. MVP можно показать потенциальным пользователям уже через 2 дня.</li><li>Не нужно нанимать команду на старте.</li><li>Увидели, что гипотеза не работает — перетащили блоки, переписали логику, и уже новая версия готова.</li></ul><p>Когда не стоит использовать: если вы сразу делаете high-load систему с кастомной логикой и интеграциями, или рассчитываете масштабироваться в продакшен без переписывания — no-code не спасёт. Но для быстрого запуска и проверки гипотез — идеальный инструмент.</p><h2>Построение внутренних инструментов для команды</h2><p>Отдел продаж просит CRM, поддержка — панель модерации, а HR — форму заявок с автоматической сортировкой? Такие задачи возникают в любой команде, и решать их силами разработчиков — дорого и долго. Зато на помощь приходит no-code и low-code.</p><p>Все эти задачи легко реализуются на платформах вроде:</p><ul><li>Retool, Glide — визуальные панели с логикой и авторизацией.</li><li>Tally, Typeform (недоступен в РФ), Jotform — сбор данных с автоматизацией.</li><li>Nocodb, Softr — веб-приложения поверх таблиц и SQL.</li></ul><p>Почему это работает?</p><ul><li>Отдел маркетинга или HR могут собрать нужный инструмент сами, не дожидаясь релиза от IT.</li><li>Если изменились бизнес-процессы — поменяли поля, условия, логику, и всё работает по-новому.</li><li>Большую часть задач решает один человек за день-два, без бюджета на разработку.</li></ul><p>Когда не стоит использовать: если нужен сложный доступ по ролям, кастомные права, специфичная логика или глубинная интеграция с внутренними API — лучше делать через разработчиков. Но как первый шаг или временное решение — это отличный путь к рабочему результату.</p><h2>Интеграции между сервисами</h2><p>Формы в Google, письма в Gmail, таблицы в Excel — современный бизнес живёт в десятках инструментов. И одна из самых частых задач — «сделай так, чтобы всё это говорило друг с другом». Раньше требовался разработчик с опытом API, теперь достаточно конструктора автоматизаций.</p><p>Все это можно настроить без строчки кода с помощью инструментов вроде:</p><ul><li>n8n, Pipedream — low-code-платформы для более гибкой логики и работы с API.</li><li>Parabola, Bardeen (недоступен в РФ) — автоматизация и обработка данных в интерфейсе drag-and-drop.</li><li>Google Apps Script, Microsoft Power Automate — автоматизация в экосистемах Google и Microsoft.</li></ul><p>Почему это работает?</p><ul><li>Один раз настроили цепочку — и больше не думаете о пересылке данных вручную.</li><li>Можно быстро экспериментировать: добавить шаг, заменить источник, поменять формат.</li><li>Даже не-технари могут собирать мощные сценарии — обучение занимает пару часов.</li></ul><p>Когда не стоит использовать: Если у вас десятки тысяч событий в минуту, сложная логика с обработкой ошибок, кастомная авторизация или нестандартные API — лучше использовать специализированные ETL-инструменты или писать собственный сервис. Но для большинства задач SMB и команд — no-code интеграции работают как часы.</p><h2>Визуализация данных</h2><p>Данные есть. Но никто ничего не понимает, пока не появится понятный дашборд. А еще лучше — автоматический, обновляемый, с фильтрами и графиками. И вот тут low-code и no-code инструменты — настоящая находка:</p><ul><li>Google Looker Studio (ex-Data Studio, недоступен в РФ) — визуализация данных из десятков источников.</li><li>Metabase — подключение к БД и создание интерактивных дашбордов.</li><li>Retool, Supabase Studio — для более продвинутых интерфейсов на low-code.</li><li>Power BI, Tableau Public — классика BI в доступной форме.</li></ul><p>Почему это работает?</p><ul><li>Простые отчёты можно собрать за вечер — без SQL и подключения к backend.</li><li>Любой член команды может открыть дашборд и посмотреть ключевые метрики.</li><li>Подключили источник данных — и всё тянется само.</li></ul><p>Когда не стоит использовать: Если у вас сверхстрогие требования к безопасности, нужно работать с миллионами строк, делать сложные вычисления или кастомную визуализацию — стоит подключать BI-специалиста и писать под вас. Но для 90% типовых отчётов ноу-код платформы — идеальный инструмент.</p><h2>Прототипирование логики приложений</h2><p>У вас есть идея для приложения, и нужно понять, как будет работать его внутренняя логика: какие экраны нужны, как они связаны между собой, что произойдёт при нажатии на кнопку. Необязательно писать код — можно собрать прототип за вечер, чтобы проверить, как всё работает на практике.</p><p>Все эти задачи решаются с помощью платформ:</p><ul><li>Figma + Protopie, Framer — интерактивные прототипы с переходами и логикой.</li><li>Bravo Studio, Adalo — превращают дизайн в настоящее приложение.</li><li>Thunkable, FlutterFlow, Draftbit — визуальное программирование с поддержкой логики и баз данных.</li></ul><p>Почему это работает?</p><ul><li>Живой прототип понятен всем. Его можно показать команде, инвесторам или пользователям — и сразу получить обратную связь.</li><li>Ошибки видны сразу. Вместо недель разработки и пересборки — просто передвинул блоки и проверил.</li><li>Нет зависимости от разработчиков на начальном этапе. Продакт или дизайнер сам собирает модель и тестирует поведение.</li></ul><p>Когда не стоит использовать: Если у вас сразу сложное приложение с большим количеством логики, интеграцией с API и высокой нагрузкой, прототип может не отражать все детали. Но для проверки идей, демонстрации логики и первых шагов это мощный инструмент, который экономит время и деньги.</p><h2>Моделирование и управление базами данных</h2><p>Нужно быстро создать рабочую структуру для хранения данных, не углубляясь в SQL и не поднимая сервер? Инструменты с низким кодом и без кода позволяют проектировать, визуализировать и управлять базами данных так, будто вы работаете с таблицей Excel, только мощнее.</p><p>Все эти задачи можно реализовать с помощью:</p><ul><li>Airtable (недоступен в РФ), Baserow, SmartSuite — базы с визуальным редактором, фильтрами и связями между таблицами.</li><li>Xano, Nocodb — мощные backend платформы без кода с поддержкой REST API, авторизации и полноценной БД.</li><li>JetAdmin, Retool, DronaHQ — визуальные панели для управления данными и построения интерфейсов для сотрудников.</li></ul><p>Почему это работает?</p><ul><li>Модель видно сразу. Вы не просто пишете схему — вы видите, как данные связаны и как с ними работает пользователь.</li><li>Базу с интерфейсом и фильтрами можно запустить уже через пару часов.</li><li>Легко подключать внешние источники. Например, подтянуть данные из Google Sheets или интегрировать с CRM.</li></ul><p>Когда не стоит использовать: Если вы работаете с большими объёмами данных, требующими сложной оптимизации, репликации или транзакционной целостности — тогда лучше использовать классические базы и писать код. Но если вы строите MVP, внутреннюю систему или хотите быстро протестировать структуру — no-code здесь незаменим.</p><h2>Мониторинг и оповещения</h2><p>Когда нужно вовремя узнать, что что-то пошло не так (или наоборот — сработало идеально), мониторинг и оповещения становятся ключевыми. Хорошая новость: даже без строчки кода можно настроить автоматическую систему слежения за событиями и уведомлений в Telegram или на почту.</p><p>Все эти сценарии можно реализовать через:</p><ul><li>n8n (работает локально и в облаке) — open-source альтернатива Zapier.</li><li>Kobana, Albato — российские low-code платформы для интеграции и автоматизации процессов.</li><li>Google Sheets + Google Apps Script — настраиваемые триггеры при изменении данных в таблице.</li></ul><p>Почему это работает?</p><ul><li>Сценарии если-то легко настраиваются в визуальных редакторах.</li><li>Уведомления приходят туда, где вы и команда уже обитаете — в мессенджеры или на почту.</li><li>Можно задать пороги, фильтры, условия срабатывания и сложные цепочки событий.</li></ul><p>Когда не стоит использовать: Если вы строите систему мониторинга для high-load-сервиса с кучей микросервисов, логов и событий — лучше использовать специализированные DevOps-инструменты. Но для продуктовых MVP, маркетинга, CRM, клиентского сервиса — low-code решения с головой закроют 90% задач.</p><h2>Автоматизация процессов найма</h2><p>Рекрутинг — это часто про рутину: собеседования, отклики, письма, статусы, таблицы. Но даже без команды HR-техов можно собрать автоматизированную воронку найма с помощью no-code и low-code инструментов.</p><p>Все это легко реализуется через:</p><ul><li>Kaiten / Trello — визуальное отображение кандидатов по этапам.</li><li>Albato, n8n — автоматическая интеграция с Telegram, почтой, CRM, Google календарем.</li><li>JivoSite, Chat2Desk — чат-виджеты для быстрой связи с кандидатами на сайте.</li></ul><p>Почему это работает?</p><ul><li>Отправка писем, смена статусов, напоминания — всё работает по сценариям.</li><li>Таблица или канбан-доска становится вашей мини-ATS-системой.</li><li>Удобно масштабировать. Новая вакансия — копируете структуру, меняете пару полей — и готово.</li></ul><p>Когда не стоит использовать: Если у вас крупный HR-отдел, сотни кандидатов ежедневно и нужна интеграция с другими корпоративными системами — лучше использовать профессиональные ATS-системы. Но для стартапа, малого бизнеса или пилотного проекта — автоматизация найма без кода сэкономит кучу времени и нервов.</p><h2>Построение внутренних сервисов и админок</h2><p>У каждой команды рано или поздно появляется потребность во внутреннем инструменте: кто-то вручную выгружает данные, кто-то не может отредактировать информацию в базе, кто-то каждый день пересылает одни и те же файлы. Вместо того чтобы писать с нуля внутреннюю систему, можно быстро собрать рабочую админку без строчки кода.</p><p>Эти задачи можно решить с помощью:</p><ul><li>Jet Admin — готовая админ-панель, которую можно подключить к базе данных, API, Google Sheets.</li><li>Baserow — визуальное создание таблиц и представлений, удобно для работы с внутренними данными. Также подойдут UI Bakery, ToolJet.</li></ul><p>Почему это работает?</p><ul><li>Простой CRUD-интерфейс можно собрать за вечер.</li><li>Доступ к данным в реальном времени. Изменения сразу сохраняются в базе.</li><li>Гибкость. В любой момент можно настроить права доступа, добавить проверки или переключиться на API.</li></ul><p>Когда не стоит использовать: Если админка должна обрабатывать десятки тысяч запросов в секунду или выполнять сложную бизнес-логику — без разработчиков не обойтись. Но для большинства внутренних задач — no-code решает отлично и экономит недели работы.</p><p>Кстати! Забрать все самые топовые нейронки для айтишников можно в нашем <a href="https://tprg.ru/LN8a">большом гайде с 70+ ИИ-инструментами </a></p>]]></content:encoded>
    </item>
    <item>
      <title>От идеи к успеху: как создать популярное мобильное приложение</title>
      <link>https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie</link>
      <comments>https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анна Ельцова]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie</guid>
      <description><![CDATA[<p>Кирилл Васильев, руководитель кластера кросс-функциональных команд в RuStore, рассказывает, как создать популярное приложение.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/ot-idei-k-uspehu--kak-sozdat-populyarnoe-mobilnoe-prilozhenie">От идеи к успеху: как создать популярное мобильное приложение</a>»</p>]]></description>
      <category><![CDATA[Интернет]]></category>
      <category><![CDATA[Java]]></category>
      <category><![CDATA[Тестирование]]></category>
      <category><![CDATA[Операционные системы]]></category>
      <category><![CDATA[Оптимизация]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[Git]]></category>
      <category><![CDATA[Apple]]></category>
      <category><![CDATA[Google]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[Социальные сети]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Swift]]></category>
      <category><![CDATA[GitHub]]></category>
      <category><![CDATA[Сервисы]]></category>
      <category><![CDATA[Kotlin]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Маркетинг]]></category>
      <category><![CDATA[Аналитика]]></category>
      <category><![CDATA[App Store]]></category>
      <category><![CDATA[Игра]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Google Analytics]]></category>
      <category><![CDATA[Xcode]]></category>
      <category><![CDATA[Дизайн]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Figma]]></category>
      <category><![CDATA[Бизнес]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Firebase]]></category>
      <category><![CDATA[CI/CD]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 18 Apr 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Создание и продвижение мобильного приложения — это путь, который требует грамотного подхода на каждом этапе. Как разработать идею, выбрать функционал и сделать продукт удобным? Какие инструменты продвижения эффективны в цифровом мире? В этой статье Кирилл Васильев, руководитель кластера кросс-функциональных команд в RuStore, разобрал весь процесс: от идеи до привлечения тысяч пользователей.</p><h2>Определяем цель</h2><p>Успех приложения начинается с четкого понимания, зачем оно нужно — так становится проще определить целевую аудиторию. Это влияет не только на функционал, но и на дизайн, способы продвижения и даже тон общения с пользователями.</p><p>Некоторые программы помогают развивать существующий бизнес — как это делают банковские сервисы, которые упрощают работу с клиентами. Другие становятся самостоятельными продуктами, например, для обучения, занятий спортом или развлечений.</p><p>Кроме того, приложение должно решать реальные проблемы пользователей. Допустим, вы задумали создать программу для фрилансеров. Решили провести исследование, и оно показало, что фрилансеры часто страдают от прокрастинации и ненавидят заниматься выставлением счетов клиентам. Ваша идея и главная фишка — приложение, которое автоматизирует процесс оплаты, контролирует сроки выполнения проектов и помогает планировать рабочее время.</p><p>Чтобы убедиться, что идея действительно рабочая, проведите опросы в Telegram-каналах фрилансеров или создайте анкету. Вы можете спросить, какие функции для них наиболее актуальны: автоматический расчет налогов, интеграция с платежными системами или отслеживание времени работы. Это поможет сфокусироваться на действительно важных фичах и отсеять второстепенные.</p><h2>Выбираем платформу и инструменты</h2><p>Сегодня на российском рынке <a href="https://lenta.ru/articles/2025/03/12/luchshie-smartfony-na-android/">доминируют</a> две мобильные операционные системы: Android (около 70% пользователей) и iOS (около 30%). Оптимальным решением будет разработка приложения для обеих платформ, особенно если вы ориентируетесь на крупные города, где доля пользователей iOS существенно выше.</p><p>Приложения под Android большинство разработчиков пишет на Kotlin, хотя Java до сих пор остается одним из вариантов из-за обширной базы готовых решений и библиотек. Основной средой выступает Android Studio — в ней есть весь необходимый инструментарий для создания, отладки и тестирования приложений. Современные разработчики активно используют Jetpack Compose для построения пользовательского интерфейса, Room для работы с базами данных, Retrofit для сетевых запросов и Dagger или Hilt для внедрения зависимостей.</p><p>В мире iOS основным языком программирования стал Swift — современный и безопасный инструмент для нативных приложений. Разработка ведется в среде Xcode, официальной IDE от Apple. Для построения интерфейсов все чаще используется SwiftUI, для управления данными — Core Data, а для сетевого взаимодействия — фреймворк Alamofire. Работа с асинхронными событиями упрощается с помощью фреймворка Combine.</p><p>При ограниченных ресурсах можно рассмотреть кросс-платформенную разработку. Так, Flutter использует язык программирования Dart и позволяет создавать производительные приложения с нативным внешним видом. React Native дает возможность применять веб-технологии для мобильной разработки, а Xamarin ориентирован на разработчиков, привыкших к экосистеме Microsoft и языку C#.</p><p>Выбор платформы и инструментов должен основываться на характеристиках вашей ЦА, требованиях к функционалу и имеющихся ресурсах. Учитывайте также, что для разных магазинов приложений (RuStore, App Store, Google Play) могут потребоваться специфические оптимизации и настройки.</p><h2>Продумываем функционал</h2><p>При разработке функционала важно следовать концепции MVP (Minimum Viable Product) — минимально жизнеспособного продукта. Это позволит быстрее выйти на рынок, получить обратную связь и итеративно улучшить приложение.</p><p>Возьмем для примера приложение доставки еды. В этом случае MVP должен включать:</p><ul><li>авторизацию пользователя через телефон, email или социальные сети;</li><li>каталог ресторанов с фильтрацией по кухне, рейтингу и времени доставки; меню каждого заведения с фотографиями и описанием блюд;</li><li>корзину с возможностью изменения состава заказа;</li><li>оформление заказа с выбором адреса доставки и способа оплаты;</li><li>отслеживание статуса заказа в реальном времени;</li><li>профиль пользователя с историей заказов.</li></ul><p>Важно уделить внимание и техническим аспектам функционала:</p><ul><li>Локальное кэширование данных. Поддерживает работу приложения при слабом интернет-соединении или его отсутствии. Сохраняет каталоги, популярные позиции и историю действий пользователя.</li><li>Офлайн-режим. Определяет набор функций, доступных без подключения к сети. Критически важен для удержания пользователей в зонах с плохим интернетом.</li><li>Система пуш-уведомлений. Информирует пользователей о важных событиях, статусах заказов и специальных предложениях. Повышает вовлеченность и возвращаемость в приложение.</li><li>Многопоточная обработка. Выполняет ресурсоемкие операции в фоновом режиме. Гарантирует отзывчивость интерфейса даже при выполнении сложных задач.</li><li>Оптимизация изображений. Внедряет алгоритмы сжатия для быстрой загрузки визуального контента. Обеспечивает комфортное использование даже при ограниченной скорости соединения.</li></ul><p>При этом разработчики часто допускают ошибки, и одна из самых распространенных — функциональная перегруженность. Не стоит добавлять AR-анимации, игровые механики и другие «модные» функции, если они не решают реальных проблем клиентов.</p><p>Также многие игнорируют обратную связь пользователей, хотя механизмы ее сбора стоит включать уже в MVP. Недостаточное внимание к безопасности может стать критичным для приложений с личными данными и платежами. А отсутствие встроенных инструментов аналитики затрудняет понимание того, как пользователи взаимодействуют с программой.</p><p>Выбор правильной архитектуры — это фундамент, который определяет надежность, масштабируемость и удобство поддержки. Вот основные паттерны для мобильных приложений:</p><ul><li>MVVM — рекомендуемый Google подход с разделением UI и бизнес-логики</li><li>MVI — однонаправленный поток данных, хорошо сочетается с реактивным программированием</li><li>MVP — классическая архитектура. Популярна благодаря простоте реализации</li><li>Clean Architecture — многослойный подход с упором на тестируемость и гибкость</li><li>VIPER (iOS) — расширенный MVC со строгим разделением ответственности</li></ul><p>Важное значение имеет также выбор технологий для хранения и передачи данных. Для локальной работы подойдут SQLite + Room, Realm или DataStore; для сетевого взаимодействия на Android чаще всего используют Retrofit + OkHttp, а в реактивных сценариях — Ktor Client.</p><p>Правильный выбор архитектуры напрямую зависит от масштаба проекта и размера команды. Небольшие приложения могут обойтись простыми решениями, тогда как сложные продукты требуют комплексного подхода с продуманным разделением ответственности.</p><h2>Создаем удобный интерфейс</h2><p>Интерфейс — это лицо приложения. Даже если у вас отличный функционал, но пользоваться им неудобно, людям будет проще удалить программу и найти что-то другое.</p><p>Эффективный UI/UX строится на пяти ключевых принципах:</p><ol><li>Очевидность (интуитивное понимание интерфейса);</li><li>Экономия внимания (минимум шагов для достижения цели);</li><li>Консистентность (единообразие элементов с одинаковой функциональностью);</li><li>Обратная связь (видимый результат каждого действия);</li><li>Прощение ошибок (возможность отмены операций).</li></ol><p>Современные инструменты значительно ускоряют создание качественных интерфейсов. Дизайнеры используют Figma, Adobe XD и Sketch для прототипирования. Android-разработчики предпочитают Jetpack Compose и Material Design Components. Для iOS актуальны SwiftUI, UIKit и Human Interface Guidelines от Apple.</p><p>Наглядный пример различий между хорошим и плохим интерфейсом — приложения для доставки еды. В удачном решении ключевые элементы находятся в зоне комфортного доступа, процесс заказа разбит на логические шаги с индикацией прогресса, а дизайн адаптируется к условиям использования. В неудачном — мелкие тесно расположенные кнопки, длинные формы без разбивки на шаги и непонятная навигация.</p><h2>Проводим тестирование</h2><p>Юзабилити-тесты с фокус-группами, A/B-тестирование элементов и аналитика пользовательского поведения дают объективную картину взаимодействия клиентов с приложением.</p><p>Комплексное тестирование включает два основных направления:</p><ol><li>Автоматизированное тестирование: unit-тесты (JUnit, XCTest) для проверки отдельных компонентов; интеграционные тесты для проверки взаимодействия между модулями; UI-тесты (Espresso, XCUITest) для проверки интерфейса; end-to-end тесты для имитации полного пользовательского сценария.</li><li>Ручное тестирование: функциональное (соответствие требованиям), тестирование производительности (работа под нагрузкой), юзабилити (оценка удобства), кросс-платформенное тестирование (проверка на разных устройствах) и тестирование подключений (поведение при различном качестве интернет-соединения).</li></ol><p>Для этого используют специализированные инструменты: Firebase Test Lab для запуска тестов на множестве устройств, Crashlytics для мониторинга сбоев, Android Profiler и Xcode Instruments для анализа производительности. А Accessibility Scanner помогает адаптировать интерфейс для людей с ограниченными возможностями, расширяя потенциальную аудиторию.</p><h2>Публикуем приложение</h2><p>После тестирования и исправления проблем наступает ответственный момент публикации. Каждый магазин приложений имеет свои особенности процесса:</p><ul><li>Google Play: создание аккаунта разработчика ($25 единоразово); подготовка материалов (иконка, скриншоты, видео, описание); загрузка APK/App Bundle; заполнение формы оценки контента; настройка дистрибуции и ценообразования; ожидание проверки (до 2 дней).</li><li>App Store: регистрация в Apple Developer Program ($99/год); создание записи в App Store Connect; подготовка маркетинговых материалов; загрузка сборки из Xcode; заполнение информации о возрастных ограничениях; ожидание рассмотрения (1-7 дней).</li><li>RuStore: бесплатное создание аккаунта; подготовка материалов; загрузка APK; заполнение метаданных; быстрая модерация (до часа).</li></ul><p>Перед публикацией важно убедиться в соответствии приложения правилам магазина, подготовить политику конфиденциальности и настроить аналитику для мониторинга производительности с первого дня.</p><h2>Поддерживаем и обновляем</h2><p>После выпуска начинается непрерывный процесс поддержки и совершенствования продукта. Разработчики регулярно исправляют найденные ошибки, добавляют новые функции и улучшают работу уже существующих.</p><p>Для эффективного мониторинга используют комплексные аналитические инструменты: Firebase Crashlytics для отслеживания сбоев, Firebase Analytics/Google Analytics для анализа пользовательского поведения, RuStore Remote Config — бесплатный аналог  Firebase, Mixpanel для углубленного анализа пользовательских путей, AppMetrica от Яндекса как комплексное решение для российского рынка.</p><p>Автоматизация процессов разработки критически важна для регулярных релизов. CI/CD-системы (GitHub Actions, GitLab CI, Bitrise, Fastlane) позволяют автоматизировать сборку, тестирование и публикацию обновлений, значительно сокращая время выхода новых версий.</p><p>Оптимальная стратегия обновлений включает регулярный график релизов (каждые 2-4 недели) с четким приоритетом задач: критические исправления, новые функции, оптимизация производительности. В тренде современной разработки: персонализация на основе ИИ, многофункциональные суперапп-решения, адаптация под новые форм-факторы устройств и повышенное внимание к приватности данных.</p><h2>Продвигаем приложение</h2><p>На рынке огромная конкуренция, и без активного продвижения ваш продукт просто затеряется среди тысяч других программ. Важную роль здесь играет ASO (App Store Optimization) — оптимизация для магазина приложений. В некоторых случаях был <a href="https://www.businessofapps.com/marketplace/app-store-optimization/research/app-store-optimization-strategies/">зафиксирован</a> рост установок до 70% благодаря сильным ASO-стратегиям.</p><p>Для Android-приложений это означает настройку страницы так, чтобы пользователи легко находили ваш продукт. Здесь важно правильно подобрать ключевые слова для описания, создать привлекательную иконку и подготовить качественные скриншоты. Чтобы понять, какое оформление работает лучше, разработчики всё чаще используют A/B-тесты — такая возможность есть, например, в RuStore. Она позволяет сравнить разные версии карточки приложения и выбрать ту, которая эффективнее привлекает пользователей.</p><p>Также разработчики могут использовать как бесплатные, так и платные форматы продвижения. Один из бесплатных форматов — фичеринг, когда редакция размещает приложение в подборках, разделах или на главной странице магазина. Платное же продвижение позволяет настраивать таргетинг по демографии, географии, интересам, ключевым фразам и устройствам, а также запускать кампании прямо в поисковой выдаче магазина.</p><p>Еще один инструмент для продвижения приложений — социальные сети. Здесь можно показывать функционал программы, общаться с пользователями, отвечать на их вопросы и рассказывать о новых опциях. Это помогает создать активное сообщество вокруг продукта. Так, к примеру, В 2023 году компания Geozilla, разработчик приложения для отслеживания местоположения близких, провела кампанию по продвижению с инфлюенсерами в социальных сетях. В рамках сотрудничества удалось собрать более 1 миллиона просмотров, а коэффициент конверсии из кликов в установки приложения составил 24%.</p><p>Партнерские программы и рекламные кампании тоже сильно влияют на привлечение новых пользователей. Нельзя забывать и о работе с отзывами — нужно активно отвечать на комментарии и решать проблемы, о которых пишут люди.</p><p>Собственный сайт или блог разработчика тоже может привлечь внимание к приложению, особенно если у вас уже есть известный бренд.</p><h2>Подводим итоги</h2><p>Создание успешного приложения начинается с четкого определения цели и понимания потребностей пользователей. Затем нужно выбрать подходящие технологии, продумать необходимые функции, спланировать архитектуру и разработать понятный интерфейс. Обязательно проведите тщательное тестирование перед запуском. После публикации важно регулярно обновлять приложение на основе отзывов пользователей и данных аналитики, а также активно продвигать его в магазинах приложений и социальных сетях.</p><p>Не гонитесь за модными технологиями ради технологий — сосредоточьтесь на том, что действительно нужно вашим пользователям. Если вы создадите действительно полезный и удобный продукт, он найдет свою аудиторию и станет успешным.</p><p>iOS или Android? React Native или Flutter? Собираем все новости и гайды по мобильной разработке <a href="https://t.me/+Fb6_4ek5P6gzOTcy">тут</a>.</p>]]></content:encoded>
    </item>
    <item>
      <title>Первые шаги в мобильной разработке с Flutter</title>
      <link>https://tproger.ru/articles/pervye-wagi-v-mobilnoj-razrabotke-s-flutter</link>
      <comments>https://tproger.ru/articles/pervye-wagi-v-mobilnoj-razrabotke-s-flutter?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Вадим Егорцев]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pervye-wagi-v-mobilnoj-razrabotke-s-flutter</guid>
      <description><![CDATA[<p>Мобильная разработка с нуля. Показываем, как новичку освоить Flutter. Рассматриваем пошаговую инструкцию ✔ Tproger</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pervye-wagi-v-mobilnoj-razrabotke-s-flutter">Первые шаги в мобильной разработке с Flutter</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Инструменты]]></category>
      <category><![CDATA[IDE]]></category>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[Советы]]></category>
      <category><![CDATA[Приложение]]></category>
      <category><![CDATA[Разработка]]></category>
      <category><![CDATA[Сервер]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 11 Feb 2025 10:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>На фреймворке Flutter создают кроссплатформенные приложения. Флаттер-разработчик полностью обслуживает экосистему Android и IOS, поэтому Dart-фреймворк экономит бюджет проекта, сокращает срок разработки.</p><p>По данным опроса Statista, 46% разработчиков выбирают Flutter, когда нужно создать кроссплатформенное приложение.</p><p>Flutter компилируется в нативный код. Приложение на языке Dart можно адаптировать под Windows, Linux, macOS, Web — плагины и библиотеки решают 99% задач. Только в отдельных случаях понадобится доработка нативного кода.</p><p>При этом нет проблем с производительностью — движок Флаттера написан на C++.</p><h2>Как установить и настроить окружение</h2><p>Ссылка на загрузку Flutter с официального сайта:</p><ul><li><a href="https://docs.flutter.dev/get-started/install/windows/desktop?tab=download">https://docs.flutter.dev/get-started/install/windows/desktop?tab=download</a></li></ul><p>Фреймворк загрузится в виде архива, его нужно распаковать на диск. Например, в папку C:\flutter.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/11a67d5e-29f5-418d-90fd-44bf4893ca33.jpg" alt="" /><figcaption>Ссылка на загрузку Flutter SDK</figcaption></figure><p>При установке необходимо добавить путь к директории в переменную среды PATH. IDE полагаются на переменную PATH для обнаружения и интеграции с Flutter SDK.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/8ac44b68-de74-4b23-b490-e8b202190f08.jpg" alt="" /><figcaption>Изменение переменных среды</figcaption></figure><p>Задача — открыть настройки переменных среды, изменить «Path», добавить путь до папки bin.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/3e5377b9-0004-48f5-9bb4-815dd950d5f0.jpg" alt="" /><figcaption>Добавление пути до папки bin в начало списка</figcaption></figure><p>Теперь команды flutter, flutter doctor, flutter run будут запускаться из любой директории в командной строке.</p><h3>Настройка окружения</h3><p>Flutter-разработчики обычно работают в Android Studio, но писать код можно и в других IDE. Рассмотрим процесс установки окружения на примере ОС Windows:</p><p>1. Загружаем установщик Android Studio с <a href="https://developer.android.com/studio">официального сайта</a> (1.1 Гб).</p><p>2. Выполняем установку компонентов IDE.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/f5f9fc7f-50f5-4806-a573-6f91ef5473f0.jpg" alt="" /><figcaption>Android Studio после распаковки занимает не менее 3.7 Гб</figcaption></figure><p>3. После распаковки Android Studio предложит загрузить и установить набор для разработки. Среди инструментов — эмулятор ОС Андроид.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/63c1bfd8-79db-40f2-b4b9-f0d2daaee0c1.jpg" alt="" /><figcaption>Набор инструментов, который поможет в разработке приложений</figcaption></figure><p>4. После установки нужно добавить плагин Flutter в IDE (еще понадобится Dart, но он подгрузится автоматически).</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/00e020e7-2427-42bb-86ba-652053ee008f.jpg" alt="" /><figcaption>Плагин Flutter</figcaption></figure><p>5. Далее выбираем SDK-платформу для разработки, устанавливаем дополнительные компоненты.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/2e8de42d-fcf9-4e5d-94e2-8b4a5f0fad09.jpg" alt="" /><figcaption>Выбор версии SDK</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/8e2d37ae-d789-43ae-809b-ad1ff9482b9c.jpg" alt="" /><figcaption>Дополнительно загружаем Android SDK Command-line Tools</figcaption></figure><p>6. Выбираем модель виртуального устройства во вкладке Device Manager.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/4c4480b1-6f43-4e89-911d-591677f81e84.jpg" alt="" /><figcaption>Параметры «железа» тонко настраиваются</figcaption></figure><p><b>На этом базовая настройка окружения завершена</b>.</p><p>Если планируете писать код на Flutter в Visual Studio Code, обратите внимание на следующее <a href="https://youtu.be/igbk56-XuGg">видео</a>. Автор подробно рассказывает о том, как связать эмулятор и IDE VS Code. Нужно будет добавить новые пути для переменных среды в настройках системы.</p><h2>Как создать первое приложение на Flutter</h2><p>Создать новый проект можно через Android Studio. Сразу после запуска IDE нужно выбрать «New Project».</p><p>Рассмотрим менее очевидный путь — через Flutter CLI (Command Line Interface):</p><ol><li>Откройте командную строку или терминал VS Code;</li><li>Перейдите в папку, где хотите создать проект;</li><li>Выполните команду:</li></ol><p>где «my_new_project» — имя проекта.</p><p>Flutter автоматически создаст необходимые файлы и папки для базового приложения.</p><h3>Структура проекта</h3><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/9c2d81b2-ff73-4850-becf-261038de392f.jpg" alt="" /><figcaption>Папки проекта Флаттер</figcaption></figure><p>Рассмотрим основные директории и файлы созданного проекта:</p><ul><li>.dart_tool используется пакетным менеджером Dart.</li><li>.idea хранит специфичные настройки проекта в виде xml-файлов.</li><li>android и ios содержат нативные файлы платформ. Используются, когда нужно реализовать специфичную фичу для android или ios.</li><li>lib содержит исходный код приложения на Flutter. Это рабочая директория. Main.dart — точка входа в приложение.</li><li>test хранит тесты, проверяющие правильность работы приложения.</li><li>.gitignore содержит список файлов, которые игнорируются при работе с git.</li><li>.packages содержит список всех включенных пакетов Dart.</li><li>pubspec.yaml хранит зависимости проекта, плагины.</li></ul><h3>Запуск приложения</h3><p>Приложение запустится на эмуляторе, который мы ранее установили вместе с Android Studio.</p><p>Перейдите в терминал, откройте папку с проектом и выполните команду:</p><p>Flutter скомпилирует код и запустит мобильное приложение. Через несколько секунд на экране эмулятора появится интерфейс смартфона с запущенным счетчиком кликов.</p><p><b>Поздравляем с первым запуском Flutter-приложения!</b></p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/44885a4f-f042-4511-ac2f-d02fbd9f98f2.jpg" alt="" /><figcaption>Счетчик кликов в эмуляторе Android Studio</figcaption></figure><p>Пользовательский интерфейс в Flutter строится с помощью <b>виджетов </b>— классов, которые описывают, как должен выглядеть UI. Код приложения генерирует счетчик в файле main.dart. Внутри содержится <b>MaterialApp</b> — корневой виджет, который настраивает тему и домашний маршрут приложения.</p><p>Свойство <b>home</b> указывает на виджет <b>MyHomePage</b> — главный экран приложения. Внутри <b>MyHomePage</b> есть базовая разметка: AppBar с заголовком и центрированный текст со счетчиком нажатий.</p><p>Виджеты содержат <b>методы build</b>. Flutter вызывает их при первом построении интерфейса и при каждом обновлении состояния. Они возвращают другие виджеты, которые образуют <b>дерево виджетов</b>. Структура вложенных UI-компонентов и определяет внешний вид приложения.</p><p>Запущенное демо-приложение уже реагирует на нажатия кнопки и обновляет счетчик. Это работает благодаря Stateful виджету и изменению его состояния в методе setState.</p><p>Подробнее о видах виджетов и управлении состоянием — в следующем разделе.</p><h2>Основные концепции Flutter</h2><p>Особенность фреймворка в виджетах — это строительные блоки, из которых состоит все приложение. Разработчику нужно лишь скомбинировать виджеты и настроить свойства, чтобы получить желаемый интерфейс.</p><p>В Flutter есть готовые виджеты. Условно их можно разделить на две категории: статичные и интерактивные.</p><p><b>Статичные виджеты</b> просто отображают какой-то контент и никак не реагируют на действия пользователя. Примеры статичных виджетов — Text для отображения текста, Image для картинок, Icon для иконок.</p><p><b>Интерактивные виджеты</b> реагируют на события, например, на нажатия пользователя. Они делают приложение живым и динамичным. Часто используются кнопки, поля ввода, чек-боксы, переключатели. Даже простое приложение не обходится без интерактивных элементов.</p><h3>Stateless и Stateful виджеты</h3><p><b>Stateless виджеты</b> выглядят одинаково, не имеют внутреннего состояния. Их свойства задаются при создании приложения и не могут быть изменены в дальнейшем. Они используются для отображения статичных данных или создания переиспользуемых компонентов интерфейса.</p><p>Единственный способ изменить Stateless виджет — создать новый экземпляр.</p><p><b>Stateful виджеты</b> имеют внутреннее состояние, которое может меняться со временем. Когда состояние объекта меняется, Flutter автоматически перерисовывает виджет, чтобы отобразить актуальные данные.</p><p>Типичный пример Stateful виджета — счетчик кликов, который запускали в предыдущем разделе. При каждом нажатии на кнопку счетчик увеличивается, состояние виджета меняется, и Flutter обновляет интерфейс.</p><p><b>StatelessWidget</b> предлагает только один публичный API для запуска сборки — конструктор. StatefulWidget имеет множество триггеров, вызывающих пересборку.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/b997997a-b0b4-4018-bc30-36cd8f481901.jpg" alt="" /><figcaption>didUpdateWidget() вызывается всякий раз, когда конфигурация виджета меняется. Например, это может происходить при повороте экрана.</figcaption></figure><h3>Структура виджетов</h3><p>Подробнее рассмотрим <b>дерево виджетов</b> — иерархическую структуру вложенных компонентов. Для этого в качестве примера будем использовать код простого «Hello, World!» приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/808af83d-d47d-4cae-9689-b667a2cdd3a6.jpg" alt="" /><figcaption>Код простого приложения и его вид на устройстве пользователя</figcaption></figure><p>На вершине дерева корневой виджет MyApp. Остальные — его потомки. Когда Flutter рисует интерфейс, он обходит дерево виджетов сверху вниз и отображает каждый в соответствии с его свойствами и состоянием (декларативный подход).</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/f5c8ed77-9db4-4f1e-a5ac-db6bee1e2f5e.jpg" alt="" /><figcaption>Дерево виджетов для примера «Hello, World!»</figcaption></figure><p>В отличие от императивного подхода, где разработчик пошагово описывает, как строить и обновлять интерфейс, в Flutter нужно описывать только конечный результат.</p><p>Мы как бы говорим Flutter: «Хочу, чтобы мой интерфейс выглядел вот так», и фреймворк самостоятельно определяет, как ему достичь результата максимально эффективным способом.</p><p>Преимущества декларативного подхода:</p><ul><li>Код становится более читаемым и понятным. Глядя на дерево виджетов, можно сразу представить, как будет выглядеть интерфейс.</li><li>Нет проблем, связанных с ручным обновлением интерфейса. Flutter сам заботится о перерисовке виджетов и делает это эффективно.</li></ul><p>У декларативного подхода есть нюансы, к которым нужно привыкнуть. Поначалу сложно перестроить мышление и начать думать в терминах виджетов и состояний, особенно если до этого работали с императивными фреймворками.</p><p>В следующем разделе научимся комбинировать виджеты в пользовательские интерфейсы, добавлять навигацию между экранами, использовать сторонние пакеты для расширения возможностей мобильного приложения.</p><h2>Как добавить функционал в приложение</h2><p>Самый важный виджет для компоновки UI — контейнеры и лейауты.</p><p><b>Контейнеры </b>позволяют группировать и оформлять другие виджеты, задавать им отступы, цвета, границы.</p><p><b>Лейауты </b>отвечают за расположение виджетов на экране. С помощью них можно создавать адаптивные интерфейсы, которые подстраиваются под размер экрана устройства.</p><p>Чтобы приложение было интерактивным, нужно обрабатывать события и действия пользователя. В Flutter для этого используются <b>колбэки </b>— функции, которые вызываются при определенных событиях. Например, у кнопки есть колбэк onPressed, который срабатывает при нажатии на кнопку.</p><p>Внутри колбэков можно писать код на Dart, который будет работать при наступлении события. Например, при нажатии на кнопку «Добавить» — сохранить введенный текст или отфильтровать список по введенному запросу.</p><p>Редко приложения состоят из одного-единственного экрана. Обычно есть несколько связанных экранов, между которыми пользователь может переключаться. В Flutter за навигацию отвечает виджет Navigator и класс Route. Чтобы добавить, например, экран настроек, нужно создать для него отдельный виджет и класс. Затем, по нажатию на кнопки, вызвать метод Navigator.push и передать ему новый маршрут.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/b670dac5-bc96-4938-995f-a32db947e06a.jpg" alt="" /><figcaption>При нажатии на кнопку вызывается метод Navigator.push()</figcaption></figure><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/a434744f-4f57-4b67-ad9c-9ee26c442bed.jpg" alt="" /><figcaption>Для возврата назад используется метод Navigator.pop()</figcaption></figure><h3>Плагины в Flutter</h3><p>Дополнения от сообщества разработчиков расширяют возможности приложения: интеграция с камерой, геолокация, работа с базой данных, сетевыми запросами и др.</p><p>Плагины находятся на <a href="https://pub.dev/">pub.dev</a> — официальном репозитории Dart и Flutter. Чтобы подключить плагин к проекту, нужно добавить его в файл pubspec.yaml и выполнить команду «flutter pub get».</p><p>Плагины ускоряют разработку, но злоупотреблять ими не стоит — каждый импорт увеличивает размер приложения на Flutter, усложняет отладку.</p><p>Плагины имеют документацию и примеры использования, которые можно найти на странице pub.dev или в репозитории на GitHub.</p><figure><img src="https://media.tproger.ru/user-uploads/105601/2025-02-03/38e0b955-a003-4c7b-ad34-cbbc196fd613.jpg" alt="" /><figcaption>Страница плагина, который добавляет среду выполнения векторной графики. Есть пример использования, подробная инструкция по установке и импорту в проект</figcaption></figure><h2>Советы для начинающих</h2><p>Обучение на джуна только начинается, и одной статьи для старта недостаточно.</p><p>Начнем с главного вопроса: <b>как лучше всего изучать Flutter</b>?</p><p>Идеального решения нет — каждый выбирает путь в зависимости от предпочтений и опыта. Зато есть проверенные источники, которые помогут быстро освоиться в Flutter-разработке.</p><p>Самое важное — <a href="https://flutter.dev/docs">официальная документация Flutter</a>. В ней более подробно описаны концепции, виджеты, пакеты и инструменты. Документация обновляется и дополняется, в ней только актуальная информация.</p><p>Начать советуем с раздела документации <a href="https://flutter.dev/docs/codelabs">Codelabs</a>. Это пошаговые интерактивные уроки, которые научат создавать приложения шаг за шагом. Каждый Codelab посвящен определенной теме, содержит инструкции, видеоуроки и готовый код.</p><p>Обучение Flutter — не только чтение документации и просмотр уроков. Не менее важно общение с другими разработчиками и участие в жизни Flutter-комьюнити.</p><p>Сообщество Flutter сосредоточено в <a href="https://discord.com/invite/rflutterdev">Discord</a>. Здесь тысячи разработчиков готовы помочь с решением проблем, обсудить новости и поделиться опытом. На сервере есть отдельные каналы для новичков, обсуждения плагинов, поиска работы.</p><h3>Популярные ошибки новичков при изучении Flutter</h3><p>Изучая Flutter, начинающие разработчики повторяют одни и те же ошибки. Несколько советов, которые ускорят обучение:</p><ul><li>Невозможно выучить все и сразу. Flutter — обширный фреймворк. Сосредоточьтесь на  виджетах, статическом и динамическом UI, навигации. Изучайте новые темы и инструменты по мере необходимости.</li><li>Пишите больше кода. Как бы хорошо вы ни знали теорию, настоящее обучение происходит во время практики.</li><li>Уделите внимание основам Dart. Flutter написан на языке Dart, поэтому для разработки нужно понимать его синтаксис, типы данных, ООП.</li><li>Начинающие разработчики злоупотребляют комментариями, пытаясь объяснить каждую строчку кода. Однако хороший код должен быть понятным без пояснений.</li><li>Ошибки — неотъемлемая часть обучения. Не бывает разработчиков, которые никогда не допускали ошибок. Признавайте, анализируйте, исправляйте недочеты.</li><li>Чтобы побороть лень, пробуйте начинать с малого. Возьмите простую, но конкретную задачу, которую точно сможете быстро решить. Как только справитесь с ней, почувствуете прилив энергии и мотивации.</li><li>С самого начала уделяйте внимание архитектуре. Используйте StatefulWidget и StatelessWidget по назначению. Вынесите бизнес-логику и данные в отдельные классы и сервисы.</li><li>Помните о null-безопасности. Используйте «?» для значений, которые могут быть null. Проверяйте наличие объекта с помощью «if» или «?.»  перед вызовом его свойств и методов. Если нужно задать значение по умолчанию для null, пользуйтесь оператором «??».</li></ul><p>Чтобы уверенно чувствовать себя во Flutter, нужно минимум полгода. Удачи в начинаниях и приятной разработки!</p><p>Если вы только начали работать с мобильной разработкой или уже мидл/сеньор, собрали всю полезную информацию <a href="https://t.me/+y4TvdnlepShjOTEy">тут.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>ТОП-30 курсов по Flutter: бесплатное и платное онлайн-обучение фреймворку с нуля</title>
      <link>https://tproger.ru/articles/kursy-flutter</link>
      <comments>https://tproger.ru/articles/kursy-flutter?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Анастасия Шишкина]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/kursy-flutter</guid>
      <description><![CDATA[<p>Лучшие онлайн-курсы по Flutter. Список школ, осуществляющих обучение на бесплатной или платной основе, а так же цены на курсы для Flutter-разработчиков</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/kursy-flutter">ТОП-30 курсов по Flutter: бесплатное и платное онлайн-обучение фреймворку с нуля</a>»</p>]]></description>
      <category><![CDATA[Для начинающих]]></category>
      <category><![CDATA[Обучающие курсы]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 04 Nov 2024 06:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>Освоить востребованный инструмент кроссплатформенной разработки помогут курсы Flutter. С помощью этого фреймворка созданы сервис рекламы Google Ads и мобильное приложение известной торговой онлайн-платформы Alibaba. Спрос на Flutter-разработчиков также набирает популярность. Зарплата начинающего специалиста составляет около 60 000 рублей в месяц, а профессионалы могут рассчитывать на сумму от 150 000 рублей и выше.</p><p><i>Совместно с экспертами агрегатора онлайн-курсов <a href="https://kursfinder.ru/">Kursfinder</a> я рассмотрела более 50 предложений от лидеров IT-обучения и выбрала 30 лучших образовательных программы, включая бесплатные варианты. Полный список актуальных <a href="https://kursfinder.ru/search/?q=flutter">курсов по Flutter</a> представлен в нашем каталоге. </i></p><h2>ТОП-10 лучших курсов Flutter в 2026 году</h2><ol><li><a href="https://experts2.ru/UflxnC?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=1">Flutter</a> от Skillbox — лучший курс с проектами для наполнения портфолио.</li><li><a href="https://experts2.ru/okQUxl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=2">Мобильный разработчик на Flutter</a> от OTUS — лучшее обучение на живых вебинарах.</li><li><a href="https://experts2.ru/RneJyl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=3">Продвинутый курс по мобильным приложениям на Flutter Flow</a> от ZeroCoder — лучшая программа для быстрого старта в профессии.</li><li><a href="https://experts2.ru/NjkxdT?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=4">Flutter в мобильной разработке</a> от Skill Branch — эффективные занятия с акцентом на практику.</li><li><a href="https://experts2.ru/pVbDem?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=5">Изучаем Flutter</a> от Stepik.org — уроки для начинающих по доступной цене.</li><li><a href="https://experts2.ru/ZcOayj?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=6">Мобильный разработчик на Flutter</a> от Teachmeskills — интенсивный курс с помощью в поиске работы.</li><li><a href="https://experts2.ru/vnrJYh?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=7">Кроссплатформенная мобильная разработка на Flutter</a> от МФТИ — программа для быстрого карьерного роста.</li><li><a href="https://experts2.ru/YjnqrJ?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=8">Практический онлайн курс</a> от Flutter-команды Surf — лучшее обучение на кейсах из коммерческой разработки.</li><li><a href="https://experts2.ru/OmcyxS?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=9">Izi-izi FlutterFlow</a> от Appe — лучшие занятия с кураторской поддержкой.</li><li><a href="https://experts2.ru/wrpGuF?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=10">Flutter-разработчик</a> от 1DevFullSchool — лучший курс, построенный на практическом опыте преподавателей.</li></ol><p>Курсы обучения Flutter будут полезны тем, кто планирует заниматься кроссплатформенной разработкой мобильных, Desktop- и Web-приложений. Учебные программы адресованы как начинающим с нуля или знакомых с основами программирования, так и специалистам, имеющим опыт в других IT-направлениях. Выпускники таких курсов обладают всеми необходимыми знаниями и навыками, позволяющими им претендовать на должность Flutter-разработчика.</p><h2>Онлайн-курсы Flutter</h2><p><b>1.</b> <a href="https://experts2.ru/UflxnC?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=1">Flutter</a> <b>|  Skillbox </b></p><p>Обучение на известной образовательной платформе состоит из 22 тематических модулей и адресовано желающим научиться создавать кроссплатформенные приложения. Потребуется всего 3 месяца, чтобы под руководством опытных преподавателей освоить разработку с помощью фреймворка и языка программирования от Google. Вы сможете проектировать привлекательные и функциональные пользовательские интерфейсы, применять язык программирования Dart, на котором пишется код при разработке на изучаемом фреймворке, работать с виджетами и анимацией, профессионально разрабатывать и тестировать приложения для операционных систем iOS и Android. Теоретические знания закрепляются на обязательных практических занятиях и во время выполнения проектной работы.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/9a40ef41-1d9b-4c44-9d7b-ba2dd69d82c0.png" alt="" /></figure><ul><li>Стоимость: 5 140 рублей в месяц в рассрочку на 1 год</li><li>Длительность: 12 недель</li><li>Формат обучения: предзаписанные видеоуроки, практические занятия</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет: </b>нативным разработчикам, программистам других направлений.</p><p><b>Преимущества:</b></p><ul><li>надежный образовательный веб-ресурс;</li><li>бесплатная консультация перед началом занятий;</li><li>обучение можно совмещать с работой;</li><li>занятия в любое в время и в удобном темпе;</li><li>наработка проектов для портфолио;</li><li>комментарии от куратора по выполненным заданиям;</li><li>бесплатное годовое обучение английскому языку;</li><li>возможность бессрочно использовать учебные материалы;</li><li>предоставляется налоговый вычет.</li></ul><p><b>Недостатки:</b></p><ul><li>не предусмотрена помощь с поиском работы.</li></ul><p><b>Программа обучения:</b></p><ul><li>Установка и настройка фреймворка</li><li>Основы Dart 2</li><li>Виджеты, асинхронность, тестирование</li><li>База данных Firebase</li><li>Архитектура проекта, принципы Clean Architecture</li><li>Разработка мультиплатформенных приложений</li><li>Тема, анимация, медиа, карты</li><li>Интеграции, сохранение данных</li><li>Инструменты Flutter-разработчика</li></ul><p><a href="https://experts2.ru/UflxnC?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=1">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>2.</b> <a href="https://experts2.ru/okQUxl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=2">Мобильный разработчик на Flutter</a>  <b>| OTUS   </b></p><p>Курс Flutter-разработчик от одного из лидеров в сфере IT-образования адресован тем, кто уже имеет некоторый опыт в программировании. Студенты познакомятся с языком Dart для работы в связке с фреймворком, научатся создавать анимации, использовать библиотеки и интеграции, освоят все необходимые инструменты для старта карьеры в разработке. Особенность программы заключается в проведении лекций в режиме реального времени, что позволяет студентам общаться с преподавателем напрямую и задавать интересующие вопросы. Обучение включает большое количество практических занятий, а также работу над проектами, которые пополнят портфолио учащихся для предоставления потенциальному работодателю.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/5851c0db-d678-4cc1-9896-bec11bd491c8.png" alt="" /></figure><ul><li>Стоимость: 71 000 рублей одним платежом или в рассрочку от 7 100 рублей в месяц</li><li>Длительность: 20 недель</li><li>Формат обучения: онлайн-вебинары, домашние и проектные работы</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет: </b>желающим научиться писать мультиплатформенные мобильные приложения.</p><p><b>Преимущества:</b></p><ul><li>можно совмещать обучение с работой;</li><li>занятия в режиме реального времени;</li><li>акцент на практику;</li><li>возможность живого общения с преподавателями;</li><li>подготовка проектов для портфолио;</li><li>стажировка для лучших учеников;</li><li>помощь с подготовкой к трудоустройству;</li><li>размещение резюме в базе онлайн-школы.</li></ul><p><b>Недостатки:</b></p><ul><li>необходимо дождаться старта очередного потока;</li><li>есть вступительное тестирование.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы языка программирования Dart</li><li>Использование виджетов</li><li>Особенности разработки для десктопных и веб-приложений</li><li>Асинхронность и потоки</li><li>Сетевое взаимодействие, хранение данных, интеграции</li><li>Анимация, мультимедиа, камеры</li><li>Архитектура приложений</li><li>Навигация, управление состоянием</li><li>Взаимодействие с платформой</li><li>Анализ и оптимизация производительности</li><li>Создание автоматических тестов</li></ul><p><a href="https://experts2.ru/okQUxl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=2">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>3. </b><a href="https://experts2.ru/RneJyl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=3">Продвинутый курс по мобильным приложениям на Flutter Flow</a>   <b>|  ZeroCoder </b></p><p>Два учебных модуля адресованы для обучения созданию мобильных приложений для iOS и Android с помощью no-code конструктора. Всего за 2,5 месяца можно освоить инструмент, позволяющий быстро собирать анимированные красочные приложения любого уровня сложности. Занятия проводят эксперты в области разработки. Учебный процесс построен на обучении от простых функций к продвинутому функционалу. Большая часть программы отведена отработке практических навыков. После каждого урока выполняются домашние задания, а к концу обучения вы создадите собственный проект — работающее приложение, которое пополнит ваше портфолио.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/9979a4fc-8cb1-4a9a-b110-19efdb41178b.png" alt="" /></figure><ul><li>Стоимость: от 54 700 рублей одним платежом или от 4 558 рублей в месяц в рассрочку</li><li>Длительность: 10 недель</li><li>Формат обучения: видеолекции, домашние задания, выпускной проект</li><li>Сертификат: зависит от выбранного варианта обучения</li></ul><p><b>Кому подойдет: </b>бэкенд- и фронтенд-разработчикам, зерокодерам.</p><p><b>Преимущества:</b></p><ul><li>можно совмещать с учебой или работой;</li><li>самостоятельный формат обучения или с поддержкой;</li><li>комфортный темп занятий без дедлайнов;</li><li>проверка знаний после каждого урока;</li><li>разработка приложения в качестве проекта для портфолио;</li><li>неограниченный доступ к программе даже после окончания учебы;</li><li>оперативная помощь экспертов в учебном чате.</li></ul><p><b>Недостатки:</b></p><ul><li>самостоятельный формат обучения без проверки практических работ куратором и без выдачи сертификата об окончании.</li></ul><p><b>Программа обучения:</b></p><ul><li>Базовый функционал FlutterFlow</li><li>Виджеты, верстка, авторизация</li><li>Работа с API</li><li>Продвинутые функции</li><li>Настройка анимации</li><li>Кастомные виджеты и действия</li><li>Проектирование базы данных</li><li>Подготовка и публикация приложения</li></ul><p><a href="https://experts2.ru/RneJyl?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=3">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>4.</b> <a href="https://experts2.ru/NjkxdT?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=4">Flutter в мобильной разработке</a><b>  | Skill Branch   </b></p><p>Пятимесячная программа по созданию мобильных приложений с помощью кроссплатформенного фреймворка. Состоит из 20 модулей и более 120 практических заданий, созданных на основе лучших практик построения кода. Доступ к учебным материалам открывается сразу же после оплаты. Помимо изучения языка программирования Dart и непосредственно фреймворка, участники получат продвинутые навыки по архитектурному построению кода, работе с разрешениями и вспомогательными программами типа Postman, а также пополнят портфолио самостоятельно разработанными приложениями.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/0231ca50-8db4-434a-832a-e2546d1edf7b.png" alt="" /></figure><ul><li>Стоимость: 46 400 рублей одной суммой или 1 933 рублей в месяц в рассрочку на 2 года</li><li>Длительность: 20 недель</li><li>Формат обучения: видеоуроки, презентации, практические задания, автотесты</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет: </b>новичкам и IT-специалистам других направлений.</p><p><b>Преимущества:</b></p><ul><li>рассрочка без процентов;</li><li>обучение в любое удобное время;</li><li>все занятия — в личном кабинете на собственном онлайн-ресурсе;</li><li>упор на развитие практических навыков;</li><li>быстрая автоматическая проверка заданий;</li><li>6 проектов для портфолио;</li><li>регулярные код-ревью от наставников;</li><li>дополнительные материалы для углубленного изучения;</li><li>общение с преподавателем в телеграм-чате;</li><li>доступ в сообщество разработчиков.</li></ul><p><b>Недостатки:</b></p><ul><li>обучение по предзаписанным урокам.</li></ul><p><b>Программа обучения:</b></p><ul><li>Возможности фреймворка</li><li>Знакомство с виджетами</li><li>Базовая навигация</li><li>Работа с API на продвинутом уровне</li><li>Архитектура в приложении</li><li>Внедрение продвинутой навигации</li><li>Кэширование данных и изображений</li><li>Цели и применение чистой архитектуры</li><li>Анимация и диалоги</li></ul><p><a href="https://experts2.ru/NjkxdT?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=4">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>5.</b> <a href="https://experts2.ru/pVbDem?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=5">Изучаем Flutter</a> <b>| Stepik.org</b></p><p>Обучение Flutter на популярной образовательной платформе включает 156 занятий общей продолжительностью около 24 часов. Учебная программа подходит как для начинающих, так и для опытных разработчиков, которые желают расширить свои навыки. Уроки подготовлены экспертом и охватывают все аспекты построения мобильных, десктопных и веб-приложений. По завершении обучения вы сможете создавать кроссплатформенные приложения с использованием одного кода, что значительно ускорит процесс разработки и снизит затраты на поддержку приложений. Это обучение отличается комфортной ценой и подойдет для в качестве знакомства с основами фреймворка.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/f6b22205-2851-45ee-bbc8-331469db085c.png" alt="" /></figure><ul><li>Стоимость: 1 499 рублей</li><li>Длительность: в зависимости от темпа прохождения</li><li>Формат обучения: видеоуроки, задания, тесты</li><li>Сертификат: не предоставляется</li></ul><p><b>Кому подойдет: </b>желающим освоить быструю разработку кроссплатформенных приложений.</p><p><b>Преимущества:</b></p><ul><li>программа от эксперта-практика;</li><li>обучение в индивидуальном темпе;</li><li>ознакомительный доступ к 2 урокам;</li><li>доступная цена;</li><li>можно оплатить долями;</li><li>начало занятий сразу после оплаты;</li><li>простое изложение материала.</li></ul><p><b>Недостатки:</b></p><ul><li>не предоставляется документ о прохождении курса.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы Flutter</li><li>Компоновка, навигация, передача данных</li><li>Управление состоянием и хранение данных</li><li>Пошаговое создание приложения</li><li>Работа с компонентами бизнес-логики BLoC</li><li>Чистая архитектура</li><li>Управление веб-страницами</li><li>Генерация кода</li><li>Использование виджетов</li><li>Основы тестирования</li><li>Применение анимации в разработке</li></ul><p><a href="https://experts2.ru/pVbDem?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=5">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>6. </b><a href="https://experts2.ru/ZcOayj?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=6">Мобильный разработчик на Flutter</a>  <b>|  Teachmeskills</b></p><p>Всего за 3 месяца вы освоите язык программирования Dart и научитесь создавать кроссплатформенные приложения для Android и iOS. Студенты изучают проектирование и анимацию интерфейсов, работу с сетью и данными, а также практикуются в создании и тестирование приложений и их публикации в онлайн-магазинах.  Преподаватели — практикующие разработчики с многолетним опытом работы в международных компаниях. К концу обучения вы соберете три качественных приложения в портфолио, что значительно повысит ваши шансы на трудоустройство. Курс также предлагает активную помощь в поиске работы и подготовке к собеседованиям.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/8069e5f7-2c82-4ebb-be3b-db4e98fe29fd.png" alt="" /></figure><ul><li>Стоимость: 70 000 рублей однократно или в рассрочку от 20 000 рублей в месяц</li><li>Длительность: 12 недель</li><li>Формат обучения: уроки онлайн, практические задания</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет:</b> для тех, кто никогда не программировал, для начинающих и опытных разработчиков.</p><p><b>Преимущества:</b></p><ul><li>подходит для новичков;</li><li>интенсивное обучение;</li><li>упор на практику — 85% учебного времени;</li><li>общение с преподавателями во время занятий и в телеграм-чате;</li><li>выполнение реального проекта для профессионального портфолио;</li><li>онлайн-тренинг по трудоустройству.</li></ul><p><b>Недостатки:</b></p><ul><li>необходимо дождаться набора группы.</li></ul><p><b>Программа обучения:</b></p><ul><li>Настройка рабочего окружения</li><li>Программирование на языке Dart</li><li>Устройство и функциональные возможности фреймворка</li><li>Базовые принципы работы с виджетами</li><li>Элементы управления</li><li>Пошаговая разработка приложений</li><li>Сеть и архитектура</li><li>Хранилище данных</li><li>Разработка плагинов</li></ul><p><a href="https://experts2.ru/ZcOayj?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=6">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>7. </b><a href="https://experts2.ru/vnrJYh?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=7">Кроссплатформенная мобильная разработка на Flutter</a><b>  |  МФТИ</b></p><p>Онлайн-программа одного из ведущих российских вузов адресована разработчикам любого уровня, включая новичков, интересующихся созданием мобильных и веб-приложений с помощью бесплатного открытого фреймворка. Обучение проводится на живых онлайн-вебинарах 2-3 раза в неделю. Выпускники программы умеют разрабатывать функциональные пользовательские интерфейсы любой сложности, создавать расширяемые приложения и качественные анимации, работать с навигацией в приложении, хранилищами файлов и базами данных, использовать API для отправки и получения данных, а также проводить тестирование разработанного продукта. Для знакомства с форматом обучения можно пройти бесплатное вводное занятие.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/b045001a-1f59-4c17-92fb-d9cf62b05344.png" alt="" /></figure><ul><li>Стоимость: 80 400 рублей одной суммой или в рассрочку от 16 080 рублей в месяц</li><li>Длительность: 4,5 месяца</li><li>Формат обучения: вебинары в онлайн-формате, домашние задания,</li><li>Сертификат: удостоверение о повышении квалификации</li></ul><p><b>Кому подойдет:</b> начинающим разработчикам, IT-специалистам других направлений с навыками программирования.</p><p><b>Преимущества:</b></p><ul><li>возможна оплата в рассрочку;</li><li>общение с преподавателем в ходе занятий;</li><li>акцент на практические навыки;</li><li>создание портфолио с реальными проектами;</li><li>учебные материалы доступны в течение года после окончания обучения;</li><li>обратная связь от преподавателей;</li><li>круглосуточная поддержка;</li><li>доступ к виртуальной библиотеке вуза.</li></ul><p><b>Недостатки:</b></p><ul><li>редкий старт;</li><li>требуется знание хотя бы одного языка программирования.</li></ul><p><b>Программа обучения:</b></p><ul><li>Основы объектно-ориентированного программирования и языка Dart</li><li>Функции и возможности Flutter</li><li>Установка фреймворка и среды разработки на различных платформах</li><li>Основные виджеты и их функции</li><li>Работа с сетью</li><li>Анимация и навигация в приложении</li><li>Структура мобильных приложений</li><li>Работа с данными, интеграции</li><li>Тестирование и публикация приложения</li></ul><p><a href="https://experts2.ru/vnrJYh?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=7">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>8. </b><a href="https://experts2.ru/YjnqrJ?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=8">Практический онлайн курс</a><b>  | Flutter-команды Surf  </b></p><p>Учебные модули подготовлены командой опытных разработчиков на базе собственного опыта. Занятия адаптированы для новичков, не имеющих опыта в программировании. Студенты познакомятся с основами языка Dart и возможностями изучаемого фреймворка, научатся создавать приложения для Android, iOS и Web, решать задачи, используя принципы коммерческой разработки. Еженедельно проводятся Q&amp;A-сессии, онлайн-лекции или практика в формате лайфкодинг.  Мощная практическая составляющая обучения качественно подготовит вас к работе над реальными проектами.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/f53b5d6d-bd85-4146-9cd4-b1987668a61d.png" alt="" /></figure><ul><li>Стоимость: 65 000 руб.</li><li>Длительность: 16 недель</li><li>Формат обучения: живые вебинары, лекции в записи, текстовые материалы, тесты, задания</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет:</b> желающим освоить кроссплатформенную разработку.</p><p><b>Преимущества:</b></p><ul><li>более 300 часов практики;</li><li>проверка домашних заданий ментором в формате код-ревью;</li><li>обратная связь и лайфхаки от практикующих разработчиков;</li><li>еженедельные онлайн-уроки и сессии в формате «‎вопрос-ответ»;</li><li>достойное портфолио с выполненными в течение курса проектами;</li><li>общение в среде разработчиков;</li><li>тесты для самопроверки знаний;</li><li>совершенствование практических навыков на реальных бизнес-кейсах.</li></ul><p><b>Недостатки:</b></p><ul><li>необходимо дождаться старта очередного учебного потока.</li></ul><p><b>Программа обучения:</b></p><ul><li>Обзор языка программирования Dart</li><li>Создание консольного проекта</li><li>Объектно-ориентированное программирование</li><li>Функции и классы</li><li>Преобразование коллекций</li><li>Создание приложения на Flutter</li><li>Интерактивность, ресурсы</li><li>Работа со сторонними библиотеками</li><li>Разработка приложений</li></ul><p><a href="https://experts2.ru/YjnqrJ?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=8">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>9.</b> <a href="https://experts2.ru/OmcyxS?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=9">Izi-izi FlutterFlow</a>  <b>| Appe </b></p><p>Это интенсивное обучение подойдет даже тем, кто не знаком с программированием. Занятия подготовлены опытными специалистами в сфере разработки специально для обучения с нуля. Курс охватывает все аспекты применения фреймворка для создания универсальных мобильных решений. Обучение не отнимает много времени: на прохождение каждого урока потребуется около 20 минут, что позволяет получить максимум полезной информации за короткое время. Студенты изучат все, что необходимо для старта в профессии и полноценной работы: от базовых функций и инструментов до самостоятельного создания приложения.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/0347092e-323e-4baa-ba7c-453b4f20558b.png" alt="" /></figure><ul><li>Стоимость: предоставляется по запросу</li><li>Длительность: 8 недель</li><li>Формат обучения: предзаписанные лекции, практические задания</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет: </b>абсолютным новичкам в разработке и начинающим IT-специалистам.</p><p><b>Преимущества:</b></p><ul><li>программа адаптирована для изучения темы с нуля;</li><li>быстрый старт в профессии Flutter-разработчика;</li><li>короткие, но емкие уроки;</li><li>акцент на практическую сторону обучения;</li><li>кураторская поддержка;</li><li>оперативная обратная связь по домашним заданиям.</li></ul><p><b>Недостатки:</b></p><ul><li>нет информации о стоимости обучения.</li></ul><p><b>Программа обучения:</b></p><ul><li>Знакомство с фреймворком</li><li>Возможности для разработки мобильных и веб-приложений</li><li>Введение в язык программирования Dart</li><li>Использование виджетов</li><li>Инструменты анимации</li><li>Навигация</li><li>Тестирование приложений</li></ul><p><a href="https://experts2.ru/OmcyxS?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=9">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><p><b>10. </b><a href="https://experts2.ru/wrpGuF?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=10">Flutter-разработчик</a> <b>| 1DevFullSchool  </b></p><p>Комплексная программа создана для тех, кто делает первые шаги в разработке. Пройти обучение могут и те, кто имеет некоторый опыт в программировании и хочет освоить набор средств для разработки мобильных приложений для iOS и Android. Материалы программы основаны на многолетнем опыте преподавателей-практиков, поэтому содержат актуальную рабочую информацию, лайфхаки и учитывают специфику работы с коммерческими задачами. Практическая часть программы позволит не только закрепить навыки разработки с помощью фреймворка, но и сформировать достойное портфолио для дальнейшего трудоустройства.</p><figure><img src="https://media.tproger.ru/user-uploads/108137/2024-10-31/a8809d78-c26a-480b-a3bc-4f1e6e0476f1.png" alt="" /></figure><ul><li>Стоимость: 65 000 рублей одним платежом или в рассрочку от 11 646 рублей в месяц на полгода</li><li>Длительность: 7 месяцев</li><li>Формат обучения: вебинары в онлайн-формате, практические задания, тесты</li><li>Сертификат: предоставляется</li></ul><p><b>Кому подойдет:</b> для новичков в разработке.</p><p><b>Преимущества:</b></p><ul><li>можно оплатить обучение в рассрочку;</li><li>поддержка от кураторов;</li><li>проверка заданий с обратной связью;</li><li>несколько форматов обучения на выбор;</li><li>эксперты-практики в качестве преподавателей;</li><li>содействие в поиске работы.</li></ul><p><b>Недостатки:</b></p><ul><li>нет бесплатного ознакомительного урока.</li></ul><p><b>Программа обучения:</b></p><ul><li>Функции и возможности Flutter для разработки</li><li>Основные виджеты</li><li>Анимация, работа с изображениями</li><li>Создание навигации в приложениях</li><li>Управление данными</li><li>Объектно-ориентированное программирование</li><li>Чистая архитектура</li></ul><p><a href="https://experts2.ru/wrpGuF?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=10">Ознакомиться с полной программой &gt;&gt;&gt;</a></p><h2>Еще 7 дополнительных курсов Flutter</h2><p>Я подобрала для вас еще несколько качественных образовательных программ. Эти курсы по Flutter-разработке также будут полезны для освоения фреймворка и разработки мобильных и веб-приложений.</p><ul><li><a href="https://experts2.ru/bjNElk?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=netop">Профессия «Мобильная разработка для девушек»</a> от ITGirlSchool. Обучение рассчитано на 9 месяцев, за которые студентки создадут несколько мобильных приложений в качестве собственных проектов. Учебная программа состоит из видеолекций, домашних заданий и работы над проектами. На все вопросы, возникающие в процессе обучения, отвечают менторы. В качестве менторов у вас будут практикующие IT-специалисты. Эксперты курса также дадут участницам обратную связь по выполненным домашним заданиям, поддержат во время выполнения проектов по разработке, помогут сформировать портфолио и подготовить резюме для успешного поиска работы. Приятное дополнение: бонусные курсы, чат поддержки, база заказов, уроки английского языка. После реализации выпускного проекта выдается сертификат. Все учебные материалы остаются в доступе после завершения курса в течение года.</li><li><a href="https://experts2.ru/eboXaR?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=netop">Flutter &amp; Dart</a> от itProger. Изучение связки из фреймворка и языка программирования общего назначения, созданных компанией Google. Программа подходит для тех, кто начинает знакомство с этими инструментам разработки с нуля. Стоимость обучения по подписке — от 7$ в месяц. Занятия проходят в личном кабинете студента на сайте школы IT-профессий. Там же можно задавать вопросы кураторам и получать от них оперативные ответы. Вы освоите язык Dart и будете использовать его для работы над консольными проектами, узнаете о функциях, компонентах, объектах и виджетах фреймворка, научитесь создавать приложения с дизайном различной сложности и подключать базу данных. В программу включены занятия по объектно-ориентированному программированию, что улучшит ваше взаимодействие с Dart и Flutter, поможет понять связь алгоритмов со структурами данных. Кроме теоретической части есть практические задания, рассчитанные на разный уровень подготовки, в том числе начальный.</li><li><a href="https://experts2.ru/cKqhbS?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=netop">Flutter-разработчик</a> от Surf Education. Учебная программа, подготовленная специалистами в сфере кроссплатформенной разработки, рассчитана на 4 месяца. Обучение построено на двух модулях: обзорном теоретическом и практическом. Если у вас нет возможности присоединиться к живым онлайн-урокам во время их проведения, то запись занятий можно посмотреть позднее. Для закрепления навыков студенты выполняют домашние работы, проходят тесты, решают коммерческие задачи, пишут под руководством наставника код онлайн на сессиях лайфкодинга, работают над проектами по разработке приложений с помощью изучаемого фреймворка. Домашние задания проверяются ментором в формате код-ревью, а задать вопросы преподавателям можно на еженедельных онлайн-встречах. Большая часть обучения приходится на практику по разработке приложений под iOS или Андроид-платформу. К окончанию учебы выпускники будут готовы не только использовать все функциональные возможности и инструменты фреймворка, но и решать бизнес-задачи, работая в коммерческой разработке.</li><li><a href="https://experts2.ru/AnhTgw?sub1=tproger-kf&amp;sub2=flutter-kursy&amp;sub4=netop">Разработка на Flutter </a>от Университет «Синергия». Интенсивное обучение продолжительностью 3 месяца подойдет как новичкам, так и IT-специалистам уровня middle, а также разработчикам других направлений. Вы научитесь программировать на Dart, создавать приложения для iOS и Android, разрабатывать пользовательские интерфейсы и создавать адаптивный дизайн, добавлять виджеты в приложение, работать с навигацией внутри многостраничных приложений и использовать дополнительные инструменты разработки. Кроме того, познакомитесь с системой контроля версий, сможете запускать приложения на различных устройствах и платформах, самостоятельно проводить их отладку.  В программе, кроме просмотра лекционных материалов, предусмотрено выполнение домашних заданий и работа над проектами. Выпускникам выдается сертификат о прохождении курса.</li><li><a href="https://www.udemy.com/course/learn_flutter/">Изучаем Flutter </a>от Udemy. Уроки на крупном образовательном сервисе предназначены для обучения Flutter нуля. Подойдут как начинающим, так и опытным специалистам, заинтересованным в использовании этого функционального фреймворка для создания мобильных и веб-приложений. Для обучения потребуется знание общего языка программирования Dart. Курс состоит из 19 разделов, 144 лекций и 7 ресурсов для скачивания, практических заданий и тестов. Учащиеся познакомятся с возможностями и спецификой фреймворка, основами UI-компоновки, научатся проектировать приложение по принципам чистой архитектуры. Автор курса, профессиональный iOS-разработчик, покажет, как использовать виджеты, работать с навигацией, данными и веб-страницами, объяснит, как проводить базовое тестирование и поделится собственным опытом в разработке приложений. Студентам потребуется выделить 22,5 часа на просмотр лекций и найти время для выполнения домашних заданий. На обучение действуют скидки. Доступ к урокам остается навсегда. По окончании учебы выдается сертификат.</li><li><a href="https://wiki.merionet.ru/merion-academy/courses/razrabotka-prilozhenij-na-flutter-i-dart/?utm_source=habr&amp;utm_medium=CPA&amp;utm_campaign=flame">Разработка приложений на Flutter и Dart</a> от Merion. Занятия на платформе IT-образования адресованы фронтенд- и мобильным разработчикам, специалистам с опытом в веб-разработке или со знанием отдельных языков программирования. Программа разработана директором по информационным технологиям крупной фудтех-компании, рассчитана на 2 месяца. Курс состоит из 13 тематических блоков, более 30 часов теории и свыше 50 часов практических задач. После прохождения каждого модуля студенты проходят проверку знаний с помощью теста. Обучение на курсе завершается выполнение выпускного проекта, сдачей финального тестирование и получением сертификата. Для знакомства с учебным форматом можно пройти бесплатное вводное занятие и получить скидку на обучение. Участники изучат Dart на профессиональном уровне, освоят навыки работы с сетью, базами данных и интеграцией, получат опыт разработки на Flutter и смогут самостоятельно создавать кроссплатформенные Android, iOS и Web-приложения. Кроме того, студенты научатся не только писать приложения, но и тестировать их с помощью сторонних библиотек. Доступ к занятиям остается навсегда.</li><li><a href="https://stepik.org/course/191099/promo?search=5576342403">Разработка приложений с Flutter и Dart для IOS и Android</a> от Stepik.org. Уделяя всего 1-2 часа в день, вы научитесь создавать мобильные приложения с помощью фреймворка и языка программирования от Google. Программа создана командой IT-профессионалов для новичков без опыта в разработке и состоит из 47 уроков общей продолжительностью 15 часов и 10 тестов. Вы познакомитесь с объектно-ориентированным программированием в Dart, научитесь разрабатывать приложения разного уровня сложности, работать с базой данных, создавать и внедрять анимацию с помощью стандартных инструментов. Узнаете, каким образом можно заработать на приложениях с рекламой, как взаимодействовать с Git и многое другое. Приступить к обучению можно сразу после оплаты доступа к урокам по вполне доступной цене — 2 790 рублей.</li></ul><h2>Бесплатные курсы Flutter</h2><p>Если у вас пока нет возможности пройти платное обучение, научиться кроссплатформенной разработке помогут Flutter бесплатные курсы. Вы сможете без финансовых затрат приобрести базовые навыки работы с этим востребованным фреймворком или подготовиться к более углубленному изучению на платной программе. Предлагаю вам рассмотреть несколько интересных вариантов таких онлайн-программ.</p><p><b>1.</b><a href="https://flutter.su/"><b> </b>Flutter уроки. От идеи до приложения</a> — <b>Flutter.su</b></p><p>Образовательный веб-ресурс с уроками для начинающих в разработке с помощью Flutter SDK. Вы научитесь создавать мобильные приложения, работать с графикой и анимацией, узнаете в чем заключаются особенности реализации алгоритмов, какие методы и подходы можно использовать для решения практических задач. Ресурс располагает библиотекой документации по изучаемому фреймворку и языку Dart.</p><p><b>Главное о курсе:</b></p><ul><li>хорошо структурированная информация;</li><li>уроки в текстовом формате;</li><li>удобная навигация по материалам курса;</li><li>обзор инструментов, виджетов и обновлений фреймворка;</li><li>пошаговая инструкция по созданию мобильной игры.</li></ul><p><b>2.</b><a href="https://metanit.com/dart/flutter/"> Руководство по фреймворку Flutter</a> - <b>METANIT.COM</b></p><p>Виртуальный учебник для начинающих поможет самостоятельно освоить полноценное современное решение для разработчиков. Следуя руководству, вы сможете установить фреймворк и необходимую среду разработки, научитесь работать со встроенными виджетами и создавать собственные, освоите управление компоновкой и создадите свое первое приложение. Несмотря на полностью обучение без поддержки преподавателей или кураторов, вы сможете самостоятельно разобраться в практических задания, поскольку текстовый материал учебника сопровождается детальными примерами, подробными пояснениями и многочисленными скриншотами.</p><p><b>Главное о курсе: </b></p><ul><li>качественные уроки от экспертов;</li><li>материал уроков адаптирован для обучения с нуля;</li><li>удобная навигация по курсу;</li><li>инструкции по установке необходимых для работы программ;</li><li>пошаговое руководство по созданию мобильных приложений.</li></ul><p><b>3.</b><a href="https://youtube.com/playlist?list=PLfnFOImnyWRW6fjFVuhxSnBl5SJtYXsf-"> Открытые уроки. Мобильная разработка на Flutter</a> — <b>OTUS</b></p><p>Бесплатные занятия от одного из лидеров онлайн-образования. Преподаватели-практики расскажут о возможностях фреймворка, научат создавать приложения для iOS, Android и Web, поделятся своим опытом и лайфхаками. За несколько занятий вы не только освоите мобильную разработку, но и получите ценные советы и рекомендации преподавателей по развитию карьеры.</p><p><b>Главное о курсе:</b></p><ul><li>10 видеоуроков на YouTube-канале;</li><li>кейсы анимации от простого к сложному;</li><li>устройство, варианты и задачи BLoC;</li><li>создание приложений с управлением сложными жестами;</li><li>тестирование приложений.</li></ul><p><b>4.</b><a href="https://youtube.com/playlist?list=PLyaYkfwvXhRKjYAIO4_J_IcHtAXUR_1ci"><b> </b>Flutter уроки для начинающих на русском </a>- <b>Youtube-канал ALEXEY SHPAVDA</b></p><p>Онлайн-занятия для новичков в сфере разработки. Учебный курс подготовлен экспертом-разработчиком и охватывает все необходимые темы для старта карьеры в данном направлении. Разберетесь с функциями фреймворка, узнаете, как создать структуру проекта и работать с виджетами.</p><p><b>Главное о курсе: </b></p><ul><li>плейлист из 35 уроков;</li><li>поэтапное создание мобильных приложений;</li><li>знакомство с платформой;</li><li>подготовка среды разработки;</li><li>виджеты и их применение.</li></ul><p><b>5. </b><a href="https://youtu.be/cpkSVwf75-k">Pro Flutter</a> -<b> Youtube-канал Pro Flutter уроки на русском</b></p><p>Онлайн-курс Flutter, с помощью которого вы познакомитесь с языком программирования Dart, установите фреймворк и создадите приложение. Курс создан разработчиком с более чем десятилетним опытом работы. В уроках представлена только самая важная информация по теме, что делает их лучшим вариантом для быстрого освоения разработки.</p><p><b>Главное о курсе: </b></p><ul><li>17 занятий для самостоятельного изучения;</li><li>возможности кроссплатформенной разработки;</li><li>использование виджетов;</li><li>создание и релиз приложения для десктопа;</li><li>маршрутизация и навигация.</li></ul><p><b>6.</b><a href="https://youtube.com/playlist?list=PLtXyatp5fW30ksCelZf6Ny6YpqfzXMk9u"><b> </b>Изучаем Flutter</a> — <b>Youtube-канал Константина Кокорина</b></p><p>Авторская программа от профессионального разработчика мобильных и веб-приложений. Небольшие по продолжительности, но содержательные занятия для тех, кто делает первые шаги в  разработке приложений для iOS и Android. С помощью пошагового руководства вы установите фреймворк и среду разработки, познакомитесь с языком Dart, научитесь применять виджеты, разберетесь со структурой приложения. Несколько уроков посвящены изучению компонентам бизнес-логики BLoC и применению концепции чистой архитектуры.</p><p><b>Главное о курсе: </b></p><ul><li>69 видеоуроков;</li><li>обучение в удобном темпе;</li><li>домашние задания;</li><li>хорошо структурированная информация.</li></ul><p><b>7.</b> <a href="https://youtube.com/playlist?list=PLw6SJ6q6-1YpnyZd2iG80s7Fc_r62wHMJ">Курс по Flutter: для входа в профессию Flutter-разработчика</a> — <b>Youtube-канал Mad Brains</b></p><p>Базовый видеокурс адресован желающим с нуля освоить востребованную профессию. Каждое видео представляет собой запись офлайн-занятия, проведенного специалистами компании по созданию мобильных и корпоративных решений. Помимо теоретической части, вы попрактикуетесь в использовании современных технологий в разработке, а также получите полезные советы и рекомендации профессионалов.</p><p><b>Главное о курсе: </b></p><ul><li>9 видеоуроков продолжительностью от 30 минут до 2 часов;</li><li>практика во время урока;</li><li>домашние задания для закрепления материала;</li><li>настройка окружения и первый запуск;</li><li>знакомство с языком программирования Dart;</li><li>элементы верстки;</li><li>сетевое взаимодействие;</li><li>архитектура и управление состоянием приложения;</li><li>хранение данных.</li></ul><p><b>8.</b> <a href="https://youtube.com/playlist?list=PLUNU_p_7I5QOYZ2h9c2lYQG-gHVbAArxR">Flutter, уроки</a> - <b>Youtube-канал Владимира Мадудина</b></p><p>Авторские видео ориентированы на новичков и тех, кто уже знаком с программирование и хочет пополнить свои навыки востребованным инструментов для мобильной разработки. Каждый урок сочетает в себе теоретический материал и практическую работу, выполняемую под инструктаж преподавателя. Полученных знаний достаточно для эффективного использования фреймворка и разработки простых приложений.</p><p><b>Главное о курсе: </b></p><ul><li>34 занятия для начинающих;</li><li>доступна текстовая версия уроков;</li><li>установка и настройка фреймворка;</li><li>руководство по использованию языка Dart;</li><li>введение в виджеты;</li><li>работа с BLoC;</li><li>применение популярных архитектурных подходов.</li></ul><p><b>9. </b><a href="https://www.youtube.com/playlist?list=PL5hgLeGlfJX2YMALklo0oaSXSa-u8h_ga">Flutter (курс простыми словами)</a> - <b>Youtube-канал Дмитрия Столеца </b></p><p>Курс обучения Flutter для начинающих состоит из коротких, но содержательных уроков. Автор программы рассказывает о возможностях и преимуществах кроссплатформенной разработки, знакомит с функционалом фреймворка и демонстрирует все этапы работы с ним. Следуя инструкциям преподавателя, вы сможете быстро создать свое первое приложение.</p><p><b>Главное о курсе: </b></p><ul><li>10 видеоуроков продолжительностью до 24 минут;</li><li>простая и понятная новичкам подача материала;</li><li>разбор приложений;</li><li>функции и использование виджетов;</li><li>верстка экрана;</li><li>навигация, контекст, работа с провайдером.</li></ul><p><b>10. </b><a href="https://www.youtube.com/playlist?list=PLrnbjo4fMQwalAFxzGJIDh8bKxppB12MW">Основы Flutter</a> от <b>LazyLoad</b></p><p>Учебный модуль на платформе YouTube адресован тем, кто делает первые шаги в разработки мобильных приложений с помощью фреймворка от Google. Качественные уроки от сообщества разработчиков дают необходимую базу для самостоятельного создания приложений. Во время обучения вы получите детальный разбор этапов разработки и создадите собственный продукт, включая верстку, создание навигации и элементов управления.</p><p><b>Главное о курсе: </b></p><ul><li>34 урока продолжительностью от 5 минут до 1 часа 37 минут;</li><li>преимущества и недостатки фреймворка;</li><li>работа с виджетами;</li><li>обзор системы Layout;</li><li>разработка собственного приложения.</li></ul><p><b>11.</b> <a href="https://www.youtube.com/playlist?list=PLQe4pvn2BjxAJNOQzUKdemXZV0-iahuyO">Flutter разработка для начинающих. Приложение Quiz </a>от <b>Codeandart Main</b></p><p>Подборка из 9 обучающих видео на платформе YouTube. Подходит для быстрого старта в разработке мобильных приложений. Видеокурс полностью адаптирован для начинающих, поэтому будет понятен любому студенту. Каждое занятие включает не только теоретическую часть, но и практику по работе с фреймворком. В процессе обучения вы научитесь выполнять верстку с помощью основных виджетов и создавать собственные, познакомитесь с архитектурными концепциями в управлении состоянием, займетесь разработкой своего первого приложения, которое завершите на финальном занятии.</p><p><b>Главное о курсе: </b></p><ul><li>занятия для новичков;</li><li>знакомство с фреймворком и языком Dart;</li><li>основы верстки и использование виджетов;</li><li>понятная подача материала экспертом в сфере разработки;</li><li>создание проекта приложения-викторины с нуля.</li></ul><p><b>12.</b> <a href="https://education.yandex.ru/handbook/flutter">Хэндбук по Flutter</a> от <b>Яндекс Образование</b></p><p>Курс в формате электронного учебника будет полезен тем, кто хочет разобраться в устройстве популярного фреймворка, специфике его инструментов, узнать о подходах к проектированию приложений, освоить Dart и применить полученные знания для реальной разработки. Учебник создан командой специалистов Яндекса, которые делятся своими знаниями, опытом и лучшими практиками использования данного средства разработки. Программа рассчитана на тех, кто знаком с основами объектно-ориентированного программирования.</p><p><b>Главное о курсе:</b></p><ul><li>53 тематических текстовых модуля;</li><li>отлично структурированный материал;</li><li>подробные разборы тем;</li><li>знакомство с продвинутыми концепциями разработки;</li><li>постоянные обновления и дополнение учебных материалов;</li><li>участие в сообществе разработчиков.</li></ul><p><b>13.</b> <a href="https://www.udemy.com/course/pro_flutter/">Pro Flutter</a>.</p><p>Серия видеоуроков на международной образовательной платформе подходит для всех желающих, в том числе начинающих и опытных специалистов в области разработки. Программа подготовлена fullstack-разработчиком с опытом работы более 10 лет. Слушатели освоят создание и установку приложений, использование виджетов под разные цели, работу со шрифтами и изображениями, разберутся, как работает навигация в этом фреймворке и как передавать данные в конструктор.</p><p><b>Главное о курсе:</b></p><ul><li>полностью бесплатное руководство;</li><li>подходит для обучения с нуля;</li><li>уроки на русском языке;</li><li>17 видеолекций общей продолжительностью 1 час 48 минут;</li><li>бонусный урок по созданию десктопных и веб-приложений.</li></ul><h2>Заключение</h2><p>Flutter неслучайно считается популярным выбором разработчиков и клиентов во всем мире. Этот бесплатный фреймворк позволяет создавать высококачественные кроссплатформенные приложения с минимальными затратами времени и ресурсов, поэтому компании все чаще выбирают его для разработки своих продуктов. Обучение разработке открывает перед вами множество возможностей. Закончив Flutter курсы, вы научитесь быстро создавать функциональные приложения для iOS, Android, десктопных и веб-приложений,  повысите свою конкурентоспособность на рынке труда и сможете выйти на более высокий уровень заработка. Инвестируя сегодня в обучение, вы делаете шаг к успешной и перспективной карьере разработчика в ближайшем будущем.</p><p><i>Если вы обнаружили в нашей подборке неактуальную информацию, сообщите, пожалуйста, об этом в комментариях. Возможно, вы хотите добавить проверенный вами курс в подборку. Сообщите нам об этом, а мы с удовольствием включим его в наш перечень образовательных программ. </i></p>]]></content:encoded>
    </item>
    <item>
      <title>Архитектура для Flutter без привязки к BuildContext и сторонних библиотек</title>
      <link>https://tproger.ru/articles/arhitektura-dlya-flutter-bez-privyazki-k-buildcontext-i-storonnih-bibliotek</link>
      <comments>https://tproger.ru/articles/arhitektura-dlya-flutter-bez-privyazki-k-buildcontext-i-storonnih-bibliotek?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Евгений Ефанов]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/arhitektura-dlya-flutter-bez-privyazki-k-buildcontext-i-storonnih-bibliotek</guid>
      <description><![CDATA[<p>Мобильная разработка: архитектура для Flutter без привязки к BuildContext и сторонних библиотек с примерами кода и полезными советами.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/arhitektura-dlya-flutter-bez-privyazki-k-buildcontext-i-storonnih-bibliotek">Архитектура для Flutter без привязки к BuildContext и сторонних библиотек</a>»</p>]]></description>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Архитектура приложений]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Tue, 13 Aug 2024 13:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<h2>Введение</h2><p>Всем привет! Меня зовут Евгений Ефанов, я мобильный разработчик в Red Collar.</p><p>На протяжении последних пяти лет я занимаюсь разработкой приложений на Flutter. За это время я успел поработать над несколькими большими проектами, включая мессенджеры и видео-сервисы, где занимался архитектурой.</p><p>Когда я начинал, существовало несколько архитектурных подходов, среди которых можно выделить BLoC и Redux. Позднее появился Provider, а также ряд других, менее распространённых архитектур.</p><p>Эти библиотеки были относительно небольшими, и мне не нравилось их использовать, поскольку в каждой из них отсутствовали многие удобные механизмы, которые были в других библиотеках. Некоторые зависели от BuildContext, что затрудняло тестирование, некоторые требовали слишком много кодогенерации, а библиотеки для подключения зависимостей не поддерживали скоупы и другие привычные функции, что замедляло разработку.</p><p>Поэтому, параллельно с работой над одним из проектов, я начал создавать собственный набор утилитарных классов для архитектуры приложения.</p><p>В итоге хотелось бы сделать архитектурный компонент, который будет способен реагировать и подписываться на события в системе, а также хранить и предоставлять доступ к определённым данным. Этот компонент должен позволять нам изменять эти данные и отслеживать их изменения (BLoC).</p><p>Кроме того, хотелось бы реализовать механизм хранения этих компонентов и обеспечить возможность их подключения друг к другу. Это позволит нам заменять компоненты моками при тестировании. По сути, это будет простой DI-контейнер, разделенный на скоупы.</p><p>Также мы хотим иметь доступ к компонентам и их состоянию через глобальный объект во всех частях приложения аналогично тому, как это реализовано в Redux.</p><p>При этом, в отличие от существующих подходов, получение и использование компонентов должно осуществляться без использования BuildContext.</p><p>И наконец по аналогии с виджетами хотелось бы иметь простой цикл жизни компонента: инициализация и деинициализация.</p><p>Суммарно это бы заключало все механизмы из существующих библиотек, которые, на мой взгляд, были самыми удобными. Используя такой компонент, можно разделить бизнес-логику проекта на составляющие с заменяемыми зависимостями, что позволит гарантировать полное покрытие unit-тестами. События в системе позволят предотвратить излишнее количество связей, поэтому мы сможем минимизировать количество багов в конечном коде проектов.</p><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/b40b507b-06ad-4964-a94f-3b79b713e40a.png" alt="" /></figure><p>Дополнительным преимуществом является то, что описанный подход может быть применён к любой из платформ, позволяя использовать идентичные механизмы как во Flutter, так и в SwiftUI и Compose. Это облегчает переключение между платформами, так как мы используем одинаковые компоненты бизнес логики. В следующих статьях я расскажу, как реализовать эти механизмы для других платформ.</p><p>Сейчас я продолжаю использовать разработанные мной инструменты и решил написать статью о результатах моей работы, которая, возможно, будет полезна и интересна другим разработчикам и поможет им в реализации и понимании типовых механизмов.</p><p>В завершение будет информация о том, как провести тестирование всех механизмов, описанных в статье, а также как организовать архитектурные компоненты в соответствии со слоями архитектуры.</p><h2>Создаем базовый класс</h2><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/0bed52b7-25c6-4cbd-87c9-45d9ec598653.png" alt="" /></figure><p>Для начала рассмотрим базовый класс MvvmInstance, который станет основой для всех механизмов. В первую очередь определим в нём два ключевых метода: initialize и dispose, аналогично стандартным виджетам. При инициализации также будет передаваться input для данного объекта. Здесь же можно сразу добавить асинхронный метод для инициализации — initializeAsync.</p><p>В этом случае мы абстрагируемся от конструктора и берём процесс инициализации объекта под свой контроль. В итоге конструкторы будут стандартными, что позволяет легко генерировать код для создания объектов, а также добавляет возможность асинхронных операций при инициализации. На данный момент мы получаем такой класс:</p><p>Здесь мы также определяем конфигурацию объекта, которая на данный момент включает только один флаг, указывающий, требуется ли асинхронная инициализация для этого объекта. В дальнейшем мы сможем добавить сюда и другие параметры, например, список зависимостей для нашей сущности.</p><p>Теперь мы можем сразу подключить наш объект к состоянию какого-либо виджета и связать его жизненный цикл.</p><p>С такой структурой мы можем начать добавлять в наш класс дополнительные функции, такие как обработка событий, работа с состоянием (стейт) и другие, будучи уверенными, что все ресурсы класса будут инициализированы и освобождены вместе с виджетом или с другим логическим элементом, в котором мы используем наш класс.</p><h2>Подключим события</h2><p>События представляют собой один из ключевых элементов во многих архитектурах. Например, во Flutter BloС можно отправлять события и реагировать на них внутри соответствующего блока, обновляя состояние.</p><p>Один из наиболее удобных механизмов для отправки событий — это Event Bus. Он, например, активно используется в приложении Signal на платформе Android, что можно увидеть в репозитории с исходным кодом.</p><p>Реализовать Event Bus во Flutter очень просто, используя встроенный механизм стримов.</p><p>Имея такой класс, мы можем подключить ранее созданный MvvmInstance к получению событий. Сам Event Bus при этом является синглтоном и доступен из любого места в коде.</p><p>Для того чтобы подписаться и отписаться от событий, мы можем использовать методы initialize и dispose, которые мы описали на первом шаге.</p><p>Теперь мы можем подписаться на события внутри нашего класса и отправлять их из любого места в коде.</p><p>Используя только этот механизм, можно реализовать множество логических процессов внутри приложения, например, поставить лайк какому-либо объекту, обработать ошибку сети и т. д.</p><p>Теперь мы можем вызывать экземпляр MvvmInstance как напрямую, так и через событие.</p><h2>Подключаем стейт</h2><p>Далее необходимо хранить в экземпляре некоторые данные, чтобы была возможность их обновлять и получать в рамках архитектурной структуры проекта.</p><p>Мне нравится механизм Redux, в котором есть хранилище, и мы можем подписываться на его обновления. Разница лишь в том, что само хранилище будет находиться внутри каждого экземпляра и содержать только те данные, которые нужны для этого элемента. Чтобы реализовать такой механизм, необходимо прежде всего создать объект, который будет хранить значение, которое мы сможем обновлять, а также подписываться на изменения. Здесь снова на помощь приходят встроенные механизмы Dart.</p><p>Здесь мы снова используем broadcast stream и инкапсулируем текущее значение данных.</p><p>Имея такой класс, мы можем создать хранилище для данных нашего MvvmInstance.</p><p>Стор способен хранить Observable и выдавать обновление значения для конкретного поля state.</p><p>Стор также инициализируется и уничтожается по вызову одного метода, поэтому мы можем легко подключить его к нашему MvvmInstance.</p><p>Используя этот подход, можно реализовать дополнительные функции, например, сохранение состояния в SharedPreferences или SecureStorage. Для этого достаточно абстрагировать логику работы с хранилищем и подписаться на обновления состояния экземпляра.</p><h2>Подключаем зависимости</h2><p>Подключение зависимостей является важным аспектом архитектуры, поскольку позволяет заменять зависимости при написании тестов.</p><p>Для реализации этого механизма необходимо создать интерфейс для подключения класса к нашему MvvmInstance, а также сгенерировать код для создания объектов.</p><p>Поскольку в нашей реализации мы используем дефолтные конструкторы, мы можем легко сгенерировать код для их создания.</p><p>Для хранения экземпляров нам потребуется синглтон, который будет содержать словарь с готовыми экземплярами.</p><p>Упрощённая реализация такого класса может выглядеть следующим образом:</p><p>Здесь мы храним словарь билдеров, которые будем генерировать, а также контейнер уже созданных объектов, чтобы получить их, если инстанс уже создан.</p><p>Словарь объектов также разделим на скоупы, чтобы мы могли разделить наши инстансы. В качестве дефолтных скоупов можно сразу прописать глобальный скоуп, где мы будем хранить синглетоны — они будут инициализироваться сразу при открытии конечного приложения. Так же можно добавить unique скоуп — в таком случае всегда будет создаваться новый экземпляр. Также можно добавить weak скоуп — в этом скоупе будут храниться глобальные объекты, однако в отличие от global скоупа они будут уничтожаться когда все зависимые от них инстансы уничтожены. Остальные скоупы, которые определяет пользователь, будут работать аналогично weak скоупу — когда все зависимые от скоупа экземпляры будут уничтожены, все объекты в скоупе также будут уничтожаться.</p><p>Таким образом, если в нашем словаре ещё не создан нужный нам инстанс, мы его конструируем, вызываем initialize для него и возвращаем инициализированный инстанс. Если же он уже существует, то сразу возвращаем этот объект.</p><p>Для генерации словаря билдеров будем использовать source_gen. Мы можем сгенерировать метод, который будет добавлять билдеры в коллекцию и вызвать его при запуске приложения.</p><p>Для этого сначала нужно создать аннотации для маркировки наших инстансов и после получить их в генераторе и сгенерировать соответствующий билдер. Для начала можно создать две аннотации — для обычных объектов и для синглтонов, — синглтоны будем автоматически помещать в глобальный скоуп.</p><p>После того как мы получили словарь объектов, мы можем подключить их к нашему MvvmInstance.</p><p>Для этого добавим наши зависимости в конфигурацию инстанса. Мы можем включить в конфигурацию список «коннекторов», которые будут содержать параметры, такие как входные данные и скоуп, из которого нужно взять подключаемую сущность.</p><p>Зная список зависимостей для нашего MvvmInstance, мы можем также взять их из словаря инстансов при инициализации.</p><h2>Описываем архитектурные сущности</h2><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/181c7c5f-c306-4668-90de-483bdcf5720a.png" alt="" /></figure><p>Теперь имея класс с подключенными событиями, стейтом и зависимостями мы можем разделить нашу архитектуру на слои.</p><p><b>Каждая сущность будет подключена к событиям</b></p><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/d65efc78-53c6-4076-9340-62f40eac150f.png" alt="" /></figure><p>В слое domain я выделил interactor — это сущность, которая хранит стейт. Она удобна для изоляции логического компонента, например, для работы со списком постов. Здесь мы можем получать список постов с сервера, а также подписаться на событие лайка на конкретном посте, чтобы обновить коллекцию в состоянии (стейте) объекта.</p><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/55e259fe-71f7-4569-a306-ad4063af59fd.png" alt="" /></figure><p>Также я выделяю wrapper — этот элемент не хранит состояние (стейт) и служит обёрткой для каких-либо сторонних библиотек. Например, мы можем подключить библиотеку для проверки текущего состояния сети. Это позволяет абстрагироваться от библиотеки и легко заменять ее методы при тестировании.</p><figure><img src="https://media.tproger.ru/user-uploads/103856/2024-08-07/f0ae33eb-d6d4-4fae-847a-c4e29f68efdf.png" alt="" /></figure><p>На уровне presentation я выделяю view model — по сути, это interactor, входными данными для которого является view, к которому подключена эта view model. Здесь мы можем подключить интеракторы с нужными данными и прописать binding’и, которые нужны для отображения.</p><p>В итоговом варианте мы получаем следующую структуру для загрузки постов:</p><h2>Как все это протестировать</h2><p>Для того чтобы протестировать полученную логику, мы можем заменить элементы в нашем DI контейнере на заранее созданные, передав тестовые данные в стейт.</p><p>В библиотеке так же есть методы для проверки отправки событий и циклических зависимостей у созданных нами сущностей, однако здесь я не буду приводить реализацию — её можно посмотреть в репозитории с кодом.</p><p>Ниже представлены примеры, как можно протестировать каждую сущность.</p><h2>Вывод</h2><p>В итоге мы получили набор логических элементов для того, чтобы реализовать каждый слой архитектуры и возможность всё это протестировать. Отдельно стоит отметить, что для внедрения зависимостей и работы с http мы можем применять и другие решения, пользуясь лишь структурой архитектуры.</p><p>В своей работе над реальными проектами я активно применяю все компоненты данной архитектуры. Бизнес-логика представляет собой некое количество интеракторов, количество которых даже в крупном проекте позволяет быстро внедрять зависимости в компоненты (например, view models), предотвращая любые возможные зависания при инициализации. Тестировать эти компоненты удобно, поскольку бизнес-логика полностью покрыта unit-тестами.</p><p>Благодаря механизму событий снижается связанность между компонентами, а основной глобальный app-компонент приложения дает возможность использования компонентов в любом месте кода, предоставляя свободу реализации функционала без ущерба для его тестируемости, а значит будет меньше багов в итоговом проекте.</p><p>Как реализовать аналогичные механизмы на swiftui и compose , я расскажу в следующих статьях.</p>]]></content:encoded>
    </item>
    <item>
      <title>Почему Flutter такой популярный</title>
      <link>https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj</link>
      <comments>https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Рафаил Агазода]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj</guid>
      <description><![CDATA[<p>Узнали у middle и senior специалистов, в чём причина популярности Flutter и какие у него перспективы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/pochemu-flutter-takoj-populyarnyj">Почему Flutter такой популярный</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 15 Mar 2024 13:00:02 GMT</pubDate>
      <content:encoded><![CDATA[<p>К 2024 году на Flutter было написано 700 000 приложений. Это очевидно много. Мы узнали у middle и senior специалистов, в чём причина популярности Flutter и какие у него перспективы.</p><p>Напоминаем, что вы можете задать свой вопрос экспертам, а мы соберём на него ответы, если он окажется интересным. Вопросы, которые уже задавались, можно найти в списке выпусков рубрики.</p><p>Если вы хотите присоединиться к числу экспертов и прислать ответ от вашей компании или лично от вас, то пишите на <a>experts@tproger.ru</a>, мы расскажем, как это сделать.</p><p>На сегодняшний день, в целом, можно позитивно оценить Flutter. Его основной плюс в том, что это кроссплатформенная среда, позволяющая быстро типировать и экономить время. Гипотетически, один разработчик может обслуживать полностью экосистему iOS и Android, а также создавать кроссплатформенные приложения. С помощью Flutter можно смоделировать нативное приложение под Windows, Linux и iOS, и оно будет запускаться сразу в контейнере на Flutter, адаптированном под операционную систему, на которой оно запускается. Это существенно сокращает затраченное время и количество разработчиков для поддержания разных платформ.</p><p>Дополнительным преимуществом Flutter является то, что он разрабатывается силами Google, обладающего значительными ресурсами. Для Google это проект имиджевый, они вкладывают в него финансовые средства и нанимают квалифицированных специалистов. Платформа регулярно обновляется, придается большое значение оптимизации. Flutter представляет собой серьезное решение, которое составляет значительную конкуренцию нативным приложениям.</p><p>Единственным минусом Flutter является то, что для разработки крайне специфических задач, не поддерживаемых экосистемой Flutter, придется прибегнуть к нативной разработке и коду. Однако 99% задач покрываются уже существующими плагинами и библиотеками.</p><p>Кроме того, стать серьезным разработчиком на Flutter проще, чем стать экспертом в области Data Science или фронтэнд-разработчиком. Это объясняется наличием обширного комьюнити, поддерживающего этот язык программирования.</p><p>На связи Иван Ярославцев, руководитель агентства разработки цифровых продуктов Alto. Мы готовим к запуску новое мобильное приложение, а перед публикацией кейса, хотим рассказать про технологию мобильной разработки Flutter.</p><p>А именно, почему Flutter пользуется такой популярностью у программистов и  как он помогает экономить бизнесу миллионы рублей на разработке.</p><p>Компании используют мобильные сервисы для разных задач: улучшить качество клиентского обслуживания, привлечь больше заказов, автоматизировать производство или избавить сотрудников от рутинной работы.</p><p>Но главная цель — оптимизировать ресурсы.</p><p>По нашему опыту, Flutter — лучшее решение для этой задачи. Главная его фишка — возможность создавать приложения для iOS и Android, используя один язык программирования и общий код.</p><p>Почему заказов на кроссплатформенные решения становится все больше?</p><ol><li>Цена на разработку. Экономия в среднем составляет 30-50% от нативных решений на Swift и Kotlin. Технология подходит для проектов с бюджетом до 6 млн рублей.</li><li>Сроки разработки. Использование общей кодовой базы для всех платформ сокращает время разработки на всех этапах. Например, первую версию приложения «Шампурико» мы разработали за 4 месяца.</li><li>Функциональность. Проработанность и гибкость фреймворка закрывает потребности большинства сфер бизнеса. Flutter-приложения создаются для e-commerce, фудтеха, B2B-продуктов и других направлений. <br /></li><li>Поддержка. Развивать и поддерживать один продукт с общим кодом дешевле и проще, чем несколько параллельных приложений для разных платформ.<br /></li></ol><p>Почему программисты выбирают Flutter основным стеком?</p><ol><li>Open-source библиотеки. Flutter сегодня — первый по популярности кроссплатформенный фреймворк. Под него написаны тысячи открытых библиотек, что позволяет быстро добавлять новые функции и возможности в проект.</li><li>Востребованность на рынке и обучение. Распространенность этого фреймворка открывает большие возможности для трудоустройства. Также для изучения Flutter разработаны сотни образовательных программ.</li></ol>]]></content:encoded>
    </item>
    <item>
      <title>React Native против Flutter: что лучше</title>
      <link>https://tproger.ru/articles/react-native-protiv-flutter--chto-luchwe</link>
      <comments>https://tproger.ru/articles/react-native-protiv-flutter--chto-luchwe?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Дух айтишной эмо школы]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/react-native-protiv-flutter--chto-luchwe</guid>
      <description><![CDATA[<p>YouTube-блог Fireship сделал обзор на React Native и Flutter, чтобы выяснить, какой фреймворк лучший в мобильной разработке.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/react-native-protiv-flutter--chto-luchwe">React Native против Flutter: что лучше</a>»</p>]]></description>
      <category><![CDATA[iOS]]></category>
      <category><![CDATA[React]]></category>
      <category><![CDATA[Бэкенд]]></category>
      <category><![CDATA[Библиотеки]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Фулстек-разработка: полный цикл]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 08 Feb 2024 09:00:03 GMT</pubDate>
      <content:encoded><![CDATA[<p>YouTube-блог Fireship сделал обзор на React Native и Flutter, чтобы выяснить, какой фреймворк лучший в мобильной разработке.</p><p>Вот, о чём идёт речь в видео:</p><ol><li>Существуют два основных инструмента для создания кроссплатформенных мобильных приложений: Flutter и React Native.</li><li>Flutter и React Native позволяют разрабатывать приложения для iOS, Android и веб из одной кодовой базы, но они сильно различаются по механизму работы и опыту разработчика.<br /></li><li>Автор сравнил оба инструмента, создав одно и то же чат-приложение с использованием Firebase в качестве бэкенда.<br /></li><li>React Native использует JavaScript или TypeScript, в то время как Flutter использует язык Dart, оптимизированный для компиляции на разные платформы.<br /></li><li>Flutter поставляется с обширной библиотекой виджетов и плагинов, в то время как React Native предоставляет базовые компоненты и полагается на сторонние библиотеки.<br /></li><li>React Native использует родные компоненты платформы и JavaScript-мост для взаимодействия с ними, в то время как Flutter использует собственный движок для рендеринга виджетов.<br /></li><li>Разработка в React Native может включать больше сторонних зависимостей и решений, в то время как Flutter предлагает более унифицированный и интегрированный набор инструментов.<br /></li><li>Инструменты разработки Flutter, такие как горячая перезагрузка и сильная типизация, обеспечивают удобную и надежную разработку.<br /></li><li>Flutter, как правило, обеспечивает более высокую производительность по сравнению с React Native благодаря компиляции непосредственно в машинный код без необходимости JavaScript-моста.<br /></li><li>Для большинства приложений различия в производительности между Flutter и React Native будут незаметны для конечного пользователя.<br /></li></ol><p>Ниже — транскрибированный перевод ролика на русском языке.</p><p>Если вы сегодня создаете кросс-платформенное мобильное приложение, то существуют два главных игрока, борющихся за ваше внимание. В красном углу у нас Flutter, а в синем углу у нас React Native.</p><p>Эти инструменты могут достичь той же основной цели: создание приложений для нескольких платформ, таких как iOS, Android и веб, из одного исходного кода.</p><p>Но между ними существует огромная разница как в том, как они работают, так и в опыте разработчика. Независимо от того, что вы выберете, другой автоматически становится вашим архинеприятелем, потому что вы выбираете только абсолютно лучшее.</p><p>Чтобы выяснить, какой из них лучше, я создал точно такое же чат-приложение как с React Native, так и с Flutter, используя Firebase в качестве бэкэнда. В сегодняшнем видео мы подробно сравним функции, инструменты, опыт разработчика, производительность и, конечно же, код.</p><p>К концу видео вы точно узнаете, какой из них лучше подходит для вашей идеологии. Но это не урок построчного кодирования. Если вы хотите научиться создавать эти приложения с нуля, я создал два отдельных профессиональных урока на Fireship, которые научат вас создавать их пошагово.</p><h2>Языки программирования для React Native и Flutter</h2><p>Давайте начнем с сравнения языков программирования между этими двумя фреймворками. В React Native мы пишем приложения на JavaScript, при этом React является обязательной библиотекой пользовательского интерфейса, поэтому это почти как расширение языка JavaScript. Также поддерживается TypeScript, если вы хотите добавить систему типов поверх JavaScript. JavaScript на самом деле никогда не был разработан для создания мобильных приложений, поэтому Flutter был реализован с использованием другого языка, называемого Dart, который оптимизирован для компиляции в несколько платформ с компиляцией как во время выполнения, так и до. Это приводит к различным преимуществам производительности, но это язык, который знают не так многие люди за пределами Flutter. У него синтаксис, который в чем-то напоминает TypeScript, поэтому разработчикам, привыкшим к фигурным скобкам, легко начать работу с ним. Но это главный вопрос, который вам нужно задать себе.</p><p>Хочу ли я изучить совершенно новый язык, или хочу придерживаться того, что я уже знаю?</p><h2>Экосистема React Native и Flutter</h2><p>Теперь давайте посмотрим на экосистему за этими фреймворками. Оба из них являются двумя из самых активно разрабатываемых репозиториев на GitHub в мире.</p><p>React Native от F******k, которую критикуют за то, что она является зловредной технологической корпорацией, в то время как Flutter от Google, которую также критикуют за то, что она является зловредной технологической корпорацией. Создание высококачественных кросс-платформенных мобильных приложений - это чрезвычайно сложная техническая задача, и поэтому вам нужно привлечь зловредную технологическую корпорацию, чтобы сделать все правильно.</p><h2>Философия разработки на React Native и Flutter</h2><p>Но вы заметите огромную разницу в философии разработки. React Native, как и React для веб-приложений, разработана для минимализма. Он предоставляет некоторые базовые компоненты, но оставляет все остальное сообществу с открытым исходным кодом. И это означает, что для полного проекта React Native обычно требуется много сторонних зависимостей, в зависимости от необходимых функций. Flutter, с другой стороны, поставляется с огромной библиотекой виджетов из коробки. И команда Flutter поддерживает множество плагинов, которые вам обычно понадобятся, например, для доступа к камере устройства.</p><p>У Dart также есть менеджер пакетов под названием Pub, и также существует огромная экосистема пакетов с открытым исходным кодом для Flutter. В конечном итоге у них обоих есть огромные сообщества, чтобы сделать практически все, что вы можете себе представить.</p><h2>Архитектура React Native и Flutter</h2><p>Теперь давайте посмотрим на их базовые архитектуры. Во-первых, как работает React Native? Под капотом он запускает два отдельных потока JavaScript. Один - основной поток для запуска вашего приложения на любой нативной платформе, а другой - поток для выполнения бизнес-логики вашего приложения.</p><p>Эти потоки изолированы друг от друга, но иногда им нужно взаимодействовать, поэтому между ними есть мост, через который они могут передавать сериализованные сообщения туда и обратно. Здесь хорошо то, что это позволяет JavaScript-приложению взаимодействовать с нативной платформой. Таким образом, когда React Native рендерит компонент, это действительно нативный компонент на соответствующей платформе. Это не просто веб-сайт React, упакованный как мобильное приложение, это действительно рендеринг нативных компонентов. И это означает, что ваш пользовательский интерфейс будет выглядеть точно так же, как задуманы эти нативные компоненты, даже когда что-то меняется в будущем. Теперь, как работает Flutter? Вместо использования нативных компонентов пользовательского интерфейса, у Flutter есть собственный высокопроизводительный движок рендеринга, построенный на C++ и Skia, который рендерит свои собственные пиксели на экране с скомпилированным нативным кодом, что позволяет ему рендерить пиксель-перфектные версии виджетов iOS и Android, а также позволяет рисовать свои собственные пиксели на экране. Вроде игрового движка, например, Unity.  Это позволяет рисовать плавную графику без необходимости моста, хотя у него есть система под названием платформенные каналы, которая позволяет вам общаться с родной системой, когда вам нужны родные функции или если вы хотите интегрировать родной код. В конце дня, однако, архитектура не имеет большого значения. Важно, чтобы вы создали хороший пользовательский опыт и получили удовольствие от этого.</p><h2>Опыт разработки на React Native и Flutter</h2><p>Итак, теперь давайте сравним опыт разработчика, начиная с начальной настройки. Чтобы начать работу с React Native, вы можете создать новое приложение, запустив npx react-native-init из командной строки, и при желании передать шаблон с чем-то вроде native base, чтобы получить красивый интерфейс изначально. И здесь вы также можете использовать Expo вместо стандартного React Native CLI, чтобы получить более полную отправную точку. Когда вы откроете приложение, вы заметите немало файлов здесь в корневом каталоге.</p><p>Это в основном файлы конфигурации, такие как Metro и Watchmen для горячей перезагрузки. Buck - ваш инструмент сборки, а Babel - для транспиляции вашего JavaScript. Он даже поставляется с flow по умолчанию, поэтому он очень похож на F******k. Исходный код приложения содержится в одном файле app.js, если мы перейдем и откроем этот файл, вы заметите кучу кода React. Это может показаться знакомым, если вы веб-разработчик, и единственное реальное отличие в том, что мы импортируем специальные компоненты из React Native и используем их в JSX вместо типичных элементов HTML. Это наша отправная точка для React Native. Теперь давайте посмотрим на Flutter. После установки Flutter SDK запустите flutter create из командной строки. Вы заметите, что это значительно быстрее, потому что ему не нужно обращаться к NPM для загрузки кучи пакетов.</p><p>Откройте проект в VS Code и убедитесь, что у вас установлено расширение Flutter. Оно фактически автоматически управляет любыми дополнительными пакетами, которые вы устанавливаете, в фоновом режиме. Структура проекта здесь немного упрощена. Ваш основной файл конфигурации - это файл pubspec.yaml, который эквивалентен package JSON в проекте React Native. Здесь вы регистрируете и устанавливаете сторонние пакеты. Исходный код приложения содержится в файле main.dart. Теперь, если вы веб-разработчик, который никогда не работал с TypeScript, этот код может показаться немного сумасшедшим, с ключевыми словами, такими как extends, super и override.</p><p>Но если у вас есть опыт работы с TypeScript, Java или C Sharp, то вы, вероятно, будете чувствовать себя как дома с этим кодом.</p><h2>Инструменты разработки в React Native и Flutter</h2><p>Теперь, когда у нас есть настроенный проект, я хочу поговорить о инструментах, которые действительно важны при создании кросс-платформенных мобильных приложений, потому что без хороших инструментов ваша жизнь будет мизерной. Давайте начнем с запуска приложения React Native. У меня запущен эмулятор Android, затем мне нужно выполнить эту команду ADB, чтобы подключиться к нему. Затем я запускаю npm start, чтобы запустить Metro для отслеживания изменений в моем коде в фоновом режиме. Затем в отдельном терминале введите npm run android, чтобы построить приложение Android. Это установит приложение на эмулятор и будет отслеживать изменения кода в фоновом режиме для автоматического обновления приложения.</p><p>Мы также можем ввести R в терминал watchman, чтобы горячая перезагрузка приложения. Это чрезвычайно полезно, потому что оно сохраняет состояние приложения, сохраняя при этом ваши изменения кода, если вы работаете над дизайном. Это существенно, но когда речь идет о инструментах с React Native, это действительно история "создай свое собственное приключение". Это просто JavaScript ...проект, поэтому вы можете добавить TypeScript или вы можете использовать Ignite CLI для автоматической генерации каркаса, или использовать Expo для быстрого запуска приложения на своем устройстве.</p><p>Приятно иметь много вариантов, но это также может привести к усталости от принятия решений и чрезмерной зависимости от сторонних поставщиков. Теперь, если мы переключимся на приложение Flutter, вы заметите кнопку здесь в VS Code, которая позволяет нам взять эмулятор, настроенный в локальной системе. Затем мы можем открыть терминал и ввести flutter run, и мы также можем горячую перезагрузку, потому что Dart поддерживает компиляцию во время выполнения, также введя R в терминал. Теперь, поскольку у Dart есть звуковая система типов, он способен предоставлять действительно хорошие инструменты при написании вашего кода. Обратите внимание, как при наведении на любой класс он предоставляет полную документацию для него. Но, что более важно, Dart делает действительно сложным написание кода, который приводит к ошибкам во время выполнения.</p><p>Если я попытаюсь передать аргумент с неправильным типом данных, он скажет мне об этом сразу, вместо того чтобы ждать, пока это не станет ошибкой во время выполнения.</p><h2>Код на React Native и Flutter</h2><p>И это особенно важно для мобильных приложений, потому что вы живете и умираете от отзывов в магазинах приложений. Теперь вы также можете добавить TypeScript к React Native, чтобы получить похожие результаты, но Dart делает другие вещи, такие как безопасность null, чтобы сделать ваш код еще более надежным. Еще одна интересная вещь в коде заключается в том, что обе фреймворки создают дерево компонентов или виджетов. В React Native это выглядит как HTML или JSX, где у вас есть тег, например, view, и затем вы добавляете другой компонент внутрь этого, а затем, возможно, еще больше компонентов внутри этого.</p><p>Компоненты могут иметь состояние, которое меняется на протяжении жизненного цикла приложения, и React Native автоматически перерисует пользовательский интерфейс при изменении состояния. Flutter работает точно таким же образом и на самом деле был очень вдохновлен React, но он делает это совершенно по-другому. Вместо функций у вас есть классы, у которых есть метод build, который возвращает дерево виджетов. Каждый виджет просто является экземпляром класса и может иметь различные свойства, которые принимают другие виджеты в качестве аргументов. Таким образом, он делает то же самое, что и React, но это просто другой подход к созданию декларативных пользовательских интерфейсов.</p><p>При ручном кодировании перестройка становится более сложной, на мой взгляд. Вы не можете просто скопировать и вставить компонент, как вы бы сделали в React. Однако у Flutter снова есть очень хорошие инструменты, которые позволяют обернуть и переместить виджеты, просто щелкнув кнопку в VS Code. После создания чат-приложения с обоими фреймворками, одним из недостатков, который я обнаружил в Flutter, является то, что я часто получал глубоко вложенные деревья виджетов, которые трудно... вы всегда можете выделить эту логику в свои собственные пользовательские виджеты, но я просто не нахожу процесс таким интуитивно понятным, как в React, где вы просто создаете новую функцию для каждого пользовательского интерфейса. Теперь проблема с React заключается в том, что часто нет компонента, который делает именно то, что вы хотите сделать.</p><p>Это означает, что вам нужно начать с базового компонента, а затем заставить его делать то, что вы хотите, или установить сторонний пакет. Кроме того, многие библиотеки React несовместимы с React Native. Например, если вы хотите потрясающие анимации с frame или motion, это не сработает в React Native.</p><h2>Производительность React Native и Flutter</h2><p>Теперь последнее, что я хочу рассмотреть, это производительность. Возможно, вы задаетесь вопросом, быстрее ли Flutter, чем React Native?</p><p>И ответ, скорее всего, да. Цель обычно состоит в том, чтобы рендерить 60 кадров в секунду. И поскольку приложения Flutter компилируются непосредственно в машинный код и не требуют моста JavaScript, они, как правило, работают лучше, основываясь на большинстве тестов, которые я смог найти в интернете.</p><p>И, как вы можете видеть, Flutter гораздо ближе к нативной производительности. Однако вам нужно спросить себя, действительно ли производительность имеет значение?</p><p>Для большинства приложений различия в производительности будут незаметны для конечного пользователя. Но, предположим, в React Native вы можете столкнуться с узкими местами в производительности раньше. И если вам действительно важна производительность, вашим лучшим вариантом будет просто перейти к React Native.</p>]]></content:encoded>
    </item>
    <item>
      <title>Flutter: плюсы и минусы использования кросс-платформенной технологии</title>
      <link>https://tproger.ru/articles/flutter-plyusy-i-minusy-ispolzovaniya-kross-platformennoj-tehnologii</link>
      <comments>https://tproger.ru/articles/flutter-plyusy-i-minusy-ispolzovaniya-kross-platformennoj-tehnologii?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Илья Задябин]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/flutter-plyusy-i-minusy-ispolzovaniya-kross-platformennoj-tehnologii</guid>
      <description><![CDATA[<p>Рассказали на примере Flutter, как на самом деле обстоят дела в мире кросс-платформенной разработки, и назвали все плюсы и минусы.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/flutter-plyusy-i-minusy-ispolzovaniya-kross-platformennoj-tehnologii">Flutter: плюсы и минусы использования кросс-платформенной технологии</a>»</p>]]></description>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Fri, 01 Dec 2023 11:42:59 GMT</pubDate>
      <content:encoded><![CDATA[<p>Принято считать, что кросс-платформенные технологии могут облегчить жизнь программистам: забудьте про мучения в разработке приложений сначала под iOS, а потом под Android и еще отдельно под Web. Однако, если бы все было столь просто, миром программирования давно бы всецело управляли кросс-платформы. Как обстоят дела на самом деле рассмотрим сегодня на примере Flutter.</p><p>Илья Задябин, разработчик мобильных приложений, специализирующийся на Flutter и Dart.</p><h2>Что такое Flutter, в чем особенности этой технологии</h2><p>Flutter — это открытая кросс-платформенная технология от Google, предназначенная для создания приложений для iOS, Android, Web и настольных операционных систем из единой кодовой базы. Она использует язык программирования Dart и предоставляет свой собственный набор виджетов для создания интерфейса. Сейчас Flutter поддерживает iOS, Android, Web, Windows, Linux, macOS и с недавнего времнени WebAssembly.</p><p>В основном Flutter применяют для мобильных приложений, потому что фреймворк достаточно недавно обзавёлся поддержкой остальных платформ. Также Flutter поддерживается на “встраеваемых устройствах” (embedded devices), например, Toyota использует эту технологию для мониторов <a href="https://flutter.dev/showcase/toyota">в своих автомобилях</a>.</p><p>Технология зарекомендовала себя на рынке и используется в широком спектре <a href="https://flutter.dev/showcase">приложений</a>.<a href="https://flutter.dev/showcase"> </a>Например, в приложении для электромобилей BMW, Google Pay – команда провела миграцию с нативного кода на Flutter прежде чем выйти на глобальный рынок, Ebay, ByteDance, NuBank, а также в Alibaba.</p><p>Теперь немного про “внутренности” Flutter и про то, почему вообще возможно запускать один и тоже же код на принципиально разных платформах.</p><p>Было бы очень сложно и долго подстраивать технологию под разные API этих платформ, поэтому команда Flutter пошла другим путём.</p><h3>1. Архитектура</h3><p>Flutter использует многоуровневую архитектуру. Верхний слой – фреймворк, состоящий из кода на языке Dart. Нижний слой – движок, написанный преимущественно на языке C++ и обеспечивающий низкоуровневую реализацию основных API Flutter. Наконец, есть Embedder, который интегрирует движок Flutter в различные платформы.</p><h3>2. Процесс рендера</h3><p>В отличие от Android и iOS, где используются элементы, специфичные для каждой платформы, Flutter имеет собственный движок рендеринга. Приложения Flutter рендерят пользовательские интерфейсы с помощью Skia Graphics Engine, что означает, что Flutter рисует каждый элемент UI (виджет) на холсте, предоставляемом каждой платформой.</p><h3>3. Компиляция</h3><p>Flutter использует язык Dart, который компилируется в нативный код. Компиляция в нативный код позволяет Flutter взаимодействовать с платформой без моста JavaScript (как в некоторых других кросс-платформенных решениях), что обеспечивает производительность, близкую к нативной.</p><h3>4. Виджеты</h3><p>Everything in Flutter is a widget, от простого текста до сложной анимации. Эти виджеты не являются родными компонентами Android или iOS, но настроены так, чтобы выглядеть как родные элементы. Из виджетов, как из кирпичей, собирается всё приложение. Такая система может быть более понятной для новых разработчиков.</p><h3>5. Platform Channels</h3><p>Для доступа к специфическим для платформы функциям (камера, GPS, микрофон…) Flutter использует Platform Channels. Эти каналы позволяют приложениям Flutter выполнять действия на iOS или Android с использованием их родных языков программирования (Kotlin для Android, Swift для iOS).</p><h2>Декларативное VS императивное программирование</h2><p>Одной из особенностей Flutter является декларативный стиль описания UI элементов. Сперва про отличия:</p><ul><li><b>Декларативное программирование. </b>Основное внимание уделяется вопросу “что” в коде. Вы описываете то, ЧТО хотите получить, а система (фреймворк или библиотека) занимается деталями того, как это реализовать. Этот стиль абстрагирует процесс управления UI, и разработчику не нужно описывать шаги для достижения конечного результата.</li><li><b>Императивное программирование. </b>Концентрируется на “как”. Процесс состоит из написания кода, описывающего шаги для достижения цели. Разработчик должен описать каждый шаг, который должна выполнить программа, что дает ему больше возможностей для контроля, но также увеличивает сложность.</li></ul><p>Итак, Flutter использует <a href="https://docs.flutter.dev/get-started/flutter-for/declarative">декларативный подход</a> к построению UI. Вот как это работает: UI является отражением состояния. Вы определяете состояние, а пользовательский интерфейс автоматически адаптируется и рендерится в соответствии с этим состоянием. Это означает, что при изменении состояния Flutter точно знает, что изменилось, и может эффективно (быстро) обновлять пользовательский интерфейс.</p><p>Для построения пользовательского интерфейса используется дерево виджетов. Каждый виджет декларирует часть UI, а всё дерево в целом представляет весь интерфейс. При каждом изменении состояния Flutter автоматически перестраивает дерево виджетов, обеспечивая отображение 1:1 текущего состояния и пользовательского интерфейса.</p><p>В отличие от этого, традиционная разработка под Android и iOS использует императивные подходы:</p><ul><li><b>Android.</b> XML-файлы определяют элементы пользовательского интерфейса, которые затем используются в коде на Kotlin. Разработчики явно изменяют свойства компонентов UI и управляют его состоянием.</li><li><b>iOS.</b> С помощью UIKit разработчики создают и управляют компонентами UI (например, UIViews) в Swift. Они отвечают за обновление и рендеринг этих компонентов в зависимости от взаимодействия с пользователем или изменения данных.</li></ul><p>На данный момент Android и iOS тоже переходят к декларативному стилю, используя Jetpack Compose для Android и SwiftUI для iOS. Оба инструмента находятся в активной разработке.</p><h2>Язык Dart и его особенности</h2><p>Во Flutter используется Dart – современный объектно-ориентированный язык программирования, разработанный Google. По словам создателей, Dart оптимизирован для создания пользовательских интерфейсов: в нём используется async-await для изменения UI, в сочетании с возможностью запускать код изолированно от основного потока. Dart использует типизацию с null-safety, сборщик мусора и имеет схожий синтаксис с kotlin, swift, typescript, что делает его простым в изучении.</p><p>Одним из ключевых преимуществ Dart является Hot Reload. Из-за возможности Dart компилироваться в двух режимах AOT (ahead of time) and JIT (just in time) язык позволяет динамически обновлять приложение без необходимости перезапуска. Можно мгновенно видеть, как поменялся UI при изменении кода, что очень удобно и ускоряет разработку.</p><p>Dart может использоваться как для разработки на стороне клиента, так и на стороне сервера. Это упрощает процесс обучения и разработки, поскольку разработчики могут использовать один язык для всего стека приложений. Однако пока что Dart редко выбирают для backend разработки.</p><p>Dart поддерживает асинхронное программирование, что очень важно для современной разработки приложений. Это позволяет приложениям на Flutter выполнять длительные задачи, такие как получение данных из сети, не блокируя UI и не влияя на отзывчивость приложения. Если в других языках для этого используются потоки, то в Dart применяют изоляты.</p><h2>Плюсы использования кросс-платформы</h2><p>Есть целый ряд неоспоримых преимуществ использования кросс-платформенной технологии:</p><ol><li>Гораздо более дружелюбная документация по сравнению с Android и особенно iOS, разработчики Flutter также выпускают еженедельные видео с объяснениями деталей технологии на своём официальном канале.</li><li>Общий код для разных платформ. Flutter позволяет разработчикам использовать один и тот же код для создания приложений для разных платформ, снижая время и стоимость разработки.</li><li>Hot Reload. Эта функция позволяет мгновенно видеть результаты изменений в коде, ускоряя процесс разработки.</li><li>Фреймворки внутри фреймворка. Команда Flutter развивает направление мобильных игр и предлагает воспользоваться <a href="https://flutter.dev/games">Casual Games Toolkit </a>, в котором есть необходимые инструменты для написания собственных игр на 2D движке Flame. Также есть готовый набор решений для написания новостных приложений <a href="https://medium.com/flutter/announcing-the-flutter-news-toolkit-180a0d32c012">Flutter News Toolkit</a>. В нем содержатся наиболее популярные компоненты для создания news app: онбординг, создание учетной записи, лента контента и страницы контента, настройки монетизации, поиск и т.д.</li><li>Экосистема библиотек. Ещё один из плюсов Flutter сообщества – это наличие единого сервиса, на котором хостятся сторонние <a href="https://pub.dev/">библиотеки</a>. Они используются далеко не только для работы с нативным кодом платформ, но и для сложных анимаций, облегченной работы с сетью, навигации и полезными инструментами. Любой желающий может создать свой пакет и разметить его на pub.dev.</li></ol><h2>Ограничения использования кросс-платформы и пути их решения</h2><p>Однако, безусловно, есть и определенные трудности в использовании кросс-платформы при разработке. Часть из них преодолима, другую же часть остается пока только принять как данность.</p><h3>Проблема №1. Большой размер приложения</h3><p>Приложения Flutter могут иметь больший размер файла по сравнению с нативными приложениями. Можно использовать стандартные средства для сжатия ресурсов и ассетов. Также для Android есть возможность догрузить ассеты после установки через Сloud delivery of assets.</p><h3>Проблема №2. Несоответствие “родному” пользовательскому интерфейсу</h3><p>Достичь “родного” поведения экрана может быть сложно, так как Flutter управляет собственным рендерингом. Для решения этой проблемы можно настроить виджеты таким образом, чтобы они в точности соответствовали языку дизайна каждой платформы, и следить за последними тенденциями и рекомендациями по UI для iOS и Android. Большая часть компонентов уже подогнаны командой Flutter под привычный UI платформы.</p><h3>Проблема №3. Задержка при появлении обновлений платформ</h3><p>Иногда в iOS или Android может появиться новая функциональность (например, dynamic island в iOS) и приходится ждать, пока её завезут во Flutter. Благо такие обновления не носят критический характер, а чаще всего другие разработчики оперативно создают пакет для работы с новыми возможностями платформы.</p><h3>Проблема №4. Невозможность разработки мобильных игр</h3><p>Flutter не оптимизирован для 3D игр, но есть возможность создавать 2D игры, используя движок Flame, о котором написано выше.</p><h3>Проблема №5. Ограниченная поддержка некоторых функций устройств.</h3><p>Некоторые встроенные функции устройств могут быть недоступны или требуют дополнительной работы для интеграции. Из-за того, что Flutter не использует активно API платформы, а просто отрисовывает самостоятельно нужные элементы, могут возникнуть проблемы с доступом к функциями устройства, таким как камера, уведомления, микрофон, GPS, шифрованная память и т.д. Для решение этой проблемы можно использовать platform channels, которые позволяют вызывать код платформы (например, Kotlin для Android или Swift для iOS) прямиком из кода Flutter. Это усложняет процесс разработки, потому что помимо языка Dart ещё нужно понимать, как устроена платформа, код в которой нужно вызывать напрямую. Но такие ситуации редки, потому что для большинства случаев уже написаны packages (сторонние библиотеки) членами сообщества.</p><p>Есть и еще одна особенность, о которой мы уже говорили ранее – язык программирования. Dart – нишевый язык, изначально разрабатывался Google как замена JavaScript, но что-то пошло не так. Язык оставался в тени, пока в 2017 году Google не создали на его основе фреймворк Flutter, тем самым дав ему второе дыхание. Dart похож на JavaScript, поэтому будет понятен и большинству новичков, и опытным разработчикам.</p><p>Недостатки языка Dart компенсируются кодогенерацией, к примеру в языке отсутствуют дата классы (аналог data class в Kotlin), но при помощи сторонних пакетов можно воспроизвести нужные методы, сгенерировав их для обычных классов Dart. Также кодогенерацию можно использовать для сериализации/десериализации. В Dart даже есть аналог Retrofit, который будет знаком разработчикам Android. До недавнего времени разработчики генерировали даже функциональность sealed классов, но их ввели в Dart 3, и необходимость отпала.</p><p>Ещё один из плюсов Dart это возможность замкнуть на нём весь цикл разработки приложения и использовать Dart для написания backend при помощи <a href="https://dartfrog.vgv.dev/">Dart Frog</a>. Тем самым язык может стать более популярным и привлечь больше разработчиков, что скажется в положительном ключе на развитии Flutter.</p>]]></content:encoded>
    </item>
    <item>
      <title>Полезные материалы о Flutter и Dart-разработке</title>
      <link>https://tproger.ru/articles/poleznye-materialy-o-flutter-i-dart-razrabotke</link>
      <comments>https://tproger.ru/articles/poleznye-materialy-o-flutter-i-dart-razrabotke?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный Программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/poleznye-materialy-o-flutter-i-dart-razrabotke</guid>
      <description><![CDATA[<p>Собрали все самые полезные каналы в Telegram и Youtube про разработку во Flutter и Dart, а также книги, уроки и документацию.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/poleznye-materialy-o-flutter-i-dart-razrabotke">Полезные материалы о Flutter и Dart-разработке</a>»</p>]]></description>
      <category><![CDATA[Обучение программированию]]></category>
      <category><![CDATA[Гостевая публикация]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Dart]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Mon, 19 Dec 2022 12:30:58 GMT</pubDate>
      <content:encoded><![CDATA[<p>Hola, Amigos! На связи Flutter-devы из Amiga, компании по заказной разработке.</p><p>Ресерчили интернет в поисках классных материалов по Flutter и поняли, что подробных и понятных дайджестов мало. Поэтому собрали все самые полезные ссылки, книги и каналы о Flutter и заодно Dart. Надеюсь, будет полезно!</p><p>Кстати, мы тоже ведем свой телеграм-канал о Flutter —  <a href="https://t.me/flutter_amiga">Flutter.Много.</a> Там мы рассказываем о рабочих моментах, факапах и достижениях, делимся своим мнением и помогаем разобраться с Flutter. Подписывайтесь!</p><h2>YouTube-каналы о Flutter</h2><p><a href="https://www.youtube.com/FlutterDev">FlutterDev</a> — официальный канал о Flutter от создателей этой кроссплатоформы. Ролики на английском языке, но есть субтитры на русском. Еще со знанием английского можно посмотреть <a href="https://www.youtube.com/@JohannesMilke/videos">канал Johannes Milke</a>, он делает сравнения фичей, рассказывает об обновлениях и не самых очевидных решениях в разработке.</p><p>Обучение Flutter на русском языке есть <a href="https://www.youtube.com/@konstantinkokorin">на канале Константина Кокорина</a>, там в среднем несколько раз в неделю выходят выпуски с обучением разработки на Flutter на русском языке. Еще неплохие уроки есть на канале <a href="https://www.youtube.com/channel/UCZz15W_tnfs4DxVsWCrTHJw">LazyLoad Dart &amp; Flutter</a>.</p><p>На канале NetNinja можно найти <a href="https://www.youtube.com/playlist?list=PL4cUxeGkcC9gP1qg8yj-Jokef29VRCLt1">уроки по анимации на Flutter</a>, <a href="https://www.youtube.com/playlist?list=PL4cUxeGkcC9jLYyp2Aoh6hcWuxFDX6PBJ">туториал для начинающих</a> или <a href="https://www.youtube.com/playlist?list=PL4cUxeGkcC9j--TKIdkb3ISfRbJeJYQwC">уроки по применению Firebase на Flutter</a>. В целом у NetNinja много обучалок о разных технологиях: они понятные, простые и красиво оформлены.</p><h2>Телеграм-каналы о Flutter</h2><p><a href="https://t.me/FlutterDevRu">Flutter for Dev</a> — русскоязычный канал, который публикует статьи по Flutter, актуальные анонсы, статьи и многое другое из мира кроссплатформы.</p><p><a href="https://t.me/ohmyflutter">Oh, my flutter </a>— тематика схожа с каналом выше, материалы выходят каждый день, есть удобный поиск по тегам. А еще у канала есть англоязычная версия.</p><p><a href="https://t.me/flutter_amiga">Flutter.Много.</a> — канал, в которым я и мои коллеги пишем о том, что такое быть Flutter-разработчиками, рассказываем о внутренней кухне проектов, погружаем в историю и разработку на Flutter.</p><p><a href="https://t.me/dartside">Dart side</a> — англоязычный ресурс с полезными ссылками на различные статьи и видео, причем подборки достаточно большие.</p><p><a href="https://t.me/DiaryFlutterDev">Дневник Flutter-разработчика</a> — в формате дневника Flutter-dev делиться не только полезными ссылками, но и рассказывает о своем дне (куда ходил, что ел и что делал).</p><p>Чаты по Flutter в русскоговорящем сообществе у нас более активные, чем каналы. Если нужно о чем-то спросить — можно задать вопрос в<a href="https://t.me/rudart"> Dart &amp; Flutter</a> или <a href="https://t.me/dartlang_group">Dart/Flutter</a>. А для вопросов по поводу обучения Flutter или Dart можно писать <a href="https://t.me/learn_flutter">Dart и Flutter</a>.</p><p>А еще есть целое хранилище данных у<a href="https://t.me/learnDartFlutter"> LazyLoad Dart &amp; Flutter</a>. Внутри группы есть несколько отдельных чатов о Flutter, Dart, процессах обучения и еще много всего.</p><h2>Книги</h2><p>Книг о разработке выпущено немало, но толковых — единицы. Поэтому советуем вам только то, что прочитали, оценили и применили на практике с положительным результатом.</p><p><a href="https://www.manning.com/books/flutter-in-action?query=flutter">«Flutter in action» Эрика Виндмилла</a>. Очень «для начинающих», но довольно неплохая.</p><p>А еще советуем почитать <a href="https://www.labirint.ru/books/634082/">«Чистая архитектура»</a> и <a href="https://www.labirint.ru/books/642466/">«Чистый код»</a> Роберта Мартина. Это база. Буквально заповеди толкового разработчика.</p><h2>Еще полезные ссылки</h2><p>Маст рид: <a href="https://flutter.dev/">официальный сайт с документацией Flutter</a> и <a href="https://dart.dev/">официальный сайт с документацией Dart</a>. Точно понадобится. <a href="https://medium.com/flutter">Официальный Medium Flutter</a> и <a href="https://medium.com/flutter-community">коммьюнити</a> там.</p>]]></content:encoded>
    </item>
    <item>
      <title>«Пожалуй, Flutter я позанимаюсь в следующей жизни». Из Android во Flutter: безумие или дальновидный шаг</title>
      <link>https://tproger.ru/articles/from-android-to-flutter</link>
      <comments>https://tproger.ru/articles/from-android-to-flutter?scrollTo=tproger-comments</comments>
      <dc:creator><![CDATA[Типичный программист]]></dc:creator>
      <guid isPermaLink="true">https://tproger.ru/articles/from-android-to-flutter</guid>
      <description><![CDATA[<p>Евгений Сатуров из Surf пять лет писал нативный Android, а затем перешёл на Flutter: о первых шагах во фреймворке и его плюсах в интервью.</p><p>— Читать дальше «<a rel="follow" href="https://tproger.ru/articles/from-android-to-flutter">«Пожалуй, Flutter я позанимаюсь в следующей жизни». Из Android во Flutter: безумие или дальновидный шаг</a>»</p>]]></description>
      <category><![CDATA[Мобильная разработка]]></category>
      <category><![CDATA[Flutter]]></category>
      <category><![CDATA[Android]]></category>
      <category><![CDATA[Статьи]]></category>
      <slash:comments>0</slash:comments>
      <pubDate>Thu, 13 Aug 2020 05:48:40 GMT</pubDate>
      <content:encoded><![CDATA[<p>В IT всё постоянно меняется. Ещё каких-то два года назад никто не воспринимал Flutter всерьёз, а сейчас многие разработчики заинтересовались этим фреймворком. В их числе Евгений Сатуров из <a href="https://surf.ru/">Surf</a>. Он был успешным Android-разработчиком, а потом перешёл на Flutter.</p><p>В интервью для Android Broadcast Евгений рассказал, как решился на смену деятельности. В этой статье мы отобразили лишь часть интервью — про первые шаги во Flutter и плюсы фреймворка. Если вам интересны технические детали, инструменты и сравнения, <a href="https://www.youtube.com/watch?v=BiX5BwWfcVY">послушайте подкаст</a>.</p><h2>Как маленькое хобби стало работой</h2><p>Евгений пять лет работал разработчиком на нативном Android. Однажды на конференции он узнал про Flutter, а через некоторое время решил попробовать написать код.</p><p>Flutter — кросс-платформа Google, которую получили в результате рефакторинга Chrome. Разработчики выпилили оттуда практически все: тонны legacy code, кучу непонятных проверок. Chrome потерял возможность рендерить HTML, но стал в 20 раз быстрее. Недолго думая, Google презентовал Flutter в качестве отдельного мобильного фреймворка. Сейчас на Flutter можно писать приложения практически на все доступные платформы.</p><p>Surf, в котором Евгений был тимлидом Android-разработчиков, исповедовал только нативную разработку. Поэтому на первых порах Flutter был просто хобби.</p><p>После релиза платформы в 2018 году в Surf начались серьёзные разговоры о том, как применить Flutter в продакшене. Так хобби начало становиться работой.</p><p>Чтобы наработать опыт и набить руку, команда Евгения переписала на Flutter один из прошлых проектов Surf. Ребята хотели проверить, смогут ли они сделать настоящее приложение сами — с имеющимися у них на тот момент знаниями и ресурсами. Сейчас, когда Евгений смотрит на код, ему кажется, что он ужасен. Но через этот этап проходят все разработчики.</p><p>Вскоре ребята получили от руководства разрешение опробовать технологию на реальном проекте. На эксперимент согласилась региональная сеть продуктовых магазинов — для них это была хорошая возможность сэкономить.</p><p>Проект был простой: на 15—20 экранов. В нём можно было посмотреть каталог, акции, баланс карты лояльности, оценить покупку, найти ближайший магазин на карте. Также была возможность отсканировать штрих-код товара на полке, чтобы быстро найти его в каталоге.</p><p>Пока что этот проект не вышел в публичный релиз — заказчик проводит закрытое тестирование. Тем не менее, это был отличный старт.</p><p>Сейчас у Surf в портфеле пять Flutter-проектов: и небольшие, и огромные — на 150 экранов и больше. Это приложения для ритейла, e-commerce и финтеха. Несмотря на то, что клиенты из банковской сферы достаточно консервативны, ребятам удалось донести плюсы Flutter-разработки даже до них.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/image1.jpg" alt="" /></figure><p>Фото с мероприятия CodeFestX</p><h2>Мученики и новаторы — заказчики приложений на Flutter</h2><p>Не у всех компаний есть деньги, чтобы поддерживать долгосрочные нативные мобильные проекты. Особенно когда речь идет о двух больших приложениях на Android и iOS. Ведь код нужно написать, протестировать, зарелизить, поддерживать, апдейтить и так далее. Это очень и очень дорого. Поэтому так или иначе заказчики приходят к кросс-платформе — но делают это не всегда от хорошей жизни.</p><p>Евгений делит клиентов, которые интересуются Flutter, на две категории.</p><ul><li>Мученики. Они мучительно долго тянут нативные проекты. Тратят время, силы, деньги, ругаются с подрядчиком. Мечтают об оптимизации и новой прекрасной жизни. Речь идет не только о средних по размеру компаниях. Иногда и большие компании располагают ограниченным бюджетом на проекты и ищут кросс-платформенное решение. Так они находят Flutter.</li><li>Новаторы. Быстро перевели проект на какую-то кросс-платформу — но не на Flutter — и столкнулись с проблемами. Они настрадались с новыми технологиями, но идея кросс-платформы для них либо не имеет альтернатив из-за стоимости, либо просто нравится.</li></ul><p>В обоих случаях клиентам хочется оптимизировать процессы и снизить затраты на разработку — и в этом им пригодится Flutter.</p><h2>Подкапотная магия Flutter</h2><p>Приложения на Flutter отличаются плавностью и разнообразием анимации, рендерингом экрана с частотой до 120fps. При этом от программиста не требуется особых усилий по специальной оптимизации кода. Евгений рассказал, за счëт чего достигается этот вау-эффект.</p><p>C технической стороны Android-сборка Flutter-приложения является Single Activity приложением. В нем есть единственный view, в котором и происходит «подкапотная магия». Само приложение подключается туда через NDK. А дальше разработчик уже работает с Dart-кодом так, как будто бы он является частью Android-приложения.</p><p>Благодаря Single activity вы получаете возможности проигрывать любые анимации перехода и прочие вещи. Android-разработчики поймут, насколько это облегчает жизнь программисту.</p><p>Ещё один плюс Flutter — упрощение жизненного цикла виджетов, который спрятан глубоко под капот. Вместо различных view-элементов, как в Android, у Flutter всё приложение — это виджет, который состоит из абсолютно иерархически идентичных виджетов (1-й экран, 2-й экран и т.д.) Внутри каждого у вас будут другие виджеты, которые представляют собой конкретные элементы: кнопки, checkbox, textview, картинки и т.д.</p><p>Механика рендеринга Flutter очень похожа на рендеринг элементов списка в RecyclerView: у каждого элемента есть идентификатор, который вычисляется по хешам состояния. Речь именно про state, про слепок данных, который соответствует элементу интерфейса. Если при очередном такте отрисовки предыдущий state отличается от текущего, это значит, что наш UI нужно перерисовать.</p><p>Например, в некотором поле counter, которое относится к состоянию нашего виджета, было число 1, а теперь число 2. Получается, что цифру 1 нам надо перерисовать на цифру 2. В итоге виджет будет отрисован заново. Но если обнаружится соответствие наших state, то виджет никто трогать не будет. Никакой перерисовки не произойдёт.</p><p>Таким образом, мы перерисовываем только ту часть дерева виджетов, которая реально изменилась. За счёт этого достигается быстродействие Flutter-приложения.</p><h2>Терминатор против робокопа: чем Dart лучше Kotlin</h2><p>Android-разработчики часто спрашивают, почему во Flutter используется язык Dart, а не Kotlin, который стал глотком свежего воздуха после Java. Они даже шутят: «Если там надо точку с запятой писать обязательно, то нет, пожалуй, я Flutter в следующей жизни позанимаюсь».</p><p>Разработчики уже искали Dart на кладбище проектов Google, а в конце прошлого года внезапно обнаружили его в рейтинге самых быстрорастущих языков в мире по версии GitHub.</p><p>Евгений выделяет две причины, почему во Flutter используется Dart, а не Kotlin:</p><ol><li>Dart — детище Google. Если Flutter-команде Google что-то надо, она идёт к коллегам из Dart-отдела и говорит: «Ребята, сделайте». Они говорят «окей» — вот и всё. Вот эта простота, контроль над языком — это очень большой плюс. Kotlin не является собственностью компании Google — это разработка JetBrains.</li><li>Dart умеет и в AOT-, и в JIT-компиляцию. Это можно прочувствовать буквально на первом «Hello,  world!» после скачивания Android Studio и установки туда Dart SDK и Flutter SDK. Любые изменения видны на девайсе через 1-2 секунды после нажатия на hot reload. Плюс этот hot reload еще и stateful: даже если вы перезапустите приложение в момент, когда ввели текст в текстовое поле, состояние экрана вы не потеряете.</li></ol><p>Сейчас каждая версия, каждая новая итерация приносит что-то новое. И, что ещё интересно, выход новой версии Dart привязан к выходу новой версии Flutter.</p><p>В текущих версиях идет процесс Kotlin-изации языка. Это связано с тем, что в Dart-community очень много мобильных разработчиков, которые привыкли к плюсам Kotlin. При этом им нравится Flutter, но не нравится Dart.</p><p>К счастью, разработчики Dart воспрянули духом от наплыва людей, которые захотели писать на языке, и решили, что нужно радовать публику. Поэтому время от времени они выкатывают фичи, которые все так просят. К примеру, в версии 2.7 появились extension-функции. Null-Safety уже в работе и выглядит точь-в-точь, как в Kotlin: синтаксис идентичен, с виду всё абсолютно так же. Extensions чуточку отличаются, но несущественно.</p><p>Команда Dart идет на диалог на GitHub. У языка есть открытый репозиторий <a href="https://github.com/dart-lang">dart-lang</a>, где происходит разработка и предлагаются новые фичи. Есть публичный Roadmap, где перечислены планы на ближайшие версии и обозримое будущее.</p><h2>Архитектура Flutter: ваниль, хардкор и ящички</h2><p>Когда появился Android, про архитектуру вообще мало кто слышал. Приложения достаточно долго писались без какой-то глубокой архитектурной мысли: вот activity, пишем там код бизнес-логики. Лет пять назад начали внедрять Model-View-Presenter архитектуру (МVP). Потом Model-View-View Model (MVVM), потом другие архитектуры.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/image3.jpg" alt="" /></figure><p>Фото Сергея Короткова</p><p>Во Flutter комьюнити пришло уже с серьёзным багажом знаний. Нормой стало писать приложения на 100+ экранов командой из 10+ человек — без архитектуры тут никак. В сообществе популярны несколько паттернов.</p><ul><li>Vanilla — для тех, кто не заморачивается с архитектурой и использует стандартные подходы, которые предлагает фреймворк. Суперпримитивная архитектура для максимально простых приложений. Подойдёт для того, чтобы сделать что-то несложное — какие-то обучающие сэмплы.</li><li>Архитектура-блок — в основе концепции лежит идея разбиения приложения на ящички с бизнес-логикой и построение связей между ними.</li><li>Redux — хардкорный вариант, который пришёл во Flutter из веба. У такого подхода уже есть много вариаций, например Fish Redux. В основном его используют ребята из Поднебесной со всеми вытекающими последствиями в виде репозиториев на иероглифах и отсутствия внятной информации.</li></ul><p>Во Flutter-команде Surf есть <a href="https://habr.com/ru/company/surfstudio/blog/510308/">собственный архитектурный модуль</a>. Он базируется на идее, которую ребята позаимствовали из Android-проектов. На его основе можно очень быстро развернуть и начать писать приложение с удобной архитектурой.</p><p>Евгений говорит, что во Flutter можно реализовать всё что угодно — любую концепцию, которая вам близка. При этом лучше опираться на нужды проекта и поменьше думать о том, что «на Android надо было бы сделать вот так».</p><h2>В чем кайф и выгода для разработчика</h2><p>Flutter — новая технология. На рынке труда ничтожно мало разработчиков: по ключевому слову «Flutter» — около 160 резюме на всё СНГ. Из них подавляющее большинство — самоучки и люди с самым разным бэкграундом. В команде Surf есть люди, пришедшие во Flutter из React Native, Spring, Delphi и т.д. Это отличный шанс войти в новую технологию на начальном этапе и быстро стать востребованным специалистом. Конкуренция почти нулевая.</p><p>Переход на Flutter — это возможность изучить что-то новое и получить толчок к развитию. Обычно в разработке используются наработанные решения. C каждым проектом процесс становится примитивнее: реже появляются мысли копать глубже, узнавать, как всё работает. Начинается гонка за скоростью. Это неплохо с точки зрения бизнеса, но тормозит профессиональное развитие: технологии быстро меняются, а разработчик застревает на месте.</p><figure><img src="https://media.tproger.ru/uploads/2020/08/image2-1.png" alt="" /></figure><p>Изображение Евгения Сатурова</p><h2>Хочу во Flutter, что дальше</h2><p>Бытует мнение, что, изучив Dart и фреймворк, можно быстро начать писать Flutter-приложения любой сложности. Это серьезное заблуждение. Для сложных кросс-платформенных проектов нужны знания в iOS и Android. Всегда будут какие-то платформенные возможности устройств, с которыми нужно работать по-особенному, писать уникальный код для управления интерфейсами девайса. Изучение всех этих нюансов требует значительного количества времени.</p><p>Если вы решите дать Flutter шанс, то мы рекомендуем начать с пары простых вещей.</p><p>Во-первых, нужно изучить Dart. Синтаксис похож на все остальные объектно-ориентированные языки. Например, перейдя с Java на Dart вы, скорее всего, даже немножко воспрянете духом. С другой стороны, перейдя с Kotlin на Dart, вы почувствуете лёгкий даунгрейд.</p><p>Рекомендуем посмотреть <a href="https://dart.dev/guides/language/language-tour">Language Tour</a> на официальном сайте Dart — это поможет быстро сориентироваться, познакомиться с основными конструкциями и особенностями языка. Также там есть <a href="https://dartpad.dev/">DartPad</a> (онлайн Code Editor), где можно запускать сниппеты и смотреть результаты.</p><p>Во-вторых, познакомьтесь с Flutter. У фреймворка просто феноменальная <a href="https://flutter.dev/docs">документация</a>, написанная с большой любовью. Её можно читать, как книгу. Переходя по ссылкам и якорям туда-сюда, вы постепенно изучите всё, что нужно для старта. Есть даже <a href="https://flutter.dev/docs/cookbook">Cookbook</a> c конкретным примерами: поработать с сетью, кинуть запрос на сервер, скачать картинку, показать её, поработать с GPS, с камерой и так далее — всё подробно описано.</p><p>У Flutter есть публичное хранилище библиотек, и сообщество активно им пользуется. Если вам не удалось найти подходящий пакет там, значит, его попросту нет.Ежедневно там появляются десятки новых библиотек самого разного качества. Чтобы отделить зерна от плевел, Google ввёл две программы сертификации.Сертификация доверенных авторов — кандидаты выполняют ряд требований, проходят проверку и получают соответствующую отметку в профиле.Бейджик для лучших библиотек — награда за качественный материал, некий state of art. Библиотеки оцениваются по большому чек-листу, автор должен иметь статус доверенного разработчика.В хранилище — порядка 15-20 тысяч библиотек, и доверенных авторов достаточно много. Но лучших библиотек — около 15 штук на весь паб.</p><p>Хотите узнать больше про технические фишки Flutter — советуем прочитать вводную статью Евгения Сатурова и Артёма Зайцева «<a href="https://habr.com/ru/company/google/blog/426701/">Flutter — новый взгляд на кроссплатформенную разработку</a>».</p><p>Чтобы быть в курсе трендов Flutter и поближе познакомиться с комьюнити, рекомендуем подписаться на <a href="https://soundcloud.com/flutterdevpodcast">Flutter Dev Podcast</a>, который Евгений Сатуров ведёт с коллегами.</p>]]></content:encoded>
    </item>
  </channel>
</rss>