多个用户的多个共享首选项,是否有必要?

Multiple sharedpreference for Multiple users, is it necessary?

我在 sharedpreference 中存储了一个数据列表,该列表只能由特定用户查看,但是当我尝试登录另一个帐户时,我仍然可以查看数据。

会不会是本地开发环境的问题,导致不同用户登录还是会读取同一个sharedpreference文件?我可以假设一旦应用程序投入生产,问题就会消失,因为用户应该使用不同的机器吗?

如果没有,我如何为多个用户实现多个共享偏好?

谢谢!

这很可能是由于您存储数据的方式所致。共享首选项取决于键 Strings。如果您要存储不同的用户,但对所有用户使用相同的关键字,即 user,那么它就不是唯一的。

为每个用户指定一个唯一的密钥,最简单的方法是使用他们的电子邮件。当您将该数据存储在您的共享首选项中时,请为每个用户使用这个唯一的密钥。这样你就没有数据重叠。

将 json 数据作为字符串存储到共享首选项。

然后您可以为每个用户存储唯一的键和他们的值。

这是将 json 存储为字符串的示例:(请注意,此示例适用于单个对象,适用于多个用户使用包含多个对象的数组列表)

SharedPreferences shared_User = await SharedPreferences.getInstance();
            Map decode_options = jsonDecode(jsonString);
            String user = jsonEncode(User.fromJson(decode_options));
            shared_User.setString('user', user);

SharedPreferences shared_User = await SharedPreferences.getInstance();
            Map userMap = jsonDecode(shared_User.getString('user'));
            var user = User.fromJson(userMap);

    class User {
      final String name;
      final String age;

      User({this.name, this.age});

      factory User.fromJson(Map<String, dynamic> parsedJson) {
        return new User(
            name: parsedJson['name'] ?? "",
            age: parsedJson['age'] ?? "");
      }

      Map<String, dynamic> toJson() {
        return {
          "name": this.name,
          "age": this.age
        };
      }
    }