正如标题中所说,我在 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 网站。
答案 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);
},
),
请注意,模拟器的运行速度不如设备快(配置文件/调试模式比真实模式慢),这就是为什么在模拟器中您无法察觉这种错误