颤振复选框不起作用

Posted

技术标签:

【中文标题】颤振复选框不起作用【英文标题】:flutter checkbox doesn't work 【发布时间】:2019-01-05 19:26:50 【问题描述】:

我想在这个小部件对话框中使用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 方法。谁能解决这个问题?

【问题讨论】:

参见github.com/flutter/flutter/issues/15194 - 您正在调用 setState 来更新构建对话框的小部件,而不是对话框本身。 【参考方案1】:
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;
      );
    ,
  );
);

下面给出了工作示例

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;
                );
              ,
            )
       ],),)));
 

【讨论】:

以上是关于颤振复选框不起作用的主要内容,如果未能解决你的问题,请参考以下文章

颤振平面按钮颜色属性不起作用

颤振列表视图波纹效果不起作用

颤振补间基本动画在“FutureBuilder”中不起作用

颤振 |右对齐不起作用

颤振创建新帐户按钮不起作用

升级颤振后命令不起作用