上一期我们介绍了 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
夜雨聆风