我正在尝试缓存一些API调用,但到目前为止,我找不到做到这一点的最佳/最佳方法。我对此不感兴趣,因为我有很多需要缓存的API调用。
此外,我尝试使用async_resource
,这似乎是一个非常简单的插件,但与我在项目中使用的flutter_google_places
不兼容。
我查看了flutter_cache_manager
,但没有找到关于POST调用的示例。
所以,这就是我进行API调用的方式:
var url = 'www.my-url.com/api';
var header = {
"Content-type": "application/json",
"key": "my-key",
"token": "my-token"
};
var params = {
"limit": limit,
"page": page,
};
var _body = json.encode(params);
try {
var response = await http.post(url, headers: header, body: _body);
return json.decode(response.body);
} catch (e) {
return null;
}
我应该如何缓存这些数据?
答案 0 :(得分:0)
我同时使用了 flutter_cache_manager
和 http.post
方法来实现这一点。
以下是我尝试过的方法,现在工作正常。
注意:确保下面的 finalUrl
具有唯一的 URL,用于必须在您的逻辑中生成的标头/参数的每次更改。
String finalUrl = 'some unique url';
String tempResponse = '';
// checks if the file exists in cache
var fileInfo = await DefaultCacheManager().getFileFromCache(finalUrl);
if (fileInfo == null) {
// get data from online if not present in cache
http.Response response;
try {
var response = await http.post(url, headers: header, body: _body);;
} catch (e) {
print(e);
}
tempResponse = response.body;
// put data into cache after getting from internet
List<int> list = tempResponse.codeUnits;
Uint8List fileBytes = Uint8List.fromList(list);
DefaultCacheManager().putFile(finalUrl, fileBytes);
} else {
// get data from file if present in cache
tempResponse = fileInfo.file.readAsStringSync();
}
var result = json.decode(tempResponse);