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