Как передать функции в качестве аргументов из Dart / Flutter в нативный код Android? - PullRequest
0 голосов
/ 25 января 2019

Я хотел бы создать SDK на основе Java, который можно вызывать из Flutter, сторона Flutter должна подключаться к SDK, предоставляя обратные вызовы для выполнения на разных этапах обработки, в идеале что-то вроде:

Future<Result> = doPayment(
  amount: 100.00, 
  currency: 'USD', 
  onPasscodeEntry: () => _renderInputBox(), 
  onValidation: () => _doValidation()
);

сама обработка занимает некоторое время и т. Д., Поэтому шаблон Future<PaymentResult> имеет смысл, приложение должно реагировать на некоторые точки обработки, поэтому имеет смысл передавать обратные вызовы.

Проблемы:

  1. как передать функции в код Java? Насколько я могу судить, все аргументы метода Java-passable в Flutter являются объектами сериализуемого вывода

  2. (менее критично / необязательно), как вернуть POJO и обработать его в дротике? Судя по спецификации , я должен закодировать (в Java) результат в ArrayList / HashMap или в виде строки JSON, а затем создать эквивалентный конструктор в Dart, который принимает List / Map? Это кажется немного громоздким, поэтому я спрашиваю, есть ли более простой способ, желательно без поддержки вариантов Java и Dart для одного и того же объекта

1 Ответ

0 голосов
/ 25 января 2019

Вы не можете передать функцию.

Вы можете создать карту из имени функции в ссылку на функцию, а затем передать имя функции и найти функцию по имени на карте и вызвать ее.

Вы также можете 'Передать POJO.

Вам необходимо сериализовать его в JSON (или другой поддерживаемый формат) и десериализовать его на другой стороне канала.Для этого вам нужно, чтобы класс POJO был реализован в Dart и Java.

Пакеты, такие как protobuf или flatbuffer, позволяют генерировать код для разных языков на основе сокращенного языка для определения структуры данных.

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