Заказать мобильную разработку: https://amiga.ru//?utm_source=tg
Заказать рекламу в канале @amiga_agency_bot
Новости Flutter-разработки, дайджесты мероприятий, личный опыт.
Post #376
1.88K

Hola, Amigos! На связи Михаил Чернецов, Flutter dev в Amiga. Сегодня мы посмотрим на еще один способ интеграции нативного кода в Flutter - Pigeon.
Pigeon - инструмент, создающий интерфейсы для работы с нативным кодом при помощи кодогенерации. Это помогает нам не прописывать обработку Platform Channels напрямую.
-----------------------------------------------
Давайте посмотрим, как с ним работать. Для начала создадим в корне проекта папку pigeons, в которой будут находится необходимые шаблоны.
Стоит учитывать, как данные передаются в платформу и какие типы данных поддерживаются платформой. Это можно узнать по ссылке.
Для получения сообщений от платформы необходимо использовать аннотацию
Так же можем описать классы, которые будут использоваться, Pigeon также сгененирует платформенных код для них.
Создадим файл
Здесь мы обозначаем директории, в которых будет генерироваться Pigeon-файлы.
Если их не добавить, то данные файлы не сгенерируются. Для использования плагина на уровне Flutter-приложения теперь вызываем сгенерированный класс:
-----------------------------------------------
Для настройки Pigeon на Android теперь необходимо сделать две вещи:
1️⃣ Создать файл
2️⃣ Добавить в плагины наш плагин в функции
Для iOS необходимо внести изменения в файл
И в этом же классе реализуем функционал нашего плагина:
Тем самым мы реализовали Platform Channel с помощью Pigeon в нашем приложении.
Делитесь в чате, пробовали ли вы Pigeon для своих Platform Channels?
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




















