首页 文章

flutter复选框不起作用

提问于
浏览
1

我想在此小部件对话框中使用 CheckboxListTile 构建一个复选框,但是当我点击复选框时,复选框上的 checked 不会改变 .

这是我的代码:

Future<Null> _showGroupDialog(BuildContext context) async {
    await showDialog(
        context: context,
        builder: (BuildContext dialogContext) =>
            Dialog(child: _buildCheckboxGroups(context)));
}

Widget _buildCheckboxGroups(BuildContext context) {
    List<Widget> childrens = List.generate(_groups.length, (index) {
      return CheckboxListTile(
        title: Text(_groups[index].name),
        value: _groups[index].checked,
        onChanged: (bool val) {
          setState(() {
            _groups[index].checked = val;
          });
        },
      );
    });

    return Container(
        child: Column(
      mainAxisSize: MainAxisSize.min,
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: childrens,
    ));
}

顺便说一下,当我点击复选框时会调用 onChange 方法 . 谁能解决这个问题?

1 回答

  • 0
    class _MyHomePageState extends State<MyHomePage>{
    
     //<Here you have to set default value for _groups[index].checked to false/true>
     @override
     Widget _buildCheckboxGroups(BuildContext context) {
      List<Widget> childrens = List.generate(_groups.length, (index) {
        return CheckboxListTile(
        title: Text(_groups[index].name),
        value: _groups[index].checked,
        onChanged: (bool val) {
          setState(() {
            _groups[index].checked = val;
          });
        },
      );
    });}
    

    Working Example is given below

    class _MyHomePageState extends State<MyHomePage> {
     bool flagWarranty=false;
     @override
     Widget build(BuildContext context) {
      return Scaffold(
      appBar: AppBar(title: Text(widget.title)),
      body: new Container(
          padding: new EdgeInsets.all(20.0),
          child: new Form(
            key: this._formKey,
            child: new ListView(
              children: <Widget>[
                  new Checkbox(
                  value: flagWarranty,
                  onChanged: (bool value) {
                    setState((
                        ) {
                      flagWarranty=value;
                    });
                  },
                )
           ],),)));
     }}
    

相关问题