是否可以在一个小部件中两次使用SharedPreferences?

时间:2020-05-17 17:19:27

标签: flutter dart sharedpreferences

我尝试将ints 2 SharedPreferences保护在一个文件中。我不知道这是否可行,因为我只能保存其中之一。我不确定我是否在代码中输入错误,或者是否无法在一个 StatefulWidget中保存不同的值。是否有人在我的代码中看到错误或可以告诉我从理论上讲是否可以在一个文件中保护两个值?下面是我的两个安全请求的代码。

安全请求一个(一个有效):

 int lastLoginInt = 1;
 String nameKey = "_key_name";
@override
  void initState() {
    super.initState();
  }

  Future<bool> saveLastLoginInt() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return await preferences.setInt(nameKey, lastLoginInt);
  }

  Future<int> loadLastLoginInt() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return preferences.getInt(nameKey);
  }

  setLastLoginInt() {
    loadLastLoginInt().then((value) {
      setState(() {
        lastLoginInt = value;
      });
    });
  }

这是我的第二个请求(不起作用):

String nameKey1 = "_key_name2";
int countInt = 0;
Future<bool> saveCount() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return await preferences.setInt(nameKey1, countInt);
  }

  Future<int> loadCount() async {
    SharedPreferences preferences = await SharedPreferences.getInstance();
    return preferences.getInt(nameKey1);
  }

  setCount() {
    loadLastLoginInt().then((value) {
      setState(() {
        countInt = value;
      });
    });
  }

希望这是一个易于解决的问题。预先谢谢!!

2 个答案:

答案 0 :(得分:1)

您的loadLastLoginInt使用密钥nameKey,而您的saveCount使用密钥nameKey1

nameKey = "_key_name"
nameKey1 = "_key_name2

尝试对两个变量使用相同的值。

或 允许您的setCount调用loadCount代替loadLastLoginInt

setCount() {
    loadCount().then((value) {
      setState(() {
        countInt = value;
      });
    });
  }

答案 1 :(得分:1)

是的,它的可能和允许的。制作设置页面等时,我已经从SharedPrefs中加载了多个值。

您只是在呼叫loadLastLoginInt()而不是loadCount()