Flutter保存多个用户的共享首选项

时间:2020-07-03 05:39:52

标签: flutter dart sharedpreferences

我有两种类型的设置要保存在用户应用程序设备上。首先是过滤器设置,其次是用户是否是第一次打开应用程序。

对于过滤器,我要保存多个布尔值,对于第一个打开的应用程序值,我只需要一个布尔值。现在的问题是,如果我使用另一个帐户登录应用程序,则选择第一个帐户的值。我需要为每个帐户设置一个集合,但我不知道如何操作,因为我一直在更改单个值。

这些是我获取和设置过滤器的功能:

    void putShared(String key, bool val) async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  prefs.setBool(key, val);
}

Future getShared(String key) async {
  final prefs = await SharedPreferences.getInstance();

  bool val = prefs.getBool(key) == null ? false : (prefs.getBool(key));
  return val;
}

那么如何更改代码以使其适用于多个帐户?

2 个答案:

答案 0 :(得分:1)

我的建议是,在将值保存在共享首选项中时,您宁愿使用映射,该映射中的键必须是唯一的,例如ID和所需的值。然后对地图进行编码,将其转换为字符串,然后可以将其另存为字符串,然后在sharedPrefrences中保存,然后在检索时,只需对地图进行解码,然后检查登录的用户ID是否与您登录的ID相匹配(如果没有)不获取值,否则获取它们。

答案 1 :(得分:1)

您可以为所有键添加唯一的用户ID作为前缀。喜欢。

    void putShared(String key, bool val) async {

      String userSpecificKey = userID + key;

      SharedPreferences prefs = await SharedPreferences.getInstance();
      prefs.setBool(userSpecificKey, val);
    }
    

    Future getShared(String key) async {

      String userSpecificKey = userID + key;

      final prefs = await SharedPreferences.getInstance();
      bool val = prefs.getBool(userSpecificKey) == null ? false : (prefs.getBool(userSpecificKey));
      return val;
    }