乐于分享
好东西不私藏

鸿蒙Flutter插件精选:mmkv_ohos

鸿蒙Flutter插件精选:mmkv_ohos

上一期我们介绍了 flutter_launcher_icons_plus,帮大家解决了鸿蒙 App 图标自动生成的难题。今天要聊的这个插件可厉害了——它来自腾讯 WeChat 团队,是业界公认的 SharedPreferences 替代方案,现在 官方原生支持 OHOS!

没错,就是 MMKV——那个高性能、超轻量的移动端键值存储框架。在 Android 和 iOS 上已经家喻户晓,而 mmkv_ohos 就是它的鸿蒙官方实现。

想想你项目里那些 SharedPreferences 的读写,是不是有时候卡卡的?存大一点的数据就掉帧?跨进程共享数据更是头疼得不行?🤕

好消息是——mmkv_ohos 已经作为 MMKV Flutter 生态的 endorsed 插件,随 mmkv 包一起发布。一行依赖,全平台通吃,鸿蒙也不例外!🚀


痛点

做 Flutter 鸿蒙开发,本地键值存储一直是个「将就」的事:

  • SharedPreferences 性能堪忧:同步 I/O、无法存大数据、每次读写都序列化整个文件,存几百个 key 就开始卡了
  • 存复杂数据很麻烦:想要存个列表、存个 Map,得自己 JSON 序列化/反序列化,代码又臭又长
  • 跨进程共享?不存在的:SharedPreferences 不支持多进程,碰到组件间通信需求直接抓瞎
  • 加密存储?自己造轮子:敏感数据需要加密存储,还得自己搞一套 AES 加密逻辑

而社区里虽然有 flutter_shared_preferences 的替代方案,但基本都不支持鸿蒙。

现在,mmkv_ohos 就是你的救星 ✨ 而且是 腾讯官方出品,品质有保障!


核心特性

  • ✅ 官方维护:由腾讯 WeChat 团队开发,与 Android/iOS 版本同步更新(目前 v2.4.0),品质和长期维护不用愁
  • ✅ 极致性能:基于 mmap 内存映射文件,读写速度是 SharedPreferences 的数十倍,毫秒级响应
  • ✅ 全平台覆盖:通过 endorsed 联邦插件机制,一行依赖自动覆盖 Android、iOS、OHOS、Windows、macOS、Linux
  • ✅ 支持大数据存储:不像 SharedPreferences 有 2MB 限制,MMKV 可以愉快地存几百 MB 数据
  • ✅ AES-256 加密:v2.3.0+ 支持 AES-256 加密存储,敏感数据安全无忧
  • ✅ 跨进程支持:多进程模式共享数据,组件间通信不再是问题
  • ✅ 类型安全:直接支持 int、double、bool、String、List<String>、Uint8List,无需手动序列化
  • ✅ 代码简洁:全局单例 + 命名空间设计,几行代码完成读写

快速上手

1. 添加依赖

最棒的是——因为 mmkv_ohos 是 endorsed 联邦插件,你根本不需要直接引用它!只要在 pubspec.yaml 里添加 mmkv 就行:

dependencies:
  mmkv: ^2.4.0

mmkv_ohos 会自动在 OHOS 平台上被包含进来,完全透明,什么都不用操心~😊

当然,如果你需要直接使用 mmkv_ohos 的 API(比如自定义初始化),也可以显式添加:

dependencies:
  mmkv: ^2.4.0
  mmkv_ohos: ^2.4.0

2. 初始化

在运行任何 MMKV 操作之前,先初始化:

import 'package:mmkv/mmkv.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 简单初始化 —— 自动使用默认根目录
  MMKV.initialize();
  
  // 或指定根目录(推荐)
  // await MMKV.initialize(mmkvRootDir);
  
  runApp(MyApp());
}

3. 读写数据

初始化完成后,随时随地使用:

// 获取默认实例
final mmkv = MMKV.defaultMMKV();

// 写入数据
mmkv.encodeString('username', '艾玛');
mmkv.encodeInt('age', 18);
mmkv.encodeBool('isVIP', true);
mmkv.encodeDouble('score', 99.5);
mmkv.encodeStringList('tags', ['flutter', 'ohos', 'mmkv']);

// 读取数据
final name = mmkv.decodeString('username');    // '艾玛'
final age = mmkv.decodeInt('age');              // 18
final vip = mmkv.decodeBool('isVIP');           // true

// 删除与查询
mmkv.removeValue('tempKey');
final hasKey = mmkv.containsKey('username');   // true
mmkv.clearAll();                               // 清空所有

4. 加密存储(v2.3.0+)

需要加密存储场景也很简单:

// 使用 AES-256 加密创建实例
final encryptedMMKV = MMKV.mmkvWithID('secure_storage', cryptKey: 'mySecretKey123');

// 读写自动加解密
encryptedMMKV.encodeString('token', 'eyJhbGci...');

// 升级已有实例到 AES-256
mmkv.reKey('newKey', aes256: true);

大功告成!✨


OHOS 生成效果

当你在 OHOS 设备上运行 MMKV 时,插件会自动处理底层实现:

组件 路径/说明
Dart 层 lib/mmkv_ohos.dart — MMKVPlatformOHOS 继承 MMKVPluginPlatformFFI,通过 dart:ffi 加载 libmmkv.so
OHOS 原生层 ohos/src/main/ets/components/plugin/MMKVPlugin.ets — ArkTS 原生插件实现
native 库 使用 @tencent/mmkv HAR 包(>=2.4.0 <2.5),通过 DynamicLibrary.open("libmmkv.so") 桥接
MethodChannel 用于获取 applicationDocumentsPath、temporaryPath 等系统目录信息
module.json5 自动注册 MMKVPlugin 到 OHOS 插件系统

环境要求

  • Flutter SDK >= 3.0.0
  • Dart SDK >= 2.17.0 < 4.0.0
  • 需要已初始化的 Flutter 鸿蒙项目(ohos 目录存在)
  • 鸿蒙系统 API 9+

写在最后

说实话,MMKV 腾讯官方出品的 OHOS 支持 真的是给鸿蒙开发者的一颗定心丸。作为 Flutter 生态里最知名的本地存储方案,能和 Android/iOS 版本保持同步更新(从 v1.0.0 到现在的 v2.4.0,一路紧跟,一个都没落下),说明腾讯对鸿蒙平台的投入是实打实的。而且年底那波 v2.3.0 升级直接上了 AES-256 加密,安全这块也没落下 🔐

所以如果你还在用 SharedPreferences 做本地存储,真心建议趁这次鸿蒙适配就一并迁到 MMKV 吧——性能更好、功能更强、全平台统一,何乐而不为呢?

仓库:https://github.com/Tencent/MMKV/tree/master/flutter/mmkv_ohos[1]

觉得好用给个 ⭐ Star 支持一下腾讯大佬们呀~

下期预告:你希望介绍哪个插件?欢迎留言告诉我!🦊

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

引用链接

[1]https://github.com/Tencent/MMKV/tree/master/flutter/mmkv_ohos

相关学习资料