Интегрировал ли ты Flutter с нативным кодом Android и iOS, использовал ли Kotlin или Swift
Что проверяют
Работали ли вы на границе Flutter и платформы и понимаете ли, как устроен мост между Dart и нативным кодом. Для фронтенд-разработчика это ещё и проверка, насколько далеко вы готовы уходить от своего стека. Следом спрашивают, как передавались данные, в каком потоке выполнялся нативный код и как вы это тестировали.
Как отвечать
Если опыт был, опишите конкретную задачу и механизм:
- platform channels:
MethodChannelдля вызова с ответом,EventChannelдля потока событий (датчики, статус сети),BasicMessageChannelдля произвольных сообщений. Стандартный кодек передаёт только простые типы, списки, словари и байты; - Pigeon: генерирует типизированный код для Dart, Kotlin и Swift из одного описания API и избавляет от строковых имён методов и ручного разбора
Map; - FFI:
dart:ffiдля прямого вызова C-библиотек без каналов, быстрее при частых вызовах; - platform views:
AndroidViewиUiKitView, чтобы встроить нативный виджет вроде карты или плеера; - add-to-app: Flutter-экран внутри существующего нативного приложения с заранее прогретым
FlutterEngine.
Назовите, что делали на каждой стороне: на Android обработчик в MainActivity или в плагине через FlutterPlugin, на iOS регистрация в AppDelegate, разрешения в AndroidManifest.xml и Info.plist. Отдельно скажите, что обработчики каналов по умолчанию работают в главном потоке платформы, и тяжёлую работу надо уводить в фон корутинами Kotlin или GCD, иначе интерфейс подвиснет.
Если опыта нет, скажите честно: основной стек веб, во Flutter вы работали на уровне Dart и готовых плагинов. Покажите, что понимаете идею: это тот же асинхронный мост, что postMessage между WebView и приложением или нативные модули React Native. Примеры и сроки называйте только реальные.
Где спотыкаются
Пишут свой плагин для камеры или геолокации, хотя есть поддерживаемые camera и geolocator. Свой нужен, только если готовые не подходят.
Блокируют главный поток тяжёлой операцией в обработчике канала.
Не продумывают ошибки. Нативная сторона обязана ответить на каждый вызов успехом или ошибкой (result.error на Android, FlutterError на iOS), иначе Future в Dart зависнет.