
Pigeon 是一个代码生成工具,用于在 Flutter 和原生平台(iOS 和 Android)之间创建类型安全的通信通道。它生成通信样板代码,让你可以专注于实现实际的原生逻辑。
Pigeon 的作用
把 Pigeon 想象成一个自动生成的翻译器,位于你的 Flutter 代码和原生实现之间。
生成的输出
在 Flutter (Dart) 端,Pigeon 创建:
- 强类型的 Dart API
- 消息序列化代码
- 平台通道设置
在原生端,Pigeon 创建:
- Android:带有通道连接的 Java/Kotlin 接口
- iOS:带有通道设置的 Swift/Objective-C 协议

简单的思维模型
你的 Flutter 应用
│
▼
你的 Dart 逻辑
• 使用生成的 API
• 不需要通道设置
│
▼
生成的代码 (Pigeon)
• 类型安全的 API
• 自动序列化
• 通道通信
← Pigeon 创建这部分
│
▼
你的原生实现
• 编写实际的平台逻辑
• 扩展生成的接口
← 你编写这部分Pigeon vs MethodChannel
| 方面 | Pigeon | 传统的 MethodChannel |
|---|---|---|
| 类型安全 | 编译时检查 | 运行时字符串匹配 |
| 代码补全 | 完整的 IDE 支持 | 手动输入字符串 |
| 重构 | 安全且容易 | 容易出错 |
| 样板代码 | 自动生成 | 手动实现 |
| 原生逻辑 | 你仍然需要编写 | 你编写它 |
何时使用 Pigeon
当且仅当你有以下需求时使用 Pigeon:
- 复杂的平台通信
- Flutter 和原生代码之间有多个方法调用
- 团队协作开发平台代码
- 长期可维护性和类型安全
考虑直接使用 MethodChannel 的情况:
- 简单的一次性原生调用
- 快速原型开发
- 极少的平台交互
最佳实践
-
从简单开始
在 Pigeon schema 中定义清晰、专注的 API。保持方法具体且类型良好。
-
让 Pigeon 处理通信
信任生成的代码,专注于你的业务逻辑实现。
-
测试你的实现
测试你的原生逻辑,而不是 Pigeon 生成的代码。Pigeon 确保通信层正常工作。
开始使用
- 在 Pigeon schema 文件中定义你的通信接口
- 运行 Pigeon 生成特定平台的代码
- 用你的原生逻辑实现生成的接口
- 在你的 Flutter 应用中使用类型安全的 API
总结
Pigeon 能够:
- 生成类型安全的通信层
- 消除基于字符串的通道调用
- 提供编译时安全
- 减少样板代码
Pigeon 不能:
- 编写你的原生逻辑
- 替换特定平台的代码
- 处理你的业务实现