Нужно ли писать плагины для рабочего стола на языках, определенных для платформы c (например, windows мы используем C ++ и ma c мы используем Swift) - PullRequest
1 голос
/ 29 января 2020

Добрый день люди.

Я новичок в изучении флаттера и дротика, поэтому я буду признателен за помощь

У меня есть плагин для флаттера, который в настоящее время записан в Java в каталоге android. Я хочу, чтобы этот плагин мог работать на других платформах, таких как windows и ma c. Должен ли я переписать этот плагин на C ++ для windows и Swift для макросов или я могу использовать файлы java в этих каталогах.

Если я смогу использовать те же файлы Java, может кто-нибудь, пожалуйста, сообщите мне, как переместить эти файлы в другие каталоги и что мне нужно сделать, чтобы мое приложение флаттера подобрало эти плагины для другие платформы.

Ответы [ 2 ]

1 голос
/ 29 января 2020

Вероятно, есть две причины, по которым конкретная вещь, которую вы хотите сделать, c не будет работать:

  • В приложениях Flutter на настольных платформах нет виртуальной машины Java, поэтому вы нельзя использовать Java.
  • Плагины Flutter обычно существуют для вызова функциональности c, специфичной для платформы (или сторонних SDK, которые написаны для конкретной платформы c, но эффект тот же ). Если вы рассматриваете плагин, например, camera, даже если вы игнорируете языковую проблему, вы не можете вызвать Android API-интерфейсы камеры в macOS или Windows, потому что они не Android; у них совершенно разные API камеры ОС. (Существуют исключения, например sqflite, которые обертывают уже кроссплатформенную библиотеку, но это не норма).

Однако, ответ на ваш общий вопрос о том, нужно ли вам использовать c языков, описанных в документации, технически нет ответа:

  • На Windows и Linux, плагины (в настоящее время) просто общие библиотеки с указанным c C интерфейс. Теоретически вы могли бы написать весь плагин на любом языке, который можно скомпилировать в совместимую библиотеку, совместимую с C, например, Go или Rust (хотя вам придется делать свой собственный метод кодирования / декодирования канала). В качестве альтернативы вы можете использовать API C ++ в качестве тонкого слоя клея для обработки канала платформы и вызывать базовый код, скомпилированный в C -совместимую форму.
  • В macOS плагин - это модуль, поэтому внешний слой должен быть Swift или Objective- C. Тем не менее, Objective- C совместим с C, поэтому тот же вариант, когда в Objective- C есть только клей канала метода, а остальная часть кода в любом интерфейсе C также применима к macOS.

Однако, если вы не имеете дело с существующей кроссплатформенной библиотекой, это, вероятно, не очень хорошая идея. Если вы пишете новый код, не зависящий от платформы c, для использования во Flutter, вам почти всегда будет лучше написать его в Dart как обычный пакет, где он будет работать на всех текущих и будущих платформах Flutter.

1 голос
/ 29 января 2020

Невозможно использовать код Java в macos.

Чтобы добавить поддержку, например, для Mac OSX, вы должны создать каталог с именем macos и написать свой плагин. в swift для этого случая.

Вы можете посмотреть здесь для получения дополнительной информации об этом: https://flutter.dev/desktop#plugin -поддержка

(29/02/2020) Поддержка Window & Linux в настоящее время находится в техническом обзоре

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...