- PVSM.RU - https://www.pvsm.ru -
Материал, перевод которого мы публикуем сегодня, подготовили Крис Селлз из Google и представитель компании Canonical Кен ВанДин.
Компания Google, в том, что касается Flutter, всегда стремилась к тому, чтобы сделать этот фреймворк универсальным инструментом, позволяющим создавать привлекательные интерфейсы, работающие на любых платформах так же быстро, как интерфейсы «родных» приложений этих платформ. Чтобы убедиться в том, что это возможно, мы начали с того, что сосредоточили усилия на мобильных платформах — Android и iOS. В результате в Google Play оказалось опубликовано более 80000 быстрых и красивых Flutter-приложений.
Мы, опираясь на достигнутые успехи, вот уже более года заняты расширением возможностей Flutter на настольные платформы — на macOS, Windows и Linux. Это касается и веб-приложений, и традиционных настольных проектов. В частности, мы заняты серьёзным рефакторингом движка. Рефакторинг направлен на поддержку работы с мышью и клавиатурой в том стиле, в котором это принято в настольных системах, а так же на поддержку окон, размер которых можно менять. Сюда входят и новые возможности пользовательских интерфейсов, которые хорошо подходят для настольных платформ. Это, например, поддержка Material Density и NavigationRail [2]. Сюда же относятся и эксперименты по глубокой интеграции с настольными операционными системами благодаря Dart:FFI [3], и работа с системными меню и со стандартными диалоговыми окнами. Всё это делалось для того чтобы убедиться в том, что Flutter подходит не только для создания мобильных проектов, но и готов к тому, чтобы на его основе можно было бы разрабатывать настоящие настольные приложения.
Мы уже давно видим Flutter как инструмент для создания проектов, предназначенных для самых разных платформ. В Google выражение этого видения представлено проектами вроде Assistant [4]. Теперь же мы с волнением наблюдаем за тем, как другие компании внедряют поддержку Flutter в новые платформы. Сегодня Google и компания Canonical, которая занимается поддержкой Ubuntu [5] — самого популярного Linux-дистрибутива в мире, с удовольствием делают совместное заявление о выходе альфа-версии Flutter для Linux.
В прошлом году, когда компания Google сообщила о возможности разработки настольных приложений с использованием Flutter, компания Canonical увидела в этом заманчивую возможность сделать дистрибутивы Linux и, в том числе, Ubuntu, привлекательной целевой платформой для разработчиков Flutter-приложений. Flutter, в плане кросс-платформенных возможностей, стремительно движется вперёд. У компании Canonical появилось желание попасть в авангард этого движения. Способствуя поддержке Linux-приложений во Flutter, Canonical даёт разработчикам Flutter-приложений очень простой механизм публикации их разработок в Snap Store, магазине приложений для Linux. Делая Linux платформой, официально поддерживающей Flutter-приложения, Canonical даёт разработчикам возможность представить свои проекты миллионам Linux-пользователей и расширить количество качественных проектов, доступных таким пользователям.
Canonical особенно привлекательными кажутся следующие особенности Flutter и экосистемы этого фреймворка:
Исходное сообщение Google о разработке настольных приложений во Flutter касалось альфа-релиза, поддерживающего приложения для macOS, и планов по поддержке приложений для Linux и Windows. Canonical сделала серьёзные вложения в разработку Flutter, выделив особую команду разработчиков, которая, работая совместно с разработчиками из Google, нацелена на то, чтобы пользователи большинства дистрибутивов Linux могли бы со всеми удобствами пользоваться Flutter-приложениями. Canonical продолжит совместную работу с Google, направленную на дальнейшее улучшение поддержки Linux и на поддержание возможностей, доступных Flutter-приложениям в Linux, на том же уровне, на котором находится поддержка возможностей других платформ.
Для того чтобы показать, что Flutter готов к разработке мобильных приложений, мы, работая с дизайнерами и разработчиками из gskinner [6], создали инновационное и привлекательное настольное Flutter-приложение. Это — Flokk — реальное приложение, которое работает с настоящими данными. В частности — со списком контактов из Google Contacts. Вот [7] — видеодемонстрация Flokk.
Это приложение позволяет управлять контактами. В частности — искать контакты, добавлять новые контакты и редактировать существующие. Flokk, кроме того, позволяет связывать с контактами соответствующие учётные записи Twitter и GitHub и работать с данными из этих учётных записей.

Приложение Flokk Contacts создано на Flutter в расчёте на настольные компьютеры
То, что приложение может выводить уведомления, поступающие из Twitter и GitHub, превращает его в нечто вроде персональной социальной сети пользователя. Если же интересующая вас социальная сеть пока не интегрирована с Flokk, решить эту проблему можно, просто отправив соответствующий PR в репозиторий проекта, так как Flokk — полностью опенсорсный проект [8].
Помимо того, что во Flokk реализованы инновационные идеи, касающиеся взаимодействия пользователей, в этом приложении используются возможности Flutter, направленные на создание привлекательных и удобных интерфейсов. Один из примеров таких возможностей представлен на следующем рисунке. Здесь показано то, что при переключении на тёмную тему приложения осуществляется не простое, а анимированное изменение цвета.

Возможности Flutter позволяют использовать во Flokk плавную анимацию, высокопроизводительный скроллинг, упрощают использование тем
Креативная команда специалистов, стоящая за Flokk, работает под управлением Гранта Скиннера [6], который хорошо известен превосходными дизайнерскими решениями и реализациями новаторских идей в сфере UX. Вот что Грант сказал о работе с Flutter в Linux: «Разработка приложения Flokk Contacts оказалась очень лёгкой задачей! Мы смогли применить здесь весь свой опыт Flutter-разработки и создать приложение, нацеленное на Linux, не прибегая к каким-то особым приёмам. Приложение получилось очень хорошее. Нам очень понравилось работать с командой Canonical. Они были полны энтузиазма, были увлечены нашим делом, они стремились сделать Flutter лучше, думая не только о Linux, но и обо всех остальных платформах. Это был замечательный проект и мне очень нравятся перспективы разработки Flutter-приложений для других настольных ОС».
Если вы хотите воспользоваться Flokk на своём Linux-компьютере, вы можете загрузить самый свежий релиз приложения с GitHub [9]. А если вы применяете snapd — вы можете загрузить Flokk из Snap Store [10].
Теперь, когда вы уже видели то, какие качественные настольные приложения можно создавать с помощью Flutter, в частности — Linux-приложения, вам может захотеться поработать с Flutter на собственной Linux-машине. Для того чтобы максимально упростить процесс подготовки Linux-систем к разработке Flutter-приложений, мы с удовольствием сообщаем о том, что Flutter SDK для Linux доступен в виде snap-пакета в Snap Store [11]. Этот пакет содержит всё, что необходимо для разработки 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 [12] (сюда уже включён Android SDK). Подробности о snap-пакете Flutter SDK вы можете найти здесь [11].
После того, как вы установили 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.
В дополнение к поддержке настольных приложений путём написания Dart-кода для создания виджетов Flutter, ваше настольное Linux-приложение может обращаться к нативным возможностям Linux, используя каналы платформы (platform channels [13]) или интерфейс внешних функций (Foreign Function Interface [3], FFI) для C/C++. Или, если хотите, можете повторно использовать уже существующий код, который можно найти на pub.dev [14], на сайте менеджера пакетов для Dart и Flutter. Большинство пакетов, которые вы обнаружите на pub.dev, написаны на чистом Dart, большинство этих пакетов отлично работают в Linux-приложениях. Некоторые пакеты, называемые плагинами, имеют в своём составе нативный код, который нацелен на ту или иную платформу. Мы, в рамках этого релиза, опубликовали на pub.dev три плагина, в которых используется нативный функционал Linux:
Каждый из этих плагинов вы можете использовать в своих приложениях, но они, кроме того, могут играть роль примеров того, как из Flutter-кода можно работать с нативными возможностями Linux. Например, вот [18] исходный код реализации плагина url_launcher.
Для того чтобы опубликовать своё 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
После того, как вы подготовите свою учётную запись [19] для публикации приложений в Snap Store, вы сможете опубликовать только что созданный snap-пакет:
$ snapcraft login
$ snapcraft register flokk-contacts
$ snapcraft upload flokk-contacts_1.0.1_amd64.snap --release edge
Здесь мы выгружаем приложение в Snap Store и пытаемся опубликовать его в канале edge [20]. После того, как приложение будет опубликовано в этом канале, его можно устанавливать либо через настольный клиент Snap Store, либо пользуясь командной строкой:
$ snap install --edge flokk-contacts
Подробности о том, как создать своё первое приложение и опубликовать его в Snap Store, можно найти здесь [21].
Приложение Flokk — это отличный пример реального проекта, рассчитанного на настольные компьютеры, работающие под управлением Linux. Если вы хотите взглянуть на пример попроще — обратите внимание на приложение Photo Search [22]. Оно создано специально для того чтобы продемонстрировать возможности Flutter по разработке настольных приложений.

Приложение Photo Search
Это — простое онлайновое приложение для поиска фотографий, которое использует несколько плагинов для доступа к нативному функционалу поддерживаемых им платформ, в число которых входят macOS и Linux.
Если вам нужны пошаговые инструкции по разработке настольных Linux-приложений — взгляните на это [23] codelab-руководство. Оно посвящено использованию OAuth и GraphQL для создания GitHub-клиента с применением Flutter.

GitHub-клиент
Если вы хотите исследовать более сложный проект, в разработке которого использовано гораздо больше возможностей Flutter, и в котором можно найти несколько интересных примеров кода, то вы можете взглянуть на приложение Flutter Gallery [24]. Оно, в прошлом году, было переделано. Теперь оно, в дополнение к мобильным платформам, поддерживает и настольные. Если вы хотите увидеть это приложение в действии — можете загрузить его из Snap Store [25].

Приложение Flutter Gallery можно загрузить из Snap Store
А вот ещё одно настольное приложение, иллюстрирующее развлекательные возможности Flutter. Это — многопользовательская игра batufo [26], которую создал Торстен Лоренц. Эта красивая игра позволяет игрокам со всего мира соревноваться друг с другом в режиме реального времени.

Игра batufo, работающая на разных платформах, поддерживаемых Flutter
Торстен создавал эту игру с учётом поддержки различных платформ, в том числе — Linux, macOS, Android и iOS. Если вам интересно узнать о том, как была разработана эта игра, и если вы хотите наблюдать за развитием этого проекта — можете посмотреть эти [27] видео и заглянуть в репозиторий [28] проекта. В Linux эту игру можно установить из Snap Store [29].
Теперь, после выхода альфа-версии Flutter для Linux, и благодаря тесному взаимодействию Google и Canonical, у разработчиков, использующих Linux, есть возможность пользоваться возможностями Flutter для создания приложений, рассчитанных на применяемую ими ОС. Для этого достаточно установить snap-пакет [11] Flutter SDK, собрать и протестировать приложение с использованием VS Code или Android Studio, и опубликовать его в Snap Store. Новости о настольной разработке с использованием Flutter ищите здесь [30]. И, что очень и очень важно для нас, постарайтесь оставить отзыв [31] о новых возможностях Flutter. Это поможет нам сделать поддержку Flutter-приложений в Linux настолько качественной, насколько это возможно. Собственно говоря, того же самого мы стремимся добиться и работая с другими платформами.
Flutter для Linux от команды разработчиков Canonical — это гигантский шаг вперёд, шаг к нашей мечте о том, чтобы сделать Flutter самым лучшим фреймворком для разработки приложений, рассчитанных на любые платформы. То, что теперь Flutter-приложения можно разрабатывать для настольных систем, делает движок Flutter гораздо более доступным для самых разных устройств. Хотя Google и не может напрямую поддерживать эти устройства, компания планирует продолжать строить партнёрские отношения с другими компаниями и развивать экосистему Flutter.
Мы хотим видеть Flutter на всех устройствах, которые нуждаются в быстрых и привлекательных приложениях.
А вы уже пробовали создавать Flutter-приложения для Linux?
Автор: ru_vds
Источник [33]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/355453
Ссылки в тексте:
[1] Image: https://habr.com/ru/company/ruvds/blog/512860/
[2] NavigationRail: https://api.flutter.dev/flutter/material/NavigationRail-class.html
[3] Dart:FFI: https://dart.dev/guides/libraries/c-interop
[4] Assistant: https://developers.googleblog.com/2019/05/Flutter-io19.html
[5] Ubuntu: https://ubuntu.com/
[6] gskinner: http://gskinner.com/
[7] Вот: https://youtu.be/cTFJcq7UTRY
[8] опенсорсный проект: https://github.com/gskinnerTeam/Flokk/
[9] GitHub: https://github.com/gskinnerTeam/Flokk/releases
[10] Snap Store: https://snapcraft.io/flokk-contacts
[11] Snap Store: https://snapcraft.io/flutter
[12] Android SDK или Android Studio: https://developer.android.com/studio/install#linux
[13] platform channels: https://flutter.dev/docs/development/platform-integration/platform-channels
[14] pub.dev: http://pub.dev/flutter/packages?platform=linux
[15] url_launcher: https://pub.dev/packages/url_launcher
[16] shared_preferences: https://pub.dev/packages/shared_preferences
[17] path_provider: https://pub.dev/packages/path_provider
[18] вот: https://github.com/flutter/plugins/tree/master/packages/url_launcher/url_launcher_linux/
[19] учётную запись: https://snapcraft.io/docs/creating-your-developer-account
[20] канале edge: https://snapcraft.io/docs/channels#heading--risk-levels
[21] здесь: https://snapcraft.io/first-snap#flutter
[22] Photo Search: https://github.com/flutter/samples/tree/master/experimental/desktop_photo_search
[23] это: https://codelabs.developers.google.com/codelabs/flutter-github-graphql-client/index.html#0
[24] Flutter Gallery: https://github.com/flutter/gallery
[25] Snap Store: https://snapcraft.io/flutter-gallery
[26] batufo: https://thlorenz.com/batufo/
[27] эти: https://thlorenz.com/batufo/#watch
[28] репозиторий: https://github.com/thlorenz/batufo
[29] Snap Store: https://snapcraft.io/batufo
[30] здесь: http://flutter.dev/desktop
[31] отзыв: https://github.com/flutter/flutter/issues
[32] Image: http://ruvds.com/ru-rub?utm_source=habr&utm_medium=perevod&utm_campaign=flutterlinux
[33] Источник: https://habr.com/ru/post/512860/?utm_source=habrahabr&utm_medium=rss&utm_campaign=512860
Нажмите здесь для печати.