SharedPreferences 在 android 模拟器上工作但不在真实设备上

时间:2021-01-16 21:17:47

标签: android flutter sharedpreferences

正如标题中所说,我在 SharedPreferences 中存储了一些布尔值和字符串。它就像模拟器的魅力一样,当我在我的真实设备上安装我的应用程序时,bool 和 Strings 只是没有排序。我在模拟器上使用 api 29,在我的设备上使用 30,是这样吗? (我刚刚检查过,在我的真实手机上调试时它起作用了!但是当我使用构建任务中的 apk 文件安装应用程序时仍然没有......) 有任何想法吗?我不认为我的代码在这里很重要,但如果需要,我可以添加它! 谢谢你的帮助! 此外,该应用程序在调试时更重(几乎 5 倍)并且更不流畅,为什么?也许是因为 SharedPrefs?

代码编辑:

Switch(
    value: appsLoad.instagram ?? false,
    onChanged: (value) {
       setState(() {
       appsLoad.instagram = value;
       sharedPref.save("user", appsLoad);
       });
     },
),

这是我保存值的方式,sharePref.save 指的是

save(String key, value) async {
final prefs = await SharedPreferences.getInstance();
prefs.setString(key, json.encode(value) ?? false);
}

我为 sharedPreferences 使用了很多 this 网站。

1 个答案:

答案 0 :(得分:0)

如果你阅读了 setState 评论部分

<块引用>

一般只推荐setState方法 用于包装对状态的实际更改,而不是任何计算 这可能与更改有关。例如,这里有一个 [build] 函数使用的值递增,然后 更改写入磁盘,但只有增量包含在 setState

Future<void> _incrementCounter() async {
  setState(() {
    _counter++;
  });
  Directory directory = await getApplicationDocumentsDirectory();
  final String dirName = directory.path;
  await File('$dir/counter.txt').writeAsString('$_counter');
}

按照示例,您不应该在 setState 内调用未来

Switch(
    value: appsLoad.instagram ?? false,
    onChanged: (value) async {
       setState(() {
         appsLoad.instagram = value;
       });
       await sharedPref.save("user", appsLoad);
     },
),

请注意,模拟器的运行速度不如设备快(配置文件/调试模式比真实模式慢),这就是为什么在模拟器中您无法察觉这种错误