HarmonyOS鸿蒙Next Flutter优化库:shared_preferences_ohos

HarmonyOS鸿蒙Next Flutter优化库:shared_preferences_ohos 【问题描述】:使用shared_preferences_ohos库的时候报错了:

cke_2716.png cke_535.png

https://gitcode.com/openharmony-tpc/flutter_packages/issues/1103 有issue,issue里也有解决方法,但是没人合代码,希望能优化下


更多关于HarmonyOS鸿蒙Next Flutter优化库:shared_preferences_ohos的实战教程也可以访问 https://www.itying.com/category-92-b0.html

5 回复

开发者您好,需要您提供如下信息:请问您是在什么样的业务场景中使用该能力(shared_preferences_ohos库),交互流程是怎样的,在哪一个环节遇到了问题?方便说明能力不满足可能带来的影响:什么时间用到?是否高频?有无三方库可以做到?若提供该能力,是否会造成大工作量返工?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

更多关于HarmonyOS鸿蒙Next Flutter优化库:shared_preferences_ohos的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


1. 问题背景

  • 标题Flutter优化库:shared_preferences_ohos

    表明这是针对 OpenHarmony 系统适配的 Flutter 优化库shared_preferences_ohos)的问题。

  • 问题描述

    使用 shared_preferences_ohos 库的时候报错了

    说明在集成或调用该库时触发了运行时错误。


2. 依赖配置示例

图片中展示了 pubspec.yaml 中的 依赖配置代码块

shared_preferences:
  git:
    url: https://gitcode.com/openharmony-tpc/flutter_packages.git
    path: packages/shared_preferences/shared_preferences
    ref: br_shared_preferences-v2.5.4_ohos
  • 关键信息
    • 通过 Git 方式 引入 shared_preferences 库(非 Pub 仓库)。
    • 仓库地址指向 OpenHarmony 社区的 Flutter 代码仓库openharmony-tpc)。
    • 使用的分支是 br_shared_preferences-v2.5.4_ohos,说明是 OpenHarmony 适配分支(非标准 Flutter 版本)。

3. 报错详情

  • 错误日志
static members of SharedPreferencesApi
exception = (RangeError) RangeError (length): Invalid value: Valid value range is empty: 0
  • 错误分析
    • 错误类型RangeError(范围错误)。
    • 具体原因length 参数的值为 0,但当前上下文要求长度必须在 非空的有效范围 内(例如:尝试访问空列表的索引、初始化空数据结构时传入无效长度等)。
    • 可能场景: 在调用 shared_preferences 的 API 时,传入了空数据或未正确初始化数据结构(例如:读取空键值、解析空字符串为列表等)。

4. 社区反馈与现状

  • 关联 Issue 链接https://gitcode.com/openharmony-tpc/flutter_packages/issues/1103

  • 说明

    有 issue,issue 里也有解决方法,但是没人合代码,希望能优化下

    • 该问题已在 OpenHarmony 社区的 Flutter 仓库中被报告(Issue #1103)。
    • 社区现状: 虽有解决方案,但 未被官方合并到主分支,导致开发者仍需自行处理。

5. 问题本质总结

  • 核心矛盾shared_preferences_ohosOpenHarmony 适配的 Flutter 库,但其分支版本(v2.5.4_ohos)存在兼容性问题,导致运行时触发 RangeError

  • 根本原因

    • 可能是库的代码逻辑未处理边界条件(如空数据场景)。
    • 也可能是 OpenHarmony 系统与标准 Flutter 的差异导致 API 行为不一致。

建议行动方向

  1. 检查数据初始化: 确保在调用 shared_preferences 前,键值对已正确写入(避免读取空值)。

  2. 参考 Issue 解决方案: 查看 Issue #1103 中的临时修复方法(如修改本地库代码)。


开发者您好,问题正在处理中,请耐心等待。

shared_preferences_ohos 是专为 HarmonyOS Next 优化的 Flutter 插件,替代原 shared_preferences,使用 HarmonyOS 的 Preferences 数据库实现键值存储。它支持同步/异步读写,自动处理鸿蒙 Next 的线程模型与生命周期,减少适配代码。仅需添加依赖并替换 import 路径,性能优于原生桥接方案。

该问题已有社区贡献者在 issue 中提供了修复代码,可通过在本地 shared_preferences_ohos 插件源码中应用补丁解决。如果项目允许,可 Fork 该库并手动合入补丁,再以本地依赖方式引入。涉及修改通常集中在 ohos/entry/src/main/ets/ 下的插件实现文件(如 PreferencesPlugin.ets),修正存储键的序列化或路径兼容逻辑。相关修复已提 PR,等待维护者合并;在此期间可临时使用本地修改版本。

回到顶部