本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
转载自夜明的孤行灯
本文链接地址: 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/