Flutter 三方库 shared_preferences 的鸿蒙化适配与实战指南

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.csdn.net
摘要
本文针对 Flutter for OpenHarmony 跨平台开发中,用户配置持久化的实际需求,采用官方推荐的 shared_preferences 库完成适配与落地。通过将无状态的 “我的” 页面重构为带持久化状态的有状态组件,实现了昵称自定义与消息通知开关的本地持久化存储,并完成了在 OpenHarmony 设备上的全流程验证。最终构建出数据安全、状态可追溯、符合鸿蒙数据沙箱规范的用户中心模块,为同类型跨平台应用的本地存储方案提供了可复用的实践参考。
一、方案选型:为什么选择 shared_preferences
在 OpenHarmony 跨平台开发中,本地存储方案的选择需要同时满足数据安全性、平台兼容性、开发便捷性三大核心要求。shared_preferences 作为 Flutter 官方维护的轻量级键值存储库,其底层实现已针对 OpenHarmony 数据沙箱机制完成适配,具备以下核心优势:
1.安全合规:数据文件仅存储在应用专属沙箱目录下,无法被其他应用访问,完全符合鸿蒙系统的隐私数据安全规范。
2.轻量高效:无需复杂的数据库配置,直接以键值对形式存储字符串、布尔值、数字等基础类型数据,读写性能满足用户配置类场景的需求。
3.无缝兼容:在 Flutter 跨平台项目中无需修改业务逻辑,仅需通过标准的 pubspec.yaml 引入依赖,即可在 OpenHarmony 设备上直接运行。
二、依赖接入:在鸿蒙项目中引入 shared_preferences
2.1 依赖安装
在项目根目录执行以下命令,快速引入适配鸿蒙平台的 shared_preferences 库:

flutter pub add shared_preferences

该命令会自动将依赖写入 pubspec.yaml 文件,并完成鸿蒙平台相关的编译配置,无需额外修改平台原生代码。
2.2 依赖校验
执行以下命令验证依赖是否适配成功:

flutter pub get

日志输出 Process finished with exit code 0 即表示依赖引入完成,后续构建时鸿蒙构建工具会自动加载对应的平台适配代码。
三、实战落地:“我的” 页面持久化重构
本次优化的核心目标是为应用的 “我的” 页面实现用户配置的本地持久化,解决应用重启后用户昵称、消息通知状态丢失的问题。我们将原有的 StatelessWidget 升级为 StatefulWidget,通过 shared_preferences 完成状态的本地读写。
3.1 核心逻辑设计
重构后的页面核心流程如下:
1.冷启动读取:页面初始化时读取本地存储的配置数据,避免显示默认值。
2。状态实时同步:用户修改配置后,立即将新状态写入本地存储。
3.状态实时更新:本地数据写入成功后,立即更新页面 UI,保证状态一致性。
3.2 关键代码实现
3.2.1 页面状态类与初始化加载

import 'package:flutter/material.dart';
import 'package:shared_preferences/shared_preferences.dart';

class ProfileScreen extends StatefulWidget {
  const ProfileScreen({super.key});

  @override
  State<ProfileScreen> createState() => _ProfileScreenState();
}

class _ProfileScreenState extends State<ProfileScreen> {
  String _nickname = "默认用户";
  bool _notificationEnabled = true;
  late SharedPreferences _prefs;

  @override
  void initState() {
    super.initState();
    // 初始化时加载本地配置
    _loadConfig();
  }

  Future<void> _loadConfig() async {
    _prefs = await SharedPreferences.getInstance();
    setState(() {
      // 读取昵称,默认值为"默认用户"
      _nickname = _prefs.getString('user_nickname') ?? "默认用户";
      // 读取通知开关状态,默认值为true
      _notificationEnabled = _prefs.getBool('user_notification') ?? true;
    });
  }

3.2.2 昵称编辑与持久化实现
点击昵称右侧的编辑按钮,弹出输入框并完成数据写入:

Future<void> _editNickname() async {
  final TextEditingController controller = TextEditingController(text: _nickname);
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: const Text("修改昵称"),
      content: TextField(
        controller: controller,
        maxLength: 10,
        decoration: const InputDecoration(hintText: "请输入新昵称"),
      ),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text("取消"),
        ),
        TextButton(
          onPressed: () async {
            final newName = controller.text.trim();
            if (newName.isNotEmpty) {
              await _prefs.setString('user_nickname', newName);
              setState(() {
                _nickname = newName;
              });
            }
            if (mounted) Navigator.pop(context);
          },
          child: const Text("确定"),
        ),
      ],
    ),
  );
}

3.2.3 消息通知开关持久化实现
通过 SwitchListTile 实现开关状态的实时读写:

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(title: const Text("我的")),
    body: ListView(
      children: [
        // 昵称编辑项
        ListTile(
          leading: const CircleAvatar(child: Icon(Icons.person)),
          title: Text(_nickname),
          trailing: IconButton(
            icon: const Icon(Icons.edit),
            onPressed: _editNickname,
          ),
        ),
        // 消息通知开关项
        SwitchListTile(
          title: const Text("消息通知"),
          subtitle: const Text("开启后接收应用推送消息"),
          value: _notificationEnabled,
          onChanged: (value) async {
            await _prefs.setBool('user_notification', value);
            setState(() {
              _notificationEnabled = value;
            });
          },
        ),
      ],
    ),
  );
}

四、鸿蒙设备运行验证
4.1 构建验证
在项目根目录执行鸿蒙平台构建命令,验证项目是否能正常编译:

hvigorw assembleApp

构建日志输出关键信息:

BUILD SUCCESSFUL in 22 s 702 ms

该结果表明 shared_preferences 插件已成功适配当前 OpenHarmony SDK 版本,无编译错误。
4.2 功能验证
将构建产物安装至鸿蒙设备后,完成以下验证流程:
昵称修改验证:修改用户昵称后退出页面,重新进入页面,昵称保持修改后的状态。
开关状态验证:切换消息通知开关后,重启应用,开关状态与修改时一致。
数据安全验证:通过鸿蒙系统文件管理器查看应用沙箱目录,确认配置文件仅对当前应用可见,无数据泄露风险。
运行验证截图:(此处插入鸿蒙设备上 ProfileScreen 页面运行截图,包含昵称修改弹窗与开关状态)
五、适配总结与扩展建议
5.1 本次适配核心要点
平台兼容性:shared_preferences 已原生适配 OpenHarmony 数据沙箱机制,无需额外配置即可实现安全的本地存储。
状态一致性:通过 initState 初始化加载与修改时实时写入的方式,保证了应用冷启动与运行时的数据一致性。
开发效率:基于 Flutter 标准 API 开发,无需编写鸿蒙原生代码,大幅降低跨平台适配成本。
5.2 扩展使用场景
shared_preferences 除本次实现的用户配置存储外,还可在以下场景中复用:
应用主题模式(深色 / 浅色模式)的本地持久化
首次启动引导页的状态记录
轻量级用户偏好设置(如字体大小、语言选项)
运行示例:
运行示例

运行示例

Logo

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

更多推荐