我有一个复选框,我希望保存并在更改后加载。除非我删除应用程序并重建,否则它的工作原理。
以下是信息:
这是我的代码:
void initState() {
super.initState();
_loadswitchValue(); // when I remove "_loadswitchValue();", refresh app,
// rewrite "_loadswitchValue();" refresh app, it's
// work. but when I remove app and reinstall app
// with _loadswitchValue(); I have a tristate issue
}
_loadswitchValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_checkboxValueB = (prefs.getBool('counter10'));
});
}
_savenswitchValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
prefs.setBool('counter10', _checkboxValueB);
});
}
bool _checkboxValueB = false;
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Container(
padding: new EdgeInsets.all(2.0),
child: new Column(
children: <Widget>[
new Checkbox(
value: _checkboxValueB,
onChanged: (bool value) {
setState(() {
_checkboxValueB = value;
_savenswitchValue();
...
答案 0 :(得分:1)
您需要为布尔值设置默认值。在SharedPreference
时,访问未知密钥时,将返回null
。
所以,像
_loadswitchValue() async {
SharedPreferences prefs = await SharedPreferences.getInstance();
setState(() {
_checkboxValueB = (prefs.getBool('counter10')) ?? false;
});
}