繁体   English   中英

如何更改复选框的状态?

[英]How to change the state of the checkbox?

我正在为移动应用程序设计UI。 我如何实现一个复选框,将其状态从“假”更改为“真”,反之亦然?

bool _value1 = false;
new CheckboxListTile(
        value: _value1,
        onChanged: (bool val) => setState(() => _value1 = val),
        title: new Text('Remember me'),
        controlAffinity: ListTileControlAffinity.leading,
        activeColor: Colors.black,
      ),

我没有收到任何错误,但是当我单击复选框时,它没有更改其状态。

编辑:完整的代码是这样的-

bool _value1 = false;
return Scaffold(
  backgroundColor: Colors.white,
  body: Container(
    decoration: BoxDecoration(
      image: DecorationImage(
        image: AssetImage("assets/background.jpg"),
        fit: BoxFit.fill,
      ),
    ),
    child: Column(
        children: <Widget>[
        SizedBox(height: 258.0),
        username,
        SizedBox(height: 22.0),
        password,
        SizedBox(height: 4.0),
          new CheckboxListTile(
            value: _value1,
            onChanged: (bool val) => setState(() => _value1 = val),
            title: new Text('Remember me'),
            controlAffinity: ListTileControlAffinity.leading,
            activeColor: Colors.black,
          ),
        SizedBox(height: 8.0),
        loginButton,
          SizedBox(height: 58.0),
          new Text(' Version 1.1'),
        ],
    ) ,
  ),
);

里面有回程脚手架

class LoginPage extends StatefulWidget {
 static String tag = 'login-page';
  @override
  _LoginPageState createState() => new _LoginPageState();
}

class _LoginPageState extends State<LoginPage> {
  @override
  Widget build(BuildContext context) {.....}

用户名,密码和登录按钮是其他小部件。

代码中的问题是您使用了错误的方式。 请尝试以下代码:

bool _value1 = false;
new CheckboxListTile(
        value: _value1,
        onChanged: () {
          if (_value1 == false) {
            setState(() => _value1 = true)
          } else {
            setState(() => _value1 = false)
          }
        },
        title: new Text('Remember me'),
        controlAffinity: ListTileControlAffinity.leading,
        activeColor: Colors.black,
      ),

我看到了问题,您必须将其排除在外: bool _value1 = false; 每次调用setState ,您都在告诉框架进行重建,因此再次调用了build方法,这就是setState所做的事情,就像您再次调用build方法一样。 因此解决方案将其bool _value1 = false; 在build方法之外,因此var可以更改,现在始终为false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM