[Перевод] Альфа-версия Flutter для Linux и разработка настольных приложений
Материал, перевод которого мы публикуем сегодня, подготовили Крис Селлз из Google и представитель компании Canonical Кен ВанДин.
Компания Google, в том, что касается Flutter, всегда стремилась к тому, чтобы сделать этот фреймворк универсальным инструментом, позволяющим создавать привлекательные интерфейсы, работающие на любых платформах так же быстро, как интерфейсы «родных» приложений этих платформ. Чтобы убедиться в том, что это возможно, мы начали с того, что сосредоточили усилия на мобильных платформах — Android и iOS. В результате в Google Play оказалось опубликовано более 80000 быстрых и красивых Flutter-приложений.
Мы, опираясь на достигнутые успехи, вот уже более года заняты расширением возможностей 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 и работать с данными из этих учётных записей.
Приложение Flokk Contacts создано на Flutter в расчёте на настольные компьютеры
То, что приложение может выводить уведомления, поступающие из Twitter и GitHub, превращает его в нечто вроде персональной социальной сети пользователя. Если же интересующая вас социальная сеть пока не интегрирована с Flokk, решить эту проблему можно, просто отправив соответствующий PR в репозиторий проекта, так как Flokk — полностью опенсорсный проект.
Помимо того, что во Flokk реализованы инновационные идеи, касающиеся взаимодействия пользователей, в этом приложении используются возможности Flutter, направленные на создание привлекательных и удобных интерфейсов. Один из примеров таких возможностей представлен на следующем рисунке. Здесь показано то, что при переключении на тёмную тему приложения осуществляется не простое, а анимированное изменение цвета.
Возможности 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
Знаменитое приложение 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 по разработке настольных приложений.
Приложение Photo Search
Это — простое онлайновое приложение для поиска фотографий, которое использует несколько плагинов для доступа к нативному функционалу поддерживаемых им платформ, в число которых входят macOS и Linux.
Если вам нужны пошаговые инструкции по разработке настольных Linux-приложений — взгляните на это codelab-руководство. Оно посвящено использованию OAuth и GraphQL для создания GitHub-клиента с применением Flutter.
GitHub-клиент
Если вы хотите исследовать более сложный проект, в разработке которого использовано гораздо больше возможностей Flutter, и в котором можно найти несколько интересных примеров кода, то вы можете взглянуть на приложение Flutter Gallery. Оно, в прошлом году, было переделано. Теперь оно, в дополнение к мобильным платформам, поддерживает и настольные. Если вы хотите увидеть это приложение в действии — можете загрузить его из Snap Store.
Приложение Flutter Gallery можно загрузить из Snap Store
А вот ещё одно настольное приложение, иллюстрирующее развлекательные возможности Flutter. Это — многопользовательская игра batufo, которую создал Торстен Лоренц. Эта красивая игра позволяет игрокам со всего мира соревноваться друг с другом в режиме реального времени.
Игра 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?