Компания Google, в том, что касается Flutter, всегда стремилась к тому, чтобы сделать этот фреймворк универсальным инструментом, позволяющим создавать привлекательные интерфейсы, работающие на любых платформах так же быстро, как интерфейсы «родных» приложений этих платформ. Чтобы убедиться в том, что это возможно, мы начали с того, что сосредоточили усилия на мобильных платформах — Android и iOS. В результате в Google Play оказалось опубликовано более 80000 быстрых и красивых Flutter-приложений.
![](https://habrastorage.org/webt/cc/cq/bp/cccqbpbt3xy6wtffx_c0dknmksy.jpeg)
Мы, опираясь на достигнутые успехи, вот уже более года заняты расширением возможностей Flutter на настольные платформы — на macOS, Windows и Linux. Это касается и веб-приложений, и традиционных настольных проектов. В частности, мы заняты серьёзным рефакторингом движка. Рефакторинг направлен на поддержку работы с мышью и клавиатурой в том стиле, в котором это принято в настольных системах, а так же на поддержку окон, размер которых можно менять. Сюда входят и новые возможности пользовательских интерфейсов, которые хорошо подходят для настольных платформ. Это, например, поддержка Material Density и NavigationRail. Сюда же относятся и эксперименты по глубокой интеграции с настольными операционными системами благодаря Dart:FFI, и работа с системными меню и со стандартными диалоговыми окнами. Всё это делалось для того чтобы убедиться в том, что Flutter подходит не только для создания мобильных проектов, но и готов к тому, чтобы на его основе можно было бы разрабатывать настоящие настольные приложения.
Мы уже давно видим Flutter как инструмент для создания проектов, предназначенных для самых разных платформ. В Google выражение этого видения представлено проектами вроде Assistant. Теперь же мы с волнением наблюдаем за тем, как другие компании внедряют поддержку Flutter в новые платформы. Сегодня Google и компания Canonical, которая занимается поддержкой Ubuntu — самого популярного Linux-дистрибутива в мире, с удовольствием делают совместное заявление о выходе альфа-версии Flutter для Linux.
Зачем в Linux нужна поддержка Flutter?
В прошлом году, когда компания Google сообщила о возможности разработки настольных приложений с использованием Flutter, компания Canonical увидела в этом заманчивую возможность сделать дистрибутивы Linux и, в том числе, Ubuntu, привлекательной целевой платформой для разработчиков Flutter-приложений. Flutter, в плане кросс-платформенных возможностей, стремительно движется вперёд. У компании Canonical появилось желание попасть в авангард этого движения. Способствуя поддержке Linux-приложений во Flutter, Canonical даёт разработчикам Flutter-приложений очень простой механизм публикации их разработок в Snap Store, магазине приложений для Linux. Делая Linux платформой, официально поддерживающей Flutter-приложения, Canonical даёт разработчикам возможность представить свои проекты миллионам Linux-пользователей и расширить количество качественных проектов, доступных таким пользователям.
Canonical особенно привлекательными кажутся следующие особенности Flutter и экосистемы этого фреймворка:
- Быстрорастущее сообщество разработчиков приложений.
- Поддержка множества платформ.
- Возможность разработки хорошо оптимизированных нативных приложений.
- Возможности, характерные для современных UI-фреймворков, такие, как поддержка декларативных, реактивных виджетов, пригодных для компоновки.
- Богатая возможностями среда разработки приложений с использованием VS Code, Android Studio и IntelliJ.
Исходное сообщение Google о разработке настольных приложений во Flutter касалось альфа-релиза, поддерживающего приложения для macOS, и планов по поддержке приложений для Linux и Windows. Canonical сделала серьёзные вложения в разработку Flutter, выделив особую команду разработчиков, которая, работая совместно с разработчиками из Google, нацелена на то, чтобы пользователи большинства дистрибутивов Linux могли бы со всеми удобствами пользоваться Flutter-приложениями. Canonical продолжит совместную работу с Google, направленную на дальнейшее улучшение поддержки Linux и на поддержание возможностей, доступных Flutter-приложениям в Linux, на том же уровне, на котором находится поддержка возможностей других платформ.
Приложение Flokk — доказательство готовности Flutter к разработке настольных приложений
Для того чтобы показать, что Flutter готов к разработке мобильных приложений, мы, работая с дизайнерами и разработчиками из gskinner, создали инновационное и привлекательное настольное Flutter-приложение. Это — Flokk — реальное приложение, которое работает с настоящими данными. В частности — со списком контактов из Google Contacts. Вот — видеодемонстрация Flokk.
Это приложение позволяет управлять контактами. В частности — искать контакты, добавлять новые контакты и редактировать существующие. Flokk, кроме того, позволяет связывать с контактами соответствующие учётные записи Twitter и GitHub и работать с данными из этих учётных записей.
![](https://habrastorage.org/getpro/habr/post_images/957/b95/33f/957b9533f1c4b020d597de952775670b.png)
Приложение Flokk Contacts создано на Flutter в расчёте на настольные компьютеры
То, что приложение может выводить уведомления, поступающие из Twitter и GitHub, превращает его в нечто вроде персональной социальной сети пользователя. Если же интересующая вас социальная сеть пока не интегрирована с Flokk, решить эту проблему можно, просто отправив соответствующий PR в репозиторий проекта, так как Flokk — полностью опенсорсный проект.
Помимо того, что во Flokk реализованы инновационные идеи, касающиеся взаимодействия пользователей, в этом приложении используются возможности Flutter, направленные на создание привлекательных и удобных интерфейсов. Один из примеров таких возможностей представлен на следующем рисунке. Здесь показано то, что при переключении на тёмную тему приложения осуществляется не простое, а анимированное изменение цвета.
![image](https://habrastorage.org/getpro/habr/post_images/98d/329/a95/98d329a958f4581e138ee502fc14fef4.gif)
Возможности Flutter позволяют использовать во Flokk плавную анимацию, высокопроизводительный скроллинг, упрощают использование тем
Креативная команда специалистов, стоящая за Flokk, работает под управлением Гранта Скиннера, который хорошо известен превосходными дизайнерскими решениями и реализациями новаторских идей в сфере UX. Вот что Грант сказал о работе с Flutter в Linux: «Разработка приложения Flokk Contacts оказалась очень лёгкой задачей! Мы смогли применить здесь весь свой опыт Flutter-разработки и создать приложение, нацеленное на Linux, не прибегая к каким-то особым приёмам. Приложение получилось очень хорошее. Нам очень понравилось работать с командой Canonical. Они были полны энтузиазма, были увлечены нашим делом, они стремились сделать Flutter лучше, думая не только о Linux, но и обо всех остальных платформах. Это был замечательный проект и мне очень нравятся перспективы разработки Flutter-приложений для других настольных ОС».
Если вы хотите воспользоваться Flokk на своём Linux-компьютере, вы можете загрузить самый свежий релиз приложения с GitHub. А если вы применяете snapd — вы можете загрузить Flokk из Snap Store.
Установка Flutter в Linux
Теперь, когда вы уже видели то, какие качественные настольные приложения можно создавать с помощью Flutter, в частности — Linux-приложения, вам может захотеться поработать с Flutter на собственной Linux-машине. Для того чтобы максимально упростить процесс подготовки Linux-систем к разработке Flutter-приложений, мы с удовольствием сообщаем о том, что Flutter SDK для Linux доступен в виде snap-пакета в Snap Store. Этот пакет содержит всё, что необходимо для разработки Flutter-приложений с использованием вашего любимого дистрибутива Linux. При этом вам не нужно будет устанавливать целую кучу зависимостей разработки. Всё что нужно — это установить snap-пакет Flutter SDK и IDE, которая вам нравится. После этого в вашем распоряжении будет всё необходимое для создания, сборки и публикации собственных Linux-приложений.
Например, если вы хотите приступить к разработке Flutter-приложений на Linux, и при этом вам нравится Visual Studio Code, вот набор команд, которые вам понадобится выполнить в терминале:
$ snap install --classic flutter
$ snap install --classic code
$ code --install-extension dart-code.flutter
Если вы хотите, работая в Linux, заниматься созданием не только настольных, но и мобильных приложений, подготовиться к этому можно, установив Android SDK или Android Studio (сюда уже включён Android SDK). Подробности о snap-пакете Flutter SDK вы можете найти здесь.
Разработка настольных Linux-приложений
После того, как вы установили Flutter SDK на Linux-компьютер, вам, чтобы создавать настольные приложения, нужно перейти на канал
dev
или master
и обновить Flutter. Затем нужно включить поддержку настольных Linux-приложений:$ flutter channel dev
$ flutter upgrade
$ flutter config --enable-linux-desktop
Теперь, когда вы создадите новый Flutter-проект, у вас будет поддиректория
linux
, которая позволяет запустить приложение на Linux:$ flutter create counter
$ cd counter
$ flutter run -d linux
![](https://habrastorage.org/getpro/habr/post_images/8a9/a05/1a6/8a9a051a67d0f9cf27300b3d6bfb843c.png)
Знаменитое приложение Flutter Counter отлично работает и на Linux
В вашем распоряжении окажется новенькое Linux-приложение, созданное с помощью Flutter и работающее на самой свежей стабильной версии GTK+. Если у вас уже есть Flutter-проект, который вы хотите оснастить поддержкой Linux, сделав это после включения поддержки Linux в подобных проектах, вы можете добавить в свой проект директорию
linux
самостоятельно:$ cd my_flutter_app
$ flutter create .
Благодаря этому будет создана поддиректория с особым проектом, который нужен для сборки и запуска вашего Flutter-приложения на настольной системе Linux.
Организация доступа к нативному Linux-коду из Flutter
В дополнение к поддержке настольных приложений путём написания Dart-кода для создания виджетов Flutter, ваше настольное Linux-приложение может обращаться к нативным возможностям Linux, используя каналы платформы (platform channels) или интерфейс внешних функций (Foreign Function Interface, FFI) для C/C++. Или, если хотите, можете повторно использовать уже существующий код, который можно найти на pub.dev, на сайте менеджера пакетов для Dart и Flutter. Большинство пакетов, которые вы обнаружите на pub.dev, написаны на чистом Dart, большинство этих пакетов отлично работают в Linux-приложениях. Некоторые пакеты, называемые плагинами, имеют в своём составе нативный код, который нацелен на ту или иную платформу. Мы, в рамках этого релиза, опубликовали на pub.dev три плагина, в которых используется нативный функционал Linux:
- url_launcher: открывает URL в браузере, используемом по умолчанию.
- shared_preferences: параметры пользователя, используемые в различных сессиях приложения.
- path_provider: сведения о путях, относящиеся к особым директориям, к таким, как директория для загружаемых файлов, для изображений и прочие подобные.
Каждый из этих плагинов вы можете использовать в своих приложениях, но они, кроме того, могут играть роль примеров того, как из Flutter-кода можно работать с нативными возможностями Linux. Например, вот исходный код реализации плагина url_launcher.
Публикация приложений в Snap Store
Для того чтобы опубликовать своё Flutter-приложение в Snap Store, вам сначала понадобится установить Snapcraft — инструмент, который используется для сборки и публикации приложений в виде snap-пакетов:
$ sudo snap install snapcraft --classic
Для того чтобы воспользоваться возможностями Snapcraft, вам понадобится создать в директории проекта приложения файл
snapcraft.yaml
. Вот, например, как выглядит такой файл для Flokk:name: flokk-contacts
version: 1.0.1
summary: Flokk Contacts
description: A fresh and modern Google Contacts manager that integrates with GitHub and Twitter.
confinement: strict
base: core18
grade: stable
apps:
flokk-contacts:
command: flokk-contacts
extensions: [flutter-master]
plugs:
- network
parts:
flokk-contacts:
source: .
plugin: flutter
flutter-target: lib/main.dart # файл, являющийся главной точкой входа в приложение
Теперь в директории с файлом
snapcraft.yaml
можно запустить Snapcraft для создания snap-пакета приложения:$ snapcraft
Если всё будет работать так, как надо, эта команда создаст файл в текущей рабочей директории. Называться он будет примерно так:
flokk-contacts_1.0.1_amd64.snap
После того, как вы подготовите свою учётную запись для публикации приложений в Snap Store, вы сможете опубликовать только что созданный snap-пакет:
$ snapcraft login
$ snapcraft register flokk-contacts
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
Здесь мы выгружаем приложение в Snap Store и пытаемся опубликовать его в канале edge. После того, как приложение будет опубликовано в этом канале, его можно устанавливать либо через настольный клиент Snap Store, либо пользуясь командной строкой:
$ snap install --edge flokk-contacts
Подробности о том, как создать своё первое приложение и опубликовать его в Snap Store, можно найти здесь.
Примеры настольных Flutter-приложений
Приложение Flokk — это отличный пример реального проекта, рассчитанного на настольные компьютеры, работающие под управлением Linux. Если вы хотите взглянуть на пример попроще — обратите внимание на приложение Photo Search. Оно создано специально для того чтобы продемонстрировать возможности Flutter по разработке настольных приложений.
![](https://habrastorage.org/getpro/habr/post_images/7ae/98c/0d8/7ae98c0d8659fea6e8c8d444aad32ed0.png)
Приложение Photo Search
Это — простое онлайновое приложение для поиска фотографий, которое использует несколько плагинов для доступа к нативному функционалу поддерживаемых им платформ, в число которых входят macOS и Linux.
Если вам нужны пошаговые инструкции по разработке настольных Linux-приложений — взгляните на это codelab-руководство. Оно посвящено использованию OAuth и GraphQL для создания GitHub-клиента с применением Flutter.
![](https://habrastorage.org/getpro/habr/post_images/4d5/9b2/37e/4d59b237ea2b9d46f097e8cff3ace6fb.png)
GitHub-клиент
Если вы хотите исследовать более сложный проект, в разработке которого использовано гораздо больше возможностей Flutter, и в котором можно найти несколько интересных примеров кода, то вы можете взглянуть на приложение Flutter Gallery. Оно, в прошлом году, было переделано. Теперь оно, в дополнение к мобильным платформам, поддерживает и настольные. Если вы хотите увидеть это приложение в действии — можете загрузить его из Snap Store.
![](https://habrastorage.org/getpro/habr/post_images/882/732/eb6/882732eb69cf20fc8582a0cde6e5fe6c.png)
Приложение Flutter Gallery можно загрузить из Snap Store
А вот ещё одно настольное приложение, иллюстрирующее развлекательные возможности Flutter. Это — многопользовательская игра batufo, которую создал Торстен Лоренц. Эта красивая игра позволяет игрокам со всего мира соревноваться друг с другом в режиме реального времени.
![](https://habrastorage.org/getpro/habr/post_images/590/600/f64/590600f64eee159c0b70f9b77b4757a0.gif)
Игра batufo, работающая на разных платформах, поддерживаемых Flutter
Торстен создавал эту игру с учётом поддержки различных платформ, в том числе — Linux, macOS, Android и iOS. Если вам интересно узнать о том, как была разработана эта игра, и если вы хотите наблюдать за развитием этого проекта — можете посмотреть эти видео и заглянуть в репозиторий проекта. В Linux эту игру можно установить из Snap Store.
Итоги
Теперь, после выхода альфа-версии Flutter для Linux, и благодаря тесному взаимодействию Google и Canonical, у разработчиков, использующих Linux, есть возможность пользоваться возможностями Flutter для создания приложений, рассчитанных на применяемую ими ОС. Для этого достаточно установить snap-пакет Flutter SDK, собрать и протестировать приложение с использованием VS Code или Android Studio, и опубликовать его в Snap Store. Новости о настольной разработке с использованием Flutter ищите здесь. И, что очень и очень важно для нас, постарайтесь оставить отзыв о новых возможностях Flutter. Это поможет нам сделать поддержку Flutter-приложений в Linux настолько качественной, насколько это возможно. Собственно говоря, того же самого мы стремимся добиться и работая с другими платформами.
Flutter для Linux от команды разработчиков Canonical — это гигантский шаг вперёд, шаг к нашей мечте о том, чтобы сделать Flutter самым лучшим фреймворком для разработки приложений, рассчитанных на любые платформы. То, что теперь Flutter-приложения можно разрабатывать для настольных систем, делает движок Flutter гораздо более доступным для самых разных устройств. Хотя Google и не может напрямую поддерживать эти устройства, компания планирует продолжать строить партнёрские отношения с другими компаниями и развивать экосистему Flutter.
Мы хотим видеть Flutter на всех устройствах, которые нуждаются в быстрых и привлекательных приложениях.
А вы уже пробовали создавать Flutter-приложения для Linux?
![](https://habrastorage.org/webt/de/0y/l-/de0yl-6ppopvisr_a80b4yuhjj8.png)
jonSina
зачем он нужен в век PWA?
делаешь 1 раз приложение на привычком веб стеке, сразу и для веба и для десктопа
Spunreal
Так это самое, на флаттере пишешь и для веба, и для десктопа, и для мобилки. И работает это быстрее PWA. И вроде даже на IOS работает в отличие от PWA (это тоже работает, но с очень серьёзными ограничениями)
me21
Ну, это кому веб стек привычен. А кому нет — тут ещё надо посмотреть, что проще освоить будет: веб или флаттер.
Dinver
Как оказалось, после веб-разработки освоить флаттер очень просто. Пара месяцев по вечерам и уже можно писать несложные приложения с отличной производительностью в отличии от PWA.
proninyaroslav
А ваши PWA настолько же "нативные" в плане скорости/отзывчивости/производительности как flutter? Или может умеют работать с нативным для каждой платформы кодом (в т.ч имеет доступ к фреймворкам iOS/Android)? Или уже научились работать вне браузера и его многочисленных костылей? Вероятно, PWA хороши в своей нише (а-ля мобильные версии веб-сайтов которые пытаются быть похожими на приложения), но не надо забивать гвозди головой, когда есть более подходящий инструмент. Хотя, в век когда для заказчика важна прежде всего скорость разработки и дешевизна конечного продукта, говорить про это бессмысленно...