flutter-interoperating-with-native-apis
Installation
Summary
Access device-specific native APIs on Android, iOS, and web from Flutter code.
- Supports three integration approaches: FFI for direct C/C++ binding, Platform Channels (with Pigeon for type safety) for calling Kotlin/Swift/Objective-C, and Platform Views for embedding native UI components
- FFI uses
dart:ffiwith automatic build compilation viabuild.darthooks; requiresextern "C"symbols andpackage:ffigenfor Dart binding generation - Platform Channels provide asynchronous messaging between Dart and native code; Pigeon generates type-safe boilerplate and handles threading requirements automatically
- Platform Views embed native Android
Viewor iOSUIViewcomponents; Android supports Hybrid Composition (fidelity) or Texture Layer (performance) modes - Web support includes WebAssembly compilation with multi-threading headers and JS interop via
package:webanddart:js_interop(avoiding deprecateddart:htmlanddart:js)
SKILL.md
Integrating Platform-Specific Code in Flutter
Contents
- Core Concepts & Terminology
- Binding to Native C/C++ Code (FFI)
- Implementing Platform Channels & Pigeon
- Hosting Native Platform Views
- Integrating Web Content & Wasm
- Workflows
Core Concepts & Terminology
- FFI (Foreign Function Interface): The
dart:ffilibrary used to bind Dart directly to native C/C++ APIs. - Platform Channel: The asynchronous message-passing system (
MethodChannel,BasicMessageChannel) connecting the Dart client (UI) to the host platform (Kotlin/Java, Swift/Objective-C, C++). - Pigeon: A code-generation tool that creates type-safe Platform Channels.
- Platform View: A mechanism to embed native UI components (e.g., Android
View, iOSUIView) directly into the Flutter widget tree. - JS Interop: The modern, Wasm-compatible approach to interacting with JavaScript and DOM APIs using
package:webanddart:js_interop.
Binding to Native C/C++ Code (FFI)
Use FFI to execute high-performance native code or utilize existing C/C++ libraries without the overhead of asynchronous Platform Channels.