用途:为 Flutter 应用实现缓存策略,提升性能并支持离线使用,适用于需要在本地保留数据以减少网络请求的场景。
主要能力:
- 缓存策略选择:小型非关键 UI 状态或偏好用 shared_preferences;大型结构化数据用设备端数据库(sqflite、Drift、Hive CE、Isar);二进制或大媒体用 path_provider 文件系统缓存;保留用户会话状态(导航、滚动位置)用 Flutter 内置状态恢复;优化 Android 初始化可预热并缓存 FlutterEngine。
- 离线优先同步:以 Repository 为唯一数据源,组合本地数据库与远程 API。读操作返回 Stream,先 yield 本地缓存,再拉取远程、更新本地并 yield 新数据;写操作按数据关键性选择在线优先或离线优先,离线优先时本地写入后尝试 API,失败则标记待后台同步。数据模型加 synchronized 布尔标志,用 workmanager 或 Timer 定期推送未同步变更。
- 持久化:path_provider 中 getApplicationDocumentsDirectory() 存持久数据,getTemporaryDirectory() 存可被系统清理的缓存;sqflite 做关系型缓存,更新时用 whereArgs 防 SQL 注入。
- UI 优化:远程图片用 cached_network_image;自定义 ImageProvider 应重写 createStream() 与 resolveStreamForKey();大图需手动调大 ImageCache.maxByteSize;滚动组件用 scrollCacheExtent 与 ScrollCacheExtent 对象,不用已弃用的 cacheExtent;避免在 Widget 上重写 operator ==,优先 const 构造。
- Android FlutterEngine 缓存:在 Application 类中实例化并预热引擎,存入 FlutterEngineCache,在 Activity/Fragment 用 withCachedEngine 取用;使用缓存引擎时无法通过构建器设置初始路由,需在引擎 navigationChannel 上提前设置。
使用方式:按工作流逐步实现离线优先 Repository(定义模型、本地服务、远程服务、Repository、Stream 读、写方法、后台同步、验证离线行为),或预热 Android FlutterEngine(定位 Application 类、实例化引擎、设置初始路由、执行 Dart 入口、存入缓存、改用 withCachedEngine、验证无白屏)。
限制:资料未提供具体版本要求、性能指标或平台兼容性细节。