Golang FFI Plugin -Projekt für Flattern
Dieses Projekt ist ein Ausgangspunkt für ein Flutter -FFI -Plugin, ein spezielles Paket, das nativen Code enthält, das direkt mit Dart FFI aufgerufen wird.
Diese Vorlage verwendet die folgende Struktur:
src : Enthält den Golang -Quellcode mit Makefile, der die native Code -Bibliothek für die verschiedenen Zielplattformen kompiliert.
lib : Enthält den DART -Code, der die API des Plugins definiert und der mit dart:ffi in den nativen Code aufruft.
Plattformordner ( android , ios , windows usw.): Enthält die Build -Dateien zum Erstellen und Bündeln der nativen Code -Bibliothek mit der Plattformanwendung.
Die pubspec.yaml gibt FFI -Plugins wie folgt an:
plugin :
platforms :
some_platform :
ffiPlugin : trueDiese Konfiguration ruft den nativen Build für die verschiedenen Zielplattformen auf und bündelt die Binärdateien in Flutteranwendungen mit diesen FFI -Plugins.
Dies kann mit DartpluginClass kombiniert werden, z. B. wenn FFI für die Implementierung einer Plattform in einem Verbund -Plugin verwendet wird:
plugin :
implements : some_other_plugin
platforms :
some_platform :
dartPluginClass : SomeClass
ffiPlugin : trueEin Plugin kann sowohl FFI- als auch Methodenkanäle haben:
plugin :
platforms :
some_platform :
pluginClass : SomeName
ffiPlugin : trueDie nativen Build -Systeme, die von FFI -Plugins (und Method Channel) aufgerufen werden, sind:
Um den nativen Code zu verwenden, werden Bindungen in Dart benötigt. Um diese von Hand zu schreiben, werden sie aus der Header -Datei ( src/libsum.h ) mit package:ffigen generiert. Regenerieren Sie die Bindungen durch Ausführen von flutter pub run ffigen --config ffigen.yaml .
Sehr kurzlebige native Funktionen können direkt aus jedem Isolat aufgerufen werden. Siehe beispielsweise sum in lib/native_ffi.dart .