Quando una funzionalità richiede prestazioni estreme o riusa una libreria C/C++ già esistente (codec, crittografia, computer vision, parser binari), i Platform Channel diventano un collo di bottiglia: ogni chiamata attraversa il ponte asincrono verso la piattaforma e serializza i dati.
dart:ffi (Foreign Function Interface) permette invece di chiamare direttamente il codice nativo dal thread Dart, senza serializzazione e con overhead nell'ordine dei nanosecondi. In questo tutorial avanzato costruiremo un plugin FFI completo:
- creazione del progetto con il template
plugin_ffi; - generazione automatica dei binding con ffigen;
- caricamento della
DynamicLibrarysu Android, iOS, macOS, Windows e Linux; - gestione corretta della memoria nativa con
package:ffi,calloceNativeFinalizer; - spostamento delle chiamate bloccanti fuori dal thread UI con
Isolate.run; - callback asincrone dal C verso Dart con
NativeCallable.listener.
Prerequisiti: Flutter 3.19+ (Dart 3.3+), toolchain nativa installata (NDK/CMake per Android, Xcode per iOS/macOS), e confidenza con i puntatori in C. Il codice di esempio implementa una libreria di hashing/elaborazione buffer, ma lo schema vale per qualsiasi libreria C.