用途:Riverpod 的离线持久化(实验性)把 provider 状态保存在设备上,使其在应用重启后仍能恢复,并支持离线使用。Riverpod 本身与存储无关,需要 riverpod_sqflite 之类的包提供 Storage 实现。只有基于 Notifier 的 provider 才能被持久化。
主要能力:创建 Storage(如用 JsonSqFliteStorage.open 打开数据库);在 notifier 的 build 中调用 persist,传入 Storage、唯一 key 以及状态的 encode/decode;使用 riverpod_sqflite 与代码生成时可用 @JsonPersist() 自动生成 key/encode/decode;通过 StorageOptions 设置缓存时长(默认较短,例如 2 天,长期数据可用 StorageCacheTime.unsafe_forever);用 destroyKey 在数据结构变化时丢弃旧数据实现简单迁移;await persist 的 future 可先以持久化状态初始化再回退到网络请求。
使用方式:安装存储包并创建 Storage,在 build 内调用 persist(不要 await,Riverpod 会处理),key 需全局唯一且跨重启稳定,family provider 的 key 要包含参数。测试时用 Storage.inMemory() 覆盖 storage provider,避免依赖真实数据库。
限制:该功能为实验性;key 重复会导致同一行数据、存在损坏风险,key 变更会丢失已恢复状态;使用 forever 缓存需自行规划数据删除或迁移,Riverpod 不负责迁移;高级迁移或自定义存储策略可能仍需直接操作数据库。