Ответ вслух Middle Платформенные каналы спрашивают часто обновлено

Связь Flutter с нативным кодом

Вопрос

Как вызвать нативный код из Flutter? Расскажите про варианты и как вы выбираете.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Для разовых вызовов использую MethodChannel: из Dart invokeMethod, на платформе обработчик с тем же именем канала отвечает через result. Для потоков, например датчиков или геолокации, EventChannel: Dart получает Stream, платформа шлёт события в EventSink, а в onCancel отписывается от источника.

Что должно прозвучать в ответе

  • `MethodChannel` для вызовов, `EventChannel` для потоков, `BasicMessageChannel` для сообщений

  • Асинхронность и стандартный кодек: какие типы можно передать

  • Обработка `PlatformException` и `MissingPluginException`

  • Pigeon для типобезопасного контракта

  • FFI для библиотек на C/C++/Rust, синхронно и без сериализации

  • Обработчики в главном потоке платформы: тяжёлое в фон

Что могут спросить следом

  • Как передать свой класс через канал?
  • Как сделать поток событий с датчика?
  • Чем плох опрос через MethodChannel по таймеру?

Разбор

Образцовый ответ: «Для разовых вызовов использую MethodChannel: из Dart invokeMethod, на платформе обработчик с тем же именем канала отвечает через result. Для потоков, например датчиков или геолокации, EventChannel: Dart получает Stream, платформа шлёт события в EventSink, а в onCancel отписывается от источника. Данные идут через стандартный кодек: примитивы, строки, байты, списки и мапы, свои классы перевожу в мапы. Ошибки ловлю как PlatformException и MissingPluginException. В новом коде предпочитаю Pigeon: он генерирует типизированный контракт для Dart, Kotlin и Swift, и опечатки ловит компилятор. Если нужна библиотека на C или Rust, беру FFI. Помню, что обработчики работают в главном потоке платформы, поэтому тяжёлую работу увожу в фон»

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.