如何将Flutter中API调用的响应缓存一个月,然后在每个月初刷新缓存?

问题描述 投票:0回答:1

我正在 Flutter 中练习 API 调用。现在,我想每月对这些 API 调用实施缓存。当第一次获取 JSON 数据时,应该首先进行缓存过程。然后,从每个月的月初到月末,都应该使用缓存的数据。在新的一个月开始时,应该使用更新的 JSON 数据刷新缓存。我怎样才能实现这个目标?

我正在使用 SQFlite。但这里欢迎任何其他数据库解决方案。

class PrayerTimesApi {
  static Future<void> fetchAndStorePrayerTimes() async {
    String url = 'example.com';

    var response = await http.post(
      Uri.parse(url),
      headers: <String, String>{
        'Content-Type': 'application/json; charset=UTF-8',
      },
    );

    if (response.statusCode == 200) {
      Map<String, dynamic> responseData = jsonDecode(response.body);
      List<dynamic> prayerTimesData = responseData['prayerTimes'];

    
      String currentDate =
          DateFormat('EEEE dd MMMM yyyy').format(DateTime.now());

      Map<String, dynamic>? currentPrayerTimes;
      for (var prayerTime in prayerTimesData) {
        if (prayerTime['date'] == currentDate) {
          currentPrayerTimes = prayerTime;
          break;
        }
      }

      if (currentPrayerTimes != null) {
        
        PrayerTimes prayerTimes = PrayerTimes.fromJson(currentPrayerTimes);

        await LocalDatabase.insertPrayerTimes(prayerTimes);
      } else {
        throw 'Not available for $currentDate.';
      }
    } else {
      throw 'Failed to fetch.';
    }
  }
}
flutter flutter-dependencies
1个回答
0
投票

您可以存储映射了时间戳的响应数据。 应用程序启动时,比较数据下载月份和当前月份,如果不匹配则刷新。

为了存储响应,您可以使用本地文件系统,或者另一种方法可以是 NoSql 数据库 Hive (https://pub.dev/packages/hive)

© www.soinside.com 2019 - 2024. All rights reserved.