dart-sys

Crates.io Documentation Build

Bindings to dart FFI.

Crate version corresponds to Dart SDK release

Use cases

General requirements

Flutter application

Dart application

Given following rust function:

```rust

[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

```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); typedef DartFunctionT = int Function(ffi.Pointer);

final d = ffi.DynamicLibrary.open("mysharedlib_name.so"); final DartFunctionT sendDataToRust = d.lookupFunction("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); }

```

How-to update to new SDK version

  1. Update version in Cargo.toml to be equal to desired version of SDK
  2. Run cargo build --features download-sources,build-bindings
  3. Optionally run rustfmt src/lib.rs to make it pretty

  4. Commit and publish