flutter 如何解决SharedPreferences在抖动中不工作的问题

goucqfw6  于 2023-03-03  发布在  Flutter
关注(0)|答案(3)|浏览(147)

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

f5emj3cl

f5emj3cl1#

从代码中,我看到当你在线的时候,你会得到数据并对其进行解析,但是当你离线的时候,你会在try-catch块中做所有的事情,所以当你离线的时候,你还没有处理的catch块中会发生套接字异常。

SharedPreferences prefs = await SharedPreferences.getInstance();
        String myDataValue = prefs.getString('myData');
        final project = pagesDataFromJson(myDataValue);

如果在catch中调用它,则可以在脱机时获取数据。
但这只是一个修复检查此链接,它会告诉你是否有互联网或没有:https://pub.dev/packages/data_connection_checker
或者你可以参考这段视频:
https://www.youtube.com/watch?v=u_Xyqo6lhFE
因此,它不会从prefrences加载数据,因为当您获得异常时,它会直接转到catch,而不会离开下面的代码。

acruukt9

acruukt92#

最后返回数据:

Future<PagesData> sendPagesDataRequest(int page) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();

  try {
    // your codes ...
  } finally {
    String myDataValue = prefs.getString('myData');
    return pagesDataFromJson(myDataValue);
  }
}
dwbf0jvd

dwbf0jvd3#

从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);
}

相关问题