我正在 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.';
}
}
}
您可以存储映射了时间戳的响应数据。 应用程序启动时,比较数据下载月份和当前月份,如果不匹配则刷新。
为了存储响应,您可以使用本地文件系统,或者另一种方法可以是 NoSql 数据库 Hive (https://pub.dev/packages/hive)