Bindings to dart FFI.
Crate version corresponds to Dart SDK release
cdylib libWhen building for mobile device, you need to build with correct target (i.e. for android-arm64 your rust target must be aarch64-linux-android)
Place rust library into android/app/src/main/jniLibs accordingly to your target (i.e. for android-arm64 you need to place it inside arm64-v8a)
Build flutter application;
Refer to Dart application for next steps. Flutter embeds your library inside APK so you can refer to it by just library full name.
Dart FFI provides API to load C shared libraries: ffi.DynamicLibrary.open(<path to shared library>);
Once library successfully loaded, returned object can be used to lookup function pointers.
Given following rust function:
```rust
pub unsafe extern "C" fn handle(rd: *const c_char) -> i8 { //Do something return 0; } ```
You can access its pointer in following way
```dart import 'dart:ffi' as ffi; // External package https://pub.dev/packages/ffi import 'package:ffi/ffi.dart' as ffiUtils;
typedef NativeFunctionT = ffi.Int8 Function(ffi.Pointer
final d = ffi.DynamicLibrary.open("mysharedlib_name.so");
final DartFunctionT sendDataToRust = d.lookupFunction
/// Use function to send string data which internally converts it to C compatible char buffer. void sendNative(DartFunctionT sendDataToRust, String d) { final data = d.toNativeUtf8(); sendDataToRust(data); ffiUtils.calloc.free(data); }
```
version in Cargo.toml to be equal to desired version of SDKcargo build --features download-sources,build-bindingsOptionally run rustfmt src/lib.rs to make it pretty
Commit and publish