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.