如何将List <String>添加到CheckboxListTile值?

问题描述

在此示例中,我试图将我保存在列表中的值添加到CheckBoxListTile中。 但是由于某种原因,我无法解决这个问题。

全局列表

List<String> _lstNomeData = new List<String>();

价值观地图

Map<String,bool> values = {
    '$_lstNomeData[index]': false,};

获取选定的复选框值

  var tmpArray = [];

  getCheckBoxItems() {
    values.forEach((key,value) {
      if (value == true) {
        tmpArray.add(key);
      }
    });

    print(tmpArray);
    tmpArray.clear();
  }

身体

body: Column(
                children: <Widget>[
                  Expanded(
                    child: ListView(
                      children: values.keys.map((String key) {
                        return new CheckBoxListTile(
                          title: new Text(key),value: values[key],activeColor: Colors.blue,checkColor: Colors.white,onChanged: (bool value) {
                            setState(() {
                              values[key] = value;
                            });
                          },);
                      }).toList(),),],)

错误 Print of the error displayed

解决方法

您处在正确的轨道上。您可以在这里做两件事:

  1. 为每个键(您要尝试执行的操作)用false预填地图
  2. 假设如果地图没有键,则答案为false(默认)

第二种方法可能更好,因为通过用false预填充地图,您无法区分false是用户实际回答的还是默认设置的。如果地图中没有键,则说明用户到目前为止尚未回答问题。我将展示如何使用第二种方法:

按原样保留您的全局列表:

List<String> _lstNomeData = [];

使用空白地图初始化地图(代表用户对每个问题的答案):

Map<String,bool> answers = {};

现在在Checkbox小部件中正确引用这些答案,并利用onChanged属性:

ListView(
  children: _lstNomeData.map((key) =>
    CheckboxListTile(
      title: Text(key),// Here we check if the answers map has this key and if it does,use the bool value,otherwise set it to false (user has not answered this so far)
      value: answers[key] ?? false,activeColor: Colors.blue,checkColor: Colors.white,onChanged: (answer) => 
        setState(() => answers[key] = answer)
    ),).toList(),),

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...