颤动:共享偏好

Lit*_*key 9 future sharedpreferences dart 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 ...
    }
  }
Run Code Online (Sandbox Code Playgroud)

在其他情况下我应该返回什么?我试过""但它不起作用.

Sur*_*gch 8

共享首选项

在颤振,共用首选项用于存储原始数据(intdoubleboolstring,和stringList)。此数据与该应用程序相关联,因此,当用户卸载您的应用程序时,该数据也将被删除。

获取插件

pub 的shared_preferences插件是Android SharedPreferences和iOS 的包装NSUserDefaults。您可以通过在依赖项部分中将shared_preferences行添加到pubspec.yaml文件中来获取此插件。

dependencies:
  flutter:
    sdk: flutter
  shared_preferences: ^0.4.3
Run Code Online (Sandbox Code Playgroud)

将版本号更改为当前版本号。

导入包裹

在需要共享首选项的任何文件中,添加以下导入:

import 'package:shared_preferences/shared_preferences.dart';
Run Code Online (Sandbox Code Playgroud)

读写数据

要获取共享的首选项对象,您可以执行以下操作:

final prefs = await SharedPreferences.getInstance();
Run Code Online (Sandbox Code Playgroud)

这将用于以下所有示例。

整型

  • 读: final myInt = prefs.getInt('my_int_key') ?? 0;
  • 写: prefs.setInt('my_int_key', 42);

  • 读: final myDouble = prefs.getDouble('my_double_key') ?? 0.0;
  • 写: prefs.setDouble('my_double_key', 3.14);

布尔

  • 读: final myBool = prefs.getBool('my_bool_key') ?? false;
  • 写: prefs.setBool('my_bool_key', true);

  • 读: final myString = prefs.getString('my_string_key') ?? '';
  • 写: prefs.setString('my_string_key', 'hello');

stringList

  • 读: final myStringList = prefs.getStringList('my_string_list_key') ?? [];
  • 写: prefs.setStringList('my_string_list_key', ['horse', 'cow', 'sheep']);

也可以看看


Art*_*ken 7

答案是“视情况而定”。也就是说,这取决于您对这个函数的结果到底做了什么,以及在该上下文中一个好的空默认值意味着什么。

假设您将返回的 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);
Run Code Online (Sandbox Code Playgroud)

然而,将这个过程重新表述为一个返回实际地图值的稍微高级的函数可能更有意义:

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");
Run Code Online (Sandbox Code Playgroud)