Rust自动生成Dart API供Flutter使用

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2022/05/12/rust-auto-ffi-for-flutter/



最近使用了flutter_rust_bridge,流程上非常好,极大程度简化了操作。

使用方法如下

提供Rust API

为了方便管理和测试,对Flutter暴露的接口单独提供,放在api.rs中。里面提供的都是pub fn,出入参数如果内含其他结构体,加上Option,比如

pub fn query_report(query: ReportQuery) -> ReportPageDTO {
    APP.lock().unwrap().query_report(query)
}

pub struct ReportPageDTO {
    pub total: i32,
    pub list: Option<Vec<ReportDTO>>,
}

准备生成工具

先安装工具和依赖

dart pub global activate ffigen
cargo install flutter_rust_bridge_codegen

另外还需要LLVM,具体安装看操作系统有一些区别。

最后运行脚本

flutter_rust_bridge_codegen --rust-input core/src/api.rs --dart-output ui/lib/api_generated.dart

Flutter中使用

先引用so文件,这里还要考虑windows平台,所以也可能是dll。

const base = 'core';
    final path = Platform.isWindows ? '$base.dll' : 'lib$base.so';
    late final dylib = Platform.isIOS
        ? DynamicLibrary.process()
        : Platform.isMacOS
            ? DynamicLibrary.executable()
            : DynamicLibrary.open(path);
    api = ReporthCoreImpl(dylib);

应用后直接使用就行了,接口是根据api.rs生成的,所有出入参都有Dart对应的类(名字一样,类型可能有细微差别)。



本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2022/05/12/rust-auto-ffi-for-flutter/

发表评论