一尘不染

Flutter:共享首选项

flutter

我有这个功能:

  Future<String> load(SharedPreferences prefs, String fileName) async {
    prefs = await SharedPreferences.getInstance();
    String jsonString = prefs.getString(fileName) ?? "";
    if (jsonString.isNotEmpty) {
      return jsonString;
    }else{
      return ...
    }
  }

在其他情况下我应该返回什么?我尝试使用“”,但不起作用。


阅读 293

收藏
2020-08-13

共1个答案

一尘不染

答案是“取决于”。即,这取决于您对该函数的结果执行的确切操作,以及在该情况下正确的空默认值意味着什么。

假设您将返回的JSON字符串解码Map<String, dynamic>,则一个很好的默认值可能是空映射。在这种情况下,您可以按以下方式重新编写功能:

Future<String> loadJSON(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return jsonString;
  }
  return "{}"; // default value
}

final String jsonString = await loadJSON("test.json");

final Map<String, dynamic> jsonData = json.decode(jsonString);

但是,将这个过程重新表述为返回实际映射值的稍高级别的函数可能更有意义:

Future<Map<String, dynamic>> loadData(final String fileName) async {
  final SharedPreferences prefs = await SharedPreferences.getInstance();
  final String jsonString = prefs.getString(fileName);
  if (jsonString != null && jsonString.isNotEmpty) {
    return json.decode(jsonString);
  }
  return Map(); // default value
}

final Map<String, dynamic> jsonData = await loadData("test.json");
2020-08-13