【问题标题】:Flutter save shared preferences of multiple usersFlutter 保存多个用户的共享偏好
【发布时间】:2020-07-03 14:23:46
【问题描述】:

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

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

这些是我获取和设置过滤器的函数:

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

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

【问题讨论】:

    标签: flutter dart sharedpreferences


    【解决方案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;
        }
    

    【讨论】:

      【解决方案2】:

      我的建议是,在将值保存在 sharedprefrences 中时,您宁愿使用一个映射,其中键必须是唯一的,例如您需要的 id 和值。然后只需对将其转换为字符串的地图进行编码,然后您可以将其保存为 sharedPrefrences 中的字符串,然后当您检索时,您只需解码地图并检查登录用户 ID 是否与您登录的 ID 匹配,如果不这样做不获取值,否则获取它们。

      【讨论】:

      • 这对我来说似乎是一个很好的建议。谢谢你!你能给我举个例子吗?你可以只用用户硬编码值来识别,我只需要看看这个函数在编码/解码和地图上的样子
      • 是的,我有点忙,但我会给你举个例子。
      猜你喜欢
      • 2017-08-25
      • 2019-03-20
      • 2021-10-11
      • 1970-01-01
      • 2019-03-18
      • 1970-01-01
      • 1970-01-01
      • 2023-01-25
      • 1970-01-01
      相关资源
      最近更新 更多