gpt4 book ai didi

flutter - 来自API的Flutter离线缓存JSON响应

转载 作者:行者123 更新时间:2023-12-03 03:51:50 24 4
gpt4 key购买 nike

我正在尝试将api的json响应保存到设备。现在,我正在创建一个文本文件,每当我调用api时,我都会覆盖文本文件以保存响应。无论何时离线或任何问题,我都会从文件返回响应。问题是,我应该这样做吗?如果没有,什么是更好的选择?

class EventRepository {
Future<EventResponse> getEvents({page}) async {
try {
var response = await apiCall.getData('events?page=$page&limit=10&q=');
var data = response.data;
if (page == 1) {
await CacheStorage().writeCache(jsonEncode(data), "events");
}
return EventResponse.fromJson(data, isCache: false);
} catch (error, stacktrace) {
var eventData;
print("Exception occured: $error stackTrace: $stacktrace");
var events = await CacheStorage().readCache("events");
if (events != null) {
eventData = json.decode(events);
return EventResponse.fromJson(eventData);
} else {
return EventResponse.withError(handleError(error));
}
}
}
}
这是我的文件读写功能:
class CacheStorage {
Future<String> readCache(String fileName) async {
String text;
try {
final Directory directory = await getApplicationDocumentsDirectory();
final File file = File('${directory.path}/$fileName.txt');
text = await file.readAsString();
} catch (e) {
text = null;
}
return text;
}

writeCache(String text, String path) async {
final Directory directory = await getApplicationDocumentsDirectory();
final File file = File('${directory.path}/$path.txt');
await file.writeAsString(text);
}
}

最佳答案

好吧,我建议您使用shared_preferences,它很容易存储和缓存喜欢的项目以及很少的东西,例如当我们不得不使用暗或亮模式时。因此,您还可以保存json对象,并且它非常安静,简单。因此,您不必每次都创建文本文件。
首先,您需要在pubspec中获取软件包,然后

import 'package:shared_preferences/shared_preferences.dart';

SharedPreferences prefs = await SharedPreferences.getInstance();
现在要保存的json数据是
prefs.setString('mydata', json.encode(yourjsondata));
要检索此数据,您必须使用分配的确切名称,在我的情况下为“mydata”
json.decode(preferences.getString('mydata'))
完成这就是全部。好,感谢您,在阅读您提出的问题时我有了这个主意。希望这会有所帮助:)

关于flutter - 来自API的Flutter离线缓存JSON响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62930221/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com