如何解决SharedPreferences无法正常工作

时间:2020-02-28 16:54:20

标签: flutter

我正在使用SharedPreferences保存来自API的响应。我想在我的应用程序离线或切换到另一个选项卡时使用,数据将不会再次加载。但它不起作用。它仅在我在线时有效。但是,如果我在线我切换页面,数据将再次重新加载。如果我离线,数据将不会显示。

3 个答案:

答案 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);
}