Crates.io | dart-sdk-sys |
lib.rs | dart-sdk-sys |
version | 3.4.4 |
source | src |
created_at | 2021-03-23 16:11:32.019379 |
updated_at | 2024-08-10 09:22:28.95239 |
description | Rust bindings to Dart SDK |
homepage | |
repository | https://github.com/DoumanAsh/dart-sys |
max_upload_size | |
id | 372622 |
size | 256,118 |
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:
#[no_mangle]
pub unsafe extern "C" fn handle(rd: *const c_char) -> i8 {
//Do something
return 0;
}
You can access its pointer in following way
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<ffiUtils.Utf8>);
typedef DartFunctionT = int Function(ffi.Pointer<ffiUtils.Utf8>);
final d = ffi.DynamicLibrary.open("my_shared_lib_name.so");
final DartFunctionT sendDataToRust = d.lookupFunction<RustRxNativeFunc, RustRxDartFunc>("handle");
/// 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);
}
Update version
in Cargo.toml
to be equal to desired version of SDK
Run cargo build --features download-sources,build-bindings
Optionally run rustfmt src/lib.rs
to make it pretty
Commit and publish