Flutter中如何使用Pigeon实现iOS通信
在Flutter项目中,我想通过Pigeon实现与iOS原生平台的通信,但不太清楚具体操作步骤。请问应该如何配置Pigeon的Dart端和iOS端?是否需要额外的依赖或插件?能否提供一个简单的示例代码说明如何定义通信接口、生成代码以及调用原生方法?过程中有哪些常见坑需要注意?
        
          2 回复
        
      
      
        在Flutter中使用Pigeon实现与iOS通信的步骤:
- 创建Pigeon文件定义通信接口
 - 运行pigeon命令生成对应代码
 - 在iOS项目中实现生成的协议
 - 在Flutter中调用生成的API
 
示例:
// 定义接口
@HostApi()
abstract class Api {
  String getMessage();
}
然后在iOS端实现对应方法即可完成双向通信。
更多关于Flutter中如何使用Pigeon实现iOS通信的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中使用 Pigeon 实现与 iOS 的通信,可以简化平台通道的调用过程。以下是步骤及示例代码:
步骤 1:添加依赖
在 pubspec.yaml 中添加 Pigeon 依赖:
dev_dependencies:
  pigeon: ^10.0.0
步骤 2:定义通信接口
创建一个 .dart 文件(如 pigeon_interface.dart)定义接口:
import 'package:pigeon/pigeon.dart';
// 定义从 Flutter 调用 iOS 的方法
@HostApi()
abstract class ExampleApi {
  int add(int a, int b);
}
// 定义从 iOS 调用 Flutter 的方法(可选)
@FlutterApi()
abstract class ExampleFlutterApi {
  void onEvent(String event);
}
步骤 3:生成代码
运行命令生成平台代码:
flutter pub run pigeon \
  --input pigeon_interface.dart \
  --dart_out lib/pigeon_api.dart \
  --objc_header_out ios/Runner/pigeon_api.h \
  --objc_source_out ios/Runner/pigeon_api.m
步骤 4:iOS 端实现
在 ios/Runner/AppDelegate.swift 中实现接口:
import Flutter
// 实现生成的协议
class ExampleApiImpl: NSObject, ExampleApi {
  func add(_ a: NSNumber, b: NSNumber) -> NSNumber? {
    return NSNumber(value: a.intValue + b.intValue)
  }
}
// 在 AppDelegate 中注册
@UIApplicationMain
class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    let controller = window?.rootViewController as! FlutterViewController
    
    // 注册 API
    let api = ExampleApiImpl()
    ExampleApiSetup.setUp(binaryMessenger: controller.binaryMessenger, api: api)
    
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}
步骤 5:Flutter 端调用
在 Flutter 中使用生成的代码:
import 'pigeon_api.dart';
// 调用 iOS 方法
void callNativeMethod() async {
  final result = await ExampleApi().add(10, 20);
  print('Result from iOS: $result'); // 输出:Result from iOS: 30
}
说明
- Pigeon 自动生成类型安全的代码,避免手动编写平台通道。
 - 支持基本数据类型、列表和映射。
 - 如需 iOS 调用 Flutter,需实现 
ExampleFlutterApi并注册。 
通过以上步骤,即可实现 Flutter 与 iOS 的高效通信。
        
      
            
            
            
