Checkbox 颤振中共享首选项和复选框的问题

Checkbox 颤振中共享首选项和复选框的问题,checkbox,sharedpreferences,flutter,Checkbox,Sharedpreferences,Flutter,我有一个复选框,希望在更改后保存并加载。它可以工作,除非我删除应用程序并重建 信息如下: 这是我的密码: void initState() { super.initState(); _loadswitchValue(); // when I remove "_loadswitchValue();", refresh app, // rewrite "_loadswitchValue();" refresh app, it's

我有一个复选框,希望在更改后保存并加载。它可以工作,除非我删除应用程序并重建

信息如下:

这是我的密码:

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();

...
void initState(){
super.initState();
_loadswitchValue();//当我删除“_loadswitchValue();”时,刷新应用程序,
//重写“_loadswitchValue();”刷新应用程序,它是
//工作。但当我删除应用程序并重新安装应用程序时
//对于_loadswitchValue(),我有一个三态问题
}
_loadswitchValue()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
设置状态(){
_checkboxValueB=(prefs.getBool('counter10');
});
}
_savenswitchValue()异步{
SharedReferences prefs=等待SharedReferences.getInstance();
设置状态(){
prefs.setBool('counter10',_checkboxValueB);
});
}
bool\u checkboxValueB=false;
@凌驾
小部件构建(构建上下文){
归还新脚手架(
主体:新容器(
填充:新边缘设置。全部(2.0),
子:新列(
儿童:[
新复选框(
值:_checkboxValueB,
一旦更改:(布尔值){
设置状态(){
_checkboxValueB=值;
_savenswitchValue();
...

您需要将默认值设置为布尔值。因为
SharedReference
在访问未知密钥时将返回
null

比如

_loadswitchValue() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  setState(() {
    _checkboxValueB = (prefs.getBool('counter10')) ?? false;
  });
}

您需要将默认值设置为布尔值。因为
SharedReference
,当访问未知密钥时,将返回
null

比如

_loadswitchValue() async {
  SharedPreferences prefs = await SharedPreferences.getInstance();
  setState(() {
    _checkboxValueB = (prefs.getBool('counter10')) ?? false;
  });
}