Продолжается работа по расширению Flutter для поддержки рабочего стола в качестве целевой среды, что позволяет разработчикам создавать приложения MacOS, Windows и Linux с помощью Flutter. В конечном счете, эти усилия приведут к созданию полностью интегрированного решения, в котором flutter create
flutter run
и flutter build
работают для настольных платформ так же, как они это делают. для мобильных платформ, но в настоящее время эта работа еще не завершена.
Содержание статьи
Текущее состояние
Ниже приводится общий обзор состояния каждой платформы. Подробнее см.
источник.
ВАЖНО: API-интерфейсы рабочего стола Flutter все еще находятся на ранней стадии разработки и могут быть изменены
без предупреждения . Обратная совместимость, API или ABI, не будет предоставлена. ожидать
любой код, использующий эти библиотеки, необходимо обновлять и перекомпилировать после любого обновления Flutter.
Macos
Это самая зрелая из настольных платформ (по разным причинам, включая то, что она довольно близка к iOS, которую мы уже поддерживаем).
Классы, начинающиеся с Flutter
используются совместно с iOS и должны быть по существу стабильными. Классы, начинающиеся с
FLE
все еще находятся на ранних стадиях.
Окна
Текущая оболочка Windows является заполнителем GLFW, что позволяет проводить ранние эксперименты. Он будет заменен в
будущее с оболочкой Win32 или UWP, которая позволяет встраивать Flutter на уровне представления в приложение.
Ожидайте, что API для финальной оболочки будут радикально отличаться от текущей реализации.
Linux
Текущая оболочка Linux является заполнителем GLFW, что позволяет проводить ранние эксперименты. Мы хотели бы создать библиотеку
это позволяет вам встраивать Flutter независимо от того, используете ли вы GTK +, Qt, wxWidgets, Motif или другое произвольное
инструментарий для других частей вашего приложения, но еще не определили хороший способ сделать это.
Ожидайте, что API для финальной оболочки будут радикально отличаться от текущей реализации.
Плагины
Написание плагинов поддерживается на всех платформах, однако в настоящее время существует очень мало плагинов, которые на самом деле имеют
поддержка рабочего стола (например, эти плагины от flutter-desktop-embedding
проект ).
Для Windows и Linux на данный момент поддерживается только кодек JSON (что означает сторону Dart большинства
Существующие плагины должны быть изменены для реализации поддержки рабочего стола). Стандартный кодек должен прийти
в ближайшее время.
Инструмент
Поддержка рабочего стола в инструменте флаттера
находится в стадии разработки. Чтобы использовать любую поддержку (например, хост-компьютер, перечисленный в флаттерных устройствах
), в настоящее время должны быть выполнены две вещи:
- Вы не должны быть на стабильном флаттерном канале . Это должно прояснить, что поддержка настольных компьютеров еще не считается стабильной и готовой к работе.
- Необходимо установить для переменной среды
ENABLE_FLUTTER_DESKTOP
значениезначение true
. Это делается для того, чтобы не мешать существующим рабочим процессам мобильной разработки во время разработки долгосрочного решения (см. № 30724).
Готовые библиотеки оболочки
Библиотеки рабочего стола в настоящее время не загружаются по умолчанию, но их можно загрузить в кэш артефактов движка Flutter, запустив flutter precache
с - linux
- macos
или - флаг windows
в зависимости от вашей платформы.
Оболочка C ++
Библиотеки Windows и Linux предоставляют C API. Для облегчения их использования имеется оболочка C ++
которую вы можете встроить в свое приложение, чтобы обеспечить поверхность API более высокого уровня. Приведенная выше команда precache
загрузит исходный код этой оболочки в папку cpp_client_wrapper
рядом с библиотекой.
Использование оболочек
Поскольку в настоящее время нет поддержки инструментов для оболочек рабочего стола, вам необходимо написать приложение для запуска
себя, и ссылку в библиотеке, а также любые плагины, которые вы используете. Это потребует некоторого знакомства
с помощью нативной разработки на вашей платформе (ях); если у вас еще нет опыта с этим, вы будете
Возможно, вы захотите проверить позже, когда инструмент поддержки флаттера
для рабочего стола станет доступен.
См. Заголовки, которые поставляются с библиотекой для вашей платформы, для получения информации об их использовании. Больше документации
будет доступен в будущем; сейчас может быть полезно взглянуть на flutter-desktop-embedding
Пример .
В дополнение к библиотеке Flutter ваше приложение должно будет объединять ваши ресурсы Flutter (как создано
сборка флаттера
). В Windows и Linux вам также понадобятся данные ICU от движка Flutter
(ищите icudtl.dat
в каталоге bin / cache / artifacts / engine
в вашем дереве флаттера).
macOS Note
В настоящее время вы должны настроить FLEView в XIB, а не в коде (это изменится в будущем). к
сделать так:
- Перетащите в представлении OpenGL.
- Измените класс на FLEView.
- Установите флажок «Двойной буфер». Если ваш взгляд не отображается, вы, вероятно, забыли этот шаг.
- Установите флажок «Поддерживать поддержку высокого разрешения». Если вы видите только часть своего приложения при запуске на
монитор с высоким разрешением, вы, вероятно, забыли этот шаг.
Плагины
Macos
Когда вы настраиваете свой FLEViewController, перед вызовом launchEngine ...
,
вызовите -registerWithRegistrar:
для каждого плагина, который вы хотите использовать. За
пример:
[XYZMyAwesomePlugin registerWithRegistrar:
[myFlutterViewController registrarForPlugin: " XYZMyAwesomePlugin " ]];
Windows / Linux
После создания вашего оконного контроллера Flutter, позвоните регистратору вашего плагина
функция. Например:
MyAwesomePluginRegisterWithRegistrar (
flutter_controller.GetRegistrarForPlugin ( " MyAwesomePlugin " ));
Требования к применению флаттера
Поскольку платформы настольных компьютеров еще не полностью поддерживаются платформой Flutter, существующая Flutter
приложения, вероятно, потребуют небольших изменений для запуска.
Переопределение целевой платформы
Большинству приложений потребуется переопределить целевую платформу для приложения.
к одному из поддерживаемых значений, чтобы избежать исключений «Неизвестная платформа».
Это должно быть сделано как можно раньше.
В простейшем случае, когда код будет работать только на рабочем столе и поведение
должно быть согласовано на всех платформах, вы можете жестко закодировать одну цель:
import 'упаковка: flutter / foundation.dart'
show debugDefaultTargetPlatformOverride;
[...]
void main () {
debugDefaultTargetPlatformOverride = TargetPlatform .fuchsia;
[...]
}
Если код должен быть запущен как на мобильном, так и на настольном компьютере, или вы хотите другой
поведение на разных настольных платформах вы можете обусловить на Platform
.
Например, строка в main ()
выше может быть заменена вызовом:
/// Если текущая платформа является настольной, переопределите платформу по умолчанию на
/// поддерживаемая платформа (iOS для macOS, Android для Linux и Windows).
/// В противном случае ничего не делать.
void _setTargetPlatformForDesktop () {
TargetPlatform targetPlatform;
if ( Платформа .isMacOS) {
targetPlatform = TargetPlatform .iOS;
} else if ( Платформа .isLinux || Платформа .isWindows) {
targetPlatform = TargetPlatform .android;
}
if (targetPlatform ! = null ) {
debugDefaultTargetPlatformOverride = targetPlatform;
}
}
Обратите внимание, что используемая целевая платформа будет влиять не только на поведение и
Появление виджетов, а также ожиданий, которые Флаттер будет иметь для
что доступно на платформе, например шрифты.
Шрифты
Приложения флаттера по умолчанию могут использовать шрифты, которые являются стандартными для цели
Платформа, но недоступна на рабочем столе. Например, если целевая платформа
TargetPlatform.iOS
Библиотека материалов по умолчанию будет работать в Сан-Франциско, что
доступно в macOS, но не в Linux или Windows.
Большинству приложений потребуется установить шрифт (например, через ThemeData
) на основе
на платформе хоста или установите определенный шрифт, который связан с
применение.
Симптомы отсутствующих шрифтов включают текст, который не отображается, и ведение журнала
о невозможности загрузки шрифтов.
Плагины
Если в вашем проекте используются какие-либо плагины (если у них нет поддержки рабочего стола), они не будут
работать, так как родная сторона будет отсутствовать. В зависимости от того, как дартс сторона
Плагин написан, он может не работать изящно или может выдавать ошибки.