关于 flutter-native
面向 Flutter 开发的技能,介绍如何以可维护、类型安全的方式与 Android 和 iOS 原生代码交互,涵盖通道、Pigeon、代码组织和插件架构。
主要功能
- 01使用 MethodChannel 进行请求响应
- 02使用 EventChannel 传输流数据
- 03通过 Pigeon 实现类型安全 API
- 04组织平台专属代码
- 05构建联邦插件
适用场景
- 01从 Dart 调用原生 API
- 02传输传感器或连接状态流
- 03设计可复用的跨平台插件
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ dhruvanbhalara/ skills --skill flutter-native安装后在 Claude Code 中输入/flutter-native确认已加载。
详细介绍
原生平台互操作
开发 Flutter 应用通常需要与底层原生平台(Android/iOS)直接通信。本技能介绍可维护且类型安全的互操作标准。
1. MethodChannels(单次调用)
在 Dart 和原生平台之间使用 MethodChannel 实现标准的请求-响应模式。
Dart 标准
- 使用唯一的域名风格通道名称。
- 调用时始终使用 try-catch 捕获
PlatformException。
static const _channel = MethodChannel('com.example.app/device_info');
Future<String?> getDeviceOS() async {
try {
return await _channel.invokeMethod<String>('getOS');
} on PlatformException catch (e) {
AppLogger.error('Failed to get OS', error: e);
return null;
}
}
2. EventChannels(流)
使用 EventChannel 实现连续的数据流(例如传感器数据、连接状态)。
实现
- 原生端必须处理
onListen和onCancel。 - Dart 端必须释放订阅,以防止资源泄漏。
3. 使用 Pigeon 实现类型安全
对于复杂 API,避免手动使用基于字符串的键。使用 Pigeon 生成类型安全的接口。
4. 平台专属目录结构
尽可能将原生代码组织在相关功能目录下;也可以使用专用的 plugins/ 目录存放共享逻辑。
5. Swift Package Manager(SPM)默认设置
在 Flutter 3.44 中引入
- 对于 iOS/macOS 原生集成,SPM 是默认的包管理器。对于新配置,它将完全取代 CocoaPods。
- 使用
swift_packages字段直接在插件的pubspec.yaml中声明 Swift 包,或通过 Xcode 工作区直接配置(参见 flutter-spm)。
6. Platform View 全面改进
在 Flutter 3.44 中引入
- 嵌入式原生视图(如地图、网页视图、相机)采用全面改进的混合组合渲染管线,以减少掉帧并消除 UI 合成性能问题。
7. 联合插件
如果逻辑可在多个应用间复用:
- 将实现拆分为
_platform_interface、_android、_ios和_web包。 - 为用户提供统一的入口。
评论
支持 Markdown