image

Всем привет!


Сегодня я покажу вам, как же запустить ваше существующие Flutter приложение на десктопе (MacOS, Linux или Windows).


Во-первых, вам прийдется переключить канал Flutter c release на master. Для этого вам потребуется выполнить следующие команды в командной строке:


flutter channel master
flutter upgrade

Затем вам нужно задать переменной окружения ENABLE_FLUTTER_DESKTOP значение true.


Для это выполните в командой строке следующее:


Mac OS и Linux


export ENABLE_FLUTTER_DESKTOP=true

Windows PowerShell


$env:ENABLE_FLUTTER_DESKTOP="true"

Windows CMD


set ENABLE_FLUTTER_DESKTOP=true

После этого вы должны видеть ваш десктоп в списке доступных устройств для запуска Flutter. Чтобы проверить это, выполните команду flutter devices


image


Как вы можете видеть на скриншоте, у меня в списке доступных устройств появилась Mac OS.


Дальше нам потребуется заглянуть в следующий репозиторий:
https://github.com/google/flutter-desktop-embedding


Нас интересует содержание директории example, а именно папки macos, linux и windows. Это раннеры для соответствующих платформ — нативные приложения, внутри которых работает Flutter. Точно такие же, какие вы можете увидеть в директории вашего проекта, когда создаете проект с помошью команды flutter create.


Просто скопируйте раннер для интересующей вас платформы в директорию проекта. Этот шаг необходим, так как flutter create пока не поддерживает автоматическое создание раннеров для десктопа.


Уже почти готово. Сейчас нужно немного отредактировать ваш main.dart


Добавьте следующие импорты:


import 'dart:io' show Platform;
import 'package:flutter/foundation.dart' 
show debugDefaultTargetPlatformOverride;

Измените main() следующим образом:


void main() {
  debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
  [...]
}

Последний шаг. Выполните следующие команды:


flutter packages get
flutter precache --linux

Готово! Теперь просто запустите flutter run и ваше приложение соберется на десктоп!


Важное замечание:


Стоит иметь ввиду, что многие сторонние плагины, которые вы использовали в ваших Flutter приложениях не будут работать на десктопе, так как они зависят от нативных API. В будущем ситуация, конечно, изменится, но пока лучше не использовать этот способ для чего то серьезного.

Комментарии (7)


  1. dector
    24.05.2019 02:08

    1. sapphire_id Автор
      24.05.2019 06:19

      Простите, но в статье по вашей ссылке автор наоборот, не рекомендует копировать раннеры в директорию вашего проекта, а предлагает скопировать код вашего проекта (папку lib) внутрь примера из flutter-desktop-embedding.

      Оба варианта допустимы, а более детальную информацию обо всем процессе подготовки, в том числе о том, как сделать свой собственный раннер можно найти тут: https://github.com/flutter/flutter/wiki/Desktop-shells


      1. dector
        25.05.2019 03:12

        Это был тонкий намек на то, что материал напоминает рерайт первой части статьи из медиума.


  1. shaykemelov
    24.05.2019 06:19

    Интересно, что там по потребляемым ресурсам в macOS для release версии?

    • Место на диске
    • CPU
    • Оперативная память


    Для Ubuntu 18.04 собрал приложение из репозитория — 114,7 Mb, 1 ядро 100%, 150-200 Mb оперативки.


    1. sapphire_id Автор
      24.05.2019 06:20

      Я полагаю, что тут та же ситуация, что и при сборке для мобилок — в дебаге Flutter довольно прожорлив, но в релизной сборке очень компактен (по сравнению с другими кроссплатформенными решениями)


  1. osipovaleks
    24.05.2019 13:53

    А я правильно понимаю что это не совсем релизная фишка для Flutter? Какое сейчас состояние у Flutter для desktop (alpha? beta? RC?) и где его можно отслеживать?


    1. sapphire_id Автор
      24.05.2019 22:37

      Да, это все еще на ранних стадиях разработки, за обновлениями лучше наблюдать тут и тут