当前位置:首页>鸿蒙APP>鸿蒙Flutter插件精选:flutter_rust_bridge_ohos

鸿蒙Flutter插件精选:flutter_rust_bridge_ohos

  • 2026-11-01 20:16:31
鸿蒙Flutter插件精选:flutter_rust_bridge_ohos

今天要聊的这位可以说是 Flutter 社区里的「大神级」插件了——flutter_rust_bridge!这个包在 Pub.dev 上星标数超高,还是官方的 Flutter Favorite 项目。GitHub ⭐ 5.2K,134+ 贡献者,CI 覆盖 Valgrind + ASAN/MSAN/LSAN 内存检测——这排面拉满了有没有!

而今天的主角 flutter_rust_bridge_ohos 就是它专为鸿蒙(OHOS)平台的适配版本,最新版本是 2.11.2(2026年3月发布)。由社区贡献者 star4277 同学完成了 OHOS 平台的支持,真正让 Flutter + Rust 在鸿蒙设备上跑起来了!🚀

如果你还不知道 Flutter + Rust 能擦出什么火花——简而言之:Flutter 做 UI,Rust 做性能敏感的业务逻辑,各自发挥自己最擅长的部分。


痛点

你可能会问:Flutter 写得好好的,为什么要引入 Rust?

来看看这些场景你有没有遇到过:

  • 🤯 Flutter 做图片/视频处理,Dart 的性能就是不够,界面卡成 PPT
  • 🤯 想用 opus、libsodium、crypto 这类 Rust/原生库,Dart 生态里压根没有替代品
  • 🤯 项目里需要大量 JSON 解析、数据校验、加密解密,Dart 单线程搞不定
  • 🤯 用 dart:ffi 手写 C 绑定简直生不如死——类型映射、内存管理、线程安全全要自己管
  • 🤯 想在 Android/iOS/Linux/macOS/Windows 和鸿蒙之间共享高性能代码,不想写多份

而 flutter_rust_bridge 就是专门解决这些问题的——它让你用写普通 Dart 代码的方式调用 Rust 函数,自动生成所有胶水代码。现在 OHOS 也支持了,一套 Rust 代码跑遍全平台!🔥


核心特性

  • ✅ Flutter Favorite 官方认证:Flutter 官方背书的第一批 7 个 Favorite 包之一
  • ✅ 任意 Rust 类型:struct、enum、Vec<T>、Option<T>、Result<T>、trait、闭包——自动映射到 Dart 原生类型
  • ✅ 双向通信:Dart 调用 Rust 且 Rust 调用 Dart(回调函数)
  • ✅ 四种模式:同步 Dart / 异步 Dart × 同步 Rust / 异步 Rust,任意组合
  • ✅ Stream 支持:Rust 端的 StreamSink 自动映射为 Dart 的 Stream
  • ✅ 自动安全:内存安全由 Rust 编译器保证,无需手动管理 malloc/free
  • ✅ 零拷贝:大数组、二进制数据自动零拷贝传输
  • ✅ OHOS 原生实现:基于 HarmonyOS NAPI + Rust FFI,性能无损
  • ✅ 跨平台共享:一套 Rust 代码,Android/iOS/Linux/macOS/Windows/Web/OHOS 全平台运行
  • ✅ SSE Codec:V2 新增超高吞吐编解码,某些场景快数倍
  • ✅ 多 Codec 选择:支持 SSE / DartOptic 等多种编解码策略

快速上手

1. 安装命令行工具

cargo install flutter_rust_bridge_codegen

2. 创建项目

一行命令创建完整的 Flutter + Rust 项目模板:

flutter_rust_bridge_codegen create my_app
cd my_app && flutter run

3. 添加 OHOS 依赖

在 pubspec.yaml 中添加:

dependencies:
  flutter_rust_bridge: ^2.11.0     # Dart 端运行时(通用)
  flutter_rust_bridge_ohos: ^2.11.2 # OHOS 平台适配

4. 写 Rust 代码

在 rust/src/api/simple.rs 中定义你的 Rust API:

// rust/src/api/simple.rs

/// 一个简单的加法函数
pub fn add(a: i32, b: i32) -> i32 {
    a + b
}

/// 复杂的结构体——自动映射为 Dart class
pub struct GreetParams {
    pub name: String,
    pub age: u32,
}

/// 返回自定义类型
pub fn greet(params: GreetParams) -> String {
    format!("你好,{}!你今年 {} 岁了", params.name, params.age)
}

5. 生成绑定

flutter_rust_bridge_codegen generate

6. 在 Dart 中调用

生成的代码就像调普通 Dart 函数一样自然:

import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';

// 同步调用
final sum = await add(a: 1, b: 2);
print('1 + 2 = $sum'); // 输出: 1 + 2 = 3

// 调用带自定义类型的函数
final greeting = await greet(
  params: GreetParams(name: '艾玛', age: 18),
);
print(greeting); // 输出: 你好,艾玛!你今年 18 岁了

实战:高性能图片哈希

来看一个更实用的例子——用 Rust 计算图片的感知哈希(pHash),这在 Dart 里做会很慢,但在 Rust 里就是小菜一碟:

Rust 端

use image::GenericImageView;

/// 计算图片的感知哈希(用于相似图片检测)
pub fn phash(image_data: Vec<u8>) -> Vec<u8> {
    let img = image::load_from_memory(&image_data).unwrap();
    let resized = img.resize_exact(8, 8, image::imageops::FilterType::Lanczos3);
    let gray = resized.to_luma8();
    
    // 计算 64 个像素的平均值
    let mut total: u32 = 0;
    let pixels: Vec<u8> = gray.pixels().map(|p| p.0[0]).collect();
    for &p in &pixels {
        total += p as u32;
    }
    let avg = (total / 64) as u8;
    
    // 生成 64 位哈希(8 bytes)
    let mut hash = Vec::with_capacity(8);
    for i in 0..8 {
        let mut byte: u8 = 0;
        for j in 0..8 {
            if pixels[i * 8 + j] >= avg {
                byte |= 1 << (7 - j);
            }
        }
        hash.push(byte);
    }
    hash
}

Dart 端调用

import 'dart:io';
import 'package:flutter_rust_bridge/flutter_rust_bridge.dart';

Future<void> compareImages(String path1, String path2) async {
  final bytes1 = await File(path1).readAsBytes();
  final bytes2 = await File(path2).readAsBytes();

  final hash1 = await phash(imageData: bytes1);
  final hash2 = await phash(imageData: bytes2);

  // 计算汉明距离——用 Dart 做也没问题
  int diff = 0;
  for (int i = 0; i < 8; i++) {
    int xor = hash1[i] ^ hash2[i];
    diff += xor.bitCount(); // Dart 3.4+ 有 bitCount
  }

  print('图片相似度:${((1 - diff / 64) * 100).toStringAsFixed(1)}%');
}

💡 图片解码和缩放这些 CPU 密集操作全部在 Rust 中完成,不会阻塞 Flutter UI 线程。数据通过 Vec<u8> 自动映射为 Dart 的 Uint8List,零拷贝传输!


更骚的操作:Stream 流式处理

假设你想在 Rust 里处理一个耗时的计算任务,并且实时把进度推送到 Dart:

Rust 端

use flutter_rust_bridge::StreamSink;

/// 计算斐波那契数列,实时返回进度
pub fn fibonacci_stream(n: u32, sink: StreamSink<String>) {
    let mut a: u64 = 0;
    let mut b: u64 = 1;
    for i in 0..n {
        sink.add(format!("第 {} 步: {}", i + 1, b)).unwrap();
        let temp = a + b;
        a = b;
        b = temp;
    }
    sink.add("计算完成!🎉".to_string()).unwrap();
}

Dart 端监听

// stream 自动映射为一个 Dart Stream
final stream = fibonacciStream(n: 10);
await for (final msg in stream) {
  print(msg);
}
// 输出:
// 第 1 步: 1
// 第 2 步: 1
// 第 3 步: 2
// ...
// 第 10 步: 55
// 计算完成!🎉

Rust 调用 Dart(反向调用)

不只是 Dart 可以调 Rust,Rust 也能反过来调 Dart!这在 Rust 里需要「回调」的场景很有用:

Dart 端定义回调

// 定义一个 Dart 回调函数,传给 Rust
String myDartCallback(String name) {
  return 'Hello from Dart, $name!';
}

// 传给 Rust 并调用
final result = await rustCallDart(callback: myDartCallback);
print(result);

Rust 端接收回调

pub fn rust_call_dart(callback: impl Fn(String) -> String) -> String {
    let result = callback("艾玛".to_string());
    format!("Rust 收到了 Dart 的回复: {}", result)
}

这个特性虽然在鸿蒙上用到的场景不多,但对于需要在 Rust 逻辑中间回调 UI 层做权限请求、弹窗确认等场景非常有用!


OHOS 实现原理

flutter_rust_bridge 在 OHOS 平台上的架构如下:

层级 说明
Rust Layer 你的业务逻辑代码,编译为 .so 动态库
FFI Bridge flutter_rust_bridge_codegen 自动生成的 FFI 绑定代码
OHOS NAPI HarmonyOS 的 Native API,加载和调用 Rust .so 库
Dart FFI Dart 的 dart:ffi 调用 Rust 导出的 C ABI 函数
Dart Layer flutter_rust_bridge Dart 运行时,负责类型转换和异步调度

关键点:在 OHOS 上,Rust 代码通过 rustc 交叉编译为 OHOS 原生的 .so(使用 aarch64-unknown-linux-ohos 或 x86_64-unknown-linux-ohos target),然后通过 HarmonyOS 的 NAPI 机制加载。flutter_rust_bridge_codegen 负责生成所有胶水代码——包括 C 头文件、Dart FFI 绑定、类型转换映射,开发者完全不需要碰任何 FFI 代码。

特别注意:目前在 OHOS 上需要手动配置 Rust 的交叉编译 target,具体可以参考 flutter_rust_bridge 文档中的 OHOS 集成指南。


环境要求

  • Flutter SDK >= 3.4.0
  • Dart SDK >= 3.4.0 < 4.0.0
  • Rust 工具链(rustup + cargo)
  • 已初始化的 Flutter 鸿蒙项目(ohos/ 目录结构)
  • HarmonyOS API 9+
  • Rust 交叉编译 target:aarch64-unknown-linux-ohos / x86_64-unknown-linux-ohos

写在最后

讲真,flutter_rust_bridge 是我个人非常喜欢的一个项目——它不仅解决了实际问题,而且设计哲学很优雅:「你写正常的 Rust 代码,然后像正常的 Dart 代码一样调用它」。没有丑陋的 JSON 序列化,没有手写 FFI 绑定,一切都是自动化的。

在鸿蒙生态的加持下,flutter_rust_bridge_ohos 让 Flutter 开发者在鸿蒙设备上也能享受到 Rust 的高性能优势。无论你是要做音视频处理、加密解密、图像分析,还是 AI 推理,有了这套方案,你只需要写一份 Rust 代码,就能在所有平台上通用运行。

唯一的小遗憾是 OHOS 版目前还需要手动配置一些交叉编译的参数,不像 Android/iOS 那样开箱即用。但这是鸿蒙生态初期的正常现象,相信随着社区的发展会越来越完善。

仓库地址:

  • 主项目:https://github.com/fzyzcjy/flutter_rust_bridge[1]
  • OHOS 适配包:https://pub.dev/packages/flutter_rust_bridge_ohos[2]

觉得有用的话给主仓库点个 ⭐ Star 吧~我们下期见!🦊

由我编著的《鸿蒙Flutter开发实战》图书已上架京东图书等各大商店,内容涵盖基础知识、鸿蒙化原理及适配、混合开发、插件开发、高级特性优化、性能分析、三方库适配、开发实战、鸿蒙PC等等,基于 Flutter 3.35 版本,是不可多得的 Flutter鸿蒙化适配工具书和实战案例,欢迎大家选购 🎉🎉🎉 

引用链接

[1]https://github.com/fzyzcjy/flutter_rust_bridge

[2]https://pub.dev/packages/flutter_rust_bridge_ohos

最新文章

随机文章