Dart
Dart — язык программирования, который создали для использования в веб-разработке. Идея его создания — постепенно заменить популярный язык JavaScript: Dart позиционируется как решение, лишенное ключевых недостатков JS.

Освойте профессию «Frontend-разработчик»
Что такое Dart
Dart считается языком общего назначения, но его создатели ориентировали его в первую очередь на фронтенд: создание интерфейсов и взаимодействие с браузером. А собственная платформа Dart VM призвана заменить Node.js — инструмент, с помощью которого пишут код на JavaScript для серверной части.
Это высокоуровневый язык: он оперирует абстрактными понятиями, далекими от «железа», но близкими к человеку. Поэтому код на Dart лаконичный и понятный, а синтаксис легко освоить. Особенно удобным Dart считается для людей, которые до этого уже изучали другие языки программирования.
Создатели Dart — компания Google, которая также придумала язык Go. У Dart открытый исходный код, язык полностью бесплатный и свободно распространяется.
Профессия / 9 месяцев
Frontend-разработчик
Создавайте интерфейсы сервисов, которыми пользуются все

Для чего применяется язык Dart
Так как основная идея создания Dart — заменить JavaScript, сам по себе язык ориентирован на веб-разработку. Во встроенных инструментах языка много средств для работы с браузером и интерфейсами, веб-страницами — словом, фронтенд-частью разработки. В то же время в нем есть и инструменты для бэкенда и серверного программирования.
Но пока в веб-программировании, по крайней мере в России, Dart не прижился. В основном разработчиков на этом языке ищут в проектах по мобильной разработке. Дело в том, что на основе Dart написан Flutter — популярный фреймворк для создания мобильных приложений. Поэтому большинство вакансий по Dart — это работа с Flutter и с приложениями под iOS или Android.
В этом нет ничего удивительного. Возможности Dart для создания интерфейсов легко применить в мобильной разработке: они позволяют удобно и быстро создавать приложения.
Кроме того, на Dart написана надстройка CSS под названием SASS. Ею пользуются фронтенд-разработчики для более удобной верстки.
Особенности Dart
Ориентированность на создание интерфейсов. Dart создавался как язык для интерфейсов, поэтому в нем есть много фишек для их разработки. Сейчас эта особенность нашла применение в программировании мобильных приложений: создавать визуальный интерфейс с помощью Dart довольно удобно. Идея создателей языка была в том, чтобы уменьшить количество переключений между разметкой и кодом — чтобы разработчик не терял времени и не отвлекался. На это и направлены некоторые фишки языка. Например, при компилировании в JavaScript автоматически создается шаблонная HTML-страница с разметкой. Ее сразу можно открыть в браузере и посмотреть, что получилось.
Наследие C и C++. Dart испытал сильное влияние системных языков C и C++, и это нашло отражение в его синтаксисе. Он C-подобный: это значит, что правила написания кода и его структура похожи на C. Хотя Dart проще в освоении и ориентирован на другие цели, он унаследовал некоторые важные элементы: например, основной блок программы заключается в функцию main().
Факультативная типизация. Типизация в языках программирования бывает статической и динамической. В первом случае разработчик должен сам указывать, к какому типу будет относиться переменная: число, строка, массив или что-то еще. Во втором случае язык решает это сам на основании того, какие данные записал в переменную разработчик.
В Dart объединили эти подходы — типизация там факультативная. Это значит, что разработчик может указать тип при создании переменной, а может не указывать — допустимы оба подхода. Какой из них лучше использовать, зависит от задачи.
Компилируемость. В отличие от интерпретируемого JavaScript, Dart — компилируемый язык. Это значит, что код на нем проходит через специальную программу-переводчик — компилятор. Она переводит написанное в машинные коды, которые понимает операционная система, поэтому язык работает быстро и может активнее взаимодействовать с ОС.
Два вида компиляции.
- AOT (ahead of time, «прежде времени») — статическая, или опережающая компиляция. Написанная программа целиком переводится в машинные коды, и только после этого ее можно запустить. Это классический вариант компиляции, именно он используется в C++ и большинстве компилируемых языков.
- JIT (just in time, «точно вовремя») — динамическая компиляция. Программа компилируется по частям, и скомпилированные части тут же выполняются. Это роднит идею с интерпретацией — другим подходом к исполнению, когда специальная программа-интерпретатор исполняет код построчно. Обычно JIT используется в языках с байт-кодом, таких как Java.
Программа, скомпилированная AOT, быстрее запускается и работает, но такая компиляция замедляет разработку. После каждого изменения разработчик должен перекомпилировать код полностью — а это лишнее время. JIT, наоборот, ускоряет цикл разработки, но сама по себе программа запускается медленнее и требует больше ресурсов.
Поэтому в Dart и ввели оба вида компиляции: JIT для процесса разработки и AOT для финальной реализации уже готового продукта. Это нужно, чтобы экономить время и совмещать плюсы обоих типов.

Станьте Frontend-разработчиком
и создавайте интерфейсы сервисов, которыми пользуются все
Классическое ООП. В Dart реализован классический подход к объектно-ориентированному программированию, которое сейчас считается одной из наиболее популярных парадигм. В нем есть классы, в том числе абстрактные, реализовано наследование — все это без нововведений и экспериментов, так, как предписывает парадигма. Поэтому писать ООП-код в Dart довольно удобно: не приходится придумывать «костыли» и бороться с особенностями языка.
Изоляторы. Dart — однопоточный язык. Это значит, что все программы на нем выполняются в едином потоке действий, а не в нескольких. Однопоточность тоже роднит его с JavaScript. Но иногда процессы нужно распараллеливать, чтобы несколько действий могли выполняться одновременно. Для этого в Dart реализован механизм изоляторов (isolate). Иногда их еще переводят как изоляты.
Изолятор — это сущность, которая выполняет какие-то действия. У каждого изолятора своя область памяти, он может выполняться одновременно с другими и обмениваться с ними данными. Это своеобразные виртуальные потоки, созданные на более высоком уровне абстракции, чем настоящие.
Управляет ими Event Loop — процесс, который работает, пока открыта программа, и поочередно выполняет код внутри разных изоляторов. Он работает с очередью, действующей по принципу FIFO: «первый вошел, первый вышел». То есть тот процесс, который «пришел» в очередь раньше, и выполнится раньше других. Очередей две: для простых коротких действий и для блоков кода, которые должны выполниться в ответ на какое-то внешнее событие.
Горячая перезагрузка. Удобная особенность Dart — горячая перезагрузка, или hot reload. Термин означает, что код программы можно откорректировать, пока она запущена — и изменения внесутся «на ходу». Для этого не понадобится открывать и снова закрывать программу. В JavaScript и похожих языках тоже есть инструменты для hot reload, но там приходится использовать внешние решения, а в Dart эта возможность встроена изначально. Поэтому горячая перезагрузка в этом языке работает быстрее и эффективнее.
Dart и Dart 2
Современная версия языка называется Dart 2. Она вышла в 2018 году и отличается от более старой версии: в ней улучшили систему типов, сделали синтаксис лаконичнее, добавили новые возможности для создания клиентской части приложений. Инструменты новой версии позволяют реже переключаться между разметкой и кодом, а сущности можно описывать короче.
С выходом Dart 2 язык снова испытал взлет популярности. Сейчас новая версия считается более актуальной, поэтому если разработчики говорят про Dart, чаще всего они имеют в виду Dart 2.
Что такое Flutter и как он связан с Dart
Flutter — один из наиболее популярных фреймворков на Dart. Обычно именно с ним связаны вакансии разработчиков на этом языке. Фреймворк и SDK (набор средств разработки) предназначены для создания приложений под iOS и Android.
Особенность Flutter в том, что он позволяет имитировать нативную разработку под мобильные ОС. Это значит, что с помощью этого фреймворка и SDK можно создавать приложения, использующие системные элементы iOS и Android — они будут быстрыми, удобными и фактически неотличимыми от по-настоящему нативных программ.
Во Flutter легко создавать интерфейсы — в SDK есть визуальные компоненты, с помощью которых можно «собрать» дизайн. Код пишется на Dart, хотя движок Flutter написан на C++.
Пока что Flutter не так часто используется для создания приложений, как Java, Kotlin и Swift, но это интересный и перспективный вариант для мобильной разработки.
Dart и JavaScript
В отличие от других языков, созданных как альтернатива JS, Dart не разрабатывался на его основе. Это полностью самостоятельный язык программирования, независимый от JavaScript. Несмотря на схожесть синтаксиса и назначения, языки не связаны.
Тем не менее код на Dart можно скомпилировать в код на JavaScript — перевести с помощью специальной утилиты, встроенной в язык. Это сделано потому, что браузеры пока понимают только JS, а код на Dart выполнить не смогут. Так что разработчик может написать код для фронтенда на Dart, а потом автоматически преобразовать его в JavaScript и запустить в браузере.
Сможет ли Dart заменить JavaScript
Несмотря на то что Dart позиционировался как аналог JavaScript, пока что JS остается лидером в веб-разработке и самым используемым языком в мире. Дело в том, что заменить его не так просто. Веб-браузеры умеют обрабатывать только JS, а чтобы «научить» их понимать другие языки, понадобится серьезно их переписывать. Dart пока не настолько популярен, чтобы браузеры пошли на такие масштабные нововведения ради него.
Поэтому, даже если написать клиентскую часть сайта на Dart, код все равно понадобится компилировать в JavaScript. Поэтому же преимущественная область использования Dart сейчас — мобильная разработка, а не веб.
Некоторые разработчики считают, что за Dart будущее и со временем интернет перейдет на него. Но ожидать, что он заменит JavaScript в течение ближайших десятилетий, не стоит. Поэтому JS останется востребованным еще долго — хотя веб-разработчики считают, что на Dart стоит обратить внимание.

Станьте Frontend-разработчиком
и создавайте интерфейсы сервисов, которыми пользуются все
Перспективы Dart
Сейчас Dart не входит даже в топ-20 самых часто используемых языков программирования. Но некоторые считают, что у него большое будущее. Причин этому три:
- Он удобен для разработки интерфейсов и в принципе для веб-программирования, при этом лишен части недостатков более популярного JavaScript.
- Сам по себе язык простой и понятный, его легко изучить и начать применять в проектах.
- Язык активно продвигает Google, а поддержка крупной корпорации — хороший стимул для развития технологии.
Несмотря на это, в ближайшие несколько лет сфера применения Dart скорее всего не изменится: мобильные приложения, созданные в экосистеме Flutter. На эту область и стоит рассчитывать, если вы хотите учить язык.
Преимущества Dart
- Удобство. На языке просто писать, у него лаконичный синтаксис, понятный разработчикам.
- Простота освоения. Разработчики говорят, что освоить Dart легко, в особенности если до этого у человека был опыт программирования.
- Широкие возможности. В языке много особенностей и фишек, расширяющих возможности и облегчающих разработку.
- Высокая производительность. Dart компилируемый, поэтому быстрый и мощный. Он нормально работает и на клиенте, и на сервере.
- Поддержка Google. Корпорация поддерживает и рекламирует язык, стремится повысить его популярность. Поэтому у Dart отличная документация и туториалы.
Недостатки Dart
- Низкая популярность. К сожалению, вакансий на Dart все еще немного: в России их всего несколько десятков, и в основном они включают в себя разработку на Flutter. Но, возможно, в ближайшие годы язык станет популярнее, и разработчики на нем будут нужны в большем количестве.
- Небольшое комьюнити. Эта проблема — следствие предыдущей: разработчиков на Dart мало, поэтому сообщество у языка небольшое. Людей в нем мало, и со стороны комьюнити язык развивается не так активно, как мог бы.
- Неспособность полностью заменить JS. Dart все еще не может стать аналогом JavaScript и вряд ли сможет в ближайшие годы. Он не выполняется в популярных браузерах, а фреймворков и библиотек для него пока слишком мало, чтобы покрыть все возможности экосистемы JS.
Стоит ли изучать язык Dart
Считается, что в большинстве случаев изучение Dart — идея чисто факультативная, если вы не пишете на Flutter. Но мобильным разработчикам этот язык будет полезен: на Flutter можно создавать мощные приложения, а работает он на Dart. Веб-разработчикам же советуют изучать Dart по собственному желанию — на случай если язык действительно начнет активно использоваться в веб-разработке.
Вакансий непосредственно по Dart немного, поэтому его не советуют изучать в качестве первого и основного языка: найти работу может быть непросто. Но в качестве дополнительного навыка Dart — отличный выбор и для мобильных, и для фронтенд- или бэкенд-разработчиков.
Хотите узнать больше про IT? Записывайтесь на курсы: мы поможем выбрать и освоить новую профессию!
Frontend-разработчик
Научитесь создавать удобные и эффектные сайты, сервисы и приложения, которые нужны всем. Сегодня профессия на пике актуальности: в России 9000+ вакансий, где требуется знание JavaScript.

Статьи по теме:
Что такое Flutter и почему вы должны изучать его в 2020 году
Привет, Хабр! Представляю вашему вниманию перевод статьи: «What is Flutter and Why You Should Learn It in 2020» автора Gaël Thomas.
Что такое Flutter?
Flutter — бесплатный и открытый набор средств разработки мобильного пользовательского интерфейса, созданный компанией Google и выпущенный в мае 2017 года. Проще говоря, с помощью Flutter возможно создать собственное мобильное приложение с одним массивом кода. Это означает, что для создания двух приложений (IOS и Android) можно использовать единый язык программирования и одну базу кода.
Flutter нацелен на две важные вещи:
- SDK (Software Development Kit): набор инструментов, который поможет вам в разработке приложений. Он включает инструменты для компиляции кода в нативном машинном коде (код для IOS и Android).
- Framework (Библиотека пользовательского интерфейса на основе виджетов): Коллекция функциональных элементов пользовательского интерфейса (кнопок, текстовых вводов, ползунков и т.д.), которые можно персонализировать под личные предпочтения.
Для разработки с Flutter используется язык программирования под названием Dart. Это также язык Google, созданный в октябре 2011 года, но значительно улучшившийся в последние годы.
Dart фокусируется на развитии вёрстки веб-страниц; его можно с легкостью использовать для создания мобильных и веб-приложений.
Зачем тебе учиться Flutter ?
Я приведу пару причин, почему мне нравится Flutter и я предпочту использовать его в следующем году.

Простое обучение и развитие
Flutter — современная платформа! С его помощью намного легче создавать мобильные приложения. Если вы пользовались Java, Swift или React Native, то знайте: Flutter представляет собой немного другое.
Лично мне никогда не нравилась разработка мобильных приложений до того, как я начал использовать Flutter.
Что мне нравится во Flutter? Так это то, что можно написать нативное приложение без кучи кода.
Быстрая компиляция: максимум производительности
Благодаря Flutter, вы можете изменять свой код и видеть результаты в реальном времени. Это называется Hot-Reload. Для обновления самого приложения требуется совсем немного времени. Некоторые значительные модификации могут перезагрузить приложение, но если вы работаете, как дизайнер, например, изменяете размер элементов, то это возможно просто в режиме Hot-Reload!
Идеально подходит для запуска MVP (Минимально жизнеспособный продукт)
Если вам нужно представить свой продукт инвесторам как можно скорее, вы можете использовать Flutter!
4 основные причины использовать Flutter для вашего MVP:
- Разработать мобильное приложение с Flutter дешевле, потому что не нужно создавать и — поддерживать два мобильных приложения (одно для IOS и Android).
- Для создания MVP достаточно одного разработчика.
- Это эффективно; невозможно заметить разницу между нативным приложением и приложением Flutter.
- Это красиво; Вы можете легко использовать виджеты, предоставляемые Flutter, и персонализировать их для создания оригинального пользовательского интерфейса для ваших клиентов.
Растущее сообщество
У Flutter классное, мощное сообщество, и это только начало!
Я люблю делиться своими знаниями и полезным контентом по программированию на моем сайте. Мне нужно знать, что я работаю над технологией, полной потенциала и с большим количеством бэкграундов.
Когда я начал использовать Flutter, первое, к чему я приступил, искал сообщества, и был удивлен… Существует просто огромное количество ресурсов для обмена опытом и общения!
Поддержка Android Studio и VS Code
Flutter доступен в различных IDE. Два основных редактора кода и разработки с помощью этой технологией — Android Studio (IntelliJ) и VS Code.
Android Studio — это полноценное программное обеспечение, где все нужное уже интегрировано; для запуска необходимо загрузить плагины Flutter и Dart.
VS Code — простой инструмент, все конфигурируется через плагины с маркетплейса.
Я использую Android Studio, потому что мне не нужно настраивать много параметров для работы.
Но вы можете выбрать предпочтительную вам среду IDE!
Фриланс
Если вы хотите начать с фриланса, вам стоит задуматься о Flutter!
В 2020 году эта технология должна выстрелить. Много компаний собирается искать разработчиков в этой сфере.
Крупнейшая во Франции платформа для фрилансеров под названием Malt недавно опубликовала технологические тенденции этого года. Flutter возрос на 303% на этой платформе в период с 2018 по 2019 год.

Заключение
Надеюсь, что это введение в технологию вас заинтересовало и мотивировало. Что вы думаете о Flutter? Захотели попробовать его в следующем году?
- разработка под ios и android
- dart
- flutter
- Разработка под iOS
- Разработка под Android
- Дизайн мобильных приложений
- Flutter
Flutter уроки
Данный ресурс посвящен разработке мобильных приложений с помощью Flutter SDK.
Flutter SDK – бесплатное кроссплатформенное средство от Google с открытым исходным кодом для быстрой разработки мобильных приложений для iOS и Android.
С появлением Flutter реализовать свои идеи в виде мобильного приложения стало как никогда просто и доступно.

В наших уроках Вы узнаете про Flutter:
– с чего начать мобильную разработку;
– особенности реализации алгоритмов и структур;
– подходы и методы для решения задач.
Начните сейчас изучать Flutter
Примеры приложений на Flutter
Новые заметки
Flutter 3.7: что нового?
29.01.2023 06:51:05 Обновление Material 3, улучшенная производительность на iOS и многое другое! 2023 год начался с релиза новой версии Flutter 3.7: сообщество продолжает улучшать фреймворк, добавляя такие функции как возможность создания кастомизированных строк меню, каск.
Курсы Flutter разработчика: ТОП-5 лучших бесплатных и платных онлайн-курсов
14.11.2022 20:06:18 На практике очень часто возникает необходимость разработать приложение, которое поддерживается обеими популярными операционными системами для смартфонов: Android и iOS. Создавать программу под каждую ОС — не очень удачная идея, ведь вам придется нанимат.
Flutter 3.3 — что нового?
06.09.2022 22:09:49 Обновленная обработка текста, улучшение производительности и многое другое. Всего три месяца назад был объявлен релиз третьей версии Flutter, ключевым моментом которой стала стабильная поддержка всех платформ, а уже 30 августа разработчики выпустили Flu.
Создание игры «Косынка» (Kondike)
02.09.2022 21:15:18 Косынка — популярный карточный пасьянс. В этом туториале мы будем следовать пошаговой инструкции для кодирования этой игры при помощи движка Flame. Туториал подразумевает, что вы хотя бы немного знакомы с общими понятиями программирования и языком Dart.
Создание каркаса игры при помощи Flame
31.08.2022 20:29:09 Перевод туториала https://docs.flame-engine.org/1.3.0/tutorials/bare_flame_game.html Создание каркаса игры при помощи Flame
Создание игры «Косынка» (Kondike) Этот туториал подразумевает, что вы уже знакомы с использованием командной строки, а на вашем .
Flutter 3: стабильная версия для macOS и Linux, улучшение производительности и многое другое!
21.05.2022 10:41:16 Пришло время для нового стабильного релиза Flutter — всего три месяца назад была анонсирована поддержка Flutter для Windows, а уже сегодня мы готовы объявить о стабильной поддержке для macOS и Linux. И благодаря труду разработчиков, мы влили 5248 пул-ре.
Релиз Flutter 2.10
08.02.2022 22:20:36 Что нового: поддержка Windows, улучшение производительности, обновление Material 3 и многое другое! Перевод статьи What’s New in Flutter 2.10 Сложно поверить, что уже пришло время для нового релиза стабильной версии Flutter — прошло менее двух месяцев с.
Flutter для Windows
07.02.2022 21:52:04 Для создания качественных приложений Windows, работающих также и на мобильных платформах и для WEB. Перевод статьи Announcing Flutter for Windows С самого запуска Flutter, одной из наших основных задач стало предоставление кросс-платформенного решения д.
Flutter 2.2: что нового?
31.05.2021 19:38:03 Этот релиз сосредоточен на оптимизации и совершенствовании функци, включая улучшение работы на iOS, отложенные компоненты Android (deferred components), обновленный сервис-воркер для Flutter web и многое другое! Перевод статьи What’s new in Flutter 2.2 .
Представляем Dart 2.13
22.05.2021 09:04:22 Новые функции псевдонимов (алиасов) типов, улучшенный Dart FFI. Перевод статьи Announcing Dart 2.13 Автор оригинальной статьи: Michael Thomsen Представляем обновление Dart 2.13 — версия, в которой появились псевдонимы (алиасы) типов — одна из наиболее з.
Создание адаптивного пользовательского интерфейса
21.04.2021 21:50:56 Автор оригинального текста Aloïs Deniel перевод статьи https://aloisdeniel.com/#/posts/adaptative-ui Недавно я представил доклад на конференции FlutterVikings, в котором подробно объяснил, о чем вам следует думать в первую очередь при создании пользова.
Создание бит-машины во Flutter
04.04.2021 21:29:57 Эта статья о том, как построить бит-машину с секвенсором в Dart/Flutter. Автор оригинального текста Ken Reilly. Оригинальная статья тут. Пример приложения Вступление С первого релиза Flutter в 2018 году прошло не так много времени, однако он уже набрал .
Анонс Dart 2.12
20.03.2021 09:51:58 Согласованные нулевые типы (Sound null safety) и Dart FFI в стабильной версии! Мы с радостью представляем вам Dart 2.12, обладающий стабильными версиями согласованных нулевых типов и Dart FFI. Null safety — наша последняя основная функция для повышения .
Повтор знаменитой игры с тираннозавром при помощи Flutter и Flame
07.03.2021 06:59:01 Автор оригинальной статьи — Renan C. Araujo Если вы еще не знакомы с Flutter, то у меня хорошие новости: вам предстоит познакомиться с одним из самых удобных и гибких способов создания пользовательского интерфейса. Так что не теряйте зря времени и узна.
Представляем Flutter 2.0
04.03.2021 17:39:51 Flutter нового поколения, созданный для WEB, мобильных устройств и настольных компьютеров
Сегодня мы с гордостью представляем Flutter 2: большое обновление для Flutter, дающее разработчикам возможность создавать интересные, быстрые и портируемые приложе.
Context — как это работает во Flutter
23.01.2021 10:58:43 Перевод статьи Flutter in Context автора Greg Perry Детальный разбор класса BuidContext
(Эта статья является частью серии Decode Flutter Series) Вы уже знакомы с контекстными объектами? Я имею в виду объекты класса BuildContext с именем context, которы.
Анонс Flutter 1.22
14.10.2020 18:55:31 Перевод статьи Announcing Flutter 1.22 Поддержка iOS 14 и Android 11, i18n и l10n, готовые плагины Google Maps и WebView, новый инструмент App Size и многое другое! Мы с радостью представляем вам свежую версию Flutter с обширной поддержкой iOS 14 и Andr.
Views (экраны) и диалоговые окна — пошаговая инструкцию с Flame и Flutter (часть 3 из 5)
06.09.2020 10:43:05 Перевод урока Views and Dialog Boxes Tutorial – Step by Step with Flame and Flutter (Part 3 of 5) Когда только начинаешь изучать разработку игр, думаешь, что самое тяжелое — это начать, продумать логику геймплея, найти и создать графику. Но это не так. .
Анимация и графика в играх: пошаговое обучение с Flame и Flutter (часть 2 из 5)
24.06.2020 18:15:13 Перевод урока Game Graphics and Animation Tutorial – Step by Step with Flame and Flutter (Part 2 of 5) В этой части обучения мы сфокусируемся на добавлении графики и анимации в нашу игру. Мы продолжим с того места, на котором остановились в предыдущей ч.
Создание казуальной 2D игры. Пошаговая инструкция при помощи Flame и Flutter (часть 1 из 5)
02.06.2020 22:57:05 Перевод урока 2D Casual Mobile Game Tutorial – Step by Step with Flame and Flutter (Part 1 of 5) Вы когда-нибудь задумывались о разработке видеоигр? Если да, то вы пришли по адресу! Эта статья расскажет и покажет, как создать свою собственную 2D мобильн.
© 2019 Flutter.su, по всем вопросам пишите по адресу contact@flutter.su
Flutter: плюсы и минусы использования кросс-платформенной технологии
Рассказали на примере Flutter, как на самом деле обстоят дела в мире кросс-платформенной разработки, и назвали все плюсы и минусы.
Принято считать, что кросс-платформенные технологии могут облегчить жизнь программистам: забудьте про мучения в разработке приложений сначала под iOS, а потом под Android и еще отдельно под Web. Однако, если бы все было столь просто, миром программирования давно бы всецело управляли кросс-платформы. Как обстоят дела на самом деле рассмотрим сегодня на примере Flutter.
Илья Задябин, разработчик мобильных приложений, специализирующийся на Flutter и Dart.
Что такое Flutter, в чем особенности этой технологии
Flutter — это открытая кросс-платформенная технология от Google, предназначенная для создания приложений для iOS, Android, Web и настольных операционных систем из единой кодовой базы. Она использует язык программирования Dart и предоставляет свой собственный набор виджетов для создания интерфейса. Сейчас Flutter поддерживает iOS, Android, Web, Windows, Linux, macOS и с недавнего времнени WebAssembly.
В основном Flutter применяют для мобильных приложений, потому что фреймворк достаточно недавно обзавёлся поддержкой остальных платформ. Также Flutter поддерживается на “встраеваемых устройствах” (embedded devices), например, Toyota использует эту технологию для мониторов в своих автомобилях.
Технология зарекомендовала себя на рынке и используется в широком спектре приложений. Например, в приложении для электромобилей BMW, Google Pay — команда провела миграцию с нативного кода на Flutter прежде чем выйти на глобальный рынок, Ebay, ByteDance, NuBank, а также в Alibaba.
Теперь немного про “внутренности” Flutter и про то, почему вообще возможно запускать один и тоже же код на принципиально разных платформах.
Было бы очень сложно и долго подстраивать технологию под разные API этих платформ, поэтому команда Flutter пошла другим путём.
1. Архитектура
Flutter использует многоуровневую архитектуру. Верхний слой — фреймворк, состоящий из кода на языке Dart. Нижний слой — движок, написанный преимущественно на языке C++ и обеспечивающий низкоуровневую реализацию основных API Flutter. Наконец, есть Embedder, который интегрирует движок Flutter в различные платформы.
2. Процесс рендера
В отличие от Android и iOS, где используются элементы, специфичные для каждой платформы, Flutter имеет собственный движок рендеринга. Приложения Flutter рендерят пользовательские интерфейсы с помощью Skia Graphics Engine, что означает, что Flutter рисует каждый элемент UI (виджет) на холсте, предоставляемом каждой платформой.
3. Компиляция
Flutter использует язык Dart, который компилируется в нативный код. Компиляция в нативный код позволяет Flutter взаимодействовать с платформой без моста JavaScript (как в некоторых других кросс-платформенных решениях), что обеспечивает производительность, близкую к нативной.
4. Виджеты
Everything in Flutter is a widget, от простого текста до сложной анимации. Эти виджеты не являются родными компонентами Android или iOS, но настроены так, чтобы выглядеть как родные элементы. Из виджетов, как из кирпичей, собирается всё приложение. Такая система может быть более понятной для новых разработчиков.
5. Platform Channels
Для доступа к специфическим для платформы функциям (камера, GPS, микрофон. ) Flutter использует Platform Channels. Эти каналы позволяют приложениям Flutter выполнять действия на iOS или Android с использованием их родных языков программирования (Kotlin для Android, Swift для iOS).
Декларативное VS императивное программирование
Одной из особенностей Flutter является декларативный стиль описания UI элементов. Сперва про отличия:
- Декларативное программирование. Основное внимание уделяется вопросу «что» в коде. Вы описываете то, ЧТО хотите получить, а система (фреймворк или библиотека) занимается деталями того, как это реализовать. Этот стиль абстрагирует процесс управления UI, и разработчику не нужно описывать шаги для достижения конечного результата.
- Императивное программирование. Концентрируется на «как». Процесс состоит из написания кода, описывающего шаги для достижения цели. Разработчик должен описать каждый шаг, который должна выполнить программа, что дает ему больше возможностей для контроля, но также увеличивает сложность.
Итак, Flutter использует декларативный подход к построению UI. Вот как это работает: UI является отражением состояния. Вы определяете состояние, а пользовательский интерфейс автоматически адаптируется и рендерится в соответствии с этим состоянием. Это означает, что при изменении состояния Flutter точно знает, что изменилось, и может эффективно (быстро) обновлять пользовательский интерфейс.
Для построения пользовательского интерфейса используется дерево виджетов. Каждый виджет декларирует часть UI, а всё дерево в целом представляет весь интерфейс. При каждом изменении состояния Flutter автоматически перестраивает дерево виджетов, обеспечивая отображение 1:1 текущего состояния и пользовательского интерфейса.
В отличие от этого, традиционная разработка под Android и iOS использует императивные подходы:
- Android. XML-файлы определяют элементы пользовательского интерфейса, которые затем используются в коде на Kotlin. Разработчики явно изменяют свойства компонентов UI и управляют его состоянием.
- iOS. С помощью UIKit разработчики создают и управляют компонентами UI (например, UIViews) в Swift. Они отвечают за обновление и рендеринг этих компонентов в зависимости от взаимодействия с пользователем или изменения данных.
На данный момент Android и iOS тоже переходят к декларативному стилю, используя Jetpack Compose для Android и SwiftUI для iOS. Оба инструмента находятся в активной разработке.
Язык Dart и его особенности
Во Flutter используется Dart — современный объектно-ориентированный язык программирования, разработанный Google. По словам создателей, Dart оптимизирован для создания пользовательских интерфейсов: в нём используется async-await для изменения UI, в сочетании с возможностью запускать код изолированно от основного потока. Dart использует типизацию с null-safety, сборщик мусора и имеет схожий синтаксис с kotlin, swift, typescript, что делает его простым в изучении.
Одним из ключевых преимуществ Dart является Hot Reload. Из-за возможности Dart компилироваться в двух режимах AOT (ahead of time) and JIT (just in time) язык позволяет динамически обновлять приложение без необходимости перезапуска. Можно мгновенно видеть, как поменялся UI при изменении кода, что очень удобно и ускоряет разработку.
Dart может использоваться как для разработки на стороне клиента, так и на стороне сервера. Это упрощает процесс обучения и разработки, поскольку разработчики могут использовать один язык для всего стека приложений. Однако пока что Dart редко выбирают для backend разработки.
Dart поддерживает асинхронное программирование, что очень важно для современной разработки приложений. Это позволяет приложениям на Flutter выполнять длительные задачи, такие как получение данных из сети, не блокируя UI и не влияя на отзывчивость приложения. Если в других языках для этого используются потоки, то в Dart применяют изоляты.
Плюсы использования кросс-платформы
Есть целый ряд неоспоримых преимуществ использования кросс-платформенной технологии:
- Гораздо более дружелюбная документация по сравнению с Android и особенно iOS, разработчики Flutter также выпускают еженедельные видео с объяснениями деталей технологии на своём официальном канале.
- Общий код для разных платформ. Flutter позволяет разработчикам использовать один и тот же код для создания приложений для разных платформ, снижая время и стоимость разработки.
- Hot Reload. Эта функция позволяет мгновенно видеть результаты изменений в коде, ускоряя процесс разработки.
- Фреймворки внутри фреймворка. Команда Flutter развивает направление мобильных игр и предлагает воспользоваться Casual Games Toolkit , в котором есть необходимые инструменты для написания собственных игр на 2D движке Flame. Также есть готовый набор решений для написания новостных приложений Flutter News Toolkit. В нем содержатся наиболее популярные компоненты для создания news app: онбординг, создание учетной записи, лента контента и страницы контента, настройки монетизации, поиск и т.д.
- Экосистема библиотек. Ещё один из плюсов Flutter сообщества — это наличие единого сервиса, на котором хостятся сторонние библиотеки. Они используются далеко не только для работы с нативным кодом платформ, но и для сложных анимаций, облегченной работы с сетью, навигации и полезными инструментами. Любой желающий может создать свой пакет и разметить его на pub.dev.
Ограничения использования кросс-платформы и пути их решения
Однако, безусловно, есть и определенные трудности в использовании кросс-платформы при разработке. Часть из них преодолима, другую же часть остается пока только принять как данность.
Проблема №1. Большой размер приложения
Приложения Flutter могут иметь больший размер файла по сравнению с нативными приложениями. Можно использовать стандартные средства для сжатия ресурсов и ассетов. Также для Android есть возможность догрузить ассеты после установки через Сloud delivery of assets.
Проблема №2. Несоответствие “родному” пользовательскому интерфейсу
Достичь «родного» поведения экрана может быть сложно, так как Flutter управляет собственным рендерингом. Для решения этой проблемы можно настроить виджеты таким образом, чтобы они в точности соответствовали языку дизайна каждой платформы, и следить за последними тенденциями и рекомендациями по UI для iOS и Android. Большая часть компонентов уже подогнаны командой Flutter под привычный UI платформы.
Проблема №3. Задержка при появлении обновлений платформ
Иногда в iOS или Android может появиться новая функциональность (например, dynamic island в iOS) и приходится ждать, пока её завезут во Flutter. Благо такие обновления не носят критический характер, а чаще всего другие разработчики оперативно создают пакет для работы с новыми возможностями платформы.
Проблема №4. Невозможность разработки мобильных игр
Flutter не оптимизирован для 3D игр, но есть возможность создавать 2D игры, используя движок Flame, о котором написано выше.
Проблема №5. Ограниченная поддержка некоторых функций устройств.
Некоторые встроенные функции устройств могут быть недоступны или требуют дополнительной работы для интеграции. Из-за того, что Flutter не использует активно API платформы, а просто отрисовывает самостоятельно нужные элементы, могут возникнуть проблемы с доступом к функциями устройства, таким как камера, уведомления, микрофон, GPS, шифрованная память и т.д. Для решение этой проблемы можно использовать platform channels, которые позволяют вызывать код платформы (например, Kotlin для Android или Swift для iOS) прямиком из кода Flutter. Это усложняет процесс разработки, потому что помимо языка Dart ещё нужно понимать, как устроена платформа, код в которой нужно вызывать напрямую. Но такие ситуации редки, потому что для большинства случаев уже написаны packages (сторонние библиотеки) членами сообщества.
Есть и еще одна особенность, о которой мы уже говорили ранее — язык программирования. Dart — нишевый язык, изначально разрабатывался Google как замена JavaScript, но что-то пошло не так. Язык оставался в тени, пока в 2017 году Google не создали на его основе фреймворк Flutter, тем самым дав ему второе дыхание. Dart похож на JavaScript, поэтому будет понятен и большинству новичков, и опытным разработчикам.
Недостатки языка Dart компенсируются кодогенерацией, к примеру в языке отсутствуют дата классы (аналог data class в Kotlin), но при помощи сторонних пакетов можно воспроизвести нужные методы, сгенерировав их для обычных классов Dart. Также кодогенерацию можно использовать для сериализации/десериализации. В Dart даже есть аналог Retrofit, который будет знаком разработчикам Android. До недавнего времени разработчики генерировали даже функциональность sealed классов, но их ввели в Dart 3, и необходимость отпала.
Ещё один из плюсов Dart это возможность замкнуть на нём весь цикл разработки приложения и использовать Dart для написания backend при помощи Dart Frog. Тем самым язык может стать более популярным и привлечь больше разработчиков, что скажется в положительном ключе на развитии Flutter.