Mobile 1,700 installs

Integrating Platform-Specific Code in Flutter

by flutter/skills

Interoperates with native platform APIs on Android, iOS, and the web. Use when accessing device-specific features not available in Dart or calling existing…

Skill content

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:ffi with automatic build compilation via build.dart hooks; requires extern "C" symbols and package:ffigen for 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 View or iOS UIView components; Android supports Hybrid Composition (fidelity) or Texture Layer (performance) modes

- Web support includes WebAssembly compilation with multi-threading headers and JS interop via package:web and dart:js_interop (avoiding deprecated dart:html and dart:js)

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:ffi library 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, iOS UIView) directly into the Flutter widget tree.

- JS Interop: The modern, Wasm-compatible approach to interacting with JavaScript and DOM APIs using package:web and dart: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.