TGViewer
Flutter. Много Flutter. Много @flutter_amiga · 2.96K subscribers
Post #376 1.88K
Hola, Amigos! На связи Михаил Чернецов, Flutter dev в Amiga. Сегодня мы посмотрим на еще один способ интеграции нативного кода в Flutter - Pigeon.

Pigeon - инструмент, создающий интерфейсы для работы с нативным кодом при помощи кодогенерации. Это помогает нам не прописывать обработку Platform Channels напрямую.

-----------------------------------------------

Давайте посмотрим, как с ним работать. Для начала создадим в корне проекта папку pigeons, в которой будут находится необходимые шаблоны.


import 'package:pigeon/pigeon.dart';

@HostApi()
abstract class CalculateHostApi {
int calculate(int a, int b);
}


Стоит учитывать, как данные передаются в платформу и какие типы данных поддерживаются платформой. Это можно узнать по ссылке.
Для получения сообщений от платформы необходимо использовать аннотацию @FlutterApi.
Так же можем описать классы, которые будут использоваться, Pigeon также сгененирует платформенных код для них.

Создадим файл generateCalculate.sh для того, чтобы запускать Shell-скрипт.


flutter pub run pigeon \
--input "pigeons/calculate.dart" \
--dart_out "lib/calculate.g.dart" \
--kotlin_out "android/app/src/main/kotlin/com/example/pigeon_example/Calculate.g.kt" \
--swift_out "ios/Runner/Calculate.g.swift"


Здесь мы обозначаем директории, в которых будет генерироваться Pigeon-файлы.
Если их не добавить, то данные файлы не сгенерируются. Для использования плагина на уровне Flutter-приложения теперь вызываем сгенерированный класс:


await CalculateHostApi().calculate(3, 7);


-----------------------------------------------

Для настройки Pigeon на Android теперь необходимо сделать две вещи:


1️⃣ Создать файл Calculate.kt и реализовать код нашего плагина:


class Calculate : FlutterPlugin, CalculateHostApi{
// Функция которую мы реализуем
override fun calculate(a: Long, b: Long): Long {
return a + b
}
// Подключение плагина к движку
override fun onAttachedToEngine(binding: FlutterPlugin.FlutterPluginBinding) {
CalculateHostApi.setUp(binding.binaryMessenger,this)
}

override fun onDetachedFromEngine(binding: FlutterPlugin.FlutterPluginBinding) {
CalculateHostApi.setUp(binding.binaryMessenger,null)
}
}


2️⃣ Добавить в плагины наш плагин в функции configureFlutterEngine в MainActivity:

flutterEngine.plugins.add(Calculate())



Для iOS необходимо внести изменения в файл AppDelegate.swift, проставить CalculateHostApi в наследники и вызвать CalculateHostApiSetup в функции application:

let controller: FlutterViewController = window?.rootViewController as! FlutterViewController
CalculateHostApiSetup.setUp(
binaryMessenger: controller.binaryMessenger,
api: self
)


И в этом же классе реализуем функционал нашего плагина:

func calculate(a: Int64, b: Int64) -> Int64{
return a + b}


Тем самым мы реализовали Platform Channel с помощью Pigeon в нашем приложении.
Делитесь в чате, пробовали ли вы Pigeon для своих Platform Channels?
  • 👍 9
  • 🔥 4
  • ❤ 1
More from @flutter_amiga
  1. Sep 9, 2026AI BOOST’26: выручка падает — что делают крупные digital-агентства и при чем здесь AI 22–2…
  2. Aug 18, 2026Hola, Amigos! На связи Павел Гершевич, Mobile Team Lead в Amiga. Сегодня посмотрим на чек-…
  3. Aug 13, 2026Hola, Amigos! Сегодня вышли Flutter 3.47 и Dart 3.13. Давайте вместе разберемся, что в них…
  4. Jul 31, 2026Дайджест июля Hola, Amigos! Собрали в одну подборку все полезные посты июля, которые вы мо…
  5. Jul 28, 2026Hola, Amigos! Сегодня посмотрим на один пакет, который может быть полезен в разработке - p…
  6. Jul 24, 2026Hola, Amigos! Сегодня мы вводим новую рубрику - обзоры правил для статического анализатора…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →