1、Flutter本地存储概述:为什么需要本地存储、本地存储的常见方案对比、课程目标与学习路径
为什么我们需要本地存储?
做移动端开发,你迟早会碰到这个问题:用户关掉App再打开,数据还在不在?
我刚开始写Flutter时,犯过一个低级错误。一个记账App,所有数据都存在内存里。用户切出去回个微信,再切回来,App被系统回收了。好家伙,记了一周的账全没了。用户直接在应用商店给了个一星差评。
嗯,从那以后我明白了——本地存储不是可选项,是刚需。
具体来说,我们需要本地存储的原因有这几个:
- 离线可用:没网的时候,App不能直接变砖吧?用户在地铁里、飞机上,数据得能正常读写。
- 提升体验:每次打开App都从服务器拉数据,加载转圈圈,用户早跑了。本地缓存能让你秒开。
- 减少流量:尤其是图片、配置文件这些,每次都下载,用户的流量包扛不住。
- 保存用户状态:登录状态、主题设置、草稿内容……这些不存本地,难道让用户每次重新设置?
一句话总结:没有本地存储的App,就像没有口袋的衣服——东西拿手里,一松手就没了。
常见方案对比:选哪个?
Flutter里做本地存储,方案不少。我按使用场景给你捋一遍。
| 方案 | 适用场景 | 读写速度 | 数据量 | 复杂度 |
|---|---|---|---|---|
| SharedPreferences | 简单键值对(设置、标记位) | 快 | 极小(KB级) | 极低 |
| 文件存储 | 图片、日志、JSON文件 | 中等 | 大(MB~GB级) | 低 |
| SQLite (sqflite) | 结构化数据、复杂查询 | 中等 | 中等(MB级) | 中 |
| Hive | 轻量级对象存储、快速读写 | 极快 | 中等(MB级) | 低 |
| Isar | 高性能、复杂查询、跨平台 | 极快 | 大(GB级) | 中高 |
说说我的个人经验。SharedPreferences我一般只用来存「用户是否首次启动」「主题色是深色还是浅色」这种小标记。存复杂对象?别折腾,它不适合。
文件存储呢?我做过一个漫画阅读器,漫画图片就是存本地的。用path_provider拿到目录,自己管理文件读写。简单粗暴,但你要自己处理缓存淘汰。
SQLite是老牌选手了。我记得2018年做第一个Flutter项目,数据复杂一点就只能上sqflite。写SQL语句、建表、迁移……说实话有点繁琐,但胜在稳定。
Hive是我现在最常用的。为什么?因为它快,而且不需要原生依赖。你想想看,一个纯Dart实现的NoSQL数据库,开箱即用,不用配置Android和iOS的原生代码。我最近几个工具类App都用的它。
我的建议:新手先从SharedPreferences和Hive入手。这两个上手快,能覆盖80%的场景。等遇到复杂查询需求了,再考虑SQLite或Isar。
避坑指南
我曾经踩过一个坑:用SharedPreferences存了一个大的JSON字符串,大概几百KB。结果每次读写都卡顿,UI直接掉帧。后来才发现,SharedPreferences本质是XML文件,每次写入都是全量覆盖。数据大了自然慢。
所以记住:选对工具,比用好工具更重要。
课程目标与学习路径
这门课的目标很明确:让你学完就能在实际项目里用起来。
具体来说,学完这30章,你能做到:
- 根据业务场景,快速选出合适的存储方案
- 熟练使用SharedPreferences、文件存储、Hive、SQLite
- 处理数据迁移、版本升级、加密存储等进阶问题
- 写出健壮的、不丢数据的存储代码
学习路径我建议这样走:
- 前5章:打好基础,搞懂每种方案的原理和基本用法
- 第6-15章:深入Hive和SQLite,这两个是实战主力
- 第16-25章:进阶技巧——加密、迁移、性能优化
- 第26-30章:综合实战,做一个完整的本地存储项目
注意:别跳着学。尤其是Hive和SQLite那几章,前后依赖关系很强。我见过有人直接跳到加密章节,结果连基本读写都不会,又回头翻前面的内容——浪费时间。
好了,第一章就到这里。下一章我们直接上手SharedPreferences,写第一行本地存储代码。准备好了吗?