本次 Day12-13 的实战内容,聚焦 Flutter 鸿蒙应用的本地数据持久化能力落地,完整覆盖从基础键值对缓存到安全本地认证体系的全流程开发,重点解决了 Flutter 官方存储库在鸿蒙平台的适配问题,同时基于此实现了备忘录应用的离线秒开、用户注册登录全流程、启动鉴权等核心商用能力,为 Flutter 鸿蒙应用的离线可用与安全合规打下核心基础。

项目开源仓库:https://gitcode.com/shhzxt/flutter_OpenHarmony欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net

🎯 本次实战核心目标

  1. 离线缓存能力落地:为备忘录应用实现「优先读缓存、后台更数据」的加载策略,实现无网络环境可用、应用启动秒开的极致体验
  2. 完整本地认证体系:搭建用户注册、登录、退出的全流程闭环,模拟商用 App 的账号体系能力
  3. 密码安全存储:采用「随机盐 + 哈希加密」的行业通用安全策略,杜绝明文存储密码的安全隐患
  4. 启动鉴权路由管控:实现应用启动时自动校验登录状态,完成已登录 / 未登录场景的自动路由分发

🔧 核心技术选型

  • 核心存储库:shared_preferences,Flutter 官方维护的轻量级键值对持久化存储库,原生支持全平台基础能力
  • 鸿蒙平台适配包:shared_preferences_ohos,由 OpenHarmony SIG 官方提供的鸿蒙平台适配实现,补齐鸿蒙端的存储能力
  • 加密能力库:crypto,Dart 官方加密库,本次用于实现 SHA256 哈希加密算法,保障密码存储安全
  • 数据序列化:dart:convert,Dart 内置的 JSON 编解码模块,实现业务对象与存储字符串的双向转换

一、基础篇:备忘录离线缓存能力实现

1.1 依赖配置与鸿蒙平台适配

由于shared_preferences_ohos鸿蒙适配包暂未发布至 pub.dev 官方仓库,需要通过本地路径的方式引入,同时引入加密库用于后续的安全认证能力开发。

在项目根目录的pubspec.yaml中添加如下配置:

配置完成后,执行flutter pub get完成依赖拉取与配置刷新。

1.2 通用本地存储服务封装

为了统一管理存储逻辑、降低业务层与存储库的耦合,我们在lib/services/目录下创建local_storage_service.dart文件,封装备忘录数据的专属存取方法,同时预留通用能力扩展空间。

核心代码实现:

1.3 业务页面集成与加载策略优化

为了实现应用秒开、离线可用的体验,我们在备忘录列表页MemoPage中采用缓存优先、后台更新的加载策略:应用启动后优先读取本地缓存数据渲染页面,再异步请求后端接口更新数据,同时更新本地缓存,保证用户无等待感。

核心加载逻辑实现:

在页面的initState生命周期中,先执行_loadLocalCacheData(),再执行_fetchRemoteMemoData(),即可实现优先渲染缓存、后台静默更新的效果。

二、进阶篇:本地用户认证体系全流程实现

为了模拟商用 App 的完整账号流程,我们基于本地存储能力,搭建了一套具备安全防护能力的本地用户认证系统,覆盖注册、登录、会话管理、启动鉴权全流程。

2.1 密码安全存储核心方案

用户密码绝对禁止明文存储在本地,本次实战采用行业通用的随机盐(Salt)+ SHA256 哈希的安全存储方案,彻底杜绝密码泄露风险,核心流程如下:

  1. 用户注册时,生成 16 字节的随机盐值,保证每个用户的盐值唯一,避免彩虹表攻击;
  2. 将「盐值 + 固定分隔符 + 用户输入密码」拼接后,通过 SHA256 算法生成不可逆的哈希值;
  3. 本地仅存储用户名、随机盐、密码哈希值、创建时间,全程不存储用户原始密码。

本地用户数据的标准存储结构如下:

2.2 认证服务核心逻辑封装

lib/services/目录下创建auth_service.dart文件,封装用户注册、登录、会话管理、退出登录的全流程核心逻辑,与业务页面彻底解耦。

完整代码实现:

2.3 启动鉴权与路由自动分发

为了实现应用启动时的登录状态自动校验,避免未登录用户访问业务页面,我们创建AuthGate鉴权入口组件,作为应用的根入口,替代原有的 HomePage,实现已登录 / 未登录场景的自动路由分发。

首先实现AuthGate鉴权组件,代码如下:

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐