#dart #flutter #bindings #dart-native

sys dart-sys-fork

Statically generated, Opt-in style bindings to the Dart SDK

1 stable release

4.1.1 Dec 19, 2023

#269 in FFI

Download history 15197/week @ 2024-09-09 9998/week @ 2024-09-16 11999/week @ 2024-09-23 8293/week @ 2024-09-30 6675/week @ 2024-10-07 6059/week @ 2024-10-14 4771/week @ 2024-10-21 3491/week @ 2024-10-28 7097/week @ 2024-11-04 4097/week @ 2024-11-11 4998/week @ 2024-11-18 4169/week @ 2024-11-25 5131/week @ 2024-12-02 2918/week @ 2024-12-09 2110/week @ 2024-12-16 923/week @ 2024-12-23

11,627 downloads per month
Used in medea-jason

MIT/Apache

210KB
2K SLoC

Fork of dart-sys before the upstream is published

Dart-sys brand header

Dart-sys

Stars Forks Crates.io License: MIT License: Apache 2.0 Docs.rs CI

Rust bindings to the Dart ffi api

Prerequisites 🔧

You will need the following tools available on your system:

Unix/Linux 🐧

No additional requirements :)

MacOS 🍎

No additional requirements :)

Windows 🪟

On Windows platforms, dynamic libraries are linked against the executable, not into the executable as is the case o Unix platforms.

⚠️ Important ⚠️

This means that (on Windows) you will Need to have the Dart SDK installed and available on your system path to be able to compile Dart-sys.

Installing 📦

Run the following Cargo command in your project directory:

cargo add dart-sys

Or add the following line to your Cargo.toml:

dart-sys = "4.1.0"

Usage 💻

Examples 📚

An extremely straightforward example of using dart-sys would be like such:

use dart_sys::{Dart_Handle, Dart_NewIntegerFromI64};

#[no_mangle]
/// Adds two integers together.
pub extern "C" fn dart_sys_example_extension_sum(
    a: Dart_Handle,
    b: Dart_Handle,
) -> Dart_Handle {
    let a = unsafe { Dart_NewIntegerFromI64(a) };
    let b = unsafe { Dart_NewIntegerFromI64(b) };
    a + b
}

#[no_mangle]
/// Multiplies two integers together.
pub extern "C" fn dart_sys_example_extension_product(
    a: Dart_Handle,
    b: Dart_Handle,
) -> Dart_Handle {
    let a = unsafe { Dart_NewIntegerFromI64(a) };
    let b = unsafe { Dart_NewIntegerFromI64(b) };
    a * b
}
import 'dart:ffi';

// open and link to the native library
final DynamicLibrary nativeLib = DynamicLibrary.open('libdart_sys_example_extension.so');

// lookup the sum function in the native library
final int Function(int, int) sum = nativeLib
    .lookup<NativeFunction<Int32 Function(Int32, Int32)>>('dart_sys_example_extension_sum')
    .asFunction();

// lookup the product function in the native library
final int Function(int, int) product = nativeLib
    .lookup<NativeFunction<Int32 Function(Int32, Int32)>>('dart_sys_example_extension_product')
    .asFunction();

void main() {
    print(sum(1, 2)); // 3
    print(product(1, 2)); // 2
}

While this example is certainly possible, you are not likely to ever use Dart-sys for this purpose. See the examples directory for more in-depth examples of how to use Dart-sys. All examples are tested using GitHub Actions and documented verbosely.

Built With 🛠️

  • Rust - A systems programming language that runs blazingly fast, prevents segfaults, and guarantees thread safety.
  • Dart - A client-optimized language for fast apps on any platform.
  • Dart Native Extensions - A mechanism for writing native code in C/C++ and calling it from Dart.
  • bindgen - A Rust library for generating bindings to C and C++ APIs.

Contributing ✏️

Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests. If you have any questions, please open an issue, or contact admin gutenfries@gmail.com directly.

Versioning 🪧

We use SemVer for versioning. For the versions available, see the tags on this repository.

License 📜

Dart-sys is open-sourced and released under the terms and conditions of one or both of the following licenses:

Acknowledgments 🙏

No runtime deps

~0–300KB

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy