Компании Google и Canonical выступили с совместной инициативой по обеспечению поддержки разработки графических приложений на основе фреймворка Flutter для настольных Linux-систем. Фреймворк построения интерфейса пользователя Flutter написан на языке Dart (runtime-движок для выполнения приложений написан на C++), позволяет создавать универсальные приложения, работающие на разных платформах, и рассматривается как альтернатива React Native.

Несмотря на наличие Flutter SDK для Linux, он до сих пор применялся только для разработки мобильных приложений и не поддерживал сборку десктоп-приложений для Linux. В прошлом году компания Google объявила о намерении добавить во Flutter возможность разработки полноценных настольных программ и представила альфа-выпуск для разработки таких программ для macOS. Теперь Flutter расширен возможностью разрабатывать десктоп-приложения для Linux. Поддержка разработки приложений для Windows пока находится на стадии начального прототипа.

Для отрисовки интерфейса в Linux используется обвязка на основе библиотеки GTK (поддержку Qt и других тулкитов обещают добавить позднее). Помимо родного для Flutter языка Dart, на котором создаются виджеты, приложения могут использовать интерфейс Dart Foreign Function для вызова кода на C/C++ и обращаться ко всем возможностям платформы Linux.

Поддержка разработки приложений для Linux предложена в свежем альфа-выпуске Flutter SDK, в котором также реализована возможность публикации Linux-приложений в каталоге Snap Store. В формате snap можно найти и сборку самого Flutter SDK. Для разработки приложений на базе Flutter предлагается использовать редактор кода Visual Studio Code или среды разработки IntelliJ и Android Studio.

В качестве примера Linux-программ на базе Flutter предложено приложение Flokk Contacts для работы с адресной книгой Google Contacts. В каталоге pub.dev опубликовано три Flutter-плагина с поддержкой Linux: url_launcher для открытия URL в браузере по умолчанию, shared_preferences для сохранения настроек между сеансами и path_provider для определения типовых каталогов (загрузки, изображения, видео и т.п.)