В идеале у меня должен быть один BasicMessageChannel в приложении Flutter и один FlutterBinaryMessenger в расширении.
До сих пор мне удавалось взаимодействовать с вышеуказанными классами, но только между изолятом флаттера и кодом Swift хост-приложения, который содержит AppDelegate. Код похож на этот.
Наличие FlutterBinaryMessenger в коде расширения несколько сложнее. Я попробовал этот код:
Код: Выделить всё
let bundle = Bundle()
let project = FlutterDartProject(precompiledDartBundle: bundle)
let flutterEngine = FlutterEngine(name: "Extension flutter engine", project: project)
let flutterMessenger = flutterEngine.binaryMessenger;
let flutterMessenger.setMessageHandlerOnChannel(
"my.app.example/fileProvider",
binaryMessageHandler: { message, reply in
NSLog("Received message in the extension: \(message as Optional)")
reply(nil)
}
)
let success = flutterEngine.run(withEntrypoint: nil)
NSLog("Success starting flutter engine: \success")
Другая проблема заключается в том, что даже если я запущу движок, я даже не уверен, должно ли межпроцессное взаимодействие работать с этими каналами сообщений Flutter или оно просто поддерживает связь с изолятом Flutter. и его хост-код, которые выполняются в одном и том же процессе.
Я могу придумать обходной путь: использовать Flutter Messenger для связи между Flutter и хост-приложением, а затем использовать XPC. для связи между приложением хостинга и расширением. Хотя хотелось бы избежать этого, если это возможно.
Подробнее здесь: https://stackoverflow.com/questions/787 ... on-ui-maco
Мобильная версия