Ошибка Flutter Windows dll
Обновлено: 21.11.2024
Некоторая информация относится к предварительной версии продукта, которая может быть существенно изменена до ее выпуска. Microsoft не дает никаких явных или подразумеваемых гарантий в отношении представленной здесь информации.
Исключение, возникающее при переполнении стека выполнения, так как он содержит слишком много вызовов вложенных методов. Этот класс не может быть унаследован.
Примеры
В следующем примере счетчик используется для обеспечения того, чтобы количество рекурсивных вызовов метода Execute не превышало максимальное значение, заданное константой MAX_RECURSIVE_CALLS.
Примечания
StackOverflowException возникает при ошибках переполнения стека выполнения, как правило, в случае очень глубокой или неограниченной рекурсии. Поэтому убедитесь, что в вашем коде нет бесконечного цикла или бесконечной рекурсии.
StackOverflowException использует HRESULT COR_E_STACKOVERFLOW, который имеет значение 0x800703E9. Инструкция промежуточного языка Localloc (IL) вызывает StackOverflowException . Список начальных значений свойств для объекта StackOverflowException см. в конструкторах StackOverflowException.
Применение атрибута HandleProcessCorruptedStateExceptionsAttribute к методу, вызывающему исключение StackOverflowException, не дает никакого эффекта. Вы по-прежнему не можете обработать исключение из пользовательского кода.
Если в вашем приложении размещается общеязыковая среда выполнения (CLR), можно указать, что CLR должна выгрузить домен приложения, в котором возникает исключение переполнения стека, и позволить соответствующему процессу продолжиться. Дополнительные сведения см. в разделе Интерфейс ICLRPolicyManager.
Конструкторы
Инициализирует новый экземпляр класса StackOverflowException, задавая для свойства Message нового экземпляра предоставленное системой сообщение с описанием ошибки, например "Запрошенная операция вызвала переполнение стека". Это сообщение учитывает текущую культуру системы.
Инициализирует новый экземпляр класса StackOverflowException с указанным сообщением об ошибке.
Инициализирует новый экземпляр класса StackOverflowException с указанным сообщением об ошибке и ссылкой на внутреннее исключение, которое является причиной этого исключения.
Свойства
Получает набор пар "ключ-значение", которые предоставляют дополнительную определяемую пользователем информацию об исключении.
Получает или задает ссылку на файл справки, связанный с этим исключением.
Получает или задает HRESULT, закодированное числовое значение, которое назначается определенному исключению.
Получает экземпляр Exception, вызвавший текущее исключение.
Получает сообщение, описывающее текущее исключение.
Получает или задает имя приложения или объекта, вызвавшего ошибку.
Получает строковое представление ближайших кадров в стеке вызовов.
Получает метод, выдающий текущее исключение.
Методы
Определяет, равен ли указанный объект текущему объекту.
При переопределении в производном классе возвращает исключение, являющееся основной причиной одного или нескольких последующих исключений.
Служит хеш-функцией по умолчанию.
При переопределении в производном классе устанавливает SerializationInfo с информацией об исключении.
Получает тип среды выполнения текущего экземпляра.
Создает поверхностную копию текущего объекта.
Создает и возвращает строковое представление текущего исключения.
События
Происходит при сериализации исключения для создания объекта состояния исключения, содержащего сериализованные данные об исключении.
Чтобы установить и запустить Flutter, ваша среда разработки должна соответствовать следующим минимальным требованиям:
- Операционные системы: Windows 7 SP1 или более поздней версии (64-разрядная версия), на базе x86-64.
- Дисковое пространство: 1,64 ГБ (не включает дисковое пространство для IDE/инструментов).
- Инструменты. Flutter зависит от наличия этих инструментов в вашей среде.
- Windows PowerShell 5.0 или более поздняя версия (предустановлена в Windows 10)
Git для Windows 2.x с параметром Использовать Git из командной строки Windows.
Если Git для Windows уже установлен, убедитесь, что вы можете запускать команды git из командной строки или PowerShell.
Получить SDK Flutter
Загрузите следующий установочный пакет, чтобы получить последнюю стабильную версию Flutter SDK:
Информацию о других каналах выпуска и более ранних сборках см. на странице выпусков SDK.
Распакуйте ZIP-файл и поместите содержащийся в нем файл Flutter в нужное место установки Flutter SDK (например, C:\Users\ \Documents ).
Предупреждение. Не устанавливайте Flutter в каталог, например C:\Program Files\, для которого требуются повышенные привилегии.
Если вы не хотите устанавливать фиксированную версию пакета установки, вы можете пропустить шаги 1 и 2. Вместо этого получите исходный код из репозитория Flutter на GitHub и при необходимости измените ветки или теги. Например:
Теперь вы готовы запускать команды Flutter в консоли Flutter.
Обновите путь
Если вы хотите запускать команды Flutter в обычной консоли Windows, выполните следующие действия, чтобы добавить Flutter в переменную среды PATH:
- В строке поиска «Пуск» введите «env» и выберите «Изменить переменные среды для своей учетной записи».
- В разделе "Пользовательские переменные" проверьте, есть ли запись с именем "Путь":
- Если запись существует, добавьте полный путь к flutter\bin, используя ; в качестве разделителя существующих значений.
- Если такой записи не существует, создайте новую пользовательскую переменную с именем Path, указав в качестве значения полный путь к flutter\bin.
Вы должны закрыть и снова открыть все существующие окна консоли, чтобы эти изменения вступили в силу.
Примечание. Начиная с версии 1.19.0 для разработчиков Flutter SDK содержит команду dart вместе с командой flutter, чтобы вам было проще запускать программы командной строки Dart. При загрузке Flutter SDK также загружается совместимая версия Dart, но если вы загрузили Dart SDK отдельно, убедитесь, что Flutter-версия dart находится первой на вашем пути, так как две версии могут быть несовместимы. Следующая команда сообщает вам, происходят ли команды flutter и dart из одного и того же каталога bin и, следовательно, совместимы.
Как показано выше, команда dart из Flutter SDK не идет первой. Обновите свой путь, чтобы использовать команды из C:\path-to-flutter-sdk\bin\ перед командами из C:\path-to-dart-sdk\bin\ (в данном случае). После перезапуска оболочки, чтобы изменения вступили в силу, повторный запуск команды where должен показать, что команды flutter и dart из одного и того же каталога теперь идут первыми.
Однако, если вы используете PowerShell, в нем есть псевдоним команды Where-Object, поэтому вместо него нужно использовать where.exe.
Чтобы узнать больше о команде dart, запустите dart -h из командной строки или посетите страницу инструмента dart.
Запустить флаттер-доктор
В окне консоли с каталогом Flutter в пути (см. выше) выполните следующую команду, чтобы узнать, есть ли какие-либо зависимости от платформы, необходимые для завершения установки:
Эта команда проверяет вашу среду и отображает отчет о состоянии вашей установки Flutter. Внимательно проверьте выходные данные на наличие другого программного обеспечения, которое может потребоваться для установки или выполнения дополнительных задач (выделено жирным шрифтом).
В следующих разделах описано, как выполнить эти задачи и завершить процесс установки. После того, как вы установили все недостающие зависимости, вы можете снова запустить команду flutter doctor, чтобы убедиться, что вы все настроили правильно.
Примечание. Если Flutter Doctor сообщает, что либо подключаемый модуль Flutter, либо подключаемый модуль Dart для Android Studio не установлены, перейдите к разделу Настройка редактора для решения этой проблемы.
Предупреждение. Инструмент Flutter может иногда загружать ресурсы с серверов Google. Загружая или используя Flutter SDK, вы соглашаетесь с Условиями использования Google.
Например, при установке с GitHub (в отличие от предварительно упакованного архива) инструмент Flutter будет загружать SDK Dart с серверов Google сразу же при первом запуске, так как он используется для запуска самого инструмента Flutter. Это также произойдет при обновлении Flutter (например, при запуске команды обновления flutter).
Инструмент флаттера использует Google Analytics для составления отчетов о статистике использования функций и отправки отчетов о сбоях. Эти данные используются для улучшения инструментов Flutter с течением времени.
Аналитика инструмента Flutter не отправляется при первом запуске. Чтобы отключить отчеты, запустите flutter config --no-analytics. Чтобы отобразить текущую настройку, используйте конфигурацию флаттера. Если вы отказываетесь от аналитики, отправляется событие отказа, после чего инструмент Flutter не отправляет никакой дополнительной информации.
Инструменты Dart также могут отправлять показатели использования и отчеты о сбоях в Google. Чтобы управлять отправкой этих показателей, используйте следующие параметры в инструменте дротика:
- --enable-analytics : включает анонимную аналитику.
- --disable-analytics : отключает анонимную аналитику.
Политика конфиденциальности Google описывает, как эти службы обрабатывают данные.
Настройка Android
Примечание. Flutter использует полную установку Android Studio для предоставления зависимостей от платформы Android. Однако вы можете писать свои приложения Flutter в ряде редакторов; более поздний шаг обсуждает это.
Установите Android Studio
- Загрузите и установите Android Studio.
- Запустите Android Studio и выполните «Мастер настройки Android Studio». При этом устанавливаются последние версии Android SDK, инструменты командной строки Android SDK и инструменты сборки Android SDK, которые необходимы Flutter при разработке для Android.
- Запустите Flutter Doctor, чтобы убедиться, что Flutter обнаружил вашу установку Android Studio. Если Flutter не может найти его, запустите flutter config --android-studio-dir, чтобы указать каталог, в который установлена Android Studio.
Настройте Android-устройство
Чтобы подготовиться к запуску и тестированию приложения Flutter на устройстве Android, вам потребуется устройство Android под управлением Android 4.1 (уровень API 16) или выше.
- Включите параметры разработчика и отладку по USB на своем устройстве. Подробные инструкции доступны в документации Android.
- Только для Windows: установите USB-драйвер Google.
- С помощью USB-кабеля подключите телефон к компьютеру. При появлении запроса на вашем устройстве разрешите компьютеру доступ к вашему устройству.
- В терминале запустите команду flutter devices, чтобы убедиться, что Flutter распознает подключенное устройство Android. По умолчанию Flutter использует версию Android SDK, на которой основан ваш инструмент adb. Если вы хотите, чтобы Flutter использовал другую установку Android SDK, вы должны установить переменную среды ANDROID_SDK_ROOT в этот каталог установки.
Настройка эмулятора Android
Чтобы подготовиться к запуску и тестированию приложения Flutter на эмуляторе Android, выполните следующие действия:
- Включите ускорение ВМ на своем компьютере.
- Запустите Android Studio, щелкните значок AVD Manager и выберите «Создать виртуальное устройство»…
- В более ранних версиях Android Studio вместо этого следует запустить Android Studio > Инструменты > Android > AVD Manager и выбрать Создать виртуальное устройство…. (Подменю Android присутствует только внутри проекта Android.)
- Если у вас нет открытого проекта, вы можете выбрать «Настроить» > «AVD Manager» и выбрать «Создать виртуальное устройство…».
- Выберите определение устройства и нажмите кнопку Далее.
- Выберите один или несколько системных образов для версий Android, которые вы хотите эмулировать, и нажмите кнопку Далее. Рекомендуется использовать образ x86 или x86_64.
- В разделе "Эмуляция производительности" выберите "Аппаратное обеспечение – GLES 2.0", чтобы включить аппаратное ускорение.
Убедитесь, что конфигурация AVD верна, и нажмите "Готово".
Подробнее об описанных выше шагах см. в разделе Управление AVD.
Принять лицензии Android
Прежде чем вы сможете использовать Flutter, вы должны согласиться с лицензиями платформы Android SDK. Этот шаг следует выполнить после установки перечисленных выше инструментов.
Убедитесь, что у вас установлена версия Java 8 и что для переменной среды JAVA_HOME задана папка JDK.
Android Studio версии 2.2 и выше поставляется с JDK, так что это уже должно быть сделано.
Настройка Windows
Внимание! Поддержка Windows! Начиная с Flutter 2.10, поддержка Windows доступна на стабильном канале! Дополнительные сведения см. в бесплатной статье Announcing Flutter for Windows на Medium.
Дополнительные требования Windows
Для разработки рабочего стола Windows помимо Flutter SDK вам потребуется следующее:
- Visual Studio 2022 При установке Visual Studio вам необходимо установить рабочую нагрузку «Разработка рабочего стола на C++» для создания окон, включая все ее компоненты по умолчанию.
Примечание. Visual Studio отличается от Code Visual Studio.
Веб-настройка
Flutter поддерживает создание веб-приложений в стабильном канале. Любое приложение, созданное во Flutter 2, автоматически создается для Интернета. Чтобы добавить веб-поддержку в приложение, созданное до того, как веб-версия стала стабильной, следуйте инструкциям в разделе «Создание веб-приложения с помощью Flutter», когда вы завершили настройку, описанную выше.
Следующий шаг
Настройте предпочтительный редактор.
Если не указано иное, эта работа распространяется под лицензией Creative Commons Attribution 4.0 International License, а образцы кода распространяются под лицензией BSD.
Поддержка настольных компьютеров позволяет компилировать исходный код Flutter в собственное настольное приложение для Windows, macOS или Linux. Поддержка рабочего стола Flutter также распространяется на подключаемые модули: вы можете установить существующие подключаемые модули, поддерживающие платформы Windows, macOS или Linux, или создать свои собственные.
Примечание. Windows полностью поддерживается в качестве цели разработки. Дополнительные сведения см. в разделе Анонс Flutter для Windows.
Поддержка настольных приложений для macOS и Linux по-прежнему находится на стадии бета-тестирования. Моментальные снимки их поддержки доступны на стабильном канале, но мы рекомендуем вам использовать бета-канал для доступа к последним функциям и исправлениям ошибок на этих платформах.
Требования
Чтобы скомпилировать настольное приложение, необходимо создать его на целевой платформе: создать приложение Windows в Windows, приложение macOS в macOS и приложение Linux в Linux.
- SDK Flutter. См. инструкции по установке Flutter SDK.
- Необязательно: IDE, поддерживающая Flutter. Вы можете установить Android Studio, IntelliJ IDEA или Visual Studio Code и установить плагины Flutter и Dart, чтобы включить языковую поддержку и инструменты для рефакторинга, запуска, отладки и перезагрузки настольного приложения в редакторе. Дополнительные сведения см. в разделе Настройка редактора.
Дополнительные требования Windows
Для разработки рабочего стола Windows помимо Flutter SDK вам потребуется следующее:
- Visual Studio 2022. При установке Visual Studio выберите рабочую нагрузку «Разработка настольных компьютеров с помощью C++», включая все ее компоненты по умолчанию, чтобы установить необходимый набор инструментов C++ и заголовочные файлы Windows SDK.
Примечание. Visual Studio отличается от Code Visual Studio.
Дополнительные требования к macOS
Для разработки настольных компьютеров в macOS помимо Flutter SDK вам потребуются следующие компоненты:
Дополнительные требования к Linux
Для разработки рабочего стола Linux помимо Flutter SDK вам потребуются следующие компоненты:
Один из простых способов установить Flutter SDK вместе с необходимыми зависимостями — использовать snapd. Дополнительные сведения см. в разделе Установка snapd.
После того как у вас есть snapd , вы можете установить Flutter с помощью Snap Store или из командной строки:
В качестве альтернативы, если вы предпочитаете не использовать snapd, вы можете использовать следующую команду:
Создать новый проект
Вы можете использовать следующие шаги, чтобы создать новый проект с поддержкой рабочего стола.
Настроить
В Windows поддержка рабочего стола включена во Flutter 2.10 или более поздней версии.
В macOS и Linux поддержка настольных компьютеров по умолчанию отключена в стабильном канале. Вы можете включить его вручную с помощью одной из следующих команд, в зависимости от используемой платформы:
Примечание. Вам нужно только выполнить команду flutter config --enable-
-рабочий стол один раз. Вы можете в любой момент проверить статус вашей конфигурации, используя команду flutter config без аргументов.
Чтобы проверить, настроена ли поддержка настольных компьютеров, используйте команду flutter devices, чтобы вывести список доступных целей. В дополнение к любым мобильным или веб-устройствам вы должны увидеть строку для операционной системы, в которой вы работаете, например (в Windows):
Вы также можете запустить программу Flutter Doctor, чтобы проверить наличие нерешенных проблем. Вы должны увидеть галочку для каждой успешно настроенной области. В Windows это должно выглядеть примерно так, с записью «Разработка для Windows»:
В macOS найдите такую строку:
В Linux найдите такую строку:
Если Flutter Doctor обнаружит проблемы или отсутствующие компоненты для платформы, для которой вы не хотите разрабатывать, вы можете игнорировать эти предупреждения. Либо можно вообще отключить платформу с помощью команды flutter config, например:
После включения поддержки рабочего стола перезапустите IDE, чтобы она могла обнаружить новое устройство.
Создать и запустить
Создание нового проекта с поддержкой рабочего стола ничем не отличается от создания нового проекта Flutter для других платформ.
После того как вы настроили свою среду для поддержки рабочего стола, вы можете создать и запустить настольное приложение либо в среде IDE, либо из командной строки.
Использование IDE
После того как вы настроили среду для поддержки рабочего стола, обязательно перезапустите интегрированную среду разработки, если она уже была запущена.
Создайте новое приложение в своей среде IDE, и она автоматически создаст версии вашего приложения для iOS, Android, веб-сайта и настольного компьютера. В раскрывающемся списке устройств выберите Windows (настольный компьютер), macOS (настольный компьютер) или Linux (настольный компьютер) и запустите приложение, чтобы увидеть, как оно запускается на рабочем столе.
Из командной строки
Чтобы создать новое приложение, включающее поддержку рабочего стола (в дополнение к поддержке мобильных устройств и Интернета), выполните следующие команды, заменив myapp именем вашего проекта:
Чтобы запустить приложение из командной строки, введите одну из следующих команд в верхней части пакета:
Примечание: если вы не укажете флаг -d, запуск флаттера выведет список доступных целей на выбор.
Создать выпуск приложения
Чтобы создать сборку выпуска, выполните одну из следующих команд:
Распространение
Окна
Существуют различные подходы к распространению приложения Windows. Вот несколько вариантов:
- Используйте инструменты для создания установщика MSIX (описанного в следующем разделе) для вашего приложения и распространяйте его через магазин приложений Microsoft Windows. Вам не нужно вручную создавать сертификат подписи для этого варианта, так как он обрабатывается за вас.
- Создайте установщик MSIX и распространите его через собственный веб-сайт. Для этого варианта вам необходимо дать приложению цифровую подпись в виде сертификата .pfx.
- Соберите все необходимые элементы и создайте собственный ZIP-файл.
Изменение имени сгенерированного двоичного файла
Чтобы изменить имя созданного приложения Windows, отредактируйте переменную BINARY_NAME, установленную в строке 4 файла windows/CMakeLists.txt в вашем проекте Flutter.
Упаковка MSIX
MSIX, новый формат пакета приложений для Windows, предоставляет современный формат упаковки и установщик. Этот формат можно использовать либо для доставки приложений в Microsoft Store в Windows, либо для прямого распространения установщиков приложений.
Самый простой способ создать дистрибутив MSIX для проекта Flutter — использовать пакет msix pub. Пример использования пакета msix из настольного приложения Flutter см. в примере поиска фотографий на рабочем столе.
Создайте самоподписанный PFX-сертификат для локального тестирования
Для частного развертывания и тестирования с помощью установщика MSIX необходимо предоставить приложению цифровую подпись в виде сертификата .pfx.
Для развертывания через Магазин Windows создание сертификата .pfx не требуется. Магазин Windows занимается созданием и управлением сертификатами для приложений, распространяемых через его магазин.
Для распространения вашего приложения путем его самостоятельного размещения на веб-сайте требуется сертификат, подписанный центром сертификации, известным Windows.
Используйте следующие инструкции для создания самозаверяющего сертификата .pfx.
Создание собственного ZIP-файла для Windows
Исполняемый файл Flutter, .exe , можно найти в вашем проекте в папке build\windows\runner\ \ . В дополнение к этому исполняемому файлу вам потребуется следующее:
- Из того же каталога:
- все файлы .dll
- каталог данных
- msvcp140.dll
- vcruntime140.dll
- vcruntime140_1.dll
Поместите файлы DLL в каталог рядом с исполняемым файлом и другими библиотеками DLL и соберите их вместе в ZIP-файл. Результирующая структура выглядит примерно так:
На этом этапе при желании было бы относительно просто добавить эту папку в установщик Windows, такой как Inno Setup, WiX и т. д.
macOS
Чтобы распространять приложение macOS, вы можете либо распространять его через магазин приложений macOS, либо распространять само приложение .app, возможно, со своего собственного веб-сайта. Начиная с macOS 10.14.5, вам необходимо нотариально заверить приложение macOS, прежде чем распространять его за пределами магазина приложений macOS.
Первый шаг в обоих вышеперечисленных процессах включает работу с вашим приложением внутри Xcode. Чтобы иметь возможность скомпилировать ваше приложение изнутри Xcode, вам сначала нужно собрать приложение для выпуска с помощью команды flutter build, а затем открыть приложение Flutter macOS Runner.
Оказавшись внутри Xcode, следуйте либо документации Apple по нотариальному заверению приложений macOS, либо распространению приложения через App Store. Вам также следует прочитать приведенный ниже раздел поддержки для macOS, чтобы понять, как права, тестовая среда приложения и усиленная среда выполнения влияют на ваше распространяемое приложение.
Создание и выпуск приложения для macOS содержит более подробное пошаговое руководство.
Линукс
Исполняемый двоичный файл можно найти в вашем проекте в папке build/linux/ /bundle/ . Рядом с вашим исполняемым двоичным файлом в каталоге пакета есть два каталога:
- lib содержит необходимые файлы библиотеки .so
- данные содержат активы данных приложения, такие как шрифты или изображения.
В дополнение к этим файлам ваше приложение также зависит от различных библиотек операционной системы, для которых оно было скомпилировано. Вы можете увидеть полный список, запустив ldd для своего приложения. Например, если у вас есть настольное приложение Flutter с именем linux_desktop_test, вы можете проверить системные библиотеки, от которых оно зависит, следующим образом:
Чтобы упаковать это приложение для распространения, вам нужно включить все в каталог пакета и убедиться, что в системе Linux, на которой вы его устанавливаете, есть все необходимые системные библиотеки. Это может быть так же просто, как:
Информацию о публикации приложения Linux в Snap Store см. в разделе Сборка и выпуск приложения Linux в Snap Store.
По мере того, как инструмент будет укрепляться, следите за новостями о других способах распространения настольного приложения Linux.
Добавить поддержку рабочего стола в существующее приложение Flutter
Чтобы добавить поддержку рабочего стола в существующий проект Flutter, выполните следующую команду в терминале из корневого каталога проекта:
Это добавит необходимые файлы и каталоги рабочего стола в ваш существующий проект Flutter. Чтобы добавить только определенные настольные платформы, измените список платформ, чтобы он включал только те платформы, которые вы хотите добавить.
поддержка для macOS
Следующая информация относится только к разработке для macOS.
Разрешения и песочница приложения
Сборки macOS по умолчанию настроены на подписание и помещаются в изолированную программную среду с помощью тестовой среды приложения. Это означает, что если вы хотите предоставить вашему приложению macOS определенные возможности или службы, например следующие:
- Доступ к Интернету
- Захват фильмов и изображений со встроенной камеры
- Доступ к файлам
Затем вы должны настроить определенные права в Xcode. В следующем разделе рассказывается, как это сделать.
Настройка прав
Управление настройками песочницы осуществляется в файлах macos/Runner/*.entitlements.При редактировании этих файлов не следует удалять исходные исключения Runner-DebugProfile.entitlements (которые поддерживают входящие сетевые подключения и JIT), так как они необходимы для правильной работы режимов отладки и профиля.
Если вы привыкли управлять файлами прав через пользовательский интерфейс возможностей Xcode, имейте в виду, что редактор возможностей обновляет только один из двух файлов или, в некоторых случаях, создает совершенно новый файл прав и переключает проект для использования это для всех конфигураций. Любой сценарий вызывает проблемы. Мы рекомендуем редактировать файлы напрямую. Если у вас нет особой причины, вы всегда должны вносить одинаковые изменения в оба файла.
Дополнительную информацию по этим темам см. в разделе «Песочница приложений и права» на сайте Apple для разработчиков.
Усиленная среда выполнения
Если вы решите распространять свое приложение за пределами App Store, вам необходимо нотариально заверить свое приложение для совместимости с macOS 10.15+. Для этого необходимо включить опцию Hardened Runtime. После того, как вы включили его, вам потребуется действующий сертификат подписи для сборки.
По умолчанию файл прав позволяет использовать JIT для отладочных сборок, но, как и в тестовой среде приложения, вам может потребоваться управлять другими правами. Если у вас включены и тестовая среда приложения, и защищенная среда выполнения, вам может потребоваться добавить несколько прав для одного и того же ресурса. Например, для доступа к микрофону потребуются как com.apple.security.device.audio-input (для усиленной среды выполнения), так и com.apple.security.device.microphone (для тестовой среды приложения).
Дополнительную информацию по этой теме см. в разделе Усиленная среда выполнения на сайте Apple для разработчиков.
Поддержка плагинов
Flutter для ПК поддерживает использование и создание плагинов.
Использование плагина
Чтобы использовать подключаемый модуль, поддерживающий рабочий стол, выполните действия для подключаемых модулей при использовании пакетов. Flutter автоматически добавляет в ваш проект необходимый нативный код, как в случае с iOS или Android.
Мы рекомендуем следующие подключаемые модули, обновленные для работы с настольными приложениями:
Используйте следующие ссылки, чтобы найти на pub.dev все пакеты, поддерживающие классические приложения. По этим ссылкам перечислены все пакеты, а не только пакеты плагинов. (Помните, что пакеты плагинов или плагины предоставляют интерфейс для сервисов, зависящих от платформы.)
Написание плагина
Когда вы начнете создавать свои собственные плагины, вам следует помнить о федерации. Федерация — это возможность определить несколько разных пакетов, каждый из которых предназначен для разных платформ, объединенных в один плагин для простоты использования разработчиками. Например, реализация url_launcher для Windows на самом деле является url_launcher_windows, но разработчик Flutter может просто добавить пакет url_launcher в свой pubspec.yaml в качестве зависимости, и процесс сборки выберет правильную реализацию в зависимости от целевой платформы. Федерация удобна тем, что разные команды с разным опытом могут создавать реализации плагинов для разных платформ. Вы можете добавить новую реализацию платформы в любой одобренный федеративный подключаемый модуль на pub.dev, если вы координируете эту работу с первоначальным автором подключаемого модуля.
Для получения дополнительной информации, в том числе информации об одобренных подключаемых модулях, см. следующие ресурсы:
- Разработка пакетов и подключаемых модулей, особенно раздела объединенных подключаемых модулей.
- Как написать веб-плагин Flutter, часть 2, описывает структуру федеративных плагинов и содержит информацию, применимую к настольным плагинам.
- Современная разработка плагинов Flutter охватывает последние улучшения поддержки плагинов Flutter.
Образцы и кодовые лаборатории
Написание настольного приложения Flutter Лаборатория кода, которая поможет вам создать настольное приложение, интегрирующее GitHub GraphQL API с вашим приложением Flutter.
Вы можете запускать следующие примеры в качестве настольных приложений, а также загружать и проверять исходный код, чтобы узнать больше о поддержке Flutter для настольных компьютеров.
Если не указано иное, эта работа распространяется под лицензией Creative Commons Attribution 4.0 International License, а образцы кода распространяются под лицензией BSD.
Библиотека Dart для доступа к распространенным API Win32 с помощью FFI. C не требуется!
Пакет, объединяющий некоторые из наиболее распространенных вызовов Win32 API с использованием FFI, чтобы сделать их доступными для кода Dart без компилятора C или Windows SDK.
Помимо описания самих API, этот пакет предлагает множество поучительных примеров для более сложных сценариев использования FFI.
По замыслу этот пакет содержит минимальные модификации Win32 API для поддержки идиом Dart. Цель состоит в том, чтобы обеспечить хорошее знакомство с существующим разработчиком Win32. Другие пакеты Dart могут основываться на этих примитивах, чтобы предоставить дружественный API для разработчиков Dart и Flutter.Хорошим примером этого является filepicker_windows, который предлагает общий диалог элементов, подходящий для включения в существующее приложение Flutter.
Этот пакет позволяет создавать приложения, использующие API Windows, непосредственно из Dart, путем переноса распространенных API Win32, COM и среды выполнения Windows с помощью Dart FFI.
Вы можете использовать его для вызова API Win32, такого как EnumFontFamiliesEx, для перечисления всех локально установленных шрифтов:
или получить доступ к системной информации, которая не предоставляется непосредственно библиотеками платформы Dart:
Вы можете использовать его для создания приложения Windows с Flutter, которое использует API Win32:
Вы даже можете использовать его для создания традиционного приложения Win32, написанного исключительно на Dart, которое могло бы быть взято прямо из классической книги Чарльза Петцольда по программированию приложений для Windows:
или даже, возможно, полноценную игру с использованием GDI:
Вы даже можете создать зависимый от него пакет, например dart_console, который позволяет выполнять расширенные операции с консолью:
или filepicker_windows, который предоставляет современный инструмент выбора файлов Windows для Flutter:
Еще много примеров можно найти в подкаталоге example\, а также набор тестов в подкаталоге test\, в котором показаны другие вызовы API.
Хорошей отправной точкой является hello.dart . В этом примере показано создание окна Win32 и ответ на распространенные сообщения, такие как WM_PAINT, с помощью функции обратного вызова WindowProc.
Это должно отобразить окно с текстовым сообщением.
Это можно скомпилировать в автономный исполняемый файл Win32, запустив:
Дополнительную информацию о работе с библиотекой Win32 из Dart см. в документации, в частности в разделах, посвященных работе со строками и COM-объектам.
Пакет включает несколько примеров в подкаталоге примеров. В этих примерах используется Win32 API для отображения всего пользовательского интерфейса и (если не указано иное) не требуется Flutter.
Пример Описание hello.dart < td>Простое Win32-приложение Petzoldian "hello world"bluetooth.dart Демонстрация перечисления устройств Bluetooth < td>calendar.dart Получает информацию о календаре из WinRT API console.dart Показывает использование консольных API credentials.dart Добавляет учетные данные в хранилище и извлекает их customwin.dart Отображает непрямоугольное окно devices.dart Использует API управления томами для отображения списка всех дисковых устройств dialog.dart Создание пользовательского диалогового окна в коде dialogshow.dart Создает диалог общего элемента (средство выбора файлов) с использованием COM diskinfo.dart Использовать DeviceIoControl() для прямых операций с устройством tr>dump.dart Использовать библиотеки отладчика для печати функций, экспортированных из DLL dynamic_load.dart Демонстрация загрузки DLL и ее вызова во время выполнения explorer\ Пример приложения Flutter, использующего API-интерфейсы выбора файлов Win32 filever.dart Получение информации о версии файла из файлового ресурса < /tr>gamepad.dart Показать, какие геймпады подключены guid.dart Создает глобальный уникальный идентификатор (GUID) idispatch.dart Демонстрирует вызов метода с помощью IDispatch knownfolder.dart Извлекает известные папки из текущего профиля пользователя magnifier.dart Открывает окно лупы с помощью API увеличения manifest\ Демонстрирует использование манифестов приложений для скомпилированных приложений midi.dart< /td> Демонстрирует воспроизведение MIDI с использованием команд MCI modules.dart Перечисляет все загруженные модули в текущей системе тр><т r>монитор.dart Использует DDC и API-интерфейс monitor-config для получения ограничений монитора msgbox.dart Демонстрирует MessageBox из консоли< /td> блокнот\ Облегченная копия апплета блокнота Windows paint.dart Демонстрирует простой рисунок GDI и минимальный/максимальный размер окна pipe.dart Показывает использование именованных каналов для межпроцессного взаимодействия < /tr>play_sound.dart Воспроизведение файла WAV через Windows PlaySound API printer_list.dart < td>Перечисление доступных принтеров в системе Windowsregistry.dart Демонстрирует запрос значений реестра screenshot.dart Делает скриншот текущего рабочего стола scroll.dart Пример горизонтальной и вертикальной прокрутки текстовое окно sendinput.dart Отправляет ввод с клавиатуры и мыши в другое окно serial. Дар t Демонстрирует управление последовательным портом shortcut.dart Демонстрирует создание ссылки на оболочку Windows snake.dart Игра в змейку с использованием различных функций GDI speech.dart Использовать речевой движок Windows для преобразования текста в речь sysinfo.dart Примеры получения информации об устройстве из собственных API C taskdialog.dart Демонстрирует использование современных диалоговых окон задач tetris\main.dart Порт открытого исходный код игры Тетрис для Dart vt.dart Показывает последовательности виртуальных терминалов wallpaper.dart Показывает, какие обои и цвет фона установлены window.dart Перечисляет открытые окна и основные действия с ними winmd.dart Опрос типов среды выполнения Windows wmi.dart Использование WMI из COM для получения информации об устройстве/ОС wsl.d art Получение информации из экземпляра WSL через API Существует небольшой, но растущий набор пакетов, основанных на относительно низкоуровневых API-интерфейсах, предоставляемых пакетом Dart win32, для предоставления более идиоматических оболочек классов. Эти пакеты обычно не требуют каких-либо знаний о моделях программирования Windows или FFI и идеально подходят для включения в приложения Flutter для Windows.
В частности, это включает:
-
: предоставляет библиотеки Dart для создания TUI (терминальных пользовательских интерфейсов) или консольных приложений, которые используют больше, чем службы stdin/stdout, предоставляемые самим Dart. : предоставляет информацию о характеристиках текущего устройства. : позволяет файлу Windows открывать/сохранять общие диалоговые окна, доступные для приложений Flutter и Dart. : позволяет приложениям Dart находить распространенные местоположения файлов Windows (например, каталог документов). : предоставляет классы Dart для доступа к реестру Windows и управления им. : предоставляет экспериментальную оболочку (или средство запуска) для размещения приложений Flutter, не требуя компилятора C++ для создания EXE.
Данный пакет предполагает наличие 64-разрядного компилятора Dart, работающего в Windows. Многие команды тестируются в 32-битной Windows, но из-за отсутствия компилятора для 32-битных исполняемых файлов и растущей нехватки машин с 32-битными операционными системами это неизбежно имеет низкий приоритет. Пакет также протестирован на архитектуре Windows-on-ARM в режиме эмуляции x64.
Текущий пакет представляет собой только подмножество API Win32, но новые API будут добавляться по запросу пользователей. Меня особенно интересует разблокировка создания новых пакетов Dart для Windows. Пожалуйста, отправляйте запросы на добавление функций и сообщения об ошибках в систему отслеживания ошибок.
Версия библиотеки пытается моделировать semver, но вы не должны брать на себя строгую гарантию отсутствия критических изменений между младшими версиями. Такая гарантия невозможна по нескольким причинам:
- Несколько раз исправляя ошибку в точности API Win32, я ужесточал ограничения на параметр (например, Pointer становится Pointer ). Об этих изменениях следует сообщать в журнале.
- Добавление новых функций само по себе может привести к критическим изменениям. Например, если вы объявите отсутствующую константу Windows в своем собственном коде, который затем будет добавлен, Dart будет жаловаться на повторяющееся определение.
Одним из решений является привязка к конкретной версии Win32 или объявление более жесткой зависимости от версии (например, '>=1.7.0, а не просто ^1.7.0 ). Но лучший подход — просто регулярно тестировать последнюю версию этого пакета и продолжать продвигать свой минимум вперед. По мере развития пакета эти проблемы должны постепенно исчезать.
Приведенный выше пример Tetris представляет собой более полный рабочий пример достаточно полной программы, использующей пакет Dart Win32. Это порт C-версии игры от Chang-Hung Liang. Больше информации.
Реализация Snake на языке C создана Дэвидом Джонсом и перенесена с его разрешения.
Первоначальная версия примера Блокнота на языке C была создана Чарльзом Петцольдом и любезно предоставлена им по лицензии без ограничений.
Читайте также: