Flutter for OpenHarmony:从零搭建今日资讯App(二十六)本地存储实现

概述

使用SharedPreferences实现应用的本地数据存储,包括设置、收藏、历史等。

学习目标

  • 掌握SharedPreferences的使用
  • 实现数据持久化
  • 处理JSON序列化
  • 管理存储空间

核心实现

1. 保存简单数据

dart 复制代码
final prefs = await SharedPreferences.getInstance();

// 保存
await prefs.setString('key', 'value');
await prefs.setInt('count', 10);
await prefs.setBool('enabled', true);

// 读取
final value = prefs.getString('key') ?? 'default';
final count = prefs.getInt('count') ?? 0;
final enabled = prefs.getBool('enabled') ?? false;

2. 保存复杂对象

dart 复制代码
// 保存列表
final favorites = _favorites.map((article) => 
  jsonEncode(article.toJson())
).toList();
await prefs.setStringList('favorites', favorites);

// 读取列表
final favoritesJson = prefs.getStringList('favorites') ?? [];
_favorites = favoritesJson.map((json) => 
  NewsArticle.fromJson(jsonDecode(json))
).toList();

3. 清除数据

dart 复制代码
// 删除单个
await prefs.remove('key');

// 清除所有
await prefs.clear();

技术要点

1. 支持的数据类型

  • String
  • int
  • double
  • bool
  • List

2. JSON序列化

复杂对象需要先转换为JSON字符串。

3. 异步操作

所有操作都是异步的,需要使用await。

最佳实践

  1. 提供默认值:使用??操作符
  2. 及时保存:数据变化后立即保存
  3. 错误处理:捕获存储异常
  4. 限制大小:避免存储过大数据

下一步

下一章学习如何实现图片缓存。

欢迎加入开源鸿蒙跨平台社区https://openharmonycrossplatform.csdn.net

在这里你可以找到更多Flutter开发资源,与其他开发者交流经验,共同进步。

相关推荐
我命由我1234513 小时前
Dart - Dart SDK、Hello World 案例、变量声明、常量声明、常量 final、字符串类型
前端·flutter·前端框架·html·web·dart·web app
xmdy586613 小时前
Flutter+开源鸿蒙实战|校园易生活Day7 个人中心完善+我的发布/收藏+退出登录+主题切换+全局UI美化(项目闭环)
flutter·开源·harmonyos
xmdy586616 小时前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day1 项目初始化+架构搭建+全局依赖集成+多端适配基座
flutter·开源·harmonyos
恋猫de小郭16 小时前
AndroidX 将引入有全新 AppState ,用于管理 Compose 状态
android·前端·flutter
Zender Han16 小时前
Flutter 轻量存储方案介绍、区别、对比和使用场景
android·flutter·ios
东坡肘子17 小时前
CocoaPods 正在退场,SwiftPM 才刚到第二章 -- 肘子的 Swift 周报 #135
flutter·swiftui·swift
xmdy586617 小时前
Flutter + 开源鸿蒙实战|城市智慧停车管理系统 Day3 车场详情+车位预约+计时计费算法+路线导航+常用车场缓存持久化
flutter·开源·harmonyos
xmdy586617 小时前
Flutter+开源鸿蒙实战|城市共享驿站智能存取系统 Day6 全局UI精细化美化+通用组件封装+反馈设置模块+隐私弹窗+鸿蒙打包签名适配+项目整体重构
flutter·开源·harmonyos
WaywardOne1 天前
Flutter面试事件队列,微任务队列以及事件循环相关问题及回答
flutter·面试
明君879971 天前
Flutter 包体积优化实战:从 175MB 到 105MB
flutter