You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Flutter中实现每日自动从API更新HiveBox缓存数据

实现Hive缓存每日自动更新的方案

要解决远程数据更新但本地缓存未同步的问题,核心思路是记录缓存的更新时间,每次App启动时判断缓存是否超过24小时,过期则重新拉取远程数据更新缓存。具体实现步骤如下:

1. 存储缓存更新时间

每次调用_save()保存远程数据时,同时把当前时间戳存入Hive,用于后续判断缓存有效期。

2. 检查缓存有效期

App启动时,先判断缓存是否存在:

  • 若缓存为空,直接拉取远程数据并保存;
  • 若缓存存在,取出缓存更新时间,和当前时间对比,若间隔超过24小时(86400秒),则重新拉取数据更新缓存;否则直接使用本地缓存。

3. 修改后的代码示例

await Hive.initFlutter();
var box = await Hive.openBox('wiseBox');

// 获取缓存数据和更新时间
final cachedData = box.get('data');
final lastUpdateTime = box.get('lastUpdateTime');

if (cachedData == null || lastUpdateTime == null) {
    // 首次启动或缓存为空,拉取数据并保存
    await _save();
} else {
    // 计算当前时间与上次更新的间隔(秒)
    final currentTime = DateTime.now().millisecondsSinceEpoch;
    final timeDiff = (currentTime - lastUpdateTime) ~/ 1000;
    
    if (timeDiff >= 86400) { // 超过24小时(86400秒)
        // 缓存过期,重新拉取数据更新
        await _save();
    } else {
        // 缓存有效,使用本地数据
        _openCashedData();
    }
}

_save() async {
    // 替换为实际拉取Airtable API数据的逻辑
    final remoteData = await fetchDataFromAirtable();
    
    // 保存数据和当前时间戳
    await box.put('data', remoteData);
    await box.put('lastUpdateTime', DateTime.now().millisecondsSinceEpoch);
}

_openCashedData() {
    return box.get('data');
}

额外说明

  • 如果需要App在后台也能自动更新缓存,可以使用workmanager插件实现定时任务,每日固定时间触发数据拉取和缓存更新;
  • 拉取远程数据时要处理网络异常,若请求失败,可保留旧缓存并提示用户,避免App无数据可用。

内容的提问来源于stack exchange,提问作者SaturnPro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:35:29