我正在使用SharedPreferences保存来自API的响应。我想在我的应用程序离线或切换到另一个选项卡时使用,数据将不会再次加载。但它不起作用。它仅在我在线时有效。但是,如果我在线我切换页面,数据将再次重新加载。如果我离线,数据将不会显示。
答案 0 :(得分:0)
最后退回数据:
Future<PagesData> sendPagesDataRequest(int page) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
try {
// your codes ...
} finally {
String myDataValue = prefs.getString('myData');
return pagesDataFromJson(myDataValue);
}
}
答案 1 :(得分:0)
从代码中,我看到当您在线时可以获取数据并对其进行解析,但是当您离线时可以进行try-catch块中的所有操作,因此当您离线时可以使用套接字在尚未处理的catch块中发生的异常。
SharedPreferences prefs = await SharedPreferences.getInstance();
String myDataValue = prefs.getString('myData');
final project = pagesDataFromJson(myDataValue);
如果您在接获通知中称呼它,则可能可以在脱机时获取数据。
但这只是一个修复,请检查此链接,它会告诉您互联网是否存在: https://pub.dev/packages/data_connection_checker
或者您可以参考此视频:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
因此它不会从首选项中加载数据,因为当您获取异常时,它直接进入了捕获,而没有留下以下代码。
答案 2 :(得分:0)
从API获取数据
Future<String> fetchPagesData(int page) {
String url = Uri.encodeFull("https://API_URL?page=$page");
return http.get(url).body;
}
设置SharedPreferences
数据
Future<String> setPagesData(int page, String value) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
prefs.setString('myData$page', value);
}
获取SharedPreferences
数据
Future<PagesData> getPagesData(int page) async {
SharedPreferences prefs = await SharedPreferences.getInstance();
return prefs.getString('myData$page');
}
离线时捕获
Future<PagesData> sendPagesDataRequest(int page) async {
try {
fetchPagesData(page).then((value) => setPagesData(page, value));
// } on SocketException {
// no network connection
} catch (e) {}
return getPagesData(page);
}