Rust语言本身就是跨平台的,加上很多性能上的优势,很多代码可以在一定程度上复用。
Flutter的FFI支持可以让我们调用本地代码,也就是可以做到Flutter和Rust混合编程。
Rust改造
为了减少改动,我一般会引入一个新的项目,直接在原项目名基础上加上ffi。
这个项目的主要用途在于定义对外暴露的接口,并在构建时输出so等文件。
在Cargo.toml中新增两个依赖
[dependencies]
rust-project = { path = "../rust-project" }
[build-dependencies]
cbindgen = "0.14.3"
dart-bindgen = "0.1.7"
其中cbindgen帮助我们从Rust代码生成C/C++的头文件,dart-bindgen(现在用ffigen了)帮助我们从头文件生成dart绑定。
Flutter插件
有了上一步的so和dart文件后我们就可以调用了,但是出于隔离和复用的考虑,这里不直接在Flutter项目中使用,而是先包装成Plugin。
按照设计,Flutter插件可以用于封装与平台专用代码进行的通信,由于上一步已经生成了绑定,所以这里只做最基础的封装和注册。
import 'ffi.dart' as ffi;
class Plugin {
int functionName(int a, int b) {
…


